自定义RS485协议

Nat*_*ate 4 c embedded irq rs485

我正在为分布式系统中的串行通信编写一个简单的多点RS485协议.我正在使用一个可寻址的模型,其中从设备被给予一个20ms的窗口来响应.主uC轮询连接的设备以​​进行更新,并相应地做出响应.我使用了校验和并采取必要的超限预防措施,以确保连接的设备不会响应格式错误的消息.事实证明,这种方法在大约99%的情况下都有效,但如果在通信会话期间引入了新设备,则会丢失数据包.插入新设备"热"将对从设备监控的信号产生负面影响,如果只是在极短的时间内.我是工程的软件方面,但是如何在不尝试重新创建TCP的情况下缓解这种情况呢?我们使用轮询模型,因为它很快并且对我们的应用程序来说工作得很好,不需要RTOS功能.我在每个cpu上有很多周期,用基本术语来思考.

har*_*per 8

通过RS485发送数据包不是可靠的通信.无论如何,你将不得不处理丢失的数据包.当然,您不必重新发明TCP.但是你必须通过超时监控和序列号来检测丢失的数据包.在简单的应用程序中,这可以在应用程序级别完成,这使您远离TCP的复杂性.当您的轮询模型丢弃具有无效校验和的所有数据包时,可能会以较少的工作量进行集成.

如果您想检查可能由热插拔或行为不当设备引起的碰撞,可能会有一些改进.某些硬件允许回读自己的传输.如果发现发送数据和接收数据之间存在差异,则可以假设发生冲突并重复发送数据包.这还需要一种序列编号.