求助校验问题

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

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

 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

相关推荐

  • modbus相关ABS-R?

    怎么添加ABS-R 最佳答案 https://support.industry.siemens.com/cs/cn/zh/view/25939521 提问者对于答案的评价:

    SIMATIC S7-200 2021年7月5日
  • S7-200定时器设定值是字?

    有人说是字,我觉得不正确,应该是一个整形,占用一个字的空间,我觉得应该是这样理解,定时器的设定值都可以是IW变量,这个IW也看作一个整数,它占用一个字的空间,如果单独讲一个字没有多…

    SIMATIC S7-200 2020年11月1日
  • 怎样进行太网通信

    6ES7215-1AG40-0XB0这个CPU两个端口和SMART  200怎么做通讯,进行以太网通信,不知道这(“S7-1200测可以使用TSEND_C和TR…

    SIMATIC S7-200 2017年5月29日
  • s7200 自然指数和对数的运算

    比如要运算2的X次方,X的数值在VD100中那我想先算Ln2,但软件里出现了红框,SM1.1的值为1,是溢出错误。看了帮助里的说明,EXP (Y * …

    SIMATIC S7-200 2020年11月5日
  • 请教:plc端子接线的时候需要将plc断电操作吗?

    我看手册上的意思是:接线时必须把设备和plc都断电,那我接的输入输出都是24V的电压也需要将设备和plc都断电吗,因为调试时断电后由需要重新连接plc挺麻烦的 图片说明: &nbs…

    2021年7月5日
  • 请问关于排序

    请问如何用200实现“冒泡”法的排序? 最佳答案 S7200实现冒泡的方法和别的语言是一样的,对于200来说,关键是你如果正确与合理地使用其各种指令(语句),指令用的正确合理,程序…

    SIMATIC S7-200 2021年7月5日
  • C#与SimaticNet OPC通讯

    上位机基于Visual Studio C#,想与SimaticNet OPC进行通讯,请问C#应该怎么写,不太明白自动化接口与自定义接口的区别 钻石用…

    SIMATIC S7-200 2021年7月5日
  • CPU226脉冲输出

    我用CPU226控制一台松下MADDT1205做往复运动,在多次往复运动后,原点会朝一侧偏移,请有经验的前辈给予指导,也可以发到:x_huabin@126.com,谢谢! 最佳答案…

    SIMATIC S7-200 2020年11月1日
  • 触摸屏的软元件!

    工控界大虾们,请教个问题哈!触摸屏上面的软元件(也就是输入输出信号)占不占用输入输出点?是不是直接用辅助继电器M控制的呢? 它怎么与PLC通讯的呢?谢谢! 最佳答案 触摸…

    SIMATIC S7-200 2021年7月5日
  • SMART触摸屏数值输入显示长度问题

    WINCC  flexible SMART 编程组态一个Io域。过程变量双整型数据地址VD200。格式十进制,格式样本为什么只能选到9999…

    SIMATIC S7-200 2021年7月5日

发表回复

登录后才能评论