none
數個MCU電路與一台電腦連接 RRS feed

  • 問題

  • 我目前打算用RS-232,但一般RS-232只支援一對一,不支援一對多,我就想到如果先不管電腦,只有數個MCU之間用UART來通訊,可以用第9個bit來判斷此時傳的是位址還是資料,這樣就能達到半雙工的一對多通訊了。但一加上電腦我就不會了,因為電腦RS-232和MCU的UART不一樣的地方就是,VB好像沒有第9個bit這種東西……。

    我現在的想法是,如果我VB一次固定發送10個bytes,就算有些資料不到10個bytes,也發送10個,不是資料的那些byte在MCU程式裡面會自動從指令(第二個byte)去判斷這個指令後面會接多少資料,然後把多餘的忽略。沒被呼叫的那些MCU(第一個byte,就是位址的byte不符合的),會開始計數10個bytes,直到第11個byte才會再判斷與自己所屬的位址相不相符。這樣不需要第9個bit這種東西也能一對多通訊了。

    請問以上這個想法可不可行?我感覺是可以,但我不確定有什麼重點被我忽略,說不定這樣做有很大的問題,只是我目前還沒實驗,只是先問問看,不知道結果怎麼樣?

    請大家不吝賜教!謝謝!

    2013年4月3日 上午 05:42

解答

  • 不行,如果 PC 的 TX 接了 (MCU1 的RX And MCU2 的RX ) 或許還是可以兩台同時收到。 不過多個 MCU 的  TX 是不能同時接再一起, 你可以自己拿示波器去量,訊號是出不來的,再來你你可能要思考一下軟體通訊的部分,所以才會創造了 485 422,再來 485 跟 422 硬體線路的設計,還有  MCU 不可能同時一起傳資料, 資料會打架,所以才要用輪巡的方式一台一台問。


    每天都在複製貼上,什麼時候才能自己寫出來~~哎.....

    2013年4月3日 上午 09:50
  • 大部分的 Modbus TCP Server 就是用快取...

    ex.

    MCU0 對電腦通訊

    MCU1 ~ n

    MCU0 對 1~n 輪詢後,結果放在 MCU0 快取內,電腦詢問時,若還沒更新,就把 MCU0 目前內容丟出去...

    • 已標示為解答 三山二水 2013年4月9日 上午 08:24
    2013年4月8日 下午 12:20

所有回覆

  • 硬體線路請參考

    rs232,rs485,rs422

    http://tw.myblog.yahoo.com/e-note/article?mid=170

    .net 軟體 的 RS 232 教學 

    http://www.dotblogs.com.tw/billchung/archive/2009/04/12/7981.aspx

    軟體接收 自己定義protocal 一問一答  一台 一台 問,pollingA: 開始 +設備號+命令+DataLength+ Data1...DataN+Checksum+ 結束


    每天都在複製貼上,什麼時候才能自己寫出來~~哎.....

    2013年4月3日 上午 06:40
  • RS-232我會,一對一的我也會,我只是沒做過用RS-232一對多,不確定能不能以電腦一對多個MCU,因為網路上大家都說RS-232不支援一對多,但我覺得如果通訊雙方的傳輸–接收能配合得當,其實就跟I2C一樣可以一對多,只是想歸想,心裡還不是很確定,所以才來這裡發問。

    另外,在硬體方面,所有的MCU電路中,只有其中一個有MAX232,其它的MCU都直接用多芯線分別把RX和TX接在一起,這樣電腦傳輸訊號到MCUs時,經過一個MAX232後,所有MCU都能收到訊號,而任何一顆MCU傳輸訊號時,電腦也都能接收到,而且只需要一條RS-232的線。

    還是要謝謝您的回答!


    2013年4月3日 上午 09:35
  • 不行,如果 PC 的 TX 接了 (MCU1 的RX And MCU2 的RX ) 或許還是可以兩台同時收到。 不過多個 MCU 的  TX 是不能同時接再一起, 你可以自己拿示波器去量,訊號是出不來的,再來你你可能要思考一下軟體通訊的部分,所以才會創造了 485 422,再來 485 跟 422 硬體線路的設計,還有  MCU 不可能同時一起傳資料, 資料會打架,所以才要用輪巡的方式一台一台問。


    每天都在複製貼上,什麼時候才能自己寫出來~~哎.....

    2013年4月3日 上午 09:50
  • 多加一個 MCU 跟電腦通訊,透過此 MCU 跟其他 MCU 通訊。

    2013年4月3日 下午 12:21
  • 我也知道把TX接在一起的話,如果兩顆MCU同時要傳資料,訊號會打架,所以才想說用判斷位址的方式來個別呼叫,就像8051的串列通訊的模式2、模式3就可以把一顆8051和其他數顆8051接在一起,主8051的TX接其他從8051的RX,RX接其他8051的TX,所以那些當slave的8051,其實它們的TX也都是接在一起,RX也是接在一起。

    而且可以確定的是,8051的串列通訊在模式2及模式3的時候,的確是可以做一對多通訊的,和模式1的差別只是有一個bit9做位址或資料的判別,訊號也沒有因為TX接在一起而打架。

    而且有些MCU可以在暫存器裡面設定傳送致能/除能,也就是說,理論上,可以從程式做到:當沒有接收到VB端對自己的位址呼叫的時候,傳送是disable的。

    如果真的不行,我可能就會把電腦用RS-232接其中一顆MCU,然後再用I2C把這顆MCU和其他MCU接在一起。

    我是沒用過485及422,不過我應該會嘗試了解一下485及422,以後可能真的會用到,謝謝您的回答!

    2013年4月8日 上午 01:35
  • 這個方法我也有想過,應該就是用其中一顆MCU和VB做RS-232的連接,然後這顆MCU再用I2C與其他MCU連接,因為距離沒有很長,所以I2C應該還推得動。
    2013年4月8日 上午 01:37
  • 你應該是想要用rs-232去控制儀器設備吧

    所以你只要去買顆有多組rs-232的mcu就行了

    要是要控制多顆MCU是要用I2C

    應該沒有人會選擇RS-232來做多顆mcu的溝通

    還有一個方法是用繼電器做開關

    一次只會有一組去連接RX TX

    方法太多了 自己去想一次就有了

    2013年4月8日 上午 05:24
  • 我後來考慮了一下,想說試試看RS-485…。

    我可能會用USB轉RS-485的轉接線,然後電路板端用一顆MAX485 IC來做buffer,這樣應該就可以用那兩條差動的資料線連接所有的電路板了(還有一條共同的地線)。

    我想請問一下,RS-485和RS-232在VB和MCU裡面的寫法應該一樣吧?我今天找了一下資料,好像就是硬體不一樣而已,程式的部分,包括VB與MCU裡面串列通訊的功能應該都沒有影響是吧?(假設我原本的程式就沒有把RS-232寫成全雙工,訊號的接收與傳送沒有同時發生)


    • 已編輯 三山二水 2013年4月8日 上午 07:46 補充一句話
    2013年4月8日 上午 07:45
  • 大部分的 Modbus TCP Server 就是用快取...

    ex.

    MCU0 對電腦通訊

    MCU1 ~ n

    MCU0 對 1~n 輪詢後,結果放在 MCU0 快取內,電腦詢問時,若還沒更新,就把 MCU0 目前內容丟出去...

    • 已標示為解答 三山二水 2013年4月9日 上午 08:24
    2013年4月8日 下午 12:20
  • RS232之Tx接腳不是三態 所以不能直接將多個Tx接在一起
    (多個Rx可以接在一起)
    如果你的MCU有RS485 就用兩線式半雙工接法 這樣就可多對多通訊 這才是正統接法

    RS485和RS232  在軟體端是一樣的

    有一個技巧用RS232連接多個MCU裝置: 仿照token-ring
    將每個MCU RS232之Tx接到下一個裝置之Rx 最後一個裝置之Tx接回第一個裝置之Rx 呈環狀
    要在每個MCU寫軟體 若收到不是傳給本裝置之資料 要幫忙傳遞給下一裝置
    缺點是 任一裝置故障 整個網路就停擺
    2013年4月22日 下午 04:57