|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
我使用libmodbus软件包,用一台主机轮询读取两台从机,两台从机的地址分别为1和2。当在轮询两台从机之间没有延时,或延时400毫秒以下时,就会有一台从机通讯不上,或通讯不正常;当在轮询两台从机之间延时500ms时,跟两台从机之间的通讯正常;当只轮询其中一台从机时(两次轮询之间间隔20ms),通讯也正常。请问这可能是哪里的问题?代码如下所示:
( b* p) V$ y1 y5 x& p) j
* v( `3 O) c: P! W% z3 sioext_ctx = modbus_new_rtu("/dev/uart6", 9600, 'N', 8, 1);
4 W8 n, O. P4 W# Dmodbus_rtu_set_serial_mode(ioext_ctx, MODBUS_RTU_RS485);
: T! k6 H$ L. X6 Y$ \6 lmodbus_rtu_set_rts(ioext_ctx, RS485_3_EN, MODBUS_RTU_RTS_UP);
% I# T& w |6 O1 N0 A4 smodbus_connect(ioext_ctx);7 _# }3 P7 x2 [3 W
modbus_set_response_timeout(ioext_ctx, 0, 200000);
; V% b. x, J' _) \) pfor(i=0;i<2;i++)8 Q* D' H# t& Z: M8 w* K0 N+ u& K
{( T5 K; R/ ]8 g( |, Q& j
modbus_set_slave(ioext_ctx,i+1);, a# v$ A5 a5 ?" Q% G9 \" Z
modbus_read_input_bits(ioext_ctx,0,9,IOEXT_modbus_bit);
* Q; s$ q& }5 c: r. l- frt_thread_mdelay(500);) A2 X8 Y( q: x3 W) s$ v5 ]% `& L
}
9 E# g" {. x+ a3 P1 p上述代码中的“rt_thread_mdelay(500)”即为轮询两个从机之间的延时。0 \0 N$ [& G( B3 _) I* w" P
|
|