MODBUS协议是严格的主问从答机制,多从站只能采集轮询的方式,主站给1号从站发请求指令,1号从站响应数据,给2号从站发采集指令,2号从站回复,依此类推。485总线上如果有两个或更多设备同时发数据,就会在485总线上撞车,导致数据错误,大家都传输不了。有些使用场景,485总线上需要挂几十个从站设备,就会出现采集周期长,数据更新缓慢,再加上有些从机偶尔掉线,导致数据更新周期更加长,那么怎么才能提高MODBUS 485有线的通信效率呢?
1、 提高串口波特率。比如我们常用的是9600BPS,串口波特率最快能到115200BPS,我们把串口速率提高了,就像加快了说话的速度,讲同样的字数,效率就会提高了。需要注意的是485总线如果传输距离比较长,速率太高,带载能力就会下降,可能就会有部分或全部的485设备通信失败。
2、 降低故障重试次数,减小超时等待时间。当有从机掉线,主站的请求指令发出后,从站没有数据回复,主站会按设置好的重试次数来进行反复查询,而这个查询的次数有些是可以设置的,如果原来是三次或更多,可以把它设置成1次,加上原来轮询,当查询从站两次没有回复时,就把它置为故障状态,这样可以减少在宕机的从站上浪费的时间。设置一个合理的尽量短的超时等待时间,也可以减少在宕机的从站上浪费时间。
3、 使用串口采集器,可以把MODBUS 485总线的有线通信效率提高10-20倍。它上行有一条485总线,下行有三条485总线,下行的三条485总线,不停的并行采集多个485设备的数据,映射到本地的存储器中,主站通过上行的485总线,只需要采集串口采集器这一台设备的变量,就完成了采集20到30个从站的数据,这样大节省了轮询多个从站的查询指令和等待时间。


当遇到从站掉线,串口采集器会按照设置的重试次数,查询掉线从机,重试后依然没有回复,串口采集器会把这台485设备置为通讯故障,然后每4轮只重试一次这个从站,当它通讯正常时,立即恢复正常采集流程。
串口采集器支持采集和控制,控制优先。当没有控制指令时,三条总线采集485从站数据,当有控制指令需求时,对应总线会暂停采集并执行控制指令,当前总线控制全部完成后从暂停处继续采集数据。
电路中的看门狗,到底能起到啥作用呢?这条狗可以起到防止单片机程序跑飞或死机,既然是狗那就得喂,它其实就是一个定时器电路,您可以理解成是自动复位。一个输入,就是定期喂狗,还有一个输出到MCU的RST管脚,我们先预设一个时间,这个时间设多长呢,要比单片机程序循环一圈的时间要长一点,比如程序运行一圈需要的时间是110MS,我们可以设置看门狗定时是128MS.定时器计数到128秒时,看门狗就触发单片机重启,当程序运行一圈,不等它触发复位,就先喂狗,就让程序从零开始正常运行。这样就不会触发复位。假如不喂狗,超过128MS,单片机就会复位一次。这样看门狗就起到了防止程序进入死循环的状态。你学会了吗
楼主最近还看过


客服
小程序
公众号