spc_cll 发表于 2026-4-13 14:20:24

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

AI8051手册附录P中MODBUS协议的错误帧数据格式存在错误,如图所示:








梁工 发表于 2026-4-20 12:19:45

MODBUS异常帧格式:[从站地址] [功能码+0x80] [异常码] 。
最初编写程序时漏写了功能码+0x80这个字节了,改为如下的程序:



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


飞行者 发表于 2026-5-13 08:02:30

跟着学习,谢谢
页: [1]
查看完整版本: AI8051手册附录P中MODBUS协议的错误帧数据格式存在错误