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日 上午11:07
下一篇 2018年12月7日 上午11:07

相关推荐

  • S7-200电源功耗

    S7-200 CPU224 继电器的, 1、看样册功耗是10W,怎么电源特性上说输入电流最大200/100mA? 2、那个仅CPU60/30…

    SIMATIC S7-200 2021年7月5日
  • 200 modbus通讯问题

    比方说我要读写40001这个寄存器的数据,根据西门子给的modbus库的程序块,一个写一个读,如果我有10台表,那是不是说我要建立20个这样的快才能实现,如果我要读10个寄存器的数…

    SIMATIC S7-200 2021年7月4日
  • s7200 下载

    请问我在写了程序,是S7200的,程序里面有PID和USS通讯还有自己做的几个块,我把程序下进PLC 以后,想试运行,之后就电脑就显示:"profibus网络上…

    SIMATIC S7-200 2021年7月5日
  • 200的复位置位线圈

    请问200复位置位线圈的下边数字有什么意思,比如这个线圈为Q0.1 下边0 1 2。。这些数字代表什么 我如果只想让Q0.1置位,下边标什么…

    SIMATIC S7-200 2020年11月1日
  • MAP库正反向限位问题

    我目前在做一个二轴控制项目,使用MAP库的绝对控制方式进行定位,在使用正反向限位时遇到问题,我把正向限位开关置1,脉冲计数还在正常计数,把反向限位开关置1,开始向反计数,正向和反向…

    SIMATIC S7-200 2018年3月6日
  • 上载程序时提示“块错误”?

    用台式机串口上载程序时提示“不是指定的块”,后改用笔记本用usb口上载成功。最后再用台式机有时提示“通讯中断”仍不能连接。换一台plc通讯正常。不得其解? 最佳答案 问题原因:1:…

    SIMATIC S7-200 2020年11月1日
  • 如何实现两台200PLC之间的通信

    有一个工程需要8个模拟量模块,200只能带7个。所以要用一个226带7个模块外加221带一个模块,如何实现两个PLC之间的通信连接,硬件上需要什么通信线,我现在有一根MPI线226…

    2017年11月27日
  • MicroWin sp7 安装后出现如下提示

    提示框标题为: C:\progra~1\siemens\micros~1\commun~1\bin\comm20~1.exe ERROR  …

    SIMATIC S7-200 2021年7月4日
  • 高数计数器读取旋转编码器数据掉电保持

    外部增量型旋转编码器读取数据送到PLC高速计数口,读取数据正常,但是在突然断电后,再上电,所有的数据清零。我在系统块里面设置了相应的断电保持区域,但是还是不行,不知道什么原因? 最…

    SIMATIC S7-200 2020年11月1日
  • 6AV7200-4AA12-0AA0技术手册

    求6AV7200-4AA12-0AA0的防爆PC怎么开孔?求技术手册 最佳答案 6AV7200-4…由于处理器升级是设备内部的,因此所有的尺寸都与之前的型号相同,之前型号的订货…

    SIMATIC S7-200 2021年7月5日