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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
, i# K8 q. N6 F; y
mcu:AT32F403ARCT7$ m- Y  ]3 M$ j
FinSH连串口1
! a" {; \% |: o: m' o+ S. p; E8 vRS485连串口2
6 J: P2 V, l/ Y, r用RT-Thread Studio创建工程后,加入FreeModbu slave组件,编译通过,在进行调试过程中出现以下的问题,希望各位大佬赐教。
9 g9 _/ n' Q. I) S# B9 I问题一、用UartAssis.exe软件模拟Modbus主机0x03功能读取从机数据正常" g1 C: i) v( m/ m; [8 P2 G0 T
3 [7 _- G; G9 e7 l
但用Modbus Poll.exe进行调试时却出现这样的情况
/ D% `  Z% j3 G+ z' b$ m/ m9 o7 _
这问题不知从何入手进解决?实际应用时是与PLC(主机)联机。
0 C4 Z& C& w" o  t: _9 Z' l9 v
5 r, s5 E3 @* P/ o7 k/ q% Z) k问题二、长时间运行时会出现死机现象,FinSH输出如下信息, g; z  q$ X; K5 y' R% M
+ G$ h1 D) ^: w. `
追踪源码:3 m" T% g0 N# J

5 V  p) H0 u6 G6 L7 s: p, kvoid rt_assert_handler(const char ex_string, const char func, rt_size_t line); V! i4 ^, b: L0 e% t
{
3 q1 a4 F6 L) F6 xvolatile char dummy = 0;
& L/ g) r( q  Z/ A) l. k% l6 n1 G  A. `0 n$ @  v2 c0 S' t& q
if (rt_assert_hook == RT_NULL)
  c& `. C, [2 z; k4 Q{
( r' C: ^% L3 A2 p: Z# zifdef RT_USING_MODULE2 w: [3 }/ q) J0 j
if (dlmodule_self())
* f) D# p" E6 {" `4 f/ V. @{
/ N0 h% D  P; ~( _/* close assertion module */& u7 e/ Q. @8 ^* X
dlmodule_exit(-1);
) m4 E" d2 z/ N}
9 G" I) {+ V# U( v$ q8 Helse
7 L+ g; O* H$ [/ zendif3 ^' S+ h  e) M, n
{/ R$ n2 a, L  u7 A
rt_kprintf("(%s) assertion failed at function:%s, line number:%d \n", ex_string, func, line);
# y5 ^" p5 y6 m( G, Y8 Gwhile (dummy == 0);& n2 O$ @; B4 l. b
}
% c3 P+ K' P6 Z0 Z/ a1 Z  _5 u}
3 X) B% \$ p" F& I* kelse
8 A2 P) ?8 A- I8 Z2 r4 D{
8 z$ v3 \8 a! s8 ?9 \' jrt_assert_hook(ex_string, func, line);
1 n9 G- n, |, i: Y& v}
" J  X, I8 u1 A4 A# |}( h5 H  ^8 k- U1 ^* P8 @" E- C
$ D5 b. R* B1 t& u% N0 ^9 v
另在UartAssist.exe调试窗口发现从机响应报文中的CRC码有错
4 Q5 d; i: Y6 A4 A+ \0 A/ p" r5 `" T6 \% M0 f/ x( o/ {7 M
正确的响应报文应是:01 03 06 00 00 00 00 00 00 21 F5
" q" ~5 L$ o, ~' ~# M, R" y. n8 y( @# J9 x( \. Q
出现这现象有些板频繁些,有些板很长时间也没出现,现在我暂时用加入看门狗的方法来解决,但我也希望能切底弄清是什么原因?) A$ y  k, O+ I, O0 m
$ r& M) h( }" ?7 N3 a1 |
问题三、我现Modbus串口的波特率是38400,再高就出错了,用UART TTL和RS485都是一样。3 O1 x: D3 l8 `* M$ @3 C: G4 E8 O: J

& Z* P9 z$ k+ d) {  a但我用雅特力的DEMO板加上我自己做的扩展板,Modbus同样是采用串口2,用UART TTL波特率可到115200,但用RS485也只能到38400,我的接口芯片是SP3485SE EE(与这个有关吗?)
' @( U, m* \* H, [+ t8 j! a2 f, w0 {  _/ r( U* b6 j/ {) {. V" v7 n

4 l3 j/ h. F' \3 b

该用户从未签到

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

该用户从未签到

3#
发表于 2022-9-28 16:56 | 只看该作者
485从机的串口配置要和modbuspoll打开的串口配置相同。5 t4 \; Y# y$ y1 n# I0 B) I) V
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-29 13:54 , Processed in 0.078125 second(s), 24 queries , Gzip On.

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

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

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