Modbus通信協(xié)議是什么?
關(guān)于Mod,因?yàn)檫@種協(xié)議最早被用在PLC控制器中,準(zhǔn)確的說(shuō)是Modicon公司的PLC控制器,這也是Mod-Bus名稱的由來(lái)。后來(lái)Modicon被施耐德(Schneider)收購(gòu),Modbus協(xié)議廣泛應(yīng)用在工業(yè)控制器、HMI和傳感器上,逐漸被其他廠商所接受,成為了一種主流的通訊協(xié)議,用于和外圍設(shè)備進(jìn)行通訊。
Modbus協(xié)議作為當(dāng)今工業(yè)控制領(lǐng)域的通用通訊協(xié)議,在無(wú)數(shù)物聯(lián)網(wǎng)產(chǎn)品中得到應(yīng)用,工業(yè)、農(nóng)業(yè)等物聯(lián)網(wǎng)解決方案中都有其身影。ModBus網(wǎng)絡(luò)是一個(gè)工業(yè)通信系統(tǒng),由智能終端的可編程序控制器和計(jì)算機(jī),通過(guò)公用線路或局部專用線路連接而成。其系統(tǒng)結(jié)構(gòu)既包括硬件、亦包括軟件,應(yīng)用于各種數(shù)據(jù)采集和過(guò)程監(jiān)控。
Modbus網(wǎng)絡(luò)體系
通過(guò)Modbus協(xié)議,控制器相互之間、或控制器經(jīng)由網(wǎng)絡(luò)(如以太網(wǎng))可以和其它設(shè)備之間進(jìn)行通信。Modbus協(xié)議使用的是主從通訊技術(shù),即由主設(shè)備主動(dòng)查詢和操作從設(shè)備。一般將主控設(shè)備方所使用的協(xié)議稱為Modbus Master,從設(shè)備方使用的協(xié)議稱為Modbus Slave。典型的主設(shè)備包括工控機(jī)和工業(yè)控制器等;典型的從設(shè)備如PLC可編程控制器等。Modbus通訊物理接口可以選用串口(包括RS232和RS485),也可以選擇以太網(wǎng)口。
Modbus在7層OSI參考模型中屬于第七層應(yīng)用層,數(shù)據(jù)鏈路層有兩種:基于標(biāo)準(zhǔn)串口協(xié)議和TCP協(xié)議,物理層可使用3線232、2線485、4線422,或光纖、網(wǎng)線、無(wú)線等多種傳輸介質(zhì)。
ModBus網(wǎng)絡(luò)只有一個(gè)主機(jī),發(fā)出通訊信號(hào),多個(gè)從機(jī),網(wǎng)絡(luò)可支持247個(gè)之多的遠(yuǎn)程從屬控制器,但實(shí)際所支持的從機(jī)數(shù)要由所用通信設(shè)備決定。采用這個(gè)系統(tǒng),各PC可以和中心主機(jī)交換信息而不影響各PC執(zhí)行本身的控制任務(wù)。
Modbus協(xié)議包括ASCII、RTU、TCP等,并沒(méi)有規(guī)定物理層。此協(xié)議定義了控制器能夠認(rèn)識(shí)和使用的消息結(jié)構(gòu),而不管它們是經(jīng)過(guò)何種網(wǎng)絡(luò)進(jìn)行通信的。
Modbus協(xié)議目前存在用于串口、以太網(wǎng)以及其他支持互聯(lián)網(wǎng)協(xié)議的網(wǎng)絡(luò)的版本。
大多數(shù)Modbus設(shè)備通信通過(guò)串口EIA-485物理層進(jìn)行。
對(duì)于串行連接,存在兩個(gè)變種,它們?cè)跀?shù)值數(shù)據(jù)表示不同和協(xié)議細(xì)節(jié)上略有不同。
三種傳輸模式
1979年,Modicon 首先推出了串行Modbus標(biāo)準(zhǔn),后來(lái)由于網(wǎng)絡(luò)的普及,需要更高的傳輸速度,1997年制定了基于TCP網(wǎng)絡(luò)的Modbus標(biāo)準(zhǔn)。
所以總的可分為兩個(gè)傳輸模式:基于串行鏈路的和基于以太網(wǎng)TCP/IP的。但是我個(gè)人還是習(xí)慣分為3種傳輸模式:
基于串口的Modbus-RTU 數(shù)據(jù)按照標(biāo)準(zhǔn)串口協(xié)議進(jìn)行編碼,是使用最廣泛的一種Modbus協(xié)議,采用CRC-16_Modbus校驗(yàn)算法。
基于串口的Modbus-ASCII 所有數(shù)據(jù)都是ASCII格式,一個(gè)字節(jié)的原始數(shù)據(jù)需要兩個(gè)字符來(lái)表示,效率低,采用LRC校驗(yàn)算法。
基于網(wǎng)口的Modbus-TCP Modbus-TCP基于TCP/IP協(xié)議,占用502端口,數(shù)據(jù)幀主要包括兩部分:MBAP(報(bào)文頭)+PDU(幀結(jié)構(gòu)),數(shù)據(jù)塊與串行鏈路是一致的。
所以當(dāng)我們提及Modbus協(xié)議時(shí),要確定是哪種模式:RTU、ASCII或TCP,3種模式區(qū)別還是很大的。
有些設(shè)備支持多種Modbus模式,有些設(shè)備只支持其中一種,實(shí)際使用要根據(jù)設(shè)備使用手冊(cè)來(lái)選擇采用哪種模式。
對(duì)于所有的這三種通信協(xié)議在數(shù)據(jù)模型和功能調(diào)用上都是相同的,只有封裝方式是不同的。
Modbus有一個(gè)擴(kuò)展版本Modbus Plus(Modbus+或者M(jìn)B+),不過(guò)此協(xié)議是Modicon專有的,和Modbus不同。它需要一個(gè)專門(mén)的協(xié)處理器來(lái)處理類似HDLC的高速令牌旋轉(zhuǎn)。它使用1Mbit/s的雙絞線,并且每個(gè)節(jié)點(diǎn)都有轉(zhuǎn)換隔離裝置,是一種采用轉(zhuǎn)換/邊緣觸發(fā)而不是電壓/水平觸發(fā)的裝置。連接Modbus Plus到計(jì)算機(jī)需要特別的接口,通常是支持ISA(SA85),PCI或者PMCIA總線的板卡。
標(biāo)準(zhǔn)的Modicon控制器使用RS232C實(shí)現(xiàn)串行的Modbus。
Modbus的ASCII、RTU協(xié)議規(guī)定了消息、數(shù)據(jù)的結(jié)構(gòu)、命令和就答的方式,數(shù)據(jù)通訊采用Maser/Slave方式,Master端發(fā)出數(shù)據(jù)請(qǐng)求消息,Slave端接收到正確消息后就可以發(fā)送數(shù)據(jù)到Master端以響應(yīng)請(qǐng)求;
Master端也可以直接發(fā)消息修改Slave端的數(shù)據(jù),實(shí)現(xiàn)雙向讀寫(xiě)。
Modbus協(xié)議需要對(duì)數(shù)據(jù)進(jìn)行校驗(yàn),串行協(xié)議中除有奇偶校驗(yàn)外,ASCII模式采用LRC校驗(yàn),RTU模式采用16位CRC校驗(yàn),但TCP模式?jīng)]有額外規(guī)定校驗(yàn),因?yàn)門(mén)CP協(xié)議是一個(gè)面向連接的可靠協(xié)議。
另外,Modbus采用主從方式定時(shí)收發(fā)數(shù)據(jù),在實(shí)際使用中如果某Slave站點(diǎn)斷開(kāi)后(如故障或關(guān)機(jī)),Master端可以診斷出來(lái),而當(dāng)故障修復(fù)后,網(wǎng)絡(luò)又可自動(dòng)接通,Modbus協(xié)議的可靠性較好。
對(duì)于Modbus的ASCII、RTU和TCP協(xié)議來(lái)說(shuō),其中TCP和RTU協(xié)議非常類似,只要把RTU協(xié)議的兩個(gè)字節(jié)的校驗(yàn)碼去掉,然后在RTU協(xié)議的開(kāi)始加上5個(gè)0和一個(gè)6并通過(guò)TCP/IP網(wǎng)絡(luò)協(xié)議發(fā)送出去即可。
Modbus RTU 協(xié)議
Modbus在7層OSI參考模型中屬于第七層應(yīng)用層,數(shù)據(jù)鏈路層有兩種:基于標(biāo)準(zhǔn)串口協(xié)議和TCP協(xié)議,物理層可使用3線232、2線485、4線422,或光纖、網(wǎng)線、無(wú)線等多種傳輸介質(zhì)。
Modbus RTU 協(xié)議是一種開(kāi)放的串行協(xié)議,廣泛應(yīng)用于當(dāng)今的工業(yè)監(jiān)控設(shè)備中。該協(xié)議使用 RS-232 或 RS-485 串行接口進(jìn)行通信,并得到市場(chǎng)上幾乎所有商業(yè) SCADA、HMI、OPC 服務(wù)器和數(shù)據(jù)采集軟件程序的支持。
Modbus RTU 協(xié)議使用主/從技術(shù)在設(shè)備之間進(jìn)行通信。這意味著,任何使用 Modbus RTU 協(xié)議的應(yīng)用程序都將有一個(gè) Modbus 主站和至少一個(gè) Modbus 從站。Modbus Master 通常是一臺(tái)運(yùn)行軟件的主機(jī)監(jiān)控計(jì)算機(jī),它將與一個(gè)或多個(gè) Modbus Slave 設(shè)備進(jìn)行通信。
Modbus 從設(shè)備是執(zhí)行系統(tǒng)參數(shù)測(cè)量和控制系統(tǒng)中的開(kāi)/關(guān)設(shè)備的設(shè)備。為了執(zhí)行這些任務(wù),主站向 Modbus 從站發(fā)送消息,請(qǐng)求執(zhí)行特定任務(wù)。
Modbus RTU 協(xié)議使用格式化的消息在主機(jī)和從機(jī)之間進(jìn)行通信。消息由系統(tǒng) Master 發(fā)起并發(fā)送到 Slave 設(shè)備。然后,從站以請(qǐng)求的數(shù)據(jù)進(jìn)行響應(yīng),或者確認(rèn)它執(zhí)行了請(qǐng)求的功能。所有進(jìn)出主站的消息都包含一個(gè)兩字節(jié)(16 位)CRC(循環(huán)冗余校驗(yàn))校驗(yàn)和值,用于錯(cuò)誤檢查。如果將無(wú)效請(qǐng)求傳輸?shù)?Modbus 從站,則會(huì)返回一個(gè)字節(jié)(8 位)錯(cuò)誤代碼值,說(shuō)明請(qǐng)求錯(cuò)誤的原因。
Modbus 主站消息包含幾個(gè)重要的信息。每條消息都以接受消息的設(shè)備的從地址開(kāi)始。接下來(lái)是要執(zhí)行的功能編號(hào)(或命令)。后面是指定函數(shù)正確執(zhí)行所需的任何數(shù)據(jù)。從地址是一個(gè)單字節(jié)(8 位)值,可用值范圍在 0-247 之間。Modbus 功能號(hào)也是一個(gè)字節(jié)值,并且在協(xié)議中定義了許多標(biāo)準(zhǔn)化功能號(hào)。支持所請(qǐng)求功能所需的任何數(shù)據(jù)值的長(zhǎng)度將是一個(gè)或多個(gè)字節(jié)。Modbus 從站響應(yīng)消息將包含響應(yīng)的從站地址、功能編號(hào)和主站請(qǐng)求的任何必要數(shù)據(jù)。
Modbus 通信協(xié)議特點(diǎn)
(1)標(biāo)準(zhǔn)、開(kāi)放,用戶可以免費(fèi)、放心地使用Modbus協(xié)議,不需要交納許可證費(fèi),也不會(huì)侵犯知識(shí)產(chǎn)權(quán)。
(2)Modbus可以支持多種電氣接口,如RS-232、RS-485等,還可以在各種介質(zhì)上傳送,如雙絞線、光纖、無(wú)線等。
(3)Modbus的幀格式簡(jiǎn)單、緊湊,通俗易懂。用戶使用容易,廠商開(kāi)發(fā)簡(jiǎn)單。
Modbus4種數(shù)據(jù)類型
Modbus協(xié)議規(guī)定,進(jìn)行讀寫(xiě)操作的數(shù)據(jù)類型,按照讀寫(xiě)屬性和類型可分為以下4種:
- 離散量輸入(Discretes Input ):1位,只讀
2.線圈(Coils):1位,讀寫(xiě)
3.輸入寄存器(Input Registers ):16位,只讀
4.保持寄存器(Holding Registers):16位,讀寫(xiě)
常用的MODBUS通訊方式
有兩種,一種是MODBUS ASCII,一種是MODBUS RTU。每個(gè)設(shè)備必須都有相同的傳輸模式。所有設(shè)備都支持RTU模式,ASCII傳輸模式是選項(xiàng)。
+ASCII傳輸方式
Modbus串行鏈路的設(shè)備被配置為使用ASCII模式通信時(shí),報(bào)文中的每8位字節(jié)以兩個(gè)ASCII字符發(fā)送。例:字節(jié)0X5B會(huì)被編碼為兩個(gè)字符:0x35和0x42進(jìn)行傳送(ASCII編碼0x35="5",0x42="B"),這樣傳輸效率會(huì)降低。
在ASCII模式,報(bào)文用特殊的字符區(qū)分幀起始和幀結(jié)束。一個(gè)報(bào)文必須以一個(gè)‘冒號(hào)’(:)(ASCII十六進(jìn)制3A)起始,以‘回車(chē)-換行’(CRLF)對(duì)(ASCII十六進(jìn)制0D和0A)結(jié)束。設(shè)備連續(xù)的監(jiān)視總線上的‘冒號(hào)’字符。當(dāng)收到這個(gè)字符后,每個(gè)設(shè)備解碼后續(xù)的字符一直到幀結(jié)束。報(bào)文中字符間的時(shí)間間隔可以達(dá)一秒。如果有更大的間隔,則接受設(shè)備認(rèn)為發(fā)生了錯(cuò)誤。
+RTU傳輸方式
當(dāng)設(shè)備使用RTU(RemoteTerminalUnit)模式在Modbus串行鏈路通信,報(bào)文中每個(gè)8位字節(jié)含有兩個(gè)4位十六進(jìn)制字符。這種模式的主要優(yōu)點(diǎn)是較高的數(shù)據(jù)密度,在相同的波特率下比ASCII模式有更高的傳輸效率。每個(gè)報(bào)文必須以連續(xù)的字符流傳送。
Modbus RS485接線方法
RS485的應(yīng)用挺廣泛,可以支持ModBus協(xié)議,因?yàn)楹?jiǎn)單、便宜、可靠、成熟,所以在工業(yè)控制、智能儀表和電力通信領(lǐng)域應(yīng)用很多。
1、我們來(lái)看看RS485的一個(gè)典型組網(wǎng)結(jié)構(gòu):
理論上,一條RS485總線的傳輸距離可以達(dá)到1200米。但是在實(shí)際應(yīng)用受通信芯片、波特率和線材、干擾等影響,實(shí)際上是遠(yuǎn)遠(yuǎn)達(dá)不到這個(gè)數(shù)值的。
理論上,一條RS485總線可以掛254臺(tái)設(shè)備,實(shí)際上也遠(yuǎn)遠(yuǎn)達(dá)不到,通常的應(yīng)用中,也就是30臺(tái)左右。
RS485總線要采用上圖手拉手式的總線結(jié)構(gòu),堅(jiān)決杜絕星型連接和分叉連接,如下圖:
+關(guān)于線材的選用
通信線纜要選擇兩芯屏蔽雙絞線,線徑不低于0.5平方。雙絞是因?yàn)?85通訊采用差模通訊原理,雙絞的抗干擾性最好。有些野路子的做法用非屏蔽非雙絞線甚至是網(wǎng)線來(lái)敷設(shè)485通訊線,是極端錯(cuò)誤的。
+關(guān)于保障通信質(zhì)量的幾種手段
1、共地法:用1條線或者屏蔽線將所有485設(shè)備的GND地連接起來(lái),這樣可以避免所有設(shè)備之間存在影響通訊的電勢(shì)差。
2、終端電阻法:在最后一臺(tái)485設(shè)備的485+和485-上并聯(lián)連接120歐姆的終端電阻來(lái)改善通訊質(zhì)量。
3、如果通訊距離過(guò)長(zhǎng),建議如果超過(guò)500米就采用中繼器或者485HUB來(lái)解決問(wèn)題。如果負(fù)載數(shù)過(guò)多,建議如果一條總線上超過(guò)30臺(tái)就采用485HUB來(lái)解決問(wèn)題。
+場(chǎng)景應(yīng)用-Modbus物聯(lián)網(wǎng)云平臺(tái)
Modbus物聯(lián)網(wǎng)云平臺(tái)在設(shè)備和用戶之間建立開(kāi)箱即用的云平臺(tái)和云應(yīng)用,實(shí)現(xiàn)數(shù)據(jù)采集、實(shí)時(shí)控制、數(shù)據(jù)可視化、開(kāi)放 API,構(gòu)建靈活強(qiáng)大的物聯(lián)網(wǎng)應(yīng)用。Modbus云平臺(tái)支持市場(chǎng)上99%以上Modbus設(shè)備接入,比如工業(yè)儀器儀表,工業(yè)傳感器,Modbus PLC設(shè)備等。用戶可以在任何地方遠(yuǎn)程訪問(wèn)任何地方的Modbus設(shè)備,并對(duì)遠(yuǎn)程設(shè)備的數(shù)據(jù)進(jìn)行實(shí)時(shí)采集監(jiān)控、遠(yuǎn)程控制、智能音響小度、天貓精靈、小愛(ài)同學(xué)語(yǔ)音控制、診斷、通訊及調(diào)試等。
Modbus物聯(lián)網(wǎng)云平臺(tái)是一個(gè)開(kāi)放的物聯(lián)網(wǎng)云平臺(tái),用戶只需按步驟完成注冊(cè)即可免費(fèi)使用Modbus物聯(lián)網(wǎng)云平臺(tái) 。支持PC、Android、iOS多平臺(tái)終端。用戶可以在任何地方遠(yuǎn)程訪問(wèn)任何地方的串口設(shè)備,并對(duì)遠(yuǎn)程設(shè)備的數(shù)據(jù)進(jìn)行實(shí)時(shí)采集監(jiān)控、遠(yuǎn)程控制、診斷、通訊及調(diào)試等。Modbus物聯(lián)網(wǎng)云平臺(tái)支持微信關(guān)聯(lián),用戶可以借助手機(jī)端的微信公眾號(hào)進(jìn)行遠(yuǎn)程查看設(shè)備的運(yùn)行狀態(tài),通訊數(shù)據(jù)和報(bào)警信息等,實(shí)現(xiàn)隨時(shí)隨地輕松掌控,方便快捷。
總 結(jié)
總的來(lái)說(shuō),簡(jiǎn)單是 Modbus 如此普遍的主要原因。消息檢查是 Modbus 如此受歡迎的另一個(gè)原因。CRC 和 LRC 檢查意味著檢查傳輸錯(cuò)誤的準(zhǔn)確率達(dá)到 99%。概括來(lái)講,Modbus就是一種用于工業(yè)控制的協(xié)議,具有免費(fèi)使用、上手簡(jiǎn)單、修改方便三大特點(diǎn),已經(jīng)被廣泛使用。
此協(xié)議支持傳統(tǒng)的RS-232、RS-485、RS-422和以太網(wǎng)設(shè)備。許多工業(yè)設(shè)備,包括PLC,DCS,智能儀表,變頻器等都在使用Modbus協(xié)議作為他們之間的通訊標(biāo)準(zhǔn)。有了它,不同廠商生產(chǎn)的控制設(shè)備可以連成工業(yè)網(wǎng)絡(luò),進(jìn)行集中監(jiān)控。