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

相关推荐

  • CPU226如何读取仪表的Modbus数据?

    仪表的参数地址都是16进制的,CPU能直接读取数据出来吗?见图片,比如读第一个0000H,200里直接读取的从站地址40001就可以了吗? 最佳答案 可参考:《CPU226CN如何…

    SIMATIC S7-200 2020年10月31日
  • 几款软件安装问题

    我在win10上同时安装 step7 Micro win sp9 v4.0和step7 micro win&n…

    SIMATIC S7-200 2021年7月5日
  • CPU模块是继电器输出型,Q0.0可以做脉冲输出吗

    用S7-200 CPU226 AC/DC继电器,Q0.0可以做PTO或者PWM吗?电源、信号如何接线连接?谢谢! 最佳答案 摘自《西门子 S7-200…

    SIMATIC S7-200 2020年11月1日
  • 高速计数器问题

    请问各位大虾,一个NPN型的接近开关输入点可以连到两个输入点上分别作高速计数吗? 问题补充:如果仅从硬件上来考虑,这种连接方式能否实现呢?我之前用编码器的一项连接到两个不同的高速计…

    SIMATIC S7-200 2020年11月5日
  • S7-200的不同语句的转换

    现在有一段关于调用子函数的STL函数,我想将其转换成梯形图,想请教需要注意什么,我是半路出家,没有系统的学习过,希望各位多多指点 最佳答案 STL不一定能全部转成梯形图,反之则可以…

    SIMATIC S7-200 2017年6月29日
  • 请问谁有西门子modbus标准库?

    哪位大师有这个200的标准库,modbus通信有没有通信状态字的?就是通信出错能从中读出来?谢谢! 最佳答案 1、下面的链接中有标准指令库的下载链接,在文档靠下的位置2、modbu…

    SIMATIC S7-200 2021年7月5日
  • T35无线猫

    想请问一下西门子T35无线猫和其他品牌PLC可以实现通信吗?我想采用欧姆龙CJ1系列PLC控制现场设备,通过T35设置相关泵站故障报警信息短信发送至预设手机号码,通知其进行泵站维护…

    SIMATIC S7-200 2021年7月5日
  • Em231CN 2RTD模块端子

    Em231CN 2RTD模块端子是否可拆卸,如何判断模块接线端子是否可拆卸? 最佳答案 200系列扩展模块,基本就不可以想PLC那样将接线端子拆卸下来。你这Em231CN…

    SIMATIC S7-200 2021年7月5日
  • modBUS 通信的消息帧中间的数据看不明白

    LD     SM0.0=      L60.0LD &nb…

    SIMATIC S7-200 2017年6月18日
  • PLC通讯失败

    请问大家,我用EM235模块的电压输出,输出口VO接到STC单片机(带10位AD)的AD口P1.0,EM235模块的输出公共端M0接到单片机的地,为什么这样一来,PLC就通讯不上了…

    SIMATIC S7-200 2020年11月1日