|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
# ]7 n) ]; }7 @1 Bmcu:AT32F403ARCT7/ ?. L# `2 x5 V8 w: w! ?
FinSH连串口13 L7 y0 b+ @3 }1 B4 X! }/ h
RS485连串口2) P. ]( i, B4 ^
用RT-Thread Studio创建工程后,加入FreeModbu slave组件,编译通过,在进行调试过程中出现以下的问题,希望各位大佬赐教。" t7 K. c, @8 M" m
问题一、用UartAssis.exe软件模拟Modbus主机0x03功能读取从机数据正常
0 b% W8 `' S7 L f) W( N& p' R& C' N' t y8 ?
但用Modbus Poll.exe进行调试时却出现这样的情况: E6 K- s) I/ ~
T1 l7 `; [& _, L3 y
这问题不知从何入手进解决?实际应用时是与PLC(主机)联机。7 Z* p) H% G0 N3 k
9 z* I* u! A! K7 s0 C! @0 `
问题二、长时间运行时会出现死机现象,FinSH输出如下信息
$ X, g( W ]& ]6 A; Z0 a* d) W' U
* a* r- v- S5 R H) M追踪源码:
) e w; \2 T" H1 v! A: F# ^! H) v
5 E0 A* T# E& h U' dvoid rt_assert_handler(const char ex_string, const char func, rt_size_t line)( i; q) O4 q2 e7 k
{/ K4 A& Q6 {* E* ]0 I- w$ w; J
volatile char dummy = 0;
4 L ^1 z) w+ f0 Q. L
7 r. w% k% y( ^& u) Iif (rt_assert_hook == RT_NULL)
" E9 w& d* W' F5 d! T f{
Z( d7 N* \/ B. zifdef RT_USING_MODULE- `% K8 }/ t7 ^& O. T# ?
if (dlmodule_self())
4 ?3 C5 D6 D7 U, ^{. M* P# B$ Q$ u, }& \9 z
/* close assertion module */: A2 @; y, ~% \# } q8 r$ t# F
dlmodule_exit(-1);+ V# ?/ c! z# h
}- `% y9 y4 a$ d4 Y, ?: m
else
. p+ o6 v4 a! T7 s5 Y! nendif
7 L* f( i% _# l o{
/ ]! u+ p' |$ a8 v+ l4 lrt_kprintf("(%s) assertion failed at function:%s, line number:%d \n", ex_string, func, line);& D2 P. v; W/ b$ O( v
while (dummy == 0);3 j( i4 ~+ R- N4 }/ H p5 D
}+ Y2 A! T5 W* a6 A6 {' d
}
+ G2 j' N3 m; }) W- x* i4 ]else
8 h8 h6 b: v) [1 [: T4 h3 f" C{
2 D" V7 y4 R# _9 p5 y+ S( b! hrt_assert_hook(ex_string, func, line);( F+ C# v. C2 {6 c2 q" D
}+ l9 _0 Y9 O. V2 X/ ~ m" M3 C5 r/ E2 [7 o
}
G) J. q" l: g% w Q/ M0 x9 k0 R' ^* D2 G+ X1 j4 |* Z
另在UartAssist.exe调试窗口发现从机响应报文中的CRC码有错; H5 T3 u$ g& _$ n
$ H8 ?* o- }, E, \- j
正确的响应报文应是:01 03 06 00 00 00 00 00 00 21 F5 y L# {0 _8 a! b& ?9 l2 z& S3 T
- z4 z/ W) }- j$ |* a) ^" |7 }出现这现象有些板频繁些,有些板很长时间也没出现,现在我暂时用加入看门狗的方法来解决,但我也希望能切底弄清是什么原因?5 R5 V" b* l* P+ Z; R$ W
! S0 |% f3 k1 u8 F7 \, Z1 W) `, C问题三、我现Modbus串口的波特率是38400,再高就出错了,用UART TTL和RS485都是一样。8 m( d8 }" G8 i. ^) k) q+ H' @7 R
9 ?; s" _6 v' @
但我用雅特力的DEMO板加上我自己做的扩展板,Modbus同样是采用串口2,用UART TTL波特率可到115200,但用RS485也只能到38400,我的接口芯片是SP3485SE EE(与这个有关吗?)7 S9 k( u% q# a% ]" d
/ a0 S; H* J) ^8 _
/ ?& P y, b7 r. q5 ?, ]: G
|
|