已经调通,大小端的问题
想请问一下,梁工的这个modbusRTU程序从哪里获取?
_奶咖君_ 发表于 2024-2-2 10:39
感觉你CRC用错了,MODBUS的 CRC是低字节在 高字节在后
你说反了 ofela 发表于 2024-12-12 14:45
你说反了
那你说的对~{:keai:} 神农鼎 发表于 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校验不一样。能烦请帮忙指点下问题在哪里
多项式问题
页:
1
[2]