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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

4 r" e+ X! e* d# a3 @  ?% ymcu:AT32F403ARCT7
- e- [6 z) {, F; bFinSH连串口1
$ k' g. ]; I7 l* u2 Z  G- D5 V) KRS485连串口2/ t! t, a0 t0 f) Y4 S" y
用RT-Thread Studio创建工程后,加入FreeModbu slave组件,编译通过,在进行调试过程中出现以下的问题,希望各位大佬赐教。
8 ?. r$ f* O0 A' S) ?问题一、用UartAssis.exe软件模拟Modbus主机0x03功能读取从机数据正常+ O' `1 I% n0 Y1 ?

) G2 t/ F# p! S" C4 s* W9 W但用Modbus Poll.exe进行调试时却出现这样的情况
4 ]5 h# _  d  D) ]
# Q# ^* X2 j; A& k, T0 m6 {这问题不知从何入手进解决?实际应用时是与PLC(主机)联机。& B; J: J) \' x+ X
  ^  q* U/ z( C
问题二、长时间运行时会出现死机现象,FinSH输出如下信息& I3 }1 m! Z+ r; x( i. A$ z

$ X; y+ g, a: W7 \/ U追踪源码:
: G8 \- u; ^' Q& ?% S: Y) S
3 Q6 J1 K- C) d# G4 {void rt_assert_handler(const char ex_string, const char func, rt_size_t line)- d, u, E/ Y, n3 V
{; U' U; ~, |0 P" l, \$ K) Z5 ~! J
volatile char dummy = 0;
6 c: m' q2 V3 D& J' s! ^  B
, c' F% L3 e" O- H1 ?, ^: ~) wif (rt_assert_hook == RT_NULL)/ P" P0 C& J" `$ N! |3 _8 i8 ]
{% f. |, O, R4 z( |: |
ifdef RT_USING_MODULE4 z) l5 r8 H" U8 r4 i7 h: b1 B
if (dlmodule_self())
% p: g3 ~3 V+ i7 [4 n{
' o: q+ o# m. B$ ?1 X# q; j) n+ w/* close assertion module */
' F7 S0 v5 o$ _- }2 ^# r5 q& f( P, Cdlmodule_exit(-1);
) O5 y* ~* ~( J( I/ j}) g  R/ r% M. [6 P0 W$ t  V1 d
else
: R5 e) h# t+ d0 b; A* s$ W. T* Nendif' d2 P# s% _% M& h  ^+ i
{
! v) W. W0 |. Mrt_kprintf("(%s) assertion failed at function:%s, line number:%d \n", ex_string, func, line);7 Y5 D' }# D' \' y, V
while (dummy == 0);
" J- E5 E" `3 u" F}
  q! v8 W  ]( _1 L}
+ n2 i6 D: f" _else
# I. B" k+ {+ j5 s{
" L7 O- [% b1 F, I  j2 m' ?rt_assert_hook(ex_string, func, line);+ o% S, P, G1 f  m! R& \, U
}
9 l' ~+ S2 W( H/ i/ @9 V9 I! h}
/ t5 A4 _2 k2 S: {8 ~; f3 X* g: R" ?- r( F# h9 l; \9 D1 O% l* I! V2 _
另在UartAssist.exe调试窗口发现从机响应报文中的CRC码有错9 I9 _  [/ ~' F% J: i

* l( q% k2 a  _; e) Z正确的响应报文应是:01 03 06 00 00 00 00 00 00 21 F5* `' J: d, {1 [5 b/ S  u0 N  o5 \1 d

/ j( {7 Z& W8 P3 S, d% W出现这现象有些板频繁些,有些板很长时间也没出现,现在我暂时用加入看门狗的方法来解决,但我也希望能切底弄清是什么原因?+ c# _& ~. j0 }2 S/ Q
2 u' e% p3 E* R1 ]
问题三、我现Modbus串口的波特率是38400,再高就出错了,用UART TTL和RS485都是一样。
) Y) Z) H0 t+ \( J
9 @0 e1 V: L$ Q6 R# p4 D6 G6 ]7 S! s但我用雅特力的DEMO板加上我自己做的扩展板,Modbus同样是采用串口2,用UART TTL波特率可到115200,但用RS485也只能到38400,我的接口芯片是SP3485SE EE(与这个有关吗?)0 B! Y4 c/ h, @! b8 x- ~

! V. \8 \- e2 p0 k% y
& `' r  l, K& r0 M

该用户从未签到

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

该用户从未签到

3#
发表于 2022-9-28 16:56 | 只看该作者
485从机的串口配置要和modbuspoll打开的串口配置相同。
" a% F$ }+ R% W/ f3 r
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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