4

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

4

2 回答 2

8

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

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

于 2010-08-31T05:51:05.537 回答
1

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

于 2010-08-31T06:10:13.983 回答