求助校验问题

我的题目是实时采集并给出控制信号的,还要和计算机实现通信,老师让我做的是自由口协议,我用了异或和校验的方法,可是不知道为什么它有时就是对的,有时计算的校验值是错的,不能正常通信,麻烦各位帮我看看吧

 
 //接收校验正确,向计算机输出子程序 

 NETWORK 1       //NETWORK TITLE (single line)
 // 
 //NETWORK COMMENTS
 // 
 LD     SM0.0
 MOVB   16#01, VB602                 // 反馈正确命令
 MOVB   16#0D, VB600
 MOVB   16#BE, VB601
 MOVB   16#08, VB603
 MOVB   16#ED, VB613

 NETWORK 2       //NETWORK TITLE (PLC变频采样值发送,
 // 
 //NETWORK COMMENTS
 // 
 LDB=   VB702, 1                     //如果是PLC变频命令
 MOVD   VD14, VD604                  //将采集温度赋给发送温度缓冲区VD610
 MOVD   VD200, VD608                 //将计算频率赋给发送频率寄存器VD614
 //BMB    VB108, VB603, 6              //将采集时间送给VB603-VBVB608

 NETWORK 3       //NETWORK TITLE 采样流量和时间发送至计算机)
 // 
 //NETWORK COMMENTS
 // 
 LDB=   VB702, 2                     //如果是流量PID命令
 MOVD   VD30, VD604                  //传流量
 //BMB    VB108, VB603, 6              //传时间
 MOVD   +0, VD608                    //频率区清零

 NETWORK 4       //NETWORK TITLE (发送停止成功信息)
 // 
 //NETWORK COMMENTS
 //
 //
 LDB=   VB702, 0                     //如果是停止命令
 MOVB   8, VB603                     //
 MOVD   16#00000000, VD604           //
 MOVD   16#00000000, VD608           //
 //MOVB   16#00, VB615                 //
 //MOVW   16#0000, VW616               //数据区都清零

 NETWORK 5       //NETWORK TITLE (发送,
 // 
 //NETWORK COMMENTS
 // 
 LD     SM0.0
 MOVB   0, VB160                     //发送校验值赋初值
 MOVD   &VB604, VD152                //获取校验区首地址
 //计算校验码
 NETWORK 6
 LD     SM0.0
 FOR    VW177, +1, +8

 NETWORK 7
 LD     SM0.0
 XORB   *VD152, VB160

 NETWORK 8
 LD     SM0.0
 INCD   VD152

 NETWORK 9
 NEXT

 NETWORK 10
 LD     SM0.0
 MOVB   VB160, VB612                 //将校验值送给vd618

 NETWORK 11
 LD     SM4.5                        //如果线路空闲
 R      SM87.7, 1                    //停止接收
 RCV    VB700, 0                     //
 XMT    VB600, 0                     //发送数据给计算机

 
 

最佳答案

如果你用起始字符和结束字符的话,那就把中间数据转换为ASCII后再发送,否则发送的数据有可能刚好是结束字符,从而提前结束接受,那么算出来的校验肯定是不对的。

提问者对于答案的评价:
看看

原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc357095.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2021年7月5日 上午9:44
下一篇 2021年7月5日 上午9:44

相关推荐

  • em235读取4-20mA信号为负值

    em235模块跳线1、6为on,输入4-20mA信号,电流表测得电流12mA,可是监控到的通道值却是-20000多(把这个信号接到em231模块上显示是正常的),郁闷中,最后只好把…

    SIMATIC S7-200 2020年11月1日
  • 用串口测试工具与PLC通讯,PLC无回复

    用串口测试工具Mbpoll作为主站,PLC作为从站,以RTU方式通讯。Mbpoll显示write error,PLC无回复。PLC内设置了基本的通讯模块。请求大神指导下,…

    2021年7月5日
  • cp243-1连接问题

    请问:S7-200的cp243-1模块直接和电脑网卡连接的时候,网线是直通还是交叉呢,如果CP243-1和交换机连接,然后交换机和电脑网卡连接呢,CP243-1和交换机之间连接线是…

    SIMATIC S7-200 2020年10月31日
  • TD-200 V2.1

    执行这行网絡 TD200应该显示“开”但实际显示数字将“开”字符串送至文本显示区。使能位已置1,但没有显示“开’ 却显示数字??? 问题补充:不存在格式问题&n…

    2017年11月4日
  • 西门子PLC的端子,需要多大力矩才能打紧,有没有明确胡规定。

    由于在属于过程中出现端子打紧力矩过大,导致接触不良,不联通,我想问下西门子的专家们,多大力矩打紧端子合适。 最佳答案 0.4 ~ 0.7 Nm参考:S…

    2021年7月5日
  • 200PLC程序修改后不能正常运行程序怎么处理

    这个PLC比较老,大概是5年前的PLC,先前我朋友需要添加一段程序,但一不小心把系统块和数据块都一起下载了,后来运行程序的时候就运行不了或者不正常运行,把上载的原本的没有改动的程序…

    SIMATIC S7-200 2020年10月31日
  • 编码器数据丢失

    请问但编码器使用中突然断电如何保存其数据不丢失 即上电后重新保持断电前数据? 最佳答案 将编码器的数据实时放到掉电保持区域中,在上电后,用掉电保持区域中的数据重新置初始化…

    SIMATIC S7-200 2021年7月5日
  • 200扩展模块EM231

    加了个500欧电阻,转化为电流型,变送器为4-20mA,在程序里做了个表达式:(X-6400)/25600=(Y+修正值-0)/150-0变送器量程0-150,修正值设为0,一采集…

    SIMATIC S7-200 2020年11月1日
  • 看不懂程序

    LD     SM0.1 MOVB   100, SMB34 ATCH…

    SIMATIC S7-200 2021年7月5日
  • 用222+em235做温度控制

    输出是数字量Q0.0,用pid自整定得出的p值,I值。可是输出误差有2度,还有Q0.0的值怎么是0-1的小数呢,不是应该是0或1吗? 问题补充:EM235输出已经被PT100占用了…

    SIMATIC S7-200 2020年10月31日

发表回复

登录后才能评论