|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
我使用libmodbus软件包,用一台主机轮询读取两台从机,两台从机的地址分别为1和2。当在轮询两台从机之间没有延时,或延时400毫秒以下时,就会有一台从机通讯不上,或通讯不正常;当在轮询两台从机之间延时500ms时,跟两台从机之间的通讯正常;当只轮询其中一台从机时(两次轮询之间间隔20ms),通讯也正常。请问这可能是哪里的问题?代码如下所示:
! Q! Y4 B* [& T+ o
( \ I# Q) J% ^5 W7 R. z- Rioext_ctx = modbus_new_rtu("/dev/uart6", 9600, 'N', 8, 1);
: O" b: C! a" c& u* g' V7 ?modbus_rtu_set_serial_mode(ioext_ctx, MODBUS_RTU_RS485);& H% a. F& x; b# O7 E& |
modbus_rtu_set_rts(ioext_ctx, RS485_3_EN, MODBUS_RTU_RTS_UP);2 M1 H% ~& c$ g) G
modbus_connect(ioext_ctx);9 K9 C0 w6 A% w7 W8 ]* b ?( W) E! ^
modbus_set_response_timeout(ioext_ctx, 0, 200000);
2 ~! B, c# t; L1 _( T9 Yfor(i=0;i<2;i++)
; Y* h/ X9 i+ l7 h; g& @{3 U+ o. t, P# _- \' \) d* c! f5 h
modbus_set_slave(ioext_ctx,i+1);
) U, L- B! W kmodbus_read_input_bits(ioext_ctx,0,9,IOEXT_modbus_bit);
2 B# b5 D" [7 |rt_thread_mdelay(500);9 L: }/ o; j( o* s0 a4 B9 U' m0 P
}, L# y) g( J( [2 l
上述代码中的“rt_thread_mdelay(500)”即为轮询两个从机之间的延时。
; J# @6 w- \# [$ j+ h4 ? |
|