Modbus协议中CRC校验和LRC校验

上传人:工**** 文档编号:511264935 上传时间:2022-08-13 格式:DOCX 页数:6 大小:50.49KB
返回 下载 相关 举报
Modbus协议中CRC校验和LRC校验_第1页
第1页 / 共6页
Modbus协议中CRC校验和LRC校验_第2页
第2页 / 共6页
Modbus协议中CRC校验和LRC校验_第3页
第3页 / 共6页
Modbus协议中CRC校验和LRC校验_第4页
第4页 / 共6页
Modbus协议中CRC校验和LRC校验_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《Modbus协议中CRC校验和LRC校验》由会员分享,可在线阅读,更多相关《Modbus协议中CRC校验和LRC校验(6页珍藏版)》请在金锄头文库上搜索。

1、 .CRC 的生成循环冗余校验(CRC) 域为两个字节,包含一个二进制16 位值。附加在报文后面的CRC 的值由发送设备计算。接收设备在接收报文时重计算CRC 的值,并将计算结果于实际接收到的CRC值相比较。假设两个值不相等,则为错误。CRC 的计算, 开头对一个16位存放器预装全1. 然后将报文中的连续的8位子节对其进展后续的计算。只有字符中的8个数据位参与生成CRC 的运算,起始位,停顿位和校验位不参与CRC 计算。CRC 的生成过程中, 每个 8位字符与存放器中的值异或。然后结果向最低有效位(LSB) 方向移动(Shift) 1位,而最高有效位(MSB) 位置充零。然后提取并检查LSB:

2、假设LSB 为1,则存放器中的值与一个固定的预置值异或;假设LSB 为 0,则不进展异或操作。这个过程将重复直到执行完8 次移位。完成最终一次第8 次移位及相关操作后,下一个8位字节与存放器的当前值异或,然后又同上面描述过的一样重复8 次。当全部报文中子节都运算之后得到的存放器中的最终值,就是CRC.生成CRC 的过程为:1. 将一个16 位存放器装入十六进制FFFF (全1). 将之称作CRC 存放器.2. 将报文的第一个8位字节与16 位CRC 存放器的低字节异或,结果置于CRC 存放器.3. 将CRC 存放器右移1位(向LSB 方向), MSB 充零. 提取并检测LSB.4. (假设LS

3、B 为0): 重复步骤3 (另一次移位).(假设LSB 为1): 对CRC 存放器异或多项式值0xA001 (1010 0000 0000 0001).5. 重复步骤3 和 4,直到完成8 次移位。当做完此操作后,将完成对8位字节的完整操作。6. 对报文中的下一个字节重复步骤2 到5,连续此操作直至全部报文被处理完毕。7. CRC 存放器中的最终内容为CRC 值.8. 当放置 CRC 值于报文时,如下面描述的那样,凹凸字节必需交换。MODBUS 协议的 CRC 校验子程序代码为便利读者使用MODBUS协议,将VC、VB、ASM51环境下MODBUS协议的CRC校验子程序代码一并给出,供读者参考

4、。/*CRC Calculation for MODBUS Protocol for VC */数组 snd 为地址等传输字节,num 为字节数,发为 6 收为 5/ unsigned int mb_crc(BYTE *snd,int num)int i,j;unsigned int c,crc=0xFFFF for (i=0;inum;i )c=sndi & 0x00FF; crc=c; for(j=0,j=1; crc=0xA001;elsecrc=1return(crc);unsigned short int CrcCheck(const unsigned char * buffer,

5、const int buffLen)unsigned short int crcValue = 0;if (!buffer | buffLen 0)return crcValue;int CRCHi = 0x0, 0xC1, 0x81, 0x40, 0x1, 0xC0, 0x80, 0x41, 0x1, 0xC0, 0x80, 0x41, 0x0,0xC1, 0x81, 0x40, 0x1, 0xC0, 0x80, 0x41, 0x0, 0xC1, 0x81, 0x40, 0x0, 0xC1,0x81, 0x40, 0x1, 0xC0, 0x80, 0x41, 0x1, 0xC0, 0x80,

6、 0x41, 0x0, 0xC1, 0x81,0x40, 0x0, 0xC1, 0x81, 0x40, 0x1, 0xC0, 0x80, 0x41, 0x0, 0xC1, 0x81, 0x40,0x1, 0xC0, 0x80, 0x41, 0x1, 0xC0, 0x80, 0x41, 0x0, 0xC1, 0x81, 0x40, 0x1,0xC0, 0x80, 0x41, 0x0, 0xC1, 0x81, 0x40, 0x0, 0xC1, 0x81, 0x40, 0x1, 0xC0,0x80, 0x41, 0x0, 0xC1, 0x81, 0x40, 0x1, 0xC0, 0x80, 0x41

7、, 0x1, 0xC0, 0x80,0x41, 0x0, 0xC1, 0x81, 0x40, 0x0, 0xC1, 0x81, 0x40, 0x1, 0xC0, 0x80, 0x41,0x1, 0xC0, 0x80, 0x41, 0x0, 0xC1, 0x81, 0x40, 0x1, 0xC0, 0x80, 0x41, 0x0,0xC1, 0x81, 0x40, 0x0, 0xC1, 0x81, 0x40, 0x1, 0xC0, 0x80, 0x41, 0x1, 0xC0,0x80, 0x41, 0x0, 0xC1, 0x81, 0x40, 0x0, 0xC1, 0x81, 0x40, 0x1

8、, 0xC0, 0x80,0x41, 0x0, 0xC1, 0x81, 0x40, 0x1, 0xC0, 0x80, 0x41, 0x1, 0xC0, 0x80, 0x41,0x0, 0xC1, 0x81, 0x40, 0x0, 0xC1, 0x81, 0x40, 0x1, 0xC0, 0x80, 0x41, 0x1,0xC0, 0x80, 0x41, 0x0, 0xC1, 0x81, 0x40, 0x1, 0xC0, 0x80, 0x41, 0x0, 0xC1,0x81, 0x40, 0x0, 0xC1, 0x81, 0x40, 0x1, 0xC0, 0x80, 0x41, 0x0, 0xC

9、1, 0x81,0x40, 0x1, 0xC0, 0x80, 0x41, 0x1, 0xC0, 0x80, 0x41, 0x0, 0xC1, 0x81, 0x40,0x1, 0xC0, 0x80, 0x41, 0x0, 0xC1, 0x81, 0x40, 0x0, 0xC1, 0x81, 0x40, 0x1,0xC0, 0x80, 0x41, 0x1, 0xC0, 0x80, 0x41, 0x0, 0xC1, 0x81, 0x40, 0x0, 0xC1,0x81, 0x40, 0x1, 0xC0, 0x80, 0x41, 0x0, 0xC1, 0x81, 0x40, 0x1, 0xC0, 0x

10、80,0x41, 0x1, 0xC0, 0x80, 0x41, 0x0, 0xC1, 0x81, 0x40;int CRCLo = 0x0, 0xC0, 0xC1, 0x1, 0xC3, 0x3, 0x2, 0xC2, 0xC6, 0x6, 0x7, 0xC7, 0x5,0xC5, 0xC4, 0x4, 0xCC, 0xC, 0xD, 0xCD, 0xF, 0xCF, 0xCE, 0xE, 0xA, 0xCA,0xCB, 0xB, 0xC9, 0x9, 0x8, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB,0xDA, 0x1A, 0x1E, 0xDE, 0

11、xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14,0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3, 0x11,0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32, 0x36,0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, 0xFF,0x3F, 0x3E, 0xFE, 0xFA, 0x3A, 0x3B, 0xFB, 0x39,

12、 0xF9, 0xF8, 0x38, 0x28,0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D,0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26, 0x22,0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1, 0x63,0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA

13、4, 0x6C,0xAC, 0xAD, 0x6D, 0xAF, 0x6F, 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB,0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA,0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5,0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0,0x50, 0x90, 0x

14、91, 0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97,0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E,0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89,0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C,0x44, 0x84, 0x85, 0x45, 0x87,

15、0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83,0x41, 0x81, 0x80, 0x40;int i, m;int dCRCHi = 0xFF; int dCRCLo = 0xFF;for (i = 0; i buffLen; i+)m = dCRCLo bufferi; dCRCLo = dCRCHi CRCHim; dCRCHi = CRCLom;crcValue = dCRCLo + (dCRCHi 8);return crcValue;” /*CRC Calculation for MODBUS Protocol for VB*/Function mb_crc(ByRef snd as BYTE,num as integer) as Long crc_l=crc_h=&HFFfor i=1 to num crc_l=crc_l XOR snd(i) for j=1 to 8if crc_l AND 1 then crc_l

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号