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