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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

: p* c2 I8 b  c+ S7 u/ Dmcu:AT32F403ARCT7- X% `5 Q! h! R! _
FinSH连串口15 R9 o+ n. y& }! J- A1 b) M
RS485连串口2
' Y1 F* x+ `: e  U用RT-Thread Studio创建工程后,加入FreeModbu slave组件,编译通过,在进行调试过程中出现以下的问题,希望各位大佬赐教。
) |4 y( @3 B, |- C* l问题一、用UartAssis.exe软件模拟Modbus主机0x03功能读取从机数据正常4 |* {& ~* ~; W( {
; e! @3 I6 M! ^3 o; q: g- }! Y
但用Modbus Poll.exe进行调试时却出现这样的情况
: N  Q7 S  {7 F6 Z- s
' c8 I8 a  K/ D  S4 \# f# y2 i这问题不知从何入手进解决?实际应用时是与PLC(主机)联机。$ ]8 ^" d) k' C

0 p0 V' U* g. m问题二、长时间运行时会出现死机现象,FinSH输出如下信息
# B% y" G" \3 b, b; v
2 a: o4 E: k1 W- f0 h' z1 C* X追踪源码:: O5 q+ K. N. w- n, r
* w6 i2 M1 p. A
void rt_assert_handler(const char ex_string, const char func, rt_size_t line)
* e, T) `8 d0 E{
) O- O6 B. ]3 ?volatile char dummy = 0;5 G4 }4 {+ f/ H, `* _$ Y6 }6 u. N

% ^( c- a3 Z" C& dif (rt_assert_hook == RT_NULL), O3 L7 {* j9 b: y* b3 Q4 H# B! _
{
, F# Z/ F0 `1 J) ^  i- aifdef RT_USING_MODULE( a. T" v& M3 _8 J- u) u
if (dlmodule_self())
8 z0 \$ r: I; f- I{
" H7 W4 t1 c3 y4 k; m. r: P/* close assertion module */
  C, O0 `$ X1 y$ bdlmodule_exit(-1);
/ C( F0 F. V/ c3 u/ R}( M1 \. f4 L! s0 h" |% Z9 W5 }7 j7 }/ m
else
, `: N, m% ~) o  {9 M! }* [6 Y/ V! Z5 W. mendif
) @: H( I' S9 @( G3 [{
9 R7 L& G7 |; b/ F4 rrt_kprintf("(%s) assertion failed at function:%s, line number:%d \n", ex_string, func, line);8 P# ^6 e# }: v. d& x+ N
while (dummy == 0);
* E+ r5 f0 Q- n( H' c}* L0 E( X9 u  B/ f% _0 g! y
}( ~6 p7 d7 q/ c8 Y9 L6 {! ~
else
: h* x+ ?, E( ^. ^. ^* ]. Z; ~' \7 s{$ y9 h+ Y0 {+ e. }
rt_assert_hook(ex_string, func, line);2 k5 T' c& ?4 O( l, E) Z
}
' s. g& q2 u2 j4 _, \  h}" M1 z* I0 ^9 Y0 Q) Z* }5 U

3 I9 X( @, ?9 b& l( q, V6 t4 \另在UartAssist.exe调试窗口发现从机响应报文中的CRC码有错
7 v8 Z% U" B, w
( E5 K7 I' w6 O1 m正确的响应报文应是:01 03 06 00 00 00 00 00 00 21 F5+ Z5 Z7 b3 w+ E- R+ G8 x6 M
  p( w6 q( u) d& |. R
出现这现象有些板频繁些,有些板很长时间也没出现,现在我暂时用加入看门狗的方法来解决,但我也希望能切底弄清是什么原因?+ S: @, V  ?2 Q2 X" y

2 G, ^: M# _+ g问题三、我现Modbus串口的波特率是38400,再高就出错了,用UART TTL和RS485都是一样。
$ o7 A4 ]$ E( b4 \& Z2 L1 b. k/ O- s# u: Z+ k) \* E
但我用雅特力的DEMO板加上我自己做的扩展板,Modbus同样是采用串口2,用UART TTL波特率可到115200,但用RS485也只能到38400,我的接口芯片是SP3485SE EE(与这个有关吗?)& U  b6 J2 x6 W; ?3 U6 N
( u' e6 p, K0 s/ m! s3 @. a3 J$ P

. _  A; P  N1 }  H$ ?3 H

该用户从未签到

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

该用户从未签到

3#
发表于 2022-9-28 16:56 | 只看该作者
485从机的串口配置要和modbuspoll打开的串口配置相同。/ I3 V; V/ F( O
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-19 16:52 , Processed in 0.078125 second(s), 23 queries , Gzip On.

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

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

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