freemodbus的调试问题

[复制链接]
4188|14
 楼主| bearfw 发表于 2024-11-6 16:56 | 显示全部楼层 |阅读模式
本帖最后由 bearfw 于 2024-11-6 17:03 编辑

最近在使用freemodbus的时候遇到了些问题与大家分享

freemodbus的波特率问题
在移植完freemodbus之后,尝试了一下进行通讯,发现上位机先是显示Timeout error,根据网上的建议,将#define RT_TICK_PER_SECOND这个值调整到1000,但是依旧没有效果(这里的CPU主频是72Mhz)。
在看到一篇帖子说可能是usTimerT35_50us的问题时间过快导致来不及判断于是我将他调大,直接给了350,上位机显示Checksum error,这个是校验错误
然后又看了一个帖子,说在vMBPortSerialEnavle(BOOL xRxEnable ,BOOL xTxEnable)这个函数中,切换485控制引脚的时候要进行时间延时,我添加了rt_hw_us_delay();这个函数进行延时,发现可以读到寄存器了,但是这时候我将读取寄存器的个数变成10个,马上又变成了Checksum error。
在后面突然灵感一闪,怎么只有写的时候有延时,读的时候没有延时,要切换引脚,两个都要有延时

加完之后,把之前的usTimerT35_50u调回来,不需要延迟那么多,然后10个寄存器也能读写了。
39897672b2f292a6ed.png
tpgf 发表于 2025-1-4 15:52 | 显示全部楼层
FreeModbus是一个开源的Modbus协议栈,专门针对嵌入式系统设计,提供免费且可自由使用的通用Modbus通信解决方案
Zuocidian 发表于 2025-1-5 09:13 | 显示全部楼层
FreeModbus遵循BSD许可证,允许用户将其应用于商业环境中
Puchou 发表于 2025-1-5 12:09 | 显示全部楼层
它支持接收缓冲区满和发送缓存区空中断
Xiashiqi 发表于 2025-1-5 15:40 | 显示全部楼层
它支持接收缓冲区满和发送缓存区空中断
小海师 发表于 2025-1-6 12:59 | 显示全部楼层
它仅需一个基本的事件队列或在操作系统支持下创建一个独立的任务来管理Modbus通信周期
Haizangwang 发表于 2025-1-6 16:26 | 显示全部楼层
能够产生RTU传输所需的t3.5字符超时定时器的时钟
两只袜子 发表于 2025-2-24 15:03 | 显示全部楼层
根据波特率和字符位数重新计算usTimerT35_50us的值。
jcky001 发表于 2025-2-24 15:03 | 显示全部楼层
在切换485控制引脚时,在发送和接收方向上都添加了适当的延时。延时的具体值可能需要根据实际硬件和通信速率进行调整。
cr315 发表于 2025-2-24 15:03 | 显示全部楼层
检查硬件连接和配置
guijial511 发表于 2025-2-24 20:34 来自手机 | 显示全部楼层
freemodbus和标准modbus什么区别呢?
xdvca 发表于 2025-2-27 13:22 | 显示全部楼层
如果你的 CPU 主频为 72 MHz,时钟周期为 13.89ns,那么 50 微秒的延迟需要适当调整时钟和定时器配置。
xdvca 发表于 2025-2-27 13:32 | 显示全部楼层
你做得对,应该根据实际需要适当增加延时。
gouguoccc 发表于 2025-2-27 21:42 来自手机 | 显示全部楼层
为什么不用标准modbus协议呢?
 楼主| bearfw 发表于 2025-2-28 14:09 | 显示全部楼层
gouguoccc 发表于 2025-2-27 21:42
为什么不用标准modbus协议呢?

emm,freemodbus也是标准的协议啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

23

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部