2017-07-09 377 views
0

我有一臺電腦(即用作服務器)和幾個板與Atmega微控制器是這樣的:廣播獲取數據在UART

computer and board

將計算機連接到UART & RS485(板帶USBRS485轉換器)(我有導致我不能採用MODBUS)的限制。我想從廣播服務器通過總線消息並從每個板的取ID(板ID是4位)。

當單板收到廣播消息並嘗試發送自己的ID並且服務器收到一些僞造的ID時,我認爲它與所有單板想發送一次中的數據時碰撞問題有關。

之後我搜索一下這個問題找到了一種方法是把一個不斷在每個省一個特殊的延遲發送數據,並在董事會收到廣播消息與延遲發送ID板......這樣它的工作很好,我沒有看到碰撞,但有一些問題:

  1. 可能是2板的延遲數相同。
  2. 用於電路板的小型計數的好方法。
  3. 額外的過程要當上巴士安裝板。

有人知道這個問題,可以幫助我如何解決這個問題更好的解決方案

+2

具有共享總線上的多個站點同時回答廣播是一個壞主意。客戶端主板上是否有一些邏輯嘗試檢測總線是否已被佔用,然後嘗試訪問它作爲答案(這將是CSMA/CD的「CSMA」部分) – tofro

+0

*「...和服務器收到一些虛假的ID「* - 聽起來像你需要實現更好的消息完整性檢查。 *「但總的來說,它工作得很好」* - 然後你的期望很低,你應該完成,對嗎? – sawdust

+0

@sawdust _and服務器接收一些假ID_:我覺得在發現假身份證的錯誤,但我的問題是**如何防止客戶端發送假身份證** ..._但作爲整體工作fine_是的,它的工作,但有我有問題說問題。主要問題是_May被2板的延遲數same._,並導致衝突再次... –

回答

1

您在提到的問題中提到了Modbus,儘管您的其他一些陳述的事實似乎偏離了那裏(如4位設備號,而Modbus只有1-255)。此外,Modbus 不支持支持對廣播消息的響應。因此我懷疑你實際使用的是Modbus。

你可以使用(這是經典的MA網絡中使用)將是一個方案:

  1. 一旦廣播接收,具有根據其站上的客戶端掃描總線爲一個時間框架響應ID。如果您的客戶端可以看到一個,請等待最短的總線時間(模塊需要根據當前總線時間應答廣播消息的時間+主站確認廣播應答的往返時間)以及基於其模塊的額外時間ID,然後返回(1)
  2. 如果客戶端在指定的時間內看到總線未佔用,請發回廣播答案。
  3. 讓主人以最短的可能消息確認來自此客戶端的廣播響應。
  4. 如果已發送廣播響應客戶端沒有收到正確的ACK,返回到(1)

這不是100%安全的,完全不按Modbus規範,但可以工作。

* is a transmission, - is a "wait" 

**** (Bus master broadcast) 

    --------- station 100 waits 100ms 
    ------------------ station 200 waits 200ms 
      **** Station 100 sends broadcast response 
       ------------------ station 200 sees bus active and waits another 200ms 
       *** master acknowledges broadcast response of 100 
        ------------------ station 200 sees bus active again and waits 200ms from last seen activity 
             **** Station 200 has seen bus quiet for 200ms and sends broadcast response 
              *** master acks brc response of 200 

這可能需要相當多的時間和所需要的等待時間針對的廣播響應和響應的ACK傳輸時間微調,但可以工作,實際上是實現這種方式在很多CSMA/CD的網絡。

+0

哦,對不起,我想我不能在modbus部分中正確解釋我的問題...我不能使用modbus,正如我所說的我使用rs485。 –

+0

Modbus *是*物理RS-485。 – tofro

+0

是的,但使用2 MAX485,但我用commnicuation –

0

它可能會需要更長的時間,但這裏是另一種方式來做到這一點。首先,設計你的協議,以便每個命令都包含(或可以包含)一個ID,而電路板只響應命令的ID。然後,在您的主機上,您將遍歷每個可能的ID並向它們中的每一個發送簡單的命令。如果你得到回覆,你知道有一個有這個ID的董事會。如果在一段時間後你沒有得到迴應,那麼你知道那裏沒有董事會。

+0

但該設備有randome ID ..你知道一個特殊的框架,爲此共振設計protokol? –

+0

我不明白你的評論或問題的重點。 –

+0

你說在你的答案中,我可以發送一個委員會的ID命令..但我不知道他們的身份證..無論如何..有一個ID隨機生成並存儲在..你的接近是好的,當我有ID列表董事會...另一件事是我想**廣播**消息董事會..不單播 –