|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
我使用libmodbus软件包,用一台主机轮询读取两台从机,两台从机的地址分别为1和2。当在轮询两台从机之间没有延时,或延时400毫秒以下时,就会有一台从机通讯不上,或通讯不正常;当在轮询两台从机之间延时500ms时,跟两台从机之间的通讯正常;当只轮询其中一台从机时(两次轮询之间间隔20ms),通讯也正常。请问这可能是哪里的问题?代码如下所示:8 j/ t2 I" h7 G! n
* w' u9 X) Z8 O5 lioext_ctx = modbus_new_rtu("/dev/uart6", 9600, 'N', 8, 1);
$ S. b7 J6 @- c) ?) M+ qmodbus_rtu_set_serial_mode(ioext_ctx, MODBUS_RTU_RS485);# k7 _9 D' T% T- f+ }' x
modbus_rtu_set_rts(ioext_ctx, RS485_3_EN, MODBUS_RTU_RTS_UP);5 k6 B8 j K8 G# x
modbus_connect(ioext_ctx);' E0 B- V3 D0 l
modbus_set_response_timeout(ioext_ctx, 0, 200000);7 j* v0 i' z0 S+ m( N7 @
for(i=0;i<2;i++)) [; g' }* z* N$ X4 }) B, E
{% ^6 V7 b, z7 t3 E
modbus_set_slave(ioext_ctx,i+1);
: A% t) J! [# X( S- z; r6 I. umodbus_read_input_bits(ioext_ctx,0,9,IOEXT_modbus_bit);$ U1 R9 p$ V6 T
rt_thread_mdelay(500);
5 i7 s3 S2 F+ {2 m' r2 ?' n}
$ Q. X3 C: o- U上述代码中的“rt_thread_mdelay(500)”即为轮询两个从机之间的延时。
4 E Y/ k: X4 S3 ]0 _9 \2 { |
|