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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
; I% a. f6 S4 K3 T
mcu:AT32F403ARCT7# R! A9 M' C: q
FinSH连串口1& ~+ f( u0 g' S! m
RS485连串口2
' M: L" H' p- n& M" F用RT-Thread Studio创建工程后,加入FreeModbu slave组件,编译通过,在进行调试过程中出现以下的问题,希望各位大佬赐教。
5 f6 j: _7 f7 d5 `6 ?问题一、用UartAssis.exe软件模拟Modbus主机0x03功能读取从机数据正常
3 R' @: g# Y) T5 |& o* v; a' D  w9 ]+ f4 R" v# J9 d+ c0 E
但用Modbus Poll.exe进行调试时却出现这样的情况% P- ~6 \! l1 G  J% R
! P8 [( r! \5 A4 |! T
这问题不知从何入手进解决?实际应用时是与PLC(主机)联机。
: ^1 L8 I8 Z7 f
- E7 P1 t* Q/ I1 N问题二、长时间运行时会出现死机现象,FinSH输出如下信息8 y$ C! k( E9 }" c, v$ Q- J3 |

, M& _: l& J9 {/ n% h$ J追踪源码:2 K8 u2 R, r2 r( T: ?8 j2 a/ c' [
' I  M4 m3 V/ D+ E) t
void rt_assert_handler(const char ex_string, const char func, rt_size_t line)
$ C" e: l* H7 x5 `{
; m! n, G7 S9 O. j; X: u* a( }8 R+ {volatile char dummy = 0;
( Z& F' ~: R2 k9 |- A0 L# P" W2 n& C) K, B. U. u
if (rt_assert_hook == RT_NULL)( a, m+ v: z3 x+ R# J9 J* o
{) T- ?4 f$ Z9 G6 e# Q5 F
ifdef RT_USING_MODULE4 w$ A) d& }# V  r
if (dlmodule_self())
/ K& S% s* I, M7 @5 }2 R* V{
: ~9 s3 R/ G/ y: o" v0 D2 o( k/* close assertion module */
6 w8 O1 }  q% ]2 |8 ndlmodule_exit(-1);
" L8 d) _5 v) @0 b4 ]* R  n  j}
2 ^2 m6 ]  J% }4 o9 m5 b4 j4 S2 }  Q8 S3 @else
- T2 }& o* n! tendif, `4 D9 P9 n/ V1 b- K' u' C
{
; E" Q5 L" F2 U" a+ A( {rt_kprintf("(%s) assertion failed at function:%s, line number:%d \n", ex_string, func, line);, J. l( G' W& }' c
while (dummy == 0);: W: x; {! _7 f
}
+ U) i  [' x4 L' @% H}! C% J0 v4 r- w
else
; f" ~/ m( h# n, Y$ D9 R{
9 o# e' |+ X3 ^+ K" Srt_assert_hook(ex_string, func, line);; o& ]1 T5 \3 v" z, M# v- |, I) M
}& G5 P' r2 _1 T- H! Y/ J+ W
}( q) d/ Y0 v4 r8 e! O
" d: h& W2 D2 s; ~
另在UartAssist.exe调试窗口发现从机响应报文中的CRC码有错7 V, a4 s/ [; J9 T8 R

' b  y% x) u3 e1 b- N7 f正确的响应报文应是:01 03 06 00 00 00 00 00 00 21 F5  O$ v9 L, U4 V5 R1 s5 N; O

) h( _+ ~# A* u出现这现象有些板频繁些,有些板很长时间也没出现,现在我暂时用加入看门狗的方法来解决,但我也希望能切底弄清是什么原因?
% F, n4 k0 }# S* j$ ~; I8 T
" @, X  c. t* W! N2 Q* Z/ h) q问题三、我现Modbus串口的波特率是38400,再高就出错了,用UART TTL和RS485都是一样。6 Y9 _  q6 X0 M0 T( s- O3 X

* q& V" a7 d" ?9 D  b但我用雅特力的DEMO板加上我自己做的扩展板,Modbus同样是采用串口2,用UART TTL波特率可到115200,但用RS485也只能到38400,我的接口芯片是SP3485SE EE(与这个有关吗?)
0 X# d4 ?$ |! H) J* k7 R& b1 _
% {$ H9 o* ?0 D" ^9 `0 s- D
7 i$ Q' Q1 z* ?9 }5 o0 }8 j: E9 h

该用户从未签到

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

该用户从未签到

3#
发表于 2022-9-28 16:56 | 只看该作者
485从机的串口配置要和modbuspoll打开的串口配置相同。( t, P1 C+ j: [4 S- e7 G
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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