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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
% U) K1 X  S& P4 e
mcu:AT32F403ARCT7
- d# \+ X% `5 K7 l" I( L+ IFinSH连串口12 s2 i  n3 |! Z0 }2 p8 W2 ]
RS485连串口2! h% j, S9 [6 B; w3 r3 N& F
用RT-Thread Studio创建工程后,加入FreeModbu slave组件,编译通过,在进行调试过程中出现以下的问题,希望各位大佬赐教。
; _4 c5 P8 n" v' W  c% m0 T问题一、用UartAssis.exe软件模拟Modbus主机0x03功能读取从机数据正常! q) C' `: B5 w% }1 H$ r! ^; I

, }7 Y$ i* z' E8 i; p但用Modbus Poll.exe进行调试时却出现这样的情况
& G: o, \: G0 w% |8 `" Y0 X+ k
0 h$ U# b) C' T3 C$ O- k( @这问题不知从何入手进解决?实际应用时是与PLC(主机)联机。
" V0 q& \# t7 W: l1 O
' ^- S7 A' X4 a! K" A4 U. L3 }问题二、长时间运行时会出现死机现象,FinSH输出如下信息
+ m6 I. ]+ n5 ?; @" Z. a9 n% g* m  j
追踪源码:
% n& l7 E+ Z( L' i3 _) v! V, n9 |% I4 s, Z: a% J  m
void rt_assert_handler(const char ex_string, const char func, rt_size_t line)
$ b3 L3 {% C9 q1 i' s1 Q& h{) B4 Y" u7 {, v' N4 _" X/ _
volatile char dummy = 0;9 t0 J6 \. M" j' C3 x
$ _1 Z$ @/ r0 N) @5 h' h! r% _. F$ h
if (rt_assert_hook == RT_NULL)
8 o6 S" O2 q& W7 _: a{
% W2 d  X( y  M  iifdef RT_USING_MODULE2 _& V0 q8 b" o# f
if (dlmodule_self())% O; T, S: k. ]- R0 G
{) M4 t5 g0 o6 n$ e
/* close assertion module */. {6 ]2 a# q* w: e4 _* x. P/ _% x
dlmodule_exit(-1);
" F- P% @2 s* l- q}6 |+ ?" I; Y1 j, \/ E* R
else
% I, e7 Z8 B3 ~# A8 f& h" J) I5 cendif/ O8 S! E$ Q' I" ]% c
{
  ~2 j( V# v" ], |! E& S3 ^. Z4 irt_kprintf("(%s) assertion failed at function:%s, line number:%d \n", ex_string, func, line);6 e2 _- r3 K3 H) e" v
while (dummy == 0);7 G- U9 d( y. A- y
}
2 [, {4 q7 ]; V8 N# M' q}
0 `' ^" _2 l: w/ O7 N4 g% Ielse
9 i; d2 b/ `& Q+ Q2 ^{; O  E; [. N) s( [' w
rt_assert_hook(ex_string, func, line);  h. w* Q; \" U& m. ^5 m
}
  s2 o9 C: Z( U}5 z1 @$ \- j' l4 y
0 I; s& E& f/ z% L+ \* \- j
另在UartAssist.exe调试窗口发现从机响应报文中的CRC码有错% [# [1 w4 n. J$ t1 W, x
" w2 c/ r! _9 Q$ k
正确的响应报文应是:01 03 06 00 00 00 00 00 00 21 F5! ]. Q- n, ?2 q9 Q. R$ h8 @

$ x( |8 \2 o% h& Q3 h* h出现这现象有些板频繁些,有些板很长时间也没出现,现在我暂时用加入看门狗的方法来解决,但我也希望能切底弄清是什么原因?
, _0 w) B* t! g4 y3 d9 C
! w( u% \) u/ l9 \* W$ }% u问题三、我现Modbus串口的波特率是38400,再高就出错了,用UART TTL和RS485都是一样。
3 _$ E" i8 u3 H/ t% U
$ |/ P9 c, o0 G但我用雅特力的DEMO板加上我自己做的扩展板,Modbus同样是采用串口2,用UART TTL波特率可到115200,但用RS485也只能到38400,我的接口芯片是SP3485SE EE(与这个有关吗?)! j7 W, M, f! q  o7 @' [
/ L+ Y, N/ f1 Z7 Y! B. D
' _4 H  s  Z0 T) i, t

该用户从未签到

2#
发表于 2022-9-28 16:08 | 只看该作者
会不会是485的通讯问题,你用的是半双工的485芯片,通过控制RE/DE实现双向收发,可能是从机发送完后控制脚立即拉低进入接受状态导致的,建议你用一个HAL_DELY延时1~2ms再将控制脚拉低进入接受状态看看。
# L- R8 Z# C$ ]0 f, t, C. K/ t

该用户从未签到

3#
发表于 2022-9-28 16:56 | 只看该作者
485从机的串口配置要和modbuspoll打开的串口配置相同。1 a7 [6 p5 A& `% u: D- n
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-9-11 05:10 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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