CRC校验

老帖中发现的一个CRC校验,帖子说是正确的,可我感觉在第一个FOR循环,AC1在怎么加一,永远都是将&VB0的数据送给它啊,是我理解错误,还是程序有错误?怎么修改才好呢?
 Network 1 // 网络标题
 // 网络注释
 LD     SM0.1
 
 MOVB   16#1, VB0
 
 MOVB   16#1, VB1
 
 MOVB   16#0, VB2
 
 MOVB   16#20, VB3
 
 MOVB   16#0, VB4
 
 MOVB   16#20, VB5
 Network 2 
 LD     M0.1
 
 FOR    VW10, +1, +6
 Network 3 
 LDW=   VW10, +1
 
 MOVW   16#FFFF, AC0
 
 MOVD   &VB0, AC1
 Network 4 
 LD     SM0.0
 
 XORB   *AC1, AC0
 Network 5 
 LD     SM0.0
 
 FOR    VW12, +1, +8
 
 SRW    AC0, 1
 
 AENO
 
 A      SM1.1
 
 XORW   16#A001, AC0
 Network 6 
 NEXT
 Network 7 
 LD     SM0.0
 
 INCD   AC1
 Network 8 
 NEXT
 Network 9 
 LD     M0.1
 
 SWAP   AC0
 
 AENO
 
 MOVW   AC0, VW6

最佳答案

程序没问题,CRC本身的校验机制要清楚。请参考RTU协议给的CRC校验算法。
CRC开始时先把寄存器的16位全部置成“1”,然后把相邻2个8位字节的数据放入当前寄存器中,只有每个字符的8位数据用作产生CRC,起始位,停止位和奇偶校验位不加到CRC中。 产生CRC期间,每8位数据与寄存器中值进行异或运算,其结果向右移一位(向LSB方向),并用“0”填入MSB,检测LSB,若LSB为“1”则与预置的固定值异或,若LSB为“0”则不作异或运算。 重复上述处过程,直至移位8次,完成第8次移位后,下一个8位数据,与该寄存器的当前值异或,在所有信息处理完后,寄存器中的最终值为CRC值。 
产生CRC的过程: 
1.   把16位CRC寄存器置成FFFFH. 
2.   第一个8位数据与CRC寄存器低8位进行异或运算,把结果放入CRC寄存器。 
3.   CRC寄存器向右移一位,MSB填零,检查LSB. 
4.   (若LSB为0):重复3,再右移一位。 
   (若LSB为1):CRC寄存器与Aool H 进行异或运算 
5.   重复3和4直至完成8次移位,完成8位字节的处理。 
6.   重复2至5步,处理下一个8位数据,直至全部字节处理完毕。 
7.   CRC寄存器的最终值为CRC值。 
8.   把CRC值放入信息时,高8位和低8位应分开放置。 
 把CRC值放入信息中 ,发送信息中的16 位CRC值时,先送低8位,后送高8位。

提问者对于答案的评价:
谢谢您的回答,这次真的理解了。

专家置评

已阅,最佳答案正确。

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2018年12月7日
下一篇 2018年12月7日

相关推荐

  • 求平均值 模拟量

    压力传感器变4-20mA信号给EM235模块,可是各种干扰处理方法都试过了就是不行,触摸屏上得数上下不连续波动,有时候跳的很离谱,我想用程序求平均值方法试试,有经验的前辈给我发个s…

    SIMATIC S7-200 2017年8月26日
  • 关于I/O输出问题!!!

    在224xp,程序中用了好几次的Q0.5输出点,然后在某一个程序运行看到Q0.5有输出(程序状态监控),但是输出点的指示灯并不亮,用状态表监控也看到Q0.5位仍然为0,有想到可能是…

    SIMATIC S7-200 2021年7月5日
  • em231热电阻/偶

    各位:EM231热电阻/偶采集到信号后,是怎么传给CPU的??比如热电阻,它传的是电阻值还是数字量?CPU如何才能知道EM231测量的温度值? 最佳答案 各位:EM231热电阻/偶…

    SIMATIC S7-200 2020年11月1日
  • 可以用电位器做模拟量输入吗

    1.实验是:将电位器做模拟量输入接到s7-200本身的模拟量输入端子来控制控制变频器 附带编程图2.结果是:一通电电机就自动旋转,旋转电位器完全不起作用 问题补充:这个是…

    2021年7月5日
  • 这个uss库在哪下载啊?

    发现step7   4.0.9软件里没有modbus和uss库,谁能给我发一下啊?谢谢了。376930333@qq.com 最佳答案 下载链接:指令库…

    SIMATIC S7-200 2017年8月3日
  • 批量控制某个指令的控制字那读数是怎么读出来的

    批量控制某个指令的控制字那读数是怎么读出来的,比如批量设置PTO0设置SM67。传送16#89进去,那就是10010001    &nbsp…

    SIMATIC S7-200 2021年7月5日
  • 西门子PLC程序阅读

    如何不安装PLC软件区阅读PLC程序(西门子200),是不是有什么软件可以使用 最佳答案 导出成*。AWL文件,然后以word或记事本打开 可以以语句表的格式来查看程序。…

    SIMATIC S7-200 2020年11月1日
  • s7200设置

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

    SIMATIC S7-200 2020年11月1日
  • 西门子200接12V NPN编码器

    方法一:12V NPN编码器的电源+,-直径接12V电源,A接PLC  I0.3 ,M接24V+ 对吗方法二:12V N…

    SIMATIC S7-200 2021年7月5日
  • 西门子200 跟台达VFD M变频器 通讯测试 能帮我看看程序有什么问题吗

    用的是modbus RTU协议,但指令modbus MSG输出错误代码为6  不知道为什么。。Network 1 LD&…

    SIMATIC S7-200 2017年6月24日