|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
; I% a. f6 S4 K3 T
mcu:AT32F403ARCT7# R! A9 M' C: q
FinSH连串口1& ~+ f( u0 g' S! m
RS485连串口2
' M: L" H' p- n& M" F用RT-Thread Studio创建工程后,加入FreeModbu slave组件,编译通过,在进行调试过程中出现以下的问题,希望各位大佬赐教。
5 f6 j: _7 f7 d5 `6 ?问题一、用UartAssis.exe软件模拟Modbus主机0x03功能读取从机数据正常
3 R' @: g# Y) T5 |& o* v; a' D w9 ]+ f4 R" v# J9 d+ c0 E
但用Modbus Poll.exe进行调试时却出现这样的情况% P- ~6 \! l1 G J% R
! P8 [( r! \5 A4 |! T
这问题不知从何入手进解决?实际应用时是与PLC(主机)联机。
: ^1 L8 I8 Z7 f
- E7 P1 t* Q/ I1 N问题二、长时间运行时会出现死机现象,FinSH输出如下信息8 y$ C! k( E9 }" c, v$ Q- J3 |
, M& _: l& J9 {/ n% h$ J追踪源码:2 K8 u2 R, r2 r( T: ?8 j2 a/ c' [
' I M4 m3 V/ D+ E) t
void rt_assert_handler(const char ex_string, const char func, rt_size_t line)
$ C" e: l* H7 x5 `{
; m! n, G7 S9 O. j; X: u* a( }8 R+ {volatile char dummy = 0;
( Z& F' ~: R2 k9 |- A0 L# P" W2 n& C) K, B. U. u
if (rt_assert_hook == RT_NULL)( a, m+ v: z3 x+ R# J9 J* o
{) T- ?4 f$ Z9 G6 e# Q5 F
ifdef RT_USING_MODULE4 w$ A) d& }# V r
if (dlmodule_self())
/ K& S% s* I, M7 @5 }2 R* V{
: ~9 s3 R/ G/ y: o" v0 D2 o( k/* close assertion module */
6 w8 O1 } q% ]2 |8 ndlmodule_exit(-1);
" L8 d) _5 v) @0 b4 ]* R n j}
2 ^2 m6 ] J% }4 o9 m5 b4 j4 S2 } Q8 S3 @else
- T2 }& o* n! tendif, `4 D9 P9 n/ V1 b- K' u' C
{
; E" Q5 L" F2 U" a+ A( {rt_kprintf("(%s) assertion failed at function:%s, line number:%d \n", ex_string, func, line);, J. l( G' W& }' c
while (dummy == 0);: W: x; {! _7 f
}
+ U) i [' x4 L' @% H}! C% J0 v4 r- w
else
; f" ~/ m( h# n, Y$ D9 R{
9 o# e' |+ X3 ^+ K" Srt_assert_hook(ex_string, func, line);; o& ]1 T5 \3 v" z, M# v- |, I) M
}& G5 P' r2 _1 T- H! Y/ J+ W
}( q) d/ Y0 v4 r8 e! O
" d: h& W2 D2 s; ~
另在UartAssist.exe调试窗口发现从机响应报文中的CRC码有错7 V, a4 s/ [; J9 T8 R
' b y% x) u3 e1 b- N7 f正确的响应报文应是:01 03 06 00 00 00 00 00 00 21 F5 O$ v9 L, U4 V5 R1 s5 N; O
) h( _+ ~# A* u出现这现象有些板频繁些,有些板很长时间也没出现,现在我暂时用加入看门狗的方法来解决,但我也希望能切底弄清是什么原因?
% F, n4 k0 }# S* j$ ~; I8 T
" @, X c. t* W! N2 Q* Z/ h) q问题三、我现Modbus串口的波特率是38400,再高就出错了,用UART TTL和RS485都是一样。6 Y9 _ q6 X0 M0 T( s- O3 X
* q& V" a7 d" ?9 D b但我用雅特力的DEMO板加上我自己做的扩展板,Modbus同样是采用串口2,用UART TTL波特率可到115200,但用RS485也只能到38400,我的接口芯片是SP3485SE EE(与这个有关吗?)
0 X# d4 ?$ |! H) J* k7 R& b1 _
% {$ H9 o* ?0 D" ^9 `0 s- D
7 i$ Q' Q1 z* ?9 }5 o0 }8 j: E9 h |
|