摘要: 最近在看Modbus RTU的通讯,在自编和程序中,我看到CRC校验的程序,但我不怎么明白,为什么CRC16的多项式就是0XA001这是基于什么原因呢? 0XA001是MODBUS的生成多项式,这是一个固定样式 你可能看到过别的生成多项式, 比如 CRC12 80F CRC16 8005 CRC16-CCITT 1021 CRC32 04C11DB7 所谓CRC算法是以GF(2)(2元素伽罗瓦域)多项式算术为数学基础的 那么0XA001就是多项式 X^15+X^13+1 不同的多项式,起检错能力是不同的 也就是说 0XA001 就是MODBUS规定的... 阅读全文
posted @ 2013-05-28 14:43 梦幻乐园 阅读(1516) 评论(0) 推荐(0) 编辑
摘要: 7E 00 05 60 31 32 33 计算CRC16结果应该是:5B3E方法如下:CRC-16码由两个字节构成,在开始时CRC寄存器的每一位都预置为1,然后把CRC寄存器与8-bit的数据进行异或(异或:二进制运算 相同为0,不同为1;0^0=0;0^1=1;1^0=1;1^1=0), 之后对CRC寄存器从高到低进行移位,在最高位(MSB)的位置补零,而最低位(LSB,移位后已经被移出CRC寄存器)如果为1,则把寄存器与预定义的多项式码进行异或,否则如果LSB为零,则无需进行异或。重复上述的由高至低的移位8次,第一个8-bit数据处理完毕,用此时CRC寄存器的值与下一个8-bit数据异或并 阅读全文
posted @ 2013-05-28 14:27 梦幻乐园 阅读(283) 评论(0) 推荐(0) 编辑
摘要: CRC校验实现的过程说明(2012-05-16 02:42:04)转载▼标签:modbus通讯 对于CRC16校验的算法,我为了方便初学者能直观的了解其计算过程,最近有点时间,特将《从MODBUS到透明就储》中的例子直观的用表格说明的方式把它描述出来,让读者一看就明白。供大家学习参考。多项式CRC16=16x+15x+2x+1(0XA001-RTU标准),假设计算的数是:02,07.说明MSBLSBLSB移出这两行异或CRC初始化:1111111111111111数据:020000000000000010XOR第一个字符=1111111111111101这两行异或移位1右移1位... 阅读全文
posted @ 2013-05-28 14:21 梦幻乐园 阅读(379) 评论(0) 推荐(1) 编辑