modbus rtu的crc校验生成以及使用方法

2020-11-19 23:20:11

在工业领域,modbus是最常用的传输总线。最常用的modbus就是modbus rtu。这里小沃贡献一个modbus rtu的crc校验代码 。

uint16 GetCrcData(uint8 *data, uint32 len) {
    uint16 crc = 0xffff; // 16位crc寄存器预置
    for (uint32 i = 0 ; i < len ; i++) { // 循环计算每个数据
        crc ^= data[i]; // 将八位数据与crc寄存器亦或,然后存入crc寄存器
        for (uint8 j = 0; j < 8; j++) { // 循环计算数据的
            if (crc & 0x0001) { // 判断右移出的是不是1,如果是1则与多项式进行异或。
                crc >>= 1; // 将数据右移一位
                crc ^= 0xa001; // 与上面的多项式进行异或
            } else { // 如果不是1,则直接移出
                crc >>= 1; // 将数据右移一位
            }
        }
    }
    return (crc << 8) | (crc >> 8);
}

上面的代码生成crc的效果如下:

uint8 data[] = { 0x01, 0x03, 0x08, 0x00, 0x01, 0x01 };

int main () {
    printf("crc:0x%04x\n", GetCrcData(data, sizeof(data)));
}

456.JPG

上面的代码校验crc的效果如下:

uint8 data[] = { 0x01, 0x03, 0x08, 0x00, 0x01, 0x01, 0x87, 0xfa };

int main () {
    printf("crc:0x%04x\n", GetCrcData(data, sizeof(data)));
}

789.JPG

大家看见了吧,返回为0。


文章作者:沃航科技

联系我们
地址:武汉市东湖高新开发区光谷总部国际1栋2412室
QQ: 932773931
电话:027-59761089-806
手机:13397158231
邮箱:jevian_ma@worldflying.cn

沃航(武汉)科技股份有限公司版权所有

备案号:鄂ICP备16014230号-1

932773931
13397158231