楼主最近还看过
485总线跑MODBUS协议时,由于协议是一问一答的形式,AB输出的是差分信号,问答都占用AB线,当有另一个主机加入后,如果没有协调机制,必然存在两个主机同时占用总线的情况,这样就会导致通信冲突,如果通信要求不高,可以采用设定无限重试次数,两个主机采用不同的超时时间来勉强用用。如果实时性要求高的话,那根本就无法使用,我现在的这个设备上主要为人机界面,为了提高使用体验,就对这个实时性有一定的要求。
当时对以上没有很深的认识,因此想当然的买了485集线器,结果就出现了上述的情况,根本无法正常通信,或许降低主机的询问频率,提高通信速率,两主机设置不同的超时时间,设置无限次的重试次数,勉强可以在实时性要求不高的场合使用。但是却不适用于我的使用,我们的要求有很好的实时性。最好完全没有通信异常的情况出现。
后来找了大神问了一下,大神直接就说想都不要想,理论上就不支持。想想也是。可是项目也要做下去,无奈在工控网上面留贴。然后到BAIDU,GOOGle,淘宝,果然在淘宝上找到一个东西。找店家把出现的问题和疑问都给倒了出来,店家一一解答。下面整理了一下。
普通的集线器采用的是硬件切换,侦测到一路上有信号时,会将信号切到其它路上。当其中一条线路上有信号时,其它路要处于接收状态,更高级一点的可以侦测到从设备是否故障(一般是短路故障),如果有一路持续拉低信号,集线器会作废此信号,不再切到其它路上面。对于MODBUS协议的485来说,集线器不能很好的工作,原因就是上面提到的,集线器在接收到一路有信号后,会把信号切到其他路,当总线上存在多主机时,必然导致后到信号的丢失。所以集线器不可行。
为了实现多主机功能,必然要引入协调机制。将两主机信号进行缓存协调,对主机信号进行排队处理。类似于铁道的多路列车分时占用铁轨,而且不撞车。
店家讲到这里,我就听明白了,果断买来试用。第二天到货,一早就拿来试,居然就这样解决了。周六周日,又跑了2天,周一一看,没有通信错误,真是太高兴了。
有同样问题的控友们,可以去看看