根据
Modbus
协议,
常规
485
通讯的信息发送形式如下:
地址
功能码
数据信息
校验码
1byte
1byte
nbyte 2byte
CRC
校验是前面几段数据内容的校验值,为一个
16
位数据,发送时,低
8
位在前,高
8
为最后。
例如:
信息字段代码为
: 1011001
,校验字段为:
1010
。
发送方
:发出的传输字段为
:
1 0 1 1 0 0 1 1 0 10
信息字段
校验字段
接收方
:
使用相同的计算方法计算出信息字段的校验码,
对比接收到的实际校验码,
如果相
等及信息正确,
不相等则信息错误;
或者将接受到的所有信息除多项式,如果能够除尽,则
信息正确。
CRC-16
校验码计算方法:
常用查表法和计算法。计算方法一般都是:
(
1
)、预置
1
个
16
位的寄存器为十六进制
FFFF
(即全为
1
),称此寄存器为
CRC
寄存
器;
(
2
)、把第一个
8
位二进制数据(既通讯信息帧的第一个字节)与
16
位的
CRC
寄存器
的低
8
位相异或,把结果放于
CRC
寄存器,高八位数据不变;
(
3
)、把
CRC
寄存器的内容右移一位(朝低位)用
0
填补最高位,并检查右移后的移出
位;
(
4
)、如果移出位为
0
:重复第
3
步(再次右移一位);如果移出位为
1
,
CRC
寄存器与
多
项式
A001
(
1010 0000 0000 0001
)进行异或;
(
5
)、重复步骤
3
和
4
,直到右移
8
次,这样整个
8
位数据全部进行了处理;
(
6
)、重复步骤
2
到步骤
5
,进行通讯信息帧下一个字节的处理;