去年研究了一下Free Modbus 想实现多串口同时跑modbus 顺便把Free Modbus的源码撸了一遍,今年RTT对libmodbus 有了软件包支持,想想也该用上这个了,通过ENV配置了之后很快就用上了,但是提供的例程是基于主站的,顺便把从站也测试了,直接上代码。
[i=s] 本帖最后由 whj467467222 于 2019-9-26 17:43 编辑 [/i]
这个代码是https://github.com/loogg/libmodbus里的,这个是主机例程。我增加了一些自己注释。
官方文档有如下解释
注意事项
RT_DEVICE_FLAG_STREAM:流模式用于向串口终端输出字符串:当输出的字符是 “\n” (对应 16 进制值为 0x0A)时,自动在前面输出一个 “\r”(对应 16 进制值为 0x0D) 做分行。
流模式 RT_DEVICE_FLAG_STREAM 可以和接收发送模式参数使用或 “|” 运算符一起使用。
不知道为什么,我用FreeModbus读出超过4个寄存器的值就读不出来,三个角可以,写寄存器,20个都没问题。 …
https://www.rt-thread.org/qa/thread-10158-1-1.html 希望我的这篇帖子能帮到你
你好!我也参考使用了这个程序作为modbus从机。上位机100ms读取一次数据,目前9600波特率时,从机超时率2%;115200时超时率0.5%。请问这个一般是啥原因呢?
从机超时后,程序里按照另一个人说的加上下面这句,modbus_flush(ctx);通信可以恢复;不加的话,就一直恢复不了通信。
在另一个电路板,线程很少,基本只运行从机modbus程序和一个串口uart程序,通信很稳定,1万次都不出现超时问题。我以为和线程优先级有关,可是当把这个modbus从机线程优先级调为10时,从机反而通信不上,显示一直超时。
兄弟,解决了么,怎么解决,我也碰到了