繁体   English   中英

自定义RS485协议

[英]Custom RS485 Protocols

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

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

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

也许我在你的问题中遗漏了一些东西,但你不能只是写主人,这样如果在允许的时间内没有看到设备的响应,它会重新轮询该设备吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM