<menuitem id="3samg"></menuitem>

    1. 加入收藏 在線留言 聯系我們
      關注微信
      手機掃一掃 立刻聯系商家
      全國服務熱線17838383235
      公司新聞
      RS232,RS485,RJ45,以及Modbus協議傻傻分不清楚?看完這篇豁然開朗!
      發布時間: 2024-04-19 12:06 更新時間: 2024-10-30 14:14

      設想直流電源,它的輸出端插座接口有三個管腳,分別是正極、負極和接地極。相應地,負載的插頭也應當有三個管腳與電源側一一對應,這樣才能正確地獲得電能供應。


      注意到這里有三個必須滿足的條件:


      是插頭和插座管腳的形狀、大小和插針直徑及長度必須一一對應,否則無法完成接插操作。這一點規定了插頭組合的物理結構和管腳定義。


      第二是電源的輸出電壓值必須滿足載側的需求值,否則無法完成電參量的要求。這一點決定了插頭組合的電平規范。


      第三是電源的輸出阻抗與負載的輸入阻抗必須匹配,否則不能實現完善的供電。這一點決定了電源的工作性質。


      這三點其實就是電源插頭組合在物理層面上的規范性協議。


      再看通信接口。在有關計算機信息交換的ISO/OSI模型里,物理層是底層(層),它規定了接口的機械外形、接口管腳定義、接口電平和字節格式。


      這里的字節格式,指的是一個字節中有幾個數據位,有幾個起始位/停止位,有幾個奇偶校驗位。一般地,一個字節有8個數據位,1個起始位(停止位),和1個奇偶校驗位。注意:起始位和停止位可以合并。

      再看通信接口和通信網絡的工作制問題。


      當我們拿手機掛電話時,我們發現通信雙方在通話的同時也可以接聽,這叫做全雙工(雙向工作制);如果說話的時候不能聽,而接聽的時候不能說,但任何一方都具有說和聽的能力,也即對講機的通話型式,這叫做半雙工。




      RS422接口和RS232接口是全雙工接口,而RS485則是半雙工接口。

      對于半雙工接口,顯然需要有通信的發起者,所以RS485接口和網絡一定具有主站和若干從站,并且從站的數量也有規定。一般地,從站的數量是32個。


      RS485主站與從站的關系問題,看似只是通信工作制的不同,其本質是通信各方對通信總線控制權的合理分配。


      我們再看總線連接問題:


      我們還是以電源為例。我們可以從電源引出一條主干線,然后再并聯若干個支路并分別送到若干個負載。只要滿足電源的功率要求,顯然這是可行的。


      如果我們用同樣的方法來引出RS485的通信線,是否可行呢?答案是否定的。我們必須從通信主站先引一條線到個通信子站,再從子站引第二條線到第二子站,如此循環直到后一個子站。在通信線的終端,還要配一個終端電阻。在這條通信線路上,任何一點如果發生斷路,則后續的通信鏈路上的通信也就斷了。這種接線方法形象地被稱為菊花瓣連接方法,或者鏈形連接方法,而電源的接線方法則被稱為星形連接方法。






      我們發現,從電氣接線來看,鏈路是并聯的。但從通信來看,鏈路是菊花瓣的,屬于一個接一個的有秩序的連接。


      現在我們可以總結一下了:


      RS485的總線網絡接線方式必須是鏈形菊花瓣的接線方式,并且屬于半雙工的通信方式;RS232是點到點的接線方式,屬于全雙工通信。不管是RS232接口,還是RS485接口,它們必須符合物理層的通信規約。


      再看MODBUS-RTU通信協議:


      有了物理層通信接口,是不是就能通信呢?答案是否定的。物理層通信接口只是使得通信雙方具備通信條件而已。但若雙方說的話誰都聽不懂,或者通信雙方的說話方式及語法結構不相符,顯然這也無法通信。


      在OSI模型中,物理層之上是數據鏈路層。MODBUS-RTU協議就是數據鏈路層協議,只要通信雙方都采用了MODBUS-RTU協議,則能確保通信語言是雙方都能聽得懂的語句格式。


      注意這里的詞匯“語句”。物理層定義的是字節,相當于語言中的字,數據鏈路層則把字節組織成語句,也即幀。幀規定了通信雙方所用語句的語法結構。


      MODBUS也是主從式的。和物理層的總線控制是一樣的,這里的主從關系,就是對通信總線的控制權做了規定。主站先下達命令,占用總線;接著把總線空置,交給從站去寫回應碼;從站完成后,再把總線還給主站。


      現在我們來看看ISO的HDLC規定的幀結構,也即通信語句的語法結構,如下:




      在MODBUS通信協議下,不同的命令功能碼它的幀結構不盡相同。對于讀寄存器命令,MODBUS的主站幀結構是:2個字節的地址碼,1個字節的功能碼,2個字節的數據地址碼,2個字節的CRC校驗碼;


      MODBUS的從站回應幀結構是:2個字節的功能碼,1個字節的回應區字節總數,N個字節的回應數據,2個字節的CRC校驗碼。


      雖然物理層協議與數據鏈路層協議不同,但數據鏈路層協議的執行必須建立在通信雙方物理層連接已經符合要求,并且已經可以無障礙地實現信息交互的基礎上。


      這個規則在ISO/OSI模型的七層協議中必須完全徹底地得到執行。在ISO/OSI模型中,通信雙方的低層次協議必須為上層協議建立透明的無故障的連接和信息交換關系。也就是說,各層次的上下級關系必須是的。


      從數據鏈路層再往上,就是網絡層了。它的任務是構成現場總線的信息交換網。


      網絡層的功能包括:把通信幀打包成數據分組,然后把數據分組發送給對方。


      由于通信雙方的網絡結構可能不同,于是對于同種網就需要用網橋來連接,而異種網則需要用網關來連接。


      網絡之間的信道可能有多條。數據分組在發送時有多種路徑可以選擇。負責選擇路徑的元件稱為路由器。路由器不但決定了真實的數據交換網絡路徑,還可以構建虛擬的網絡路徑,還要決定數據分組的發送秩序。因此,路由器是網絡層中復雜關鍵的裝備。


      OSI模型中,把物理層+數據鏈路層+網絡層合并稱為現場總線,其通信接口就是8針的RJ45水晶頭。顯見,RJ45與RS232/RS485/RA422完全不是一回事。


      網絡層的數據分組是數據幀的組合。通俗地說,數據分組是一篇短文,或者是一頁待傳遞的數據組合單元。


      網絡層在發送數據分組時,其路由問題和接收組合問題見下圖:





      我們看到網絡層在通信時先由路由器確定路由路徑,然后把分組發送到對方。對方接收到分組后,把分組按前后秩序組合起來,再解包為實際文檔。


      指的注意的是:由于網絡層有了路由器,因此網絡層支持星形網絡結構。


      現在我們來關注一下ISO/OSI的7層模型,如下:




      需要明確的是:從網絡層再往上,各層之間發送的信息單位已經是完整的報文了。OSI模型也規定了報文的語法結構,限于篇幅給予忽略。


      值得注意的是:RS232/RS485/RS422通信接口以及它們的定義,是非常明確的。包括管腳的電平,管腳的功能定義,以及接口在信息發送和接收信息時的數據流時序關系,這些都必須準確和嚴格,否則就無法執行信息交換。


      當PLC與某電力儀表交換信息,并且這些電力儀表符合RS485/MODBUS-RTU 通信規范。我們要做什么事呢?


      我們按菊花瓣結構的通信鏈路要求去接線,將PLC的通信接口與N個電力儀表接口連接起來。后一個電力儀表的末端要配100歐的終端電阻。


      第二,我們把這N個電力儀表按地址遞增的原則確定各自的地址,例如01H、02H、1FH等等。這里的H表示是16進制,1F表示16+15=31。


      第三,我們在PLC編程軟件中設定好電力儀表規定的通信速率。


      第四,我們在PLC編程軟件中按電力儀表的數據區地址碼設定好MODBUS通信碼,以及各個子站的循環關系。


      注意,這里的MODBUS通信碼滿足PLC的IEC 61131-3編程模塊要求,一般的PLC梯形圖沒有此功能。梯形圖滿足IEC 61131-1要求,但不滿足IEC 61131-3要求。


      第五,在PLC的內存中開辟專用數據區,存放從電力儀表讀取到并處理后的信息,以便讓更高層的總站來讀取信息。此數據區有一個名稱,叫做數據點表,有時也簡稱通信協議。


      后,當然就是開機測試了。其中的內容很多,限于篇幅不再介紹。

      我們來看一個在RS485網絡上用MODBUS-RTU讀取數據的例子,如下:


      某電力儀表,地址是01H。在電力儀表內存第2000的位置上,放置了三相電流和三相電壓等6個數據,每個數據占用兩個字節,共12個字節。


      此電力儀表的通信速率是9600bps。什么意思呢?bps表示一個0/1,也就是比特,這說明每秒鐘這條總線上可以發送9600個比特。我們已經知道一個字節有8個數據位,1個起始位,1個奇偶校驗位,剛好10位或者10個比特,所以,如果電力儀表的通信速率是9600bps,那么1秒鐘就可以發送:9600/10=960個字節。


      我們還知道,主站的讀數據的幀結構(下行幀)中,有1個字節的地址,1個字節的功能碼,2個字節的內存地址,2個字節的數據數量,2個字節的CRC校驗碼,總共有8個字節,所以主站發送讀數據MODBUS通信幀占用的時間是:8X10/9600=8.33毫秒。


      對于本例,我們知道MODBUS-RUT讀數據的命令是0X03H,也即03命令。注意這里的寫法:0X是字頭,中間的03是命令,后的H表示是16進制。


      具體通信幀的是:01 03 07 D0 00 06 C5 45,其中0X01H是地址,0X03H是命令,0X07D0H是內存地址2000,0X0006H表示讀取連續6個字,也即內存中的電流和電壓參數,0XC545H是01 03 07 D0 00 06的CRC校驗碼。


      那么電力儀表的回應幀(上行幀)的幀結構是:1個字節的地址,1個字節的功能碼,1個字節的數據區字節數,12個字節的數據,2個字節的CRC校驗碼,總共17個字節,占用時間是:17X10/9600=17.7毫秒。


      具體的儀表回應通信幀是:01 03 0C 00 64 0064 0064 00 DC 00 DC 00 DC D6 F5,其中0X01H和0X03H的意義同前,0X0CH表示上傳數據區有12個字節,0X0064H表示A相電流為100A,后面的兩組為B相和C相電流,均為100A,0X00DCH表示A相電壓為220V,其后兩組為B相和C相電壓,均為220V,后0XD6F5H為CRC校驗碼。


      從主站發起下行通信幀,再等待10毫秒讓從站回應,再接收到從站發還的上行通信幀,總歷時為:


      圖片


      如果有31個相同的儀表等待主站一一訪問,則主站從訪問個儀表開始,到后回應完畢,總歷時:


      圖片


      這里的1.12秒就是在通信速率為9600bps下這31臺儀表的讀數據循環周期,且忽略了主站再次發送下行通信幀的等待時間,實際時間會略微再長一些。


      相信,看到這里,大家對MODBUS-RTU下的通信幀應當有了較為深刻的認識。


      提醒大家:一個字有兩個字節。一般地,字節只能用來表達8個開關量。但對于模擬量,則要用字來表達。例如電流1250A,16進制下是04E2H,要用2個字節才能表達完整。也因此,各種電力儀表中,模擬量都是用字來表達的。


      以下是MODBUS的部分常用功能碼,也即命令碼:




      以下是PLC在讀取雙投開關ASCO控制器的數據點表的下行和上行通信幀范例:




      幾個相關的問題解釋一下:


      1)有些現場總線,用令牌解決了總線的控制權問題。


      大家很容易想到,如果從站有緊急事項需要主站來服務,可是MODBUS規定了輪詢規則,等到自己的時候,可能會太遲了。于是許多現場總線就發明了一個特殊的東西,叫做令牌。令牌很短,只有一個字節,它可以很快地在總線上傳遞。令牌在各站點中傳遞,誰拿到令牌,誰就是主站,就可以發布信息。如果本站沒有事情需要發布,就把令牌交給下一個站點,由此解決了總線占用問題。


      2)當鏈路發生斷路時,為了避免出現通信中斷,可采用雙主站措施。雙主站(PLC的兩個主站RS485接口)之間用握手線連接,平時主用RS485開通,而輔助RS485浮空。浮空的RS485雖然接在總線上,但它處于高阻態等效于完全脫離。當發生斷路時,從站確認后立即開通通信,從鏈路兩頭進行連接通信。


      有時,還采取環狀通信措施。限于篇幅,不做介紹。


      3)MODBUS可工作在網絡層,此時協議變為MODBUS-TCP,但還是符合主從結構。


      4)MODBUS協議是美國莫迪康公司發明的,該公司的宗旨是:


      MODBUS協議為不收費的公開協議。后來莫迪康公司被施耐德公司收購了,施耐德公司繼承了莫迪康公司的做法,MODBUS是不收費的公開協議。既然MODBUS已經成為施耐德的協議,施耐德把它延伸到網絡層,構建了網絡層的MODBUS-TCP協議,以及內部專用的MODBUS-PLUS協議。限于篇幅,對于這兩個協議的描述此處從略。


      5)關于RS232和RS485的區別


      學過模電和數電的人都知道差分電路。差分電路具有共模抑制比,能夠消除共模誤差。RS485接口就具有此特征。因此RS232接口的傳輸距離僅為十幾米,而RS485/RS422接口的傳輸距離為1200米。





      我們從圖中看到,雖然RS232和RS485接口的外形是一致的,但它們的性能和信息交換模式不同,因此抗干擾能力也不同。


      6)當距離很長的時候,RS485接口還可以接入光纖,但需要配備1對光纖轉換器。之所以要1對,是因為其中一只用于電轉光,而第二只則用于光轉電。光纖收發器中間的通信介質就是光纜或者光纖。(注意哦,光纖是光纜的芯線,不要以為是兩種東西)。


      光纖分為單模和多模。單模的光纖較細,光在傳輸過程中反射較少,因而失真小,其傳輸距離可達15km以上;多模的光纖較粗,光在傳輸過程中反射較多,因而失真大,其傳輸距離為1.5km。




      7)CRC校驗碼是二進制不借位的除法,用以做接收信息是否出錯的檢驗。






      注意這里的f(x)就是除去CRC校驗碼的MODBUS通信幀,除數是CRC16。幀中的CRC是運算后的余數。


      主站在發送幀之前,把幀先做CRC計算,再把CRC運算的余數附在幀尾發送給從站。從站接收到幀后,先對幀除去CRC的部分做CRC運算來檢驗是否正確,若不正確,從站要求主站重發。


      同理,當從站發送信息給主站時,主站也根據CRC來檢查數據的正確性。若發現錯誤,則要求從站重發。


      8)關于MODBUS-RTU、MODBUS-ASC和MODBUS-TCP

      如果MODBUS中字節表達數據的方式采取BCD碼,則被稱為MODBUS-RTU;如果MODBUS中字節表達數據的方式采取ASCII碼,則被稱為MODBUS-ASC;如果MODBUS運行在網絡層上,則被稱為MODBUS-TCP。


      ASCII碼的內容如下:




      MODBUS在實際使用中,大多數都采用BCD碼,因此MODBUS-RTU得到廣泛應用。


      BCD碼如下:




      值得注意的是:在協議使用中,數據幀中的數值都是用16進制數來表達的。例如100A電流寫成0X64H,而380V電壓則寫成0X17CH。


      9)關于RS485網絡使用的雙絞通信線和接地


      我們知道,兩條平行的線纜之間會有分布電容,而分布電容會削弱信號的強度。為了消除分布電容,通信線的兩條平行線需要按一定長度互相旋轉對絞,這種線被稱為雙絞線。雙絞線的對絞長度有規范,它與通信速率密切相關。在實際使用時,要按通信速率來選擇合適的雙絞線。


      雙絞線的外層有屏蔽層。屏蔽層必須單點接地,不得在線頭線尾同時接地,防止地電流流過引起干擾。在實際布線時,采取各線段獨立接地,切忌采用所有線段的屏蔽層前后連接統一接地的做法。


      10)關于菊花瓣的通信鏈路連接方式


      的菊花瓣鏈形網絡是不存在的。事實上,我們用菊花瓣鏈形接線方法構建的通信網絡中,各個節點是接線端子,由接線端子通過雙絞線連接到各個子站,這些雙絞線就構成了類似的星形結構,我們不妨把這種接線方式稱為鏈形網絡下的準星形接線。


      在工程實踐中證明,準星形接線的長度不得超過70cm。一旦超過,則可能出現通信不穩定狀態。


      事實上,70cm也成為行業中的一條不成文的質檢規范。


      100歐終端電阻在通信速率低時可加可不加,但當通信速率較高時(高于19.2kbps),建議一定要加。例如PROFIBUS下的RS485網絡,終端電阻已經植入終端設備中,只需撥動開關即可加入或者撤離。

      終端電阻的用途是吸收反射波。


      我們在兩棵樹間緊緊地綁上一根繩子,接著敲擊繩子的某一側,我們會看到有傳導波向另一端傳去,并能看到反射波。如果敲擊的頻率適當,則在繩子中間出現波的不動點,這叫做駐波。


      對于通信來說,不管是反射波還是駐波,將嚴重影響通信質量。終端電阻用于吸收反射波,并且可提升終子站的電平水平。


      RS485和MODBUS這兩個概念,都需要通過實踐去掌握它們,單單憑著閱讀文本,很難理解和掌握。如果這篇小文能給大家的實踐活動帶來益處,我會感到分外欣慰。


      聯系方式

      • 電  話:17838383235
      • 經理:徐嘉泉
      • 手  機:17838383235
      • 微  信:17838383235