|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
* w+ f( p" ?$ G8 p
mcu:AT32F403ARCT7' J3 `1 X) L; V* J4 n
FinSH连串口1
7 n% } T" F6 S; M5 [+ c3 X$ @RS485连串口2
4 l! h; t9 [6 Z R( i2 Q& W h! l用RT-Thread Studio创建工程后,加入FreeModbu slave组件,编译通过,在进行调试过程中出现以下的问题,希望各位大佬赐教。* O K! M2 _2 Z4 [
问题一、用UartAssis.exe软件模拟Modbus主机0x03功能读取从机数据正常
# _1 h3 ], ]6 C4 k# s( d- @9 t7 g9 p; M" N. P) Z8 D! |9 B I* A( l
但用Modbus Poll.exe进行调试时却出现这样的情况% O5 T& T( B; E+ @# O
5 P1 x$ ]1 Z ^2 S/ s% Y, v! Y这问题不知从何入手进解决?实际应用时是与PLC(主机)联机。0 ~$ j1 t& S$ w9 T
# t/ B4 F' B* M% ~# {问题二、长时间运行时会出现死机现象,FinSH输出如下信息+ H1 V. \% z9 ~; E7 a
, a3 b! H8 z) ?追踪源码:
. l+ \/ E8 r* }# z, G$ \0 u0 J* u* j4 }: N* R
void rt_assert_handler(const char ex_string, const char func, rt_size_t line)$ [7 m1 G# Q; o9 j! s4 R* Q; v% C
{ K: v: G7 B3 O
volatile char dummy = 0;
6 f, D+ q# i" F t+ W/ b8 ?, S6 C: j K" i; ^2 {0 R: l5 L$ `
if (rt_assert_hook == RT_NULL)+ O' B; ~/ p( t4 q
{
5 ^. Q: v% m. f; _ifdef RT_USING_MODULE
4 N) J( O# S" |0 gif (dlmodule_self())' d# _/ t3 S5 }4 j
{1 P6 o/ Q; L- G( o2 D( l
/* close assertion module */3 `$ _) y+ l/ u2 S: h* w/ ^ I, A x
dlmodule_exit(-1);
6 X. ?; r9 _0 ]7 x1 S. y, n}
- o! T# X1 y! \' ^/ E1 [7 gelse
' i5 v4 q l, A; Y" h* ~endif
) t; {1 ]& T/ I5 b{
8 r/ B2 @7 B8 M% C) z+ Q8 f9 ~! grt_kprintf("(%s) assertion failed at function:%s, line number:%d \n", ex_string, func, line);3 e- a! i) K- ]3 W$ T
while (dummy == 0);
5 [, i% ^0 P; r3 {! R}% F6 j& d3 J. @: m4 ^ N
}
( m- t! B- S0 Q% G( eelse
- m: _! c7 y: h9 @( |. V* i{
5 t; \$ z: r/ z7 Y3 Xrt_assert_hook(ex_string, func, line);
8 f8 g6 y$ P/ J Q}
; @0 L2 p5 q9 z4 \7 E}
k0 t s% ?6 I# o/ n' C. B8 _8 H' x' \9 q6 p9 v+ O& ~8 m
另在UartAssist.exe调试窗口发现从机响应报文中的CRC码有错
! l5 A/ q+ u/ @5 x& C: M9 E4 O+ p4 P4 E: ]
正确的响应报文应是:01 03 06 00 00 00 00 00 00 21 F5
' Q7 o5 T, b M. [
7 Y& u( P5 t+ N8 X0 Q$ u出现这现象有些板频繁些,有些板很长时间也没出现,现在我暂时用加入看门狗的方法来解决,但我也希望能切底弄清是什么原因?" M- A2 }6 k" p: E# v
8 n. N9 r% n1 d" x
问题三、我现Modbus串口的波特率是38400,再高就出错了,用UART TTL和RS485都是一样。- A$ l6 Z) P, E$ r
' I' a2 J q$ T' S9 ~但我用雅特力的DEMO板加上我自己做的扩展板,Modbus同样是采用串口2,用UART TTL波特率可到115200,但用RS485也只能到38400,我的接口芯片是SP3485SE EE(与这个有关吗?)7 {2 S1 ~+ b$ m
5 H( h$ w# [1 G9 D5 E
6 X7 s% V2 r* u' o- V- E# w |
|