打印
[其它应用]

MODBUS协议 485通讯问题

[复制链接]
2003|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chenjunt|  楼主 | 2022-4-12 22:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SH79F3283 用了计算法和查表法来进行CRC校验,但是两种方法都没有的到我想要的结果

使用特权

评论回复
沙发
wyjie| | 2022-4-12 22:22 | 只看该作者
楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
板凳
chenjunt|  楼主 | 2022-4-12 22:27 | 只看该作者
uint16_t getcrc16(uint8_t *puchMsg, uint8_t usDataLen)   
{
        unsigned short tmp = 0xffff;
        unsigned short ret1 = 0;
        int n, i;
        for(n = 0; n < usDataLen; n++)
        {
                tmp = puchMsg[n] ^ tmp;
                for(i = 0; i < 8; i++)
                {
                        if(tmp & 0x01)
                        {
                                tmp = tmp >> 1;
                                tmp = tmp ^ 0xa001;
                        }
                        else
                                tmp = tmp >> 1;
                }
        }
        ret1 = tmp >> 8;
        return (ret1 | (tmp << 8));
        
//    uint8_t uchCRCHi = 0xFF ;
//    uint8_t uchCRCLo = 0xFF ;
//    uint8_t uIndex = 0;
//    uint16_t crc_data;   
//      
//    while (usDataLen--)
//    {   
//        uIndex = uchCRCHi ^ *puchMsg++;
//        uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex];   
//        uchCRCLo = auchCRCLo[uIndex] ;
//    }   
//        crc_data = uchCRCHi;
//        crc_data =  crc_data << 8;
//    return (uint16_t)(crc_data | uchCRCLo) ;
}        
我输入的数据是uint8_t    rx_buff[8] = {0x01,0x03,0x00,0x01,0x00,0xd5,0xca};
返回的数据应该的是01 03 02 03 E9 79 3A 才对,但是两个方法的返回值的第一位分别为04和02,其他的都能对应上,数组也没有超限

使用特权

评论回复
地板
xxrs| | 2022-4-12 22:30 | 只看该作者

01 03 00 01 00 D5 CA
输入7字节。
Modbus CRC16校验(查表)计算结果:D4C8

使用特权

评论回复
5
chenjunt|  楼主 | 2022-4-12 22:32 | 只看该作者
我只是对前5位校验,可是为什么校验完了之后第一位数据会被改变?

使用特权

评论回复
6
xxrs| | 2022-4-12 22:34 | 只看该作者
溢出造成的?

使用特权

评论回复
7
chenjunt|  楼主 | 2022-4-12 22:37 | 只看该作者
我将数组扩大了好几倍,应该不会是溢出造成的

使用特权

评论回复
8
renyaq| | 2022-4-12 22:39 | 只看该作者
不知道是哪里错了

使用特权

评论回复
9
chenjunt|  楼主 | 2022-4-12 22:41 | 只看该作者
唉,还是没有什么结果,算了,多谢大家啦

使用特权

评论回复
10
tpgf| | 2022-5-4 08:34 | 只看该作者
楼主想要什么结果

使用特权

评论回复
11
nawu| | 2022-5-4 08:45 | 只看该作者
crc校验的种类比较多

使用特权

评论回复
12
zljiu| | 2022-5-4 08:58 | 只看该作者
修改校验算法

使用特权

评论回复
13
gwsan| | 2022-5-4 09:39 | 只看该作者
不一定非要加校验啊

使用特权

评论回复
14
qcliu| | 2022-5-4 09:53 | 只看该作者
网上有小工具可以验证一下是什么校验算法

使用特权

评论回复
15
aoyi| | 2022-5-4 10:00 | 只看该作者
校验通不过吗

使用特权

评论回复
16
powerantone| | 2024-8-11 15:41 | 只看该作者
CRC参数不匹配?

使用特权

评论回复
17
flycamelaaa| | 2024-8-11 21:23 | 只看该作者
算法实现错误

使用特权

评论回复
18
flycamelaaa| | 2024-8-11 22:00 | 只看该作者
重新检查你的CRC校验算法实现,特别是位运算和循环逻辑部分。可以使用简单的测试数据(如全0或全1的数据)来验证算法的正确性。

使用特权

评论回复
19
laocuo1142| | 2024-8-12 16:00 | 只看该作者
输入给CRC校验算法的数据可能本身就有误,或者数据格式(如字节序)与算法要求不符。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

718

主题

7868

帖子

5

粉丝