|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
我使用libmodbus软件包,用一台主机轮询读取两台从机,两台从机的地址分别为1和2。当在轮询两台从机之间没有延时,或延时400毫秒以下时,就会有一台从机通讯不上,或通讯不正常;当在轮询两台从机之间延时500ms时,跟两台从机之间的通讯正常;当只轮询其中一台从机时(两次轮询之间间隔20ms),通讯也正常。请问这可能是哪里的问题?代码如下所示:4 n5 u: [- n5 R1 v2 K2 T
* l3 m/ c+ |5 E9 q! y
ioext_ctx = modbus_new_rtu("/dev/uart6", 9600, 'N', 8, 1);1 i# X4 o! C% Z' B+ l
modbus_rtu_set_serial_mode(ioext_ctx, MODBUS_RTU_RS485);2 _7 }# j2 G: e# ?+ z& Q
modbus_rtu_set_rts(ioext_ctx, RS485_3_EN, MODBUS_RTU_RTS_UP);
q% P' {, h* {9 T# _# Jmodbus_connect(ioext_ctx);8 S. i& b( k+ b# [5 y5 B
modbus_set_response_timeout(ioext_ctx, 0, 200000);% f/ H3 b/ a. ~4 z3 J
for(i=0;i<2;i++): o8 \8 ~# o* W
{7 ~5 D ~% {( x4 N: ~$ u
modbus_set_slave(ioext_ctx,i+1);
: V6 k: i4 S; s: r5 Hmodbus_read_input_bits(ioext_ctx,0,9,IOEXT_modbus_bit);
9 Z! D B% _5 O2 d0 D# ]7 Z e6 mrt_thread_mdelay(500);
- S) r8 e, W" g( a! w}0 b7 ^( P D, ~$ z B" f
上述代码中的“rt_thread_mdelay(500)”即为轮询两个从机之间的延时。
, W, Y- t' x# |- u; a |
|