求助校验问题

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

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

 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日
下一篇 2021年7月5日

相关推荐

  • S7200 SMART通讯板的MODBUS库在哪找

    请问SB CM1通讯板的MODBUS通讯功能可以用自带的吗,如果不是在哪下呢 最佳答案 可以用软件自带的modbus rtu通讯程序,其它通讯格式只能用户自行编…

    SIMATIC S7-200 2017年6月19日
  • s7-200的滤波

    s7-200的滤波程序怎样写 最佳答案 转贴: 1 模拟量和数字量一样,也是主程序结束时更新的;也就是说用plc编程是达不到很高的准确性的。 &nbs…

    SIMATIC S7-200 2021年7月5日
  • CPU224CN,DCD/C/DC误接220VAC电源

    CPU224CN,DCD/C/DC误接220VAC电源后损坏,请问自己能修理吗,若能,如何修理? 问题补充:PLC内无用户程序,因此无关程序问题。  最佳答案 &nbsp…

    SIMATIC S7-200 2021年7月5日
  • 关于PPI电缆通过4芯电缆通讯的问题

    如题,小弟现有个项目,现场用S7-200,计算机放在距离200米的控制室内,计算机上的软件为FIX7.0,采用modbus通讯。由于开始不了解,将电缆敷设为了1根4芯单屏蔽电缆,现…

    SIMATIC S7-200 2021年7月4日
  • S7-200程序内编程由温度控制电动阀的开度大小来调整温度

    信号有管道温度值,这个是值RTD热电阻;电动阀的开度值模拟量输入;电动阀的开度值模拟量输出; 问题补充:就是想知道S7-200的内程序是怎样编程的,实现由温度来实现控制电动阀的开度…

    2018年1月1日
  • s7200设置

    请教各位又碰到麻烦了。我在编程软件通讯哪里刷新一下有126个写着地址9.6kbps可是点击其中一个地址时提示无效地址。还有在plc类型哪里读取plc也是一样的提示“无法指定地址的链…

    SIMATIC S7-200 2020年11月1日
  • S7-200和变频器的PID功能比较

    用S7-200带ABB变频器,要用到PID功能,请问,二者都有PID功能,用哪个更好一些? 最佳答案 不过我感觉各有不同。S7200的是通过编程来实现的,比较灵活,也就是要编程所以…

    SIMATIC S7-200 2021年7月5日
  • 我想找视频教学光盘

    我想找视频教学光盘,请问哪有下载的 最佳答案 http://www.ad.siemens.com.cn/Service/disc_download.asp,《Step7 …

    SIMATIC S7-200 2021年7月5日
  • s7-200控制两个伺服电机

    遇到一个项目,需要用S7-200控制两个伺服电机,要求两个伺服电机要绝对同步,而且可以设置转动角度和转动速度(都必须一致),CPU224有两个高速脉冲输出口,想利用这两个输出口一个…

    SIMATIC S7-200 2021年7月5日
  • 仪表和CPU224通讯?

    有一智能压力表,是RS232方式通讯的(TXD,RXD,GND),3个点,怎么把这3点和CPU226的通讯口连接呢?用那种线?那些接头?具体点,我没做过 最佳答案 RS232方式通…

    SIMATIC S7-200 2021年7月5日

发表回复

登录后才能评论