從Modbus開始說現場總線(一)
PLC應用,在了解了硬件配置和邏輯編程之后,很大一部分工作就是處理現場通訊了。各式各樣的現場總線,其實還是有一定的規律的。我們在現場最常見到的現場總線協議,恐怕就是的Modbus了。
我在剛接觸Modbus的時候,還順便學會了一個單詞De facto ,查了很多詞典才知道是“事實上的”,Modbus也確實可以稱之為事實上的工業標準。Modbus是Modicon公司(該公司幾經收購,最后并入現在的施耐德電氣 Schneider Electric,目前Modicon還作為施耐德某些PLC的系列名稱)于1979年為使用可編程邏輯控制器(PLC)通信而開發。為了顯示樓主學識淵博(愛好八卦),這里猜測一下這個詞的由來,方便大家記憶。Modicon大概是Modular Control的縮寫,Modbus作為Modicon的第一代通訊總線,理解成Modular bus:“模塊化的總線”好像有些牽強,理解為Modicon的通訊總線Modicon Bus大概比較像吧。Modbus能夠成為工業領域通信協議的事實標準(De facto standard),樓主擅自猜測,主要的原因大概有兩個:一是Modicon做PLC比較(最)早,另外一個,估計是“簡單”。
Modbus協議后來還出了升級版本Modbus Plus(MB+)但因為Modicon公司沒有公開協議,所以沒有流行開來,但仍然在工業現場大量使用。
最早的Modbus是基于串行通訊的(EIA/TIA)RS232/485/422技術,協議簡單易用,硬件消耗很少,所有逐步超出PLC通訊的范圍,廣泛用于各種工業通訊,很多儀器儀表、控制器都支持該協議,配電領域的斷流器也加入其中。后來隨著工業以太網的普及,Modbus協議也作為應用層的協議搭上了以太網的快車,仍然出現在各種工業和民用現場。對網絡通訊協議模型有了解的同行,通過下圖可以清楚的了解Modbus協議的位置和作用。
下面詳細介紹Modbus協議的內容,希望以這個“事實上的工業標準”為例,帶您認識五花八門的通訊標準。
我們每天都離不開的通訊網絡,或許您并不陌生,但對于其工作原理,大概就只有少數人了解了。我在網上看到一個用訂外賣過程來說明國際標準化組織定義的標準化網絡模型(OSI)的結構,很貼切,您有空可以看看。
一文簡單理解OSI網絡模型:
https://www.versatek.com/blog/you-wont-believe-what-the-osi-model-and-pizza-have-in-common/
樓主把幾種常見的網絡(模型)做了一個比對,方便大家理解。當然其中電話網的內容,并不嚴謹,僅供參考。
從Modbus開始說現場總線(二)
Modbus作為一個應用層的協議,最初是為了實現PLC間通訊的,所以基礎的協議內容相對簡單,傳輸的數據主要分為四類:離散量(開關量)輸入,離散量(開關量,線圈)輸出,輸入寄存器,保持寄存器。對應電力系統中的術語,分別是:遙信,遙控,遙測,遙調。實際使用中因為一個保持寄存器可以作為十六個開關量使用,而且讀和寫都支持,大家都習慣通過讀/寫保持寄存器來搞定一切。
最初的Modbus協議基于RS-232/485鏈路,有兩種編碼方式,RTU和ASCII。這也是為什么有時候看到“Modbus RTU”說法的由來,后面我們介紹的幀格式就是RTU格式,ASCII格式已經很少用了。
其實Modbus的通訊格式非常容易理解,主站給從站發送一條報文,大概相當于網友問支付寶:
支付寶(從站地址),內定的錦鯉(數據類型,保持寄存器)第二名(寄存器地址)是多少(讀數據,暗號03)啊(校驗碼)?報文格式如下(16進制):
支付寶回復網友:
支付寶(從站地址),這個嘛(重復讀數據功能碼),沒有(返回數據長度,二),是0017這廝(返回數據),真沒有(校驗碼):
這樣,Modbus主機就完成了一次對從機數據的讀操作,是不是很簡單?最常用的兩個功能碼就是上面介紹的0x03(讀連續多個保持寄存器)和0x10(十進制16,寫多個保持寄存器),其他的功能碼,基本類似,無非是類型(離散量,寄存器,…)數量(單個,連續多個)的不同組合。當然還少不了錯誤處理等細節,詳細內容見參考文獻。
寄存器地址是從0000開始的,對應于Modicon(施耐德)PLC中的40001,如果是寄存器地址從0001開始,并直接對應寄存器地址40001,Modbus RTU協議就有了一個別名JBUS,可以理解為JBUS是Modbus的一個常用功能子集。另外,有的廠商在返回數據時,數據長度不是按字節計算,而是按字計算,也無法和標準Modbus協議兼容。
把Modbus報文去掉地址和CRC校驗碼嵌入到以太網的數據幀中,就成了TCP-Modbus,如下圖。這樣串行設備(我們前面講的斷路器,多數都是通過附件成為一個串行設備)就可以很方便的接入以太網了,當然這個“嵌入”的過程,是由網關完成的。
Modbus協議的主要內容就介紹完了,我們會發現,作為一個應用層協議,Modbus并沒有定義數據的格式和含義。例如,讀一個保持寄存器的值,我們得到一個16位的數,至于這個數是每一位代表一個開關量的狀態,還是一個無符號整數,或者是32位浮點數的高字節或者低字節,就要靠通訊雙方自行定義了。所以實現Modbus通訊的很大一部分工作就是按照雙方的通訊數據表逐個處理。
-
控制器
+關注
關注
112文章
16444瀏覽量
179045 -
電氣
+關注
關注
18文章
1172瀏覽量
53244
原文標題:干貨丨從Modbus開始說現場總線!
文章出處:【微信號:gkongbbs,微信公眾號:工控論壇】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論