找回密码
 注册
关于网站域名变更的通知
查看: 294|回复: 2
打印 上一主题 下一主题

FreeModbus从机长时间运行时会出现死机现象怎么解决

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-9-28 15:30 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x

' M, a; U' H4 }/ C  `mcu:AT32F403ARCT7
4 s& M# h. O9 A: ], ?6 `; EFinSH连串口1$ `5 f& }$ T$ f9 n
RS485连串口2  @' m/ b5 y* X
用RT-Thread Studio创建工程后,加入FreeModbu slave组件,编译通过,在进行调试过程中出现以下的问题,希望各位大佬赐教。3 ~5 W! C$ V9 ?6 G
问题一、用UartAssis.exe软件模拟Modbus主机0x03功能读取从机数据正常
1 s: I2 N* k+ v
- l; r, ]8 L0 U  c: Z7 C但用Modbus Poll.exe进行调试时却出现这样的情况+ r+ g6 H  P0 e7 K/ F
# i: ~* e3 s0 A- @9 m3 Y, w1 m
这问题不知从何入手进解决?实际应用时是与PLC(主机)联机。$ }8 c5 K: c# w. g
1 w2 p( l3 }+ a. c
问题二、长时间运行时会出现死机现象,FinSH输出如下信息
8 ^! h/ t0 J( G  |8 G
) ~8 x. v8 k5 M追踪源码:  @( p  G" ^  {+ v9 z& w
6 I4 o% }: x+ t4 \5 ~3 ^, Q% w
void rt_assert_handler(const char ex_string, const char func, rt_size_t line)
8 \. a+ f* Z: r9 a) P{
: t0 j1 k* Q7 @2 X# Svolatile char dummy = 0;
4 }; ~, Z, S4 v& M" `
3 Z" f5 w6 H( f! Hif (rt_assert_hook == RT_NULL)
4 r% A; Q' M  U4 K2 \{
! l/ Y; A7 @) |ifdef RT_USING_MODULE
9 `% p& |$ b' O5 L! Z; V+ W. Uif (dlmodule_self())2 l5 k, t" E. l1 y$ e  J  v, B
{, D- ~! r& x' E+ s  K! y
/* close assertion module */
0 E3 P4 b' k) hdlmodule_exit(-1);2 s& B% ~# o) k  r
}
- I, s8 O  m+ l  F" I8 uelse, K4 l' W! _8 P' U# q; b- J$ w
endif& j- u/ g# f8 ^( p$ U* {9 u
{
- x% y1 I6 @5 ort_kprintf("(%s) assertion failed at function:%s, line number:%d \n", ex_string, func, line);
; ]! U! s3 c$ o  p5 Zwhile (dummy == 0);) H/ P) R4 h- @" m
}
) g; C3 {1 k, K% Y& a8 o; N  B) l}
% c5 ]3 [3 X( U4 Uelse
5 b+ }# S; }) E{
) q% W7 O' t# k7 I) ]rt_assert_hook(ex_string, func, line);
: C/ F& ^; C* L! O}
5 O8 ~5 A  p; }/ Q( W0 e- L4 r}
" h7 g' U0 T& r5 j8 [: r# T0 w; _6 _. G# O6 N  G" r( B
另在UartAssist.exe调试窗口发现从机响应报文中的CRC码有错
5 a' |( W, I) X( A7 {/ D( j$ E* ?3 [1 j$ ]7 @
正确的响应报文应是:01 03 06 00 00 00 00 00 00 21 F5
  x* C. z4 t; j& T, X2 J0 ~# i  s, s* c; k* Y6 z
出现这现象有些板频繁些,有些板很长时间也没出现,现在我暂时用加入看门狗的方法来解决,但我也希望能切底弄清是什么原因?  T1 T, H9 f+ E* ?. R5 T# o
6 O/ b& D9 k: L2 W) A6 U" r' R, f
问题三、我现Modbus串口的波特率是38400,再高就出错了,用UART TTL和RS485都是一样。
8 v3 ~2 _* C2 u2 _0 V3 ^" c4 N! V4 [  ]  `$ m
但我用雅特力的DEMO板加上我自己做的扩展板,Modbus同样是采用串口2,用UART TTL波特率可到115200,但用RS485也只能到38400,我的接口芯片是SP3485SE EE(与这个有关吗?)
2 y9 K0 ~7 s* U8 D" c3 J
2 n, C5 u$ f9 |, ]) r/ i
# g8 ~7 h* d3 v* I

该用户从未签到

3#
发表于 2022-9-28 16:56 | 只看该作者
485从机的串口配置要和modbuspoll打开的串口配置相同。. `3 R1 ?7 b) c

该用户从未签到

2#
发表于 2022-9-28 16:08 | 只看该作者
会不会是485的通讯问题,你用的是半双工的485芯片,通过控制RE/DE实现双向收发,可能是从机发送完后控制脚立即拉低进入接受状态导致的,建议你用一个HAL_DELY延时1~2ms再将控制脚拉低进入接受状态看看。( i$ _3 e. m4 a1 U. }) y# [
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 05:06 , Processed in 0.140625 second(s), 24 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表