2010-08-31 290 views
4

我正在爲分佈式系統中的串行通信編寫一個簡單的多點RS485協議。我正在使用一個可尋址的模型,從屬設備被給予20ms的窗口來響應。主uC輪詢連接的設備進行更新,並相應地作出響應。我採用了校驗和並採取必要的超限預防措施,以確保連接的設備不會響應格式錯誤的消息。這種方法在大約99%的情況下證明是有效的,但是如果在通信會話期間引入新設備,我將丟失數據包。只要在極短的時間內插入新的「熱」設備,就會對從設備監控的信號產生負面影響。我在工程的軟件方面,但我怎麼可以緩解這種情況,而不嘗試重新創建TCP?我們使用輪詢模式,因爲它速度很快,能夠很好地完成我們的應用程序,不需要RTOS功能。我在每個cpu上都有豐富的週期,用基本的術語來思考。自定義RS485協議

回答

8

通過RS485發送數據包不是可靠的通信。無論如何,你將不得不處理丟失的數據包。當然,你不必重新創建TCP。但是您將不得不通過超時監控和序列號來檢測丟失的數據包。在簡單的應用程序中,這可以在應用程序級完成,這使您遠離TCP的複雜性。當您的輪詢模型丟棄所有具有無效校驗和的數據包時,可能會以較少的努力進行整合。

如果你想檢查碰撞,可能是由熱插拔或行爲不當造成的,可能會有一些改進。有些硬件允許讀回自己的傳輸。如果發現已發送數據和接收數據之間存在差異,則可以假定發生衝突並重複數據包。這也將需要一種序列編號。

+0

優秀的建議,每個設備都能夠聽取它自己的傳輸。熱插頭肯定給我一點悲傷。這個解決方案非常簡單,我自己沒有想到它,我感到有點無聊。謝謝! – Nate 2010-08-31 14:30:43

1

也許我在你的問題中遺漏了一些東西,但是你能不能寫出主控,這樣如果在允許的時間內沒有從設備看到響應,它會重新輪詢該設備?