您好,欢迎访问沃航(武汉)科技有限公司官方网站
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。


文章作者:沃航科技

联系我们
地址:
武汉市洪山区蓝晶国际7栋903
QQ:
932773931
电话:
027-59761089-806
手机:
13397158231
邮箱:
jevian_ma@worldflying.cn
×
物联网组态平台
试用账号:123456
试用密码:123456
如需测试更多功能或者有疑问可发送邮件至:jevian_ma@worldflying.cn
×
积木编程平台
试用方式:试用手机号码注册即可使用
如需测试更多功能或者有疑问可发送邮件至:jevian_ma@worldflying.cn