modbus rtu 485多节点设备调试经验

本文描述了一次在气象站中遇到的RS485总线通信问题,当传感器节点超过4个时,部分设备无法响应。排查过程涉及485设备地址冲突检查、电路问题诊断(包括匹配电阻、上下拉电阻调整)、MODBUS空闲时间要求验证以及通信时间间隔设置。最终,通过在代码中增加1000ms的延时解决了传感器读取数据的同步问题,确保所有设备能正常响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现象描述:

气象站添加485传感器采集数据,单个传感器数据采集测试均正常,当总线上的传感器节点数量超过4个,部分传感器无法响应数据

排查思路:

1.从机设备的地址是否有冲突;

通过RS485转USB集线器将传感器接在电脑的USB上,然后通过串口助手发送指定格式的报文去读取设备地址,最后一一核对是否有冲突的地址。

2.485电路问题;

a、先向485电路增加匹配电阻(120Ω),现象依旧如上述。

b、去掉电容C45,现象依旧如上述。

c、更改上下拉电阻,R63与R68为10K或者4.7K的时候,通信速度比较慢,原因是因为上下拉电阻太大,在电平变化的时候,上升沿速度太慢,因此在速率较高时会有问题,改成1K拿示波器实测波形是更好的,但是上述现象依旧存在。

3.是否满足MODBUS的空闲时间要求;

 

a、modbus协议中规定:至少3.5个字符传输时间的停顿间隔时间标志了消息的结束。

例如:9600bps,8数据位,无奇偶校验,1起始位,1停止位。9600bps代表在9600的波特率下,每1秒可以传输9600位,那么每一位的传输时间是1/9600。1个字符=8数据位,加上1起始位,1停止位,则每传输一个字符需要10位,3.5个字符的时间为3.5*10*(1/9600)= 35 / 9600 = 0.0036S = 0.35ms

b、超时时间的设置主要取决于总线上反应最慢的节点的反应时间,另外,也要考虑主节点轮询所有的节点需要的时间。假设总线上所有的从节点里面,反应最慢的从节点的反应时间是100ms,超时时间设置在这个基础上加上一个完整数据包收发的长度就差不多了。最长的数据包一般是256字节,在11位9600BPS下这大概需要300ms,那么超时时间比400ms长一些就可以,比如说500ms。当然,再长一点也可以,比如说1秒钟,但太长影响总的轮询时间,太短可能会有的从节点反应慢,来不及响应。

经过排查,发现代码设置满足modbus时间要求。

4、受到干扰

如果数据的某个位出错,则可能是通信链路有问题,可能是受到干扰。

5、不满足485通讯时间

传输速率太高,一般485通讯主机切换节点的时候需要空闲一定的时间以便与待通讯的节点保持数据帧同步

经过核查传感器数据手册,发现部分传感器前后读取数据至少满足1000ms,所以在代码轮询读取传感器中添加延时1000ms,经过测试发现所有传感器均可正常读取数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rookie Linux

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值