打印

STM32 用free modbus,多从机会出现串口只发5个字节数据的情况。

[复制链接]
4534|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mbutterfly|  楼主 | 2024-6-4 12:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
mbutterfly|  楼主 | 2024-6-5 10:31 | 只看该作者
问题可能找到了,哎,如果是真的,就太搞笑了。

使用特权

评论回复
板凳
储小勇_526| | 2024-6-5 10:56 | 只看该作者
分享下,让别人少走弯路。

使用特权

评论回复
地板
mbutterfly|  楼主 | 2024-6-5 11:50 | 只看该作者
储小勇_526 发表于 2024-6-5 10:56
分享下,让别人少走弯路。

还在验证中。几个小时不出错,不一定就好了。

使用特权

评论回复
5
mbutterfly|  楼主 | 2024-6-5 14:47 | 只看该作者
储小勇_526 发表于 2024-6-5 10:56
分享下,让别人少走弯路。

本来以为堆栈加倍,是改善了问题呢,但是后续程序添加进循环后,还是出现这个问题。

使用特权

评论回复
6
mbutterfly|  楼主 | 2024-6-5 15:22 | 只看该作者
难道是主程序里的循环程序太长了吗?执行一次要几百毫秒。MODBUS是1秒读一次。两个从机。 如果一个从机循环里程序少,就都不会出现问题。

使用特权

评论回复
7
储小勇_526| | 2024-6-5 17:11 | 只看该作者
mbutterfly 发表于 2024-6-5 15:22
难道是主程序里的循环程序太长了吗?执行一次要几百毫秒。MODBUS是1秒读一次。两个从机。 如果一个从机循环 ...

我最近也开发了Modbus TCP/IP,不过我负责的是内部总线CAN部分,用的freeRTOS,没出现类似的问题。

使用特权

评论回复
8
mbutterfly|  楼主 | 2024-6-6 08:16 | 只看该作者
储小勇_526 发表于 2024-6-5 17:11
我最近也开发了Modbus TCP/IP,不过我负责的是内部总线CAN部分,用的freeRTOS,没出现类似的问题。 ...

多个从机吗?一次发送多少字节?

使用特权

评论回复
9
mbutterfly|  楼主 | 2024-6-6 08:17 | 只看该作者
储小勇_526 发表于 2024-6-5 17:11
我最近也开发了Modbus TCP/IP,不过我负责的是内部总线CAN部分,用的freeRTOS,没出现类似的问题。 ...

几个从机,一次发送多少字节?

使用特权

评论回复
10
32021724| | 2024-6-6 08:51 | 只看该作者
走的啥总线,485还是纯uart?

使用特权

评论回复
11
mbutterfly|  楼主 | 2024-6-7 16:20 | 只看该作者
32021724 发表于 2024-6-6 08:51
走的啥总线,485还是纯uart?

STM32的UART口,接的485芯片SP3485EN,之后板子差不多是走差分线吧,板子上线路很短。之后是双绞线,3个板子的从站最后并到一起。

使用特权

评论回复
12
呐咯密密| | 2024-6-12 10:07 | 只看该作者
你是串口中断接收从机数据吗?是第一次发送数据出错还是接收从机数据再次发送出错

使用特权

评论回复
13
mbutterfly|  楼主 | 2024-6-14 09:47 | 只看该作者
呐咯密密 发表于 2024-6-12 10:07
你是串口中断接收从机数据吗?是第一次发送数据出错还是接收从机数据再次发送出错 ...

数据发不全的原因,最后发现,至少有一部分原因是因为上位机软件用的LABVIEW,遇到0x0A就截止不收了。这种情况用MODBUS POLL就能接收。至于MODBUS POLL接收不全,为什么只接收5个字节,不多不少,估计还是MODBUS POLL和硬件匹配的问题,据说换个USB转485的线就会好。

使用特权

评论回复
14
32021724| | 2024-6-26 08:55 | 只看该作者
mbutterfly 发表于 2024-6-7 16:20
STM32的UART口,接的485芯片SP3485EN,之后板子差不多是走差分线吧,板子上线路很短。之后是双绞线,3个 ...

可以尝试在485线上挂一根USB转485,分析一下485线上到底在发生什么,比如是不是有2个设备同时在发数据,或者数据正好在5字节的时候停了,还是说数据其实发完了,但是正好5字节后485电平变低了,导致末端收不到数据,这种串口和485的通信问题,先抓数据,从线上的实际现象分析问题,因为等数据过了mcu的uart再过freemodbus,往往看到的就不是真相了

使用特权

评论回复
15
mbutterfly|  楼主 | 2024-6-26 09:08 | 只看该作者
32021724 发表于 2024-6-26 08:55
可以尝试在485线上挂一根USB转485,分析一下485线上到底在发生什么,比如是不是有2个设备同时在发数据, ...

嗯,可以说,我走了弯路。没有从根本上去解决问题。以为靠猜测和百度就很好解决。这个看到别人有说用一个分析波形的工具的。你说的线上挂一根USB转485,怎么挂呢,这个USB转485要接到电脑上?

使用特权

评论回复
评论
mbutterfly 2024-7-12 08:10 回复TA
@32021724 :这个设备一直在用。听说有分析波形的工具的,其实示波器看波形,应该能找到原因。 
32021724 2024-7-11 17:35 回复TA
485总线允许一根总线上有多个设备的,网上有卖USB转485的,485那端接在你的modbus主从机通信额485总线上,USB插电脑就出来一个串口,开个串口调试助手就能看到主从机之间的通信数据了 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

67

主题

4888

帖子

10

粉丝