飞快旋转的风车 发表于 2024-12-12 13:41:52

小白爱上51 发表于 2024-7-12 17:23
已经调通,大小端的问题

想请问一下,梁工的这个modbusRTU程序从哪里获取?

ofela 发表于 2024-12-12 14:45:17

_奶咖君_ 发表于 2024-2-2 10:39
感觉你CRC用错了,MODBUS的 CRC是低字节在 高字节在后

你说反了

_奶咖君_ 发表于 2024-12-12 14:50:19

ofela 发表于 2024-12-12 14:45
你说反了

那你说的对~{:keai:}

zackwu 发表于 2025-4-23 14:12:51

神农鼎 发表于 2024-7-12 14:23


你好版主,我有类似的CRC校验问题,情况如下
目前使用的CRC校验程序如下--直接复制梁工的。

//========================================================================
// 函数: u16        MODBUS_CRC16(u8 *p, u8 n)
// 描述: 计算CRC16函数.
// 参数: *p: 要计算的数据指针.
//      n: 要计算的字节数.
// 返回: CRC16值.
// 版本: V1.0, 2022-3-18 梁工
//========================================================================
u16        MODBUS_CRC16(u8 *p, u16 n)
{
        u16        i;
        u16        crc16;
       
        crc16 = 0xffff;        //预置16位CRC寄存器为0xffff(即全为1)
        do
        {
                crc16 ^= (u16)*p;                //把8位数据与16位CRC寄存器的低位相异或,把结果放于CRC寄存器
                for(i=0; i<8; i++)                //8位数据
                {
                        if(crc16 & 1)        crc16 = (crc16 >> 1) ^ 0xA001;        //如果最低位为0,把CRC寄存器的内容右移一位(朝低位),用0填补最高位,
                                                                                                                        //再异或多项式0xA001
                        else        crc16 >>= 1;                                                        //如果最低位为0,把CRC寄存器的内容右移一位(朝低位),用0填补最高位
                }
                p++;
        }while(--n != 0);
        return        (crc16);
}       



发送的数据是:01 03 00 00 00 04 44 09
接收的数据是:01 03 08 01 02 03 04 05 06 07 00 36 21

用MODBUSPOLL连接反馈CRC校验错误,

我用工具软件中的CRC去校验得出的数据为
01 03 08 01 02 03 04 05 06 07 00 64 D5下载软件CRC计算得出的数据
01 03 08 01 02 03 04 05 06 07 00 36 21

这两个数据是一样的,就是CRC校验不一样。能烦请帮忙指点下问题在哪里


55337575 发表于 2025-4-23 15:28:46

多项式问题
页: 1 [2]
查看完整版本: modbus调不通