2013-11-21 65 views
0

我正在使用AVR微控制器設計一個帶有RS-485網絡的系統。我完成了大部分的部分。我不明白的是在多臺設備試圖同時通信的情況下如何識別該線路是否傳輸清晰。我設計的設備都是從設備。RS-485網絡上的從站設備

我無法找到有關此主題的文檔。如果有人能給我一些解釋並提供一些參考手冊,那將是非常棒的。

問候

回答

0

通過提

我設計的設備都是從設備

你的建議在總線上的主。如果是真的,則不需要對總線的異步訪問,因爲這種方案中的主設備是唯一可以啓動通信的設備,並且應該以主設備知道何時可以傳輸的方式來設計協議(例如,通過使用超時進行應答和奴隸只響應請求)。

您應該檢查是否需要異步訪問總線。

  • 不需要異步訪問總線simplyfies了很多東西,你可以依靠像MODBUS RTU標準通信協議。您可以找到至少幾個不同的AVR實現示例(例如Arduino庫)。

    • 使用modbus來實現從站間的通信有點複雜,因爲通過設計這樣的通信必須由主站來協調。
  • 要求異步訪問(任何設備可以發起通信)是很難做到的,但有解決方案。不幸的是,我還沒有找到任何開源。

    • 有一個rs485總線的CAN前身,這是異步訪問概念的工業實現:J1708。如果你想到異步通信,你可以從這裏開始。總線。

瑣碎的方法是檢查串行輸入緩衝器,等待一個給定的超時(時間越長,低優先級的設備已),再次檢查。如果是空傳輸並等待確認。如果傳輸失敗等待(再次給定設備的優先級較低),並嘗試重新傳輸。 這聽起來並不容易。專業的方法是讀回發送的內容並在發送時檢測衝突(以避免使用超時),甚至更好 - 設計總線,以避免這種衝突對更高優先級的傳輸設備產生影響 - 這就是CAN的工作原理。

我見過的其他業餘方式是使用專用線路發送設備拉下來和其他探測器,但當公共汽車很長時仍存在競態條件(需要附加超時和確認)。

設計令牌協議也是一個選項(但很複雜,仍然需要協調)。你可能會發現這個有用的blog post - 特別是評論顯示有多少問題需要解決。

如果您決定異步訪問是必須的,我會建議使用CAN。它會爲您節省大量的工作,並且幾乎沒有開放源代碼的RS-485異步通信實現,這可能表明主題很難或不需要努力(有CAN)。