|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
) Z/ T; N& b6 W0 \mcu:AT32F403ARCT7
+ m; c0 G) `* R+ d3 p, F: Y* OFinSH连串口1( O( L* X4 m2 }. v
RS485连串口2
7 d4 Y, v! b$ a9 E, o/ |8 a用RT-Thread Studio创建工程后,加入FreeModbu slave组件,编译通过,在进行调试过程中出现以下的问题,希望各位大佬赐教。& \6 C; z& _2 v+ D: G6 d% {
问题一、用UartAssis.exe软件模拟Modbus主机0x03功能读取从机数据正常' Q$ ~+ O9 s: J) y. U
4 {" k& S: ]' G/ q( y
但用Modbus Poll.exe进行调试时却出现这样的情况
# ]7 z+ m$ T8 o$ w M' J
* h; z5 t( K8 w \这问题不知从何入手进解决?实际应用时是与PLC(主机)联机。
; w, r+ s) ~6 \/ ~& E! K9 ^9 G9 |8 _: P1 T# ^1 i; s: M* ^
问题二、长时间运行时会出现死机现象,FinSH输出如下信息
# L/ d. u$ R# x( R4 ` a
7 r4 t% [' r. q; ~/ X: @. u追踪源码:/ W) y, S7 M& A/ |
+ W# V, t/ K) G, ^; d6 qvoid rt_assert_handler(const char ex_string, const char func, rt_size_t line)( p! \- z, ?* R
{; ^- s9 B" l' t. A1 v
volatile char dummy = 0;7 t4 V s. H4 }& u* N1 d
* E" C9 @1 b" r' L/ bif (rt_assert_hook == RT_NULL)
, u# K1 h, L1 r4 K' s( w{
6 R2 S8 y1 [- y) E: uifdef RT_USING_MODULE+ [# d _0 e; t @5 M$ u3 Q
if (dlmodule_self())4 C& C, N4 z5 C L. d9 @0 o4 `
{
4 X% x5 K4 m. ^' v- o, g9 @# G4 ]/* close assertion module */$ U+ z9 z: W+ T% w
dlmodule_exit(-1);9 n4 Y# X. t, B: f+ `4 s
}" ~, [ G, F1 D6 |' u: @
else$ `- o$ L$ p2 _7 r$ V6 _
endif
% ]3 c5 e* s' B( q+ Z4 G/ C: D{3 k% q% `) _) \) z
rt_kprintf("(%s) assertion failed at function:%s, line number:%d \n", ex_string, func, line);
+ _# X- y# Q, p4 a$ }" P4 v) Awhile (dummy == 0);
& d1 j0 O" K' d# e& p9 k}6 ^# M8 i: z! o2 o1 u
}
* I6 e% S$ s, Yelse
( Z9 Z; K* g9 W, L6 e& \7 b: i{$ S$ j _% D" d$ S! I
rt_assert_hook(ex_string, func, line);
. x- _" i2 o2 i* `3 q}, J3 e8 I3 {2 T* E* U! s# U
}
6 ?3 u" Q6 [% V0 [2 ~9 A0 S: J" \! d2 y* Z
另在UartAssist.exe调试窗口发现从机响应报文中的CRC码有错
1 n$ W" F- m) d5 a. n! w, \6 W4 [! ~ b
正确的响应报文应是:01 03 06 00 00 00 00 00 00 21 F5
- T; ^6 w1 V# A* Q0 S5 O8 s! q. {/ j$ S8 d
出现这现象有些板频繁些,有些板很长时间也没出现,现在我暂时用加入看门狗的方法来解决,但我也希望能切底弄清是什么原因?
# v) E2 o8 g' M: K. N8 o4 Y/ e0 n4 E
问题三、我现Modbus串口的波特率是38400,再高就出错了,用UART TTL和RS485都是一样。; K- A( }1 v' x$ T4 a- h
9 _0 y P; y% b/ d但我用雅特力的DEMO板加上我自己做的扩展板,Modbus同样是采用串口2,用UART TTL波特率可到115200,但用RS485也只能到38400,我的接口芯片是SP3485SE EE(与这个有关吗?)
$ |; }5 h7 L5 |* b7 J7 w$ U
. V: e s7 N, n$ L+ F* ?8 u7 T% x# Q& `2 b' Q6 Z- S+ ~
|
|