找回密码
 注册
关于网站域名变更的通知
查看: 255|回复: 3
打印 上一主题 下一主题

使用libmodbus软件包用一台主机轮询读取两台从机通讯不正常请问这可能是哪里的问题?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-9-1 11:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
我使用libmodbus软件包,用一台主机轮询读取两台从机,两台从机的地址分别为1和2。当在轮询两台从机之间没有延时,或延时400毫秒以下时,就会有一台从机通讯不上,或通讯不正常;当在轮询两台从机之间延时500ms时,跟两台从机之间的通讯正常;当只轮询其中一台从机时(两次轮询之间间隔20ms),通讯也正常。请问这可能是哪里的问题?代码如下所示:
3 ~8 P. j' O7 x% \8 N6 l& ^# f2 Y; V" z
ioext_ctx = modbus_new_rtu("/dev/uart6", 9600, 'N', 8, 1);* _3 u5 B7 z  z$ Z2 d
modbus_rtu_set_serial_mode(ioext_ctx, MODBUS_RTU_RS485);6 L; |; m8 A! h" F
modbus_rtu_set_rts(ioext_ctx, RS485_3_EN, MODBUS_RTU_RTS_UP);
& f* m) a2 K; p" Pmodbus_connect(ioext_ctx);
8 a: I0 ~1 L* r" @3 g9 n3 @. F$ {modbus_set_response_timeout(ioext_ctx, 0, 200000);
# s2 u" I8 U) N% A: S+ \7 vfor(i=0;i<2;i++)- E) a6 k( m  v# v! n0 {1 g
{
& W. A( a5 }( Y( k( E+ |8 kmodbus_set_slave(ioext_ctx,i+1);7 J, w, F9 n2 f4 ^
modbus_read_input_bits(ioext_ctx,0,9,IOEXT_modbus_bit);
' i8 X. @; F+ v( o' Lrt_thread_mdelay(500);
1 J+ |2 X! P2 c$ e5 X( H}
; m: a% K# Z  L* v9 L& s  ~上述代码中的“rt_thread_mdelay(500)”即为轮询两个从机之间的延时。
5 C% R1 m: w1 ^$ F6 l* r) O

该用户从未签到

2#
发表于 2022-9-1 13:12 | 只看该作者
看你线程是如何安排的吧,当前线程不释放控制权,其他线程有可能就得不到执行。8 q2 Y9 J) x+ d  w2 U
libmodbus代码本身是没啥问题的8 o6 P+ D9 x8 L- O

该用户从未签到

3#
发表于 2022-9-1 13:59 | 只看该作者
单独轮询一台从机,且两次轮询之间没有延时,没什么问题。当轮询两台从机,且轮询第一台从机和轮询第二台从机之间延时小于400ms时,就会有一台从机通讯不上。& b+ k7 K, N+ f: o+ T
  • TA的每日心情
    开心
    2023-6-2 15:15
  • 签到天数: 1 天

    [LV.1]初来乍到

    4#
    发表于 2022-9-1 14:24 | 只看该作者
    解决方法为在从机端加入如下两行代码:& ~  B( _& F) X- p
    modbus_set_error_recovery(ctx,MODBUS_ERROR_RECOVERY_PROTOCOL);2 I6 K8 n$ l+ C- `  @
    modbus_set_byte_timeout(ctx,0,50000);
    * ?$ f- T0 @: a% k因为默认的为,1、错误不恢复;2、接收端字节间延迟时间为500ms,我这里改为,1、错误恢复;2、接收端字节间延迟时间50ms。修改后,主机轮询两台从机之间间隔50ms,通讯正常。
    9 j) I, n- V( u: b+ G
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-11-23 22:24 , Processed in 0.156250 second(s), 23 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表