求助校验问题

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

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

 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

相关推荐

  • 断电保持和来电自启

    我有个情况是 这样的。就是系统在工作的过程中突然停电了,,我希望PLC做数据保存。别让数据丢失,,等突然来电后系统就自己就继续工作了 ,不需要人为去触发他开机什…

    SIMATIC S7-200 2020年10月31日
  • CPU224与DCS通讯

    现在有5套完全相同的由S7-200CPU224构成的小型系统,作为下位机与DCS通讯.不能使用PROFIBUS和以太网,请问使用MODUBUS如何通讯,最好能提供编程事例和说明,谢…

    SIMATIC S7-200 2021年7月5日
  • s7200和6RA70通讯

    1台s7200需要和5台6RA70用USS协议通讯,另外还有两台modbus协议的仪表,能否连在一起通讯?上位连TP270,远控电脑WINCC监控,以上连接该如何配置?急救 最佳答…

    SIMATIC S7-200 2021年7月5日
  • 模拟信号远距离传送

    1.用s7200来接收模拟信号0-10V或4-20ma,距离是100米左右的样子,用什么方法让信号衰减的最少.谢谢2.有什么方法对200进行远距离(100米)程序下载监控,最简便的…

    SIMATIC S7-200 2020年11月1日
  • s7-200MODBUS地址

    驱动器的MODBUS地址,驱动器的当前状态是在地址12288中,已经是5位数了。PLC如何对应上呢?是加上40001=52289吗? 最佳答案 如何访问大于 9999&n…

    SIMATIC S7-200 2021年7月5日
  • S7-200中怎么提取计数器的当前值

    S7-200中怎么提取计数器的当前值,并把当前值储存在一个地址上。 最佳答案 不用提取,可以直接使用Cx参与程序处理以及运算,16位的。即使是组态软件要显示,也可以直接组态,没必要…

    SIMATIC S7-200 2020年11月1日
  • s7-200子程序参数的问题,谢谢!

    请问:1. s7-200子程序中IN、IN_OUT、OUT、TEMP参数,如果是想带参数调用(即:将子程序作成功能块),其地址是不是都必须是L区局部变量?能否将其改成V区变量?2.…

    SIMATIC S7-200 2020年10月31日
  • S7-200主站与维纶触摸屏从站通过MODBUS通讯

    S7-200CPU224的,用modbus做主站和维纶触摸屏做从站怎么通讯的,程序是怎样的?(用modbus库指令),对应的地址是怎么分配的?请教高手! 问题补充:维纶触摸屏可以做…

    2020年10月31日
  • s7-200 224xp中的V区数据如何导出excel

    如何将s7-200 224xp中程序运算结果的产生的V区数据如何导出到excel 最佳答案 直接的指令200里是没有的,需再安装PC ACCESS软件。同类问题…

    SIMATIC S7-200 2017年6月8日
  • 求救!!!!!!!!!!!!!!!!!!

    BERO输出和继电器输出有什么区别?请大狭指教 最佳答案 驱动电源内部自供电源与外部辅助电源的输出 提问者对于答案的评价:ok

    SIMATIC S7-200 2021年7月5日

发表回复

登录后才能评论