|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
我使用libmodbus软件包,用一台主机轮询读取两台从机,两台从机的地址分别为1和2。当在轮询两台从机之间没有延时,或延时400毫秒以下时,就会有一台从机通讯不上,或通讯不正常;当在轮询两台从机之间延时500ms时,跟两台从机之间的通讯正常;当只轮询其中一台从机时(两次轮询之间间隔20ms),通讯也正常。请问这可能是哪里的问题?代码如下所示:
7 G4 f# Z. k8 }. v3 x6 O5 ?/ r+ ?8 s% [% l2 `$ v
ioext_ctx = modbus_new_rtu("/dev/uart6", 9600, 'N', 8, 1);
4 m* t' o a+ D& g* [" }: R& Imodbus_rtu_set_serial_mode(ioext_ctx, MODBUS_RTU_RS485);
" T' e, C' h+ Z0 ~. ^modbus_rtu_set_rts(ioext_ctx, RS485_3_EN, MODBUS_RTU_RTS_UP);' |! I) C! P; X. w5 D
modbus_connect(ioext_ctx);! J% ~% U: r; }, g6 _ W1 a
modbus_set_response_timeout(ioext_ctx, 0, 200000);
$ d1 {1 [1 s6 F3 Rfor(i=0;i<2;i++)9 \" P' y% G+ y9 f% X' G- |
{
" ?5 R$ b% z2 I) H% P* bmodbus_set_slave(ioext_ctx,i+1);0 }4 t( g( y: O( A L) x _
modbus_read_input_bits(ioext_ctx,0,9,IOEXT_modbus_bit);, J+ n5 l3 W5 v0 a4 G" x' d7 P6 U
rt_thread_mdelay(500);! d0 f, j5 G- [' Y; b5 ~ q
}( p1 Q# ~/ t4 ^. e0 r- C. `! Z+ w- ^
上述代码中的“rt_thread_mdelay(500)”即为轮询两个从机之间的延时。
9 d( M: {6 ^# I, E/ h3 r |
|