agile_modbus icon indicating copy to clipboard operation
agile_modbus copied to clipboard

Results 8 agile_modbus issues
Sort by recently updated
recently updated
newest added

# 在swtich的case中定义变量,导致指针指向该变量的地址被其他变量使用 ## 运行环境 - 硬件:STM32F429IGT6单片机 - 操作系统:RTT 5.0.0 - 使用串口V2驱动:使用收发DMA - 编译:KEIL AC6编译器 - 使用MODBUS RTU 从机功能 ## 错误情况 - AC6编译器使用-O0优化,上位机进行线圈写入True成功。上位机发送成功,上位机发送读取该寄存器写入为True. - AC6编译器使用-Oz优化,上位机进行线圈写入True失败。上位机发送成功,上位机发送读取该寄存器写入为False. 例如对线圈地址0X02写入True,读取回来还是FALSE。 ## 错误原因 - data 变量在case中定义,在退出该case时,该地址已经被释放,导致该地址被其他变量使用,导致写入失败。...

看了源码,对从机来说,有点冗余,尤其是接口那里,当寄存器大于一定的值之后,这个可能就不适用了

可以用requst packet推出rsp packet len, 这样提高分包效率

我看了一下从机的代码,一方面对于map_buf数组长度有限制,这个还不是主要问题(因为Modbus协议本身就有定义每次最多只允许操作124个寄存器). 但是不管是读取寄存器还是写入寄存器,你都需要把该字段的所有寄存器全部读取一次,这样的操作是否有冗余,这样的操作是为什么?理论上读取寄存器我们只需要读取对应的寄存器就好了,不需要把整个字段的寄存器都读取出来。写入寄存器的时候也不需要读取寄存器啊!所以这一块没有特别搞懂?是否可以优化。

希望能加一个接口,可以无需主机请求,主动推送对应的数据。 接口只需要传入功能码,起始地址,结束地址即可。

我翻看了仓库的文档和API,发现这个库没有添加对ASCII传输模式的支持,虽然这个有点老了,但是还是有应用场景.希望可以考虑把这个功能加上一下.很支持大佬的开源工作,有需要帮忙我也可以参与.libmodbus这个库对于ASCII的传输也是要自己实现,可以把这个库做的更贴近实际应用.

## 问题 当用户定义的寄存器过多时,存在数组越界情况。如下图: ![异常说明](https://github.com/user-attachments/assets/a5332498-224e-45cd-a8ac-848470cb2f85) ## 解决方式 详见PR详情 ## 测试 使用modbus poll工具进行测试,初步测试项目包括(0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x0F, 0x10, 0x16, 0x17,)。未发现异常。 ![测试截图](https://github.com/user-attachments/assets/4a6dfd20-2dfe-40b1-8a94-230acfd55ce7) ## 注意 1:本次PR仅关注modbus RTU,未关注TCP 2:本次pr,修改了get_map_buf等回调函数的传参,因为该函数由用户实现,故更新后**需要用户简单修改get_map_buf等回调函数**(参照\examples\slave)

1.1.4版本中,read_registers()函数返回值恒为0,导致如果请求的地址空间不在maps数组里面的话,协议栈依然进行正响应,但是响应值不正确。 ![agile](https://github.com/user-attachments/assets/b3fee585-6cc7-470e-822a-1ae4162efb5f)