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的STEP 7 – MicroWIN V4.0 incl. SP6 (2).zip编程软件能在wi…

    SIMATIC S7-200 2018年12月3日
  • S7-200扩展模块的连线

    想问下,我买了S7-200的CPU224以及几个扩展模块,CPU和每个扩展模块上都有M,L+标志,应该怎么接线?每个模块都要加24VDC供电吗?怎么供电?我查阅资料,CPU的L+,…

    SIMATIC S7-200 2021年7月5日
  • 通信连接问题

    用200PLC与台达变频器进行通信,通信接口如果自己做是否可行?     两个通信口都是RS485的,所以自己做通信电缆:3—…

    SIMATIC S7-200 2021年7月5日
  • 我想通过手机app监视plc数据 能不能利用pc access

    不太懂  求说的详细点   不行的话有没有其他方法 最佳答案 先通过PC ACCESS和组态软件联。再通过组态软件数据发…

    SIMATIC S7-200 2017年6月12日
  • 电子尺控制精度

    我现在用的是S7-200的PLC加EM231(A14*128it)的模拟量输入模块采集两路电阻型电子尺模拟信号,但人家设计的采集精度是1mm,我现在想把它改到精度为0.1MM,请为…

    SIMATIC S7-200 2021年7月5日
  • 关于S7-200通信口问题

    若有3台S7-200的PLC,CPU224,一个通信口,每一台PLC挂了一个文本显示器。如果,我需要使用电脑和这些PLC通信,上位机用WINCC+PC ACCSEE,能否…

    SIMATIC S7-200 2020年10月31日
  • 变频器对模拟量干扰

    模拟量模块用的是EM235CN,变频器用的MM420,每次启动变频器监控到流量波动很大,用的是屏蔽线,单端接地。 有神莫方法解决? 问题补充:現在把糢擬量接綫都拆除,隻要…

    SIMATIC S7-200 2021年7月5日
  • 模拟电位器

    CPU224上的模拟电位器是做什么用的? 问题补充:SMB28和SMB29是要写入程序的吗 最佳答案 S7–200提供模拟电位计: 模拟电位计位于模块前盖下面。您可以调…

    SIMATIC S7-200 2021年7月5日
  • S7-200modbu指令问题

    我是在网上下载的modbus库指令,也进行了库存储区分配,编译后出现下面问题,咋弄呢?求各位老师指点,多谢。正在编译程序块…主程序 (OB1)SBR_0 (…

    2021年7月5日
  • S7-200如何用作MODBUS主站?

    S7-200有无用作modbus主站的库指令? 最佳答案 现在最新版本是V4.0 SP5,集成了modbus RTU 主站库,可以使用Port0和Po…

    SIMATIC S7-200 2021年7月5日