|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
我使用libmodbus软件包,用一台主机轮询读取两台从机,两台从机的地址分别为1和2。当在轮询两台从机之间没有延时,或延时400毫秒以下时,就会有一台从机通讯不上,或通讯不正常;当在轮询两台从机之间延时500ms时,跟两台从机之间的通讯正常;当只轮询其中一台从机时(两次轮询之间间隔20ms),通讯也正常。请问这可能是哪里的问题?代码如下所示:* D3 l0 p5 M# d9 r
& `9 t3 D' a3 P( i
ioext_ctx = modbus_new_rtu("/dev/uart6", 9600, 'N', 8, 1);& ~4 g/ K. g! }' c9 o
modbus_rtu_set_serial_mode(ioext_ctx, MODBUS_RTU_RS485);
% E% C( F! F3 z2 N' K1 ]modbus_rtu_set_rts(ioext_ctx, RS485_3_EN, MODBUS_RTU_RTS_UP);. k7 ^6 m. u% r! ~
modbus_connect(ioext_ctx);$ h3 @. [* \# c: S' o. ~( r
modbus_set_response_timeout(ioext_ctx, 0, 200000);
8 U6 K% q, m, I6 K" ]3 x, B/ xfor(i=0;i<2;i++)6 I6 k3 L8 d' a: ~. j* {
{
1 A+ G2 Y/ V ?$ A9 Z5 Y. Omodbus_set_slave(ioext_ctx,i+1);
- v& y1 A$ A3 E8 f) }modbus_read_input_bits(ioext_ctx,0,9,IOEXT_modbus_bit);
+ d: r- R" ?/ K+ Wrt_thread_mdelay(500);
7 {& x l, w1 u; L: J, h}% k7 H% r' w8 y( x
上述代码中的“rt_thread_mdelay(500)”即为轮询两个从机之间的延时。
k( J( l1 J9 d |
|