modbus crc 高位字节值表和低位字节值表?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了modbus crc 高位字节值表和低位字节值表?相关的知识,希望对你有一定的参考价值。

我在网上看有关modbus CRC资料时看到有crc 高位字节值表和低位字节值表,想知道这两个数据表内的数据是根据什么来写的?

//字地址 0 - 255 (只取低8位)
//位地址 0 - 255 (只取低8位)
/* CRC 高位字节值表 */
const uint8 code auchCRCHi[] =
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40
;

就是对一个字节进行CRC移位异或运算,从而得到该字节值的CRC值。
一个字节(8bit)的取值范围是0~255,从而对应有0~255的CRC值表。而CRC是16位的寄存器(高8位是高字节,低8位是低字节),所以有些资料上把CRC值表分为高位字节值表和低位字节值表,有利于编程查表。
参考技术A CRC校验有专门的算法, 可以通过编程实现的

使用了modbus协议的程序,如何进行CRC校验

MODBUS采用CRC16校验,校验源程序网上很容易搜到。不管是MODBUS指令还是返回数据,最后两个字节都是CRC16校验码,将校验码前面的所有字节进行CRC16换算即可。 参考技术A 网上有很多modbus CRC 校验的例子,百度一下就行了

以上是关于modbus crc 高位字节值表和低位字节值表?的主要内容,如果未能解决你的问题,请参考以下文章

Modbus报文解析

C语言 对字节的高位和低位进行互换!

int的高位字节和低位字节

Go语言判断一个字节的高位大于四

常用网络知识

网络通信中字节序的理解