RS485怎么防止并发的情况?
从机要上传数据,怎么防止多个从机数据碰撞? 参考10Mbps半双工以太网的做法,即CSMA/CD机制:发前先听,空闲发送,边发边收,冲突停止,随机延时再重发。 轮训召唤避免同时发 常规的做法是采用主从轮询的方式,这个方式弊端是从机比较多的情况下轮询周期过长。2楼的方法也可行,通讯略微复杂一点,虽然无法完全避免冲突但一般情况下够用了。
根据自己的应用特点来决定。 MODBUS都是主从轮训收发数据,不会出现冲突的。 指定一个主节点(如上位机)和多个从节点(如传感器、执行器)。主节点负责发起通信,从节点仅在收到主节点的请求后才能发送数据。 定义一个令牌(Token),只有持有令牌的节点才能发送数据。令牌在节点之间依次传递,每个节点在收到令牌后,可以在规定的时间内发送数据,然后立即将令牌传递给下一个节点。 需要实现令牌的传递和回收机制,增加了协议的复杂性。 节点在发送数据前先监听总线是否空闲。如果总线空闲,节点开始发送数据,并在发送过程中持续监听总线,检测是否有冲突发生。 如果检测到冲突,节点立即停止发送,并等待一个随机时间后重新尝试。适用于节点数量较多、通信量较大的网络。 RS485是半双工通信,无法同时收发,因此标准的CSMA/CD在RS485中直接应用存在困难,需结合其他机制(如超时重发)实现。 节点在发送数据后,等待接收方返回确认帧(ACK)。如果在规定时间内未收到ACK,节点认为发送失败,并等待一个随机时间后重新发送。 随机时间的设置需合理,避免多个节点同时重发导致再次冲突。 使用RTS/CTS等硬件信号控制数据发送,确保总线空闲时才发送数据。为每个节点分配唯一的地址,通过地址识别避免冲突。 采用具备自动收发控制、冲突检测与处理功能的专用通信控制器 令牌的传递和回收机制 学到了
页:
[1]