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

modbus rtu 485多节点设备调试经验,第1张

现象描述:

气象站添加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,经过测试发现所有传感器均可正常读取数据

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/757688.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-01
下一篇 2022-05-01

发表评论

登录后才能评论

评论列表(0条)

保存