|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
5 v0 j- A( y3 f7 Y1 Smcu:AT32F403ARCT7
$ _% n& J! @$ iFinSH连串口1" p$ S. [. n; T; Z1 `
RS485连串口2
+ V h2 u0 m. [6 a% F( i( u用RT-Thread Studio创建工程后,加入FreeModbu slave组件,编译通过,在进行调试过程中出现以下的问题,希望各位大佬赐教。; i4 U4 _/ a# Y. f1 i
问题一、用UartAssis.exe软件模拟Modbus主机0x03功能读取从机数据正常
# W* B6 j, e5 U4 @$ ` j( U: H) L2 r7 @) M5 ~5 o0 M7 W! A
但用Modbus Poll.exe进行调试时却出现这样的情况0 m% S6 A& j. g/ Y' P
9 ?# X+ N( q2 u3 F+ b这问题不知从何入手进解决?实际应用时是与PLC(主机)联机。0 g" R. d$ r* Y1 }7 c+ b
/ b0 l. G9 i `1 V! f3 i' Z1 x
问题二、长时间运行时会出现死机现象,FinSH输出如下信息
& ^3 ~0 a3 W+ |$ B2 P$ ]6 Y! v2 U
' e! K( @! c6 B追踪源码:
1 T8 l t* n% }) u) X- S0 d: q8 ?+ ^4 A! Z. u: W7 A) N) [
void rt_assert_handler(const char ex_string, const char func, rt_size_t line)
" @" L% p( V: S$ R5 I{
( [: H2 ?% G; A3 @3 c P" y! rvolatile char dummy = 0;/ ^$ \4 v% v F7 a" k
4 n4 k# c) V/ h( |$ uif (rt_assert_hook == RT_NULL)1 a9 [/ _* a7 y! c
{% S9 A, b' J( [
ifdef RT_USING_MODULE0 D+ b! Z2 G# g- x2 y+ V+ J
if (dlmodule_self())2 W9 ^, N7 H0 P
{
( W1 ^' j7 j& a0 E/* close assertion module */
2 x+ W ~2 S; C: q- N' T1 N! [dlmodule_exit(-1);$ T' K& ?9 t# Q% Z4 u( A E8 e. V
}
# l; c2 t/ `0 ]6 ~# C2 Yelse
6 C, L& ]6 I) m" X4 Qendif8 V0 ^! D7 Y! f$ P L/ H
{1 W3 b5 s% S% P, |
rt_kprintf("(%s) assertion failed at function:%s, line number:%d \n", ex_string, func, line);- W' b& [) D5 X
while (dummy == 0);
# s* r0 Y \% f}
' s/ D7 x2 W- X- R4 T: K}) z" E9 W' w* P* [# ^* _9 J
else
% a* b0 ` V+ }" L+ g( Y5 d{" o# V( Y& _( t4 S% O
rt_assert_hook(ex_string, func, line);+ U2 i- }2 j* Y! E- [# l- `, z) b) {
}
( ^4 p) H8 e. A2 S}9 Q( h$ ^1 Y! Y- e8 l+ M# ]
Q- _" W% p. \' s" i* R1 r另在UartAssist.exe调试窗口发现从机响应报文中的CRC码有错
' J3 X h# n8 N) ~5 A1 X0 a% x$ B. t M3 M/ w+ F
正确的响应报文应是:01 03 06 00 00 00 00 00 00 21 F5( P' ~' X6 b0 [
N( g! h0 i0 x2 a& I8 ?出现这现象有些板频繁些,有些板很长时间也没出现,现在我暂时用加入看门狗的方法来解决,但我也希望能切底弄清是什么原因? e6 H' L% k. r, M! I9 i
k% ~* U& J! h+ R
问题三、我现Modbus串口的波特率是38400,再高就出错了,用UART TTL和RS485都是一样。' x* F. T2 @3 g2 f' P9 X
* H$ y: v/ b, }, X) }8 G/ U P0 A
但我用雅特力的DEMO板加上我自己做的扩展板,Modbus同样是采用串口2,用UART TTL波特率可到115200,但用RS485也只能到38400,我的接口芯片是SP3485SE EE(与这个有关吗?)# R4 }0 }# y1 _9 F" i2 K
/ v8 D b8 q& O/ U2 [2 Q! d
# \( u& ~" @+ x |
|