crc问题,请教高手

modbus RTU中,需要crc进行校验,要求低字节在前,高字节在后。书上说,如数据帧为0101023803EA3D,crc码为3DEA。(不明白为什么,我算的是16#845A)已知是CRC-16校验,生成多项式即16#8005,逆序16#A001,发现01010238033DEA并不能整除16#8005,想问:S7-200中的CRC码格式究竟是如何定义的?比如,是否逆序,取反?

问题补充:
苦斗老师讲的我都明白,关键我想弄明白S7-200中定义的CRC格式,比如寄存器初始化为$FFFF,意义何在?200如何进行校验检查,等等。

最佳答案

没必要搞清它的数学推导过程!
 按下列顺序处理即可:
 是先调入一值是全“1”的16位寄存器,然后调用一过程将消息中连续的8位字节各当前寄存器中的值进行处理。仅每个字符中的8Bit数据对CRC有效,起始位和停止位以及奇偶校验位均无效!
 每个8位字符都单独和寄存器内容相异或,结果向最低有效位方向移动,最高有效位以0填充。LSB被提取出来检测,如果LSB为1,寄存器单独和预置的值(16#A001)异或一下,如果LSB为0,则不进行。整个过程要重复8次。在最后一位(第8位)完成后,下一个8位字节又单独和寄存器的当前值相异或。最终寄存器中的值,是消息中所有的字节都执行之后的CRC值。
 CRC添加到消息中时,低字节先加入,然后高字节。
 下面是我做的一个子程序仅供参考:
 LD     Always_On:SM0.0
 WDR
 MOVW   16#FFFF, LW6
 WDR
 FOR    LW8, +1, #count:LW4
 XORB   *#start_add:*LD0, #crc_Lo:LB7
 INCD   #start_add:LD0
 FOR    LW10, +1, +8
 SRW    LW6, 1
 LD     Overflow_Illegal:SM1.1
 XORW   16#A001, LW6
 NEXT
 NEXT
 电子邮件内信我 给你详细讲解!
 

提问者对于答案的评价:
其实Modbus协议中的CRC校验顺序是逆序的,高低字节互换位置。初始化为16#FFFF是为了使CRC寄存器能判断出以0为起始为的源数据。

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2021年7月4日 下午11:13
下一篇 2021年7月4日 下午11:13

相关推荐

  • T33指令使用问题

    CPU 224xp 定时器T33指令使用问题: 网1 LDN    T33 TON&nbs…

    SIMATIC S7-200 2021年7月4日
  • 计数操作有误

    产品在传送带上,当经过光电传感器就触发编码器计数,计数到一定量的时候(到达剔除装置),进行剔除,(产品是在传送带上的,有很多产品)如产品1经过光电,编码器开始计数,到1000值的时…

    2021年7月5日
  • 226plc与第三方仪表用modbus RTU协议通信

    各位前辈: 本人第一次使用226plc与第三方仪表通信,协议时modbus rtu,如何编写这个程序?不用modbus的库文件,自己编写,能否提供一个实例,我的…

    SIMATIC S7-200 2021年7月4日
  • S7-200PLC,如何拓展通讯?

    现有一CPU226,要和触摸屏(端口0),打印机(端口1),以及BA(RS485端口,modbus)通信连接,PLC上自带的2个口都占完了,怎么解决?要添加通信模块吗? 最佳答案 …

    SIMATIC S7-200 2017年11月26日
  • 怎样查看程序的步数?

    在S7-200编程软件STEP7-MICRO/WIN V4.0中,怎样查看程序的步数? 最佳答案 西門子S7-200是看內存的佔有量來衡量程序的大小,不象三菱用步數來衡量…

    SIMATIC S7-200 2021年7月5日
  • 高速脉冲输出值的显示

    S7-200中利用PTO方式Q0.0和Q0.1输出高速脉冲,输出时的当前值能在哪个数据寄存器查到,如输出100个脉冲,寄存器能从 0-100递增显示,再输出50个脉冲,寄…

    SIMATIC S7-200 2020年11月1日
  • 如何通过mudbus指令读写取多圈绝对值编码器数据

    s7-200的plc,读写一款绝对值编码器的数据。请教是不是程序中只要对应了编码器的相应地址就行了?如我下图中所示的方式。但是说明书中的数据又是怎么换算到plc程序上的呢,如说明书…

    2021年7月5日
  • 1214-MODBUS

    我用S7-1214+CM1241做MODBUS从站,用串口助手发送02 03 9C 42 00 01 0A 7…

    2021年7月5日
  • 200PLC定位控制与速度控制

    各位高手,小弟第一次接触这类型的项目:用两套松下伺服驱动,一根垂直轴,上下移动定位,精度0.05mm。一个工作滑台,速度控制,速度由另一台电机转速决定,最高转速要达到1700r/m…

    SIMATIC S7-200 2021年7月4日
  • 关于s7-200编程的几个问题

    1,关于200累加器的使用,如下图,请问在第2行中使用AC0,AC1,会对第3行中使用的AC0和AC1造成影响吗?甚至是N行后地址指针使用的AC0和AC1会造成影响吗?应该是不会吧…

    2021年7月5日

发表回复

登录后才能评论