RS422主從問題和一主多從問題?

網上老是看到RS422 RS485 RS232主從說法,有點疑問(網上搜了下,沒有完全搞清楚):

1. RS422點對點(如A和B)通信時候,有主從一說么?我的理解,因為是全雙工,所以A和B各自可以在任何時候,願意向對方發送數據就發送(每次發送就要發送一個byte),沒有主從一說

2. RS422一主多從(如C主D E F為從)的時候,這個主從怎麼分出來的?C D E F不都是掛在匯流排上,硬體電路上是不是分不出主從的啊,那這個主從是怎麼回事?

3. 另外RS422一主多從(如C主D E F為從)的時候,當D E F從設備同時向主設備A發數據,RS422又沒有仲裁機制,怎麼控制?

4. 串口422 485 232不是指電氣標準么,那網上老是看到422 485 232的通信協議、標準,這協議、標準指的是啥?


大家都知道ISO國際標準化組織。由於計算機技術的大發展,ISO特地為計算機數據交換和通信建立了一個模型,這個模型正好就是ISO的字母反過來用,也即OSI模型。

我們來看OSI模型的結構:

它的第一層叫做物理層,第二層叫做數據鏈路層,第三層叫做網路層。從第一層到第三層合併叫做現場匯流排。

第一層包括通信介面、通信方式以及位元組定義和主站、從站的定義。

在這裡,通信介面包括了RS232RS485和RS422,並且規定了各個插腳的定義和電平規則,以及介面的外形尺寸。

當第一層建立好後,它為第二層系統打好了基礎,於是第二層也就具備了工作條件。

如果說第一層是為數據交換建立了硬體規則,那麼第二層就利用第一層提供的位元組來書寫通信語句。通信語句在數據鏈路層被稱為通信幀。

OSI模型為通信幀結構做了詳細的規定。

由於通信幀涉及到命令格式,以及數據的存儲空間。因此把這些命令格式與數據存儲空間合併後叫做數據定義表,或者叫做通信協議。

顯然,不同的設備,它們的數據存儲空間不一樣,定義也不一樣,所以每一種設備都有自己獨特的通信協議。

第三層叫做網路層。網路層中傳遞的是用幀寫成的文本。由於文本傳遞時需要拆開成數據包,並且發送時有路徑問題,因此網路層的設備包括網關、網橋,還有路由器等等。

我對MODBUS數據通信寫過文章,如下:

低壓電氣和低壓電器技術之19——淺談低壓配電網的數據交換技術(1),

低壓電氣和低壓電器技術之19——淺談低壓配電網的數據交換技術(2),

低壓電氣和低壓電器技術之19——淺談低壓配電網的數據交換技術(3),

低壓電氣和低壓電器技術之19——淺談低壓配電網的數據交換技術(4),

低壓電氣和低壓電器技術之19——淺談低壓配電網的數據交換技術(5)。

題主問題的進一步詳細解釋在文章中都有,請題主參考這些文章。


張老 @Patrick Zhang 是一位出色的電力工程師,但我認為您的解釋對題主來說意義不大,不過題主的理論知識也是少的可憐。

硬體結構和握手規則張老已經講了,不再贅述,下面我來逐條回答一下題主的疑問:

RS422點對點(如A和B)通信時候,有主從一說么?我的理解,因為是全雙工,所以A和B各自可以在任何時候,願意向對方發送數據就發送(每次發送就要發送一個byte),沒有主從一說

你說對了,事實上,不管是全雙工還是半雙工,只要願意,所有的站都可以發送數據。

RS422 P2P通訊還有一個專有名詞叫N:N通訊,在這種通訊形式里,系統通過無順序協議或對等協議等通訊協議進行通訊,事實上任何通訊都需要一個通訊協議,包括MODBUS(最常用最方便的免費協議),CCLINK,PROFIBUS,CANOPEN,TCP/IP,PROFINET 等等 ,這些名詞既是協議又是標準,不過對於RS232/285/422 常用的還是無順序協議,MODBUS ,或者專用協議。

主從一說並不只體現在硬體上,N:N,P2P通訊不分主從,你是對的,但不是表面看的願意發就發,這涉及到硬體和軟體握手問題,請參考張老,簡單來說他硬體需要一個類似打電話的套路,來確認是否有通訊線路故障。不過這種握手比TCP網路要弱。

如果任何一個站發出了信息,另一個站馬上就會收到信息,接到以二進位編碼的信息後,另一個站會按協議讀取並對內容進行反饋,這個我們等會講。

回答你的疑問,可以發送,但要看另一個站接不接受。

RS422一主多從(如C主D E F為從)的時候,這個主從怎麼分出來的?C D E F不都是掛在匯流排上,硬體電路上是不是分不出主從的啊,那這個主從是怎麼回事?

硬體上是可以分出主從的,一般他們長得不像(開玩笑),所謂的一主多從,是指從站和多個從站構成的系統,從名稱就可以看出,他們不是對等的,主站和從站不能互換,不僅是因為他們往往從物理硬體上是不同的,而且因為他們的功能不一樣,主站(0號站)有廣播功能,從站只能反饋主站的查詢,執行主站的命令。

如你所說,主站從站都掛在匯流排上,硬體接線上是不能分辨主從的,那麼這個主從從哪裡分辨呢,根本答案是硬體元件,易於理解的答案是站號設置,主站一直是0號站,從站從其參數(如有)設置為1~32或更多站。如一個匯流排上有兩個主站模塊,又沒有設為N:N鏈接,一般是不能工作的,同樣的有兩個1站也不能正常工作。

另外RS422一主多從(如C主D E F為從)的時候,當D E F從設備同時向主設備A發數據,RS422又沒有仲裁機制,怎麼控制?

這個問題的答案是他們不會也不可以同時向主設備(主站)發送數據,RS422有兩種工作方式,一種叫輪詢,一種叫廣播。

所謂輪詢是指,主站以二進位編碼的形式向外發送包含從站地址的信息,從站先接受信息,解碼後讀取內容,如果發現地址與自己一樣,則回應相應的信息,這個信息給主站後,主站同樣解碼解讀,並從其中的數據中找到自己要的信息。或者從站讀出給自己的信息後執行相應的信息,並返回結果。

所謂廣播是指,主站以沒有站號的信息發送給所有的從站,所有的從站接收信息後執行,不返回信息。

如果所有的從站一起發送信息給主站,主站也不知道該怎麼辦,這種情況叫信息風暴。

串口422 485 232不是指電氣標準么,那網上老是看到422 485 232的通信協議、標準,這協議、標準指的是啥?

422,485,232是介面標準,沒有通訊協議叫422,通訊協議是指示信息的格式,所有的信息必須符合這個格式才會被主站從站識別和讀取,否則是二進位數而已。

以MODBUS RTU這個協議為例,符合格式的二進位信息叫做報文,其格式大致為報頭:指令:寄存器目標:數量:數據內容:校驗碼。

其中報頭一般是從站地址,指令包含寄存器讀取,寫入,線路校驗等等,校驗碼是保證信息無誤的CRC校驗格式,即在此之前的數據的數學運算結果。

從主站發出的報文被所有的從站接受。從從站返回的數據給主站。

如果你用的是RS485兩線制,還會遇到這樣的問題,主站發送的數據被自己接受了,怎麼識別出來呢?那麼只有符合接受格式的信息才會被解讀,這樣保證了數據的準確性。

如果你深入了解,還會遇到從站只有發送的情況,怎麼辦呢?

課後思考題


用通信內容來判斷主從,從機不能主動通信,必須主機請求,從機響應這樣。


上面 @Patrick Zhang 和 @Su Limit在理論上 解釋得已經非常好了。

我從工程角度做點補充。

1: 嚴格地說,RS232/422/485是物理介面電平規範,是不能叫做「通訊協議」的。以232/422/485為物理層,上層鏈路層既可以支持Modbus-RTU,Modbus-ASCII,也可以是廠商的私有協議。

實際工作中的確常碰到很多人說某設備的通信協議是232/485協議,這只是外行的一種誤解罷了。

通信協議應該是能描述具體的通信內容的,例如Modbus協議的寄存器註冊表,SNMP協議的Mib庫,這才是開發人員需要的乾貨。

2:以Modbus設備為例,工程實踐中,不管是485還是422的物理介面,幾乎都是一主多從的匯流排方線,主站輪詢的通訊方式。 主從站的地位在軟體設置上就註定了。

在這種模式下,只允許主站按照設定好的輪詢間隔、統一的通訊參數向各從站下發查詢幀報文,報文以廣播的方式在整個匯流排上傳播,各從站收到查詢報文後會主動檢查slave id是否是自己的id,正確的從站才會有機會發出回復幀報文,id不符的從站則會丟棄查詢報文,並不作回應。

因此,實際上並不會出現從站同時,或者主動向主站發送報文的情況。


推薦閱讀:

TAG:硬體 | 串口通信 | rs232 | 通信協議 | 通用串列匯流排 |