我正在为分布式系统中的串行通信编写一个简单的多点RS485协议。我正在使用一个可寻址的模型,从属设备被给予20ms的窗口来响应。主uC轮询连接的设备进行更新,并相应地作出响应。我采用了校验和并采取必要的超限预防措施,以确保连接的设备不会响应格式错误的消息。这种方法在大约99%的情况下证明是有效的,但是如果在通信会话期间引入新设备,我将丢失数据包。只要在极短的时间内插入新的“热”设备,就会对从设备监控的信号产生负面影响。我在工程的软件方面,但我怎么可以缓解这种情况,而不尝试重新创建TCP?我们使用轮询模式,因为它速度很快,能够很好地完成我们的应用程序,不需要RTOS功能。我在每个cpu上都有丰富的周期,用基本的术语来思考。自定义RS485协议
4
A
回答
8
通过RS485发送数据包不是可靠的通信。无论如何,你将不得不处理丢失的数据包。当然,你不必重新创建TCP。但是您将不得不通过超时监控和序列号来检测丢失的数据包。在简单的应用程序中,这可以在应用程序级完成,这使您远离TCP的复杂性。当您的轮询模型丢弃所有具有无效校验和的数据包时,可能会以较少的努力进行整合。
如果你想检查碰撞,可能是由热插拔或行为不当造成的,可能会有一些改进。有些硬件允许读回自己的传输。如果发现已发送数据和接收数据之间存在差异,则可以假定发生冲突并重复数据包。这也将需要一种序列编号。
1
也许我在你的问题中遗漏了一些东西,但是你能不能写出主控,这样如果在允许的时间内没有从设备看到响应,它会重新轮询该设备?
相关问题
- 1. 定义自定义协议
- 2. 自定义协议
- 3. 自定义协议支持
- 4. Pyside qwebview自定义协议
- 5. RS485:简单可靠的协议
- 6. 无法找到协议声明自定义协议委托iphone
- 7. wp7中的自定义协议
- 8. 自定义协议中的XMPP错误
- 9. 创建自定义协议(Windows 7)
- 10. 如何过滤自定义协议包?
- 11. 如何处理自定义协议?
- 12. 的Android Jwebsocket自定义协议
- 13. BlackBerry - 处理自定义协议
- 14. 在Javascript中调用自定义协议
- 15. SCIM协议中的自定义资源
- 16. 使用WebRequest注册自定义协议
- 17. 自定义协议斯威夫特
- 18. 如何实现自定义协议
- 19. Windows Phone 7自定义协议处理
- 20. PDFDocument不使用自定义URL协议
- 21. 自定义协议不起作用
- 22. Torrent文件协议 - 自定义字段
- 23. QtWebkit:如何处理自定义协议
- 24. 自定义UITableViewCell不符合协议UITableViewDataSource?
- 25. NSNotificationCenter vs自定义观察者协议
- 26. 自定义协议不发送消息
- 27. 未找到协议定义
- 28. 重复协议定义
- 29. 在协议中定义@property
- 30. 在协议中的自定义类定义的错误
优秀的建议,每个设备都能够听取它自己的传输。热插头肯定给我一点悲伤。这个解决方案非常简单,我自己没有想到它,我感到有点无聊。谢谢! – Nate 2010-08-31 14:30:43