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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
6 `1 R; V9 y1 O) P: _/ `, ?
mcu:AT32F403ARCT7" h* g/ f# N7 ]: k+ v- |
FinSH连串口1
; k# q8 Q" |5 gRS485连串口20 A/ V1 C4 w3 l/ b. J
用RT-Thread Studio创建工程后,加入FreeModbu slave组件,编译通过,在进行调试过程中出现以下的问题,希望各位大佬赐教。
# y( H/ n# m6 S$ G9 \& r8 F  |% Y问题一、用UartAssis.exe软件模拟Modbus主机0x03功能读取从机数据正常
2 ]! m8 s- g/ ~( {& `  M' |0 J8 Q& f1 j+ b+ r) h7 d" u2 M
但用Modbus Poll.exe进行调试时却出现这样的情况8 R4 F4 J: z- E4 V4 W  _

/ ?* B5 f4 o7 Q, Q( A这问题不知从何入手进解决?实际应用时是与PLC(主机)联机。) O; A4 \3 f# {

) h* q, e" ^) n9 X问题二、长时间运行时会出现死机现象,FinSH输出如下信息, N8 I8 N/ j; y; _* O7 S" Y% B
5 v& j; \$ l# F8 @3 l
追踪源码:
# `# Z; V4 D' o. Q, W0 i1 i9 {% T& I3 l
void rt_assert_handler(const char ex_string, const char func, rt_size_t line)! x3 f3 y* V" g
{
/ a+ a! I, [2 v2 S6 k& G; x1 Fvolatile char dummy = 0;$ H" \7 ]+ A+ i. m' U2 O7 C

1 c" g+ U  _% W( G0 H5 [0 |if (rt_assert_hook == RT_NULL)
2 _* S/ s" T& ]8 M$ ?{  n4 C; @) K) w0 H, o2 U8 Z' k: ~) v
ifdef RT_USING_MODULE- @7 D6 y& [4 b. y# u' T1 ?9 H
if (dlmodule_self())
/ ^/ F& S! ~! w% x8 j; r9 X5 y+ J9 |{' o# y% z; K' k) L& @6 _
/* close assertion module */1 L% _- c- }9 l$ m; V
dlmodule_exit(-1);
- W! f) _* a& F( l}
! [/ u$ A0 W2 ]+ Lelse
% ]+ }9 n" a  S1 V6 A- uendif
  [6 y  {+ C: E( u{
  V+ o. q# p9 O" b7 \rt_kprintf("(%s) assertion failed at function:%s, line number:%d \n", ex_string, func, line);
7 i& c, [4 T: [; {( K4 lwhile (dummy == 0);! P" Y  `8 h- a& v( L
}
5 G0 X& X5 F1 x+ _( Q, h}5 o; A0 E( ^8 K, p" W% B0 S& I3 \
else& s6 ]* Z1 L; ]
{% g1 [/ ^; ?4 a; c
rt_assert_hook(ex_string, func, line);
! @! P9 l4 [4 o( k7 V}: `" M/ V3 D, ]2 d' @1 |3 z
}+ l0 k0 [: L% O7 |! |3 g# ^: V0 O
1 A  ~: ]  i! O& a
另在UartAssist.exe调试窗口发现从机响应报文中的CRC码有错& u9 U* s  b: J2 j
5 Q2 C5 q, G7 H) ^9 q+ W2 j
正确的响应报文应是:01 03 06 00 00 00 00 00 00 21 F5- R, ]! }8 B" N+ Y  U: W0 k: p

0 y- Q* U: @5 U: F4 G出现这现象有些板频繁些,有些板很长时间也没出现,现在我暂时用加入看门狗的方法来解决,但我也希望能切底弄清是什么原因?
- c1 t  T5 d6 l  v6 t: S" ?3 f
1 y/ p" Q; |5 e问题三、我现Modbus串口的波特率是38400,再高就出错了,用UART TTL和RS485都是一样。
/ x4 c" g; t8 v/ h7 a& n; `! \! ~! @2 M2 _& Z& L% V
但我用雅特力的DEMO板加上我自己做的扩展板,Modbus同样是采用串口2,用UART TTL波特率可到115200,但用RS485也只能到38400,我的接口芯片是SP3485SE EE(与这个有关吗?)
6 ]6 ^" D8 X8 N2 W$ u
: d) {, I' o' k/ c/ a/ c& `
' `- x* A' |" W$ m5 C# P) p

该用户从未签到

2#
发表于 2022-9-28 16:08 | 只看该作者
会不会是485的通讯问题,你用的是半双工的485芯片,通过控制RE/DE实现双向收发,可能是从机发送完后控制脚立即拉低进入接受状态导致的,建议你用一个HAL_DELY延时1~2ms再将控制脚拉低进入接受状态看看。
+ V2 @! V3 Y7 N) a1 I

该用户从未签到

3#
发表于 2022-9-28 16:56 | 只看该作者
485从机的串口配置要和modbuspoll打开的串口配置相同。4 T; E. }8 {( q+ ^$ Y$ l
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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