新人求助,CRC码的验证

2019-07-18 03:50发布

学校里做毕设,设计Modbus通信协议的传输设计,老师给的实验说明书里面有个《串口通讯中MODBUS的应用实验》,按实验步骤做下来得到如图的结果,请问如何判断通信是否成功?
11.JPG

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
lleaf
1楼-- · 2019-07-18 05:09
这个具体可以查看国标 GB/T 19582-2008 《基于Modbus协议的工业自动化网络规范》
一共三部分

整体过程比较长,不太好黏贴上来,可以自己查看下。。。

2.5.1.2 CRC 校验
在RTU 模式包含一个对全部报文内容执行的,基于循环冗余校验 (CRC - Cyclical Redundancy
Checking) 算法的错误检验域。CRC 域检验整个报文的内容。不管报文有无奇偶校验,均执行此检
验。
CRC 包含由两个8 位字节组成的一个16 位值。
CRC 域作为报文的最后的域附加在报文之后。计算后,首先附加低字节,然后是高字节。CRC
高字节为报文发送的最后一个子节。
附加在报文后面的CRC 的值由发送设备计算。接收设备在接收报文时重新计算CRC 的值,
并将计算结果于实际接收到的CRC 值相比较。如果两个值不相等,则为错误。
CRC 的计算, 开始对一个16 位寄存器预装全1。然后将报文中的连续的8 位子节对其进行后
续的计算。只有字符中的8个数据位参与生成CRC 的运算,起始位,停止位和校验位不参与CRC
计算。
CRC 的生成过程中, 每个 8–位字符与寄存器中的值异或。然后结果向最低有效位(LSB)方向
移动(Shift) 1位,而最高有效位(MSB)位置充零。然后提取并检查LSB:如果LSB 为1, 则寄存
器中的值与一个固定的预置值异或;如果LSB 为 0, 则不进行异或操作。
这个过程将重复直到执行完8 次移位。完成最后一次(第8 次)移位及相关操作后,下一个8
位字节与寄存器的当前值异或,然后又同上面描述过的一样重复8 次。当所有报文中子节都运算之
后得到的寄存器忠的最终值,就是CRC。
当 CRC 附加在报文之后时,首先附加低字节,然后是高字节。在附录B 含有CRC 生成的详
细示例。
280011311
2楼-- · 2019-07-18 06:30
 精彩回答 2  元偷偷看……

一周热门 更多>