在RS485的modbus应用中,广播仅仅用于有限的几个场景。
1. 不知道从设备的网络地址,想要查一下。这种情况下,都是RS485总线上只连接一台从设备,响应的设备只能是这台从设备,就不存在冲突的问题。这是物理连接决定了不会冲突。
2. 想查整个网络上有没有一个事件发生,用广播问一下,有事件发生的从机回答,没事件发生的从机不回答。这种情况如果多于一个从机发生事件,那么也会存在冲突。但主机可以通过是否有响应来知道事件已经发生了,当然是哪个从机发生的,那就只能每个从机都轮询一次了。
3. 广播是不可能用于正常的通讯的,这是原则问题。所以不要梦想着在多从机的网络中用广播实现正常通讯,这是路走错了。
软件碰撞检测与重传
在这种模式下,每个从设备在发送数据之前会先检测总线上是否有其他从设备在发送数据,如果检测到有冲突,则会停止发送并等待一段随机的时间后重新发送。由于需要等待死区时间,该方式会降低总线通讯效率。
硬件冲突检测
硬件冲突检测可以通过外接芯片或者集成在芯片内部实现。芯片内置的冲突检测功能可以检测总线上是否出现碰撞,并且在碰撞发生时自动停止发送数据。此外,芯片还提供了自动重传功能,重传次数可根据实际需要进行设置。
在应用场景中,为了充分避免数据冲突,通常会将以上两种方法结合使用。首先使用硬件冲突检测功能,如果检测到冲突,则再使用软件重传,从而有效提高总线通讯效率
然后我又问了硬件方式:
硬件冲突检测需要使用专用芯片实现。该芯片通常称为“485收发器”。它能够检测到总线上的信号是否存在碰撞,并在检测到碰撞后自动停止数据发送。
485收发器一般包含了控制电路、驱动电路和接收电路。其中控制电路用于控制数据发送和接收,驱动电路用于将数据转换成差分信号发送到总线上,接收电路用于接收总线上传输的差分信号并将其转换成数据信号。
硬件冲突检测是通过驱动电路和接收电路配合完成的。当一个从设备发送数据时,驱动电路会将数据转换成差分信号发送到总线上,同时接收电路也会开始接收总线上传输的信号。如果在发送过程中检测到了差分信号与接收信号不相符,则说明发生了碰撞,此时驱动电路会停止发送数据并通过控制电路通知主机或从机出现了碰撞情况。
此外,485收发器还可以配置自动重传功能。当检测到总线上出现碰撞时,芯片会自动启动重传操作,这可以有效避免因碰撞导致数据丢失的问题。
总之,硬件冲突检测是一种可靠的避免碰撞问题的方法,它能够在硬件层面上实现数据传输的可靠性。
好像现在一般都有485收发器吧,所以就不需要软件了。