找回密码
 立即注册
查看: 75|回复: 1

AI8051手册附录P中MODBUS协议的错误帧数据格式存在错误

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2026-04-24 21:26:47

4

主题

3

回帖

36

积分

新手上路

积分
36
发表于 2026-4-13 14:20:24 | 显示全部楼层 |阅读模式
AI8051手册附录P中MODBUS协议的错误帧数据格式存在错误,如图所示:

无标题.png

MODBUS通讯协议中文版.pdf (1.23 MB, 下载次数: 6)




回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:334
  • 最近打卡:2026-04-28 11:53:20

85

主题

7349

回帖

1万

积分

超级版主

积分
15865
发表于 2026-4-20 12:19:45 | 显示全部楼层
MODBUS异常帧格式:[从站地址] [功能码+0x80] [异常码] [CRC]。
最初编写程序时漏写了功能码+0x80这个字节了,改为如下的程序:
截图202604201219204311.jpg


        while (1)
        {
                if(B_RX1_OK && !B_TX1_Busy)        //收到数据, 进行MODBUS-RTU协议解析
                {
                        if(MODBUS_CRC16(RX1_Buffer, RX1_cnt) == 0)        //首先判断CRC16是否正确, 不正确则忽略, 不处理也不返回信息
                        {
                                if((RX1_Buffer[0] == 0x00) || (RX1_Buffer[0] == SL_ADDR))        //然后判断站号地址是否正确, 或者是否广播地址(不返回信息)
                                {
                                        if(RX1_cnt > 2) RX1_cnt -= 2;        //去掉CRC16校验字节
                                        i = MODBUS_RTU();        //MODBUS-RTU协议解析
                                        if((i != 0) && (RX1_Buffer[0] != 0))        //非广播地址错误处理
                                        {
                                                TX1_Buffer[0] = SL_ADDR;        //站号地址                MODBUS异常帧格式:[从站地址] [功能码+0x80] [异常码] [CRC]
                                                TX1_Buffer[1] = RX1_Buffer[1] +0x80;        //功能码+0x80
                                                TX1_Buffer[2] = i;                        //错误代码
                                                crc = MODBUS_CRC16(TX1_Buffer, 3);
                                                TX1_Buffer[3] = (u8)crc;        //CRC是小端模式, 先发低字节,后发高字节。
                                                TX1_Buffer[4] = (u8)(crc>>8);
                                                B_TX1_Busy = 1;                //标志发送忙
                                                TX1_cnt    = 0;                //发送字节计数
                                                TX1_number = 5;                //要发送的字节数
                                                TI = 1;                                //启动发送
                                        }
                                }
                        }
                        RX1_cnt = 0;
                        B_RX1_OK = 0;
                }
        }


回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-5-1 10:30 , Processed in 0.113121 second(s), 57 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表