李煦侃
摘 要:隨著現(xiàn)場(chǎng)總線技術(shù)和工業(yè)以太網(wǎng)技術(shù)的快速發(fā)展,工業(yè)自動(dòng)化領(lǐng)域的通信網(wǎng)絡(luò)正在逐步統(tǒng)一到工業(yè)以太網(wǎng)。Modbus/TCP是工業(yè)以太網(wǎng)技術(shù)中最有發(fā)展前景的一種,在工業(yè)自動(dòng)化領(lǐng)域具有很高的應(yīng)用價(jià)值。該文簡(jiǎn)要概述了工業(yè)以太網(wǎng)和Modbus/TCP的歷史與現(xiàn)狀,以及Modbus協(xié)議的基本內(nèi)容,并闡述了Modbus/TCP客戶端的發(fā)送、接收應(yīng)用,對(duì)提升我國(guó)工業(yè)自動(dòng)化企業(yè)的自動(dòng)化水平、提高企業(yè)綜合競(jìng)爭(zhēng)力、加快企業(yè)信息化建設(shè)等方面都具有現(xiàn)實(shí)的意義。
關(guān)鍵詞:現(xiàn)場(chǎng)總線 工業(yè)以太網(wǎng) Modbus協(xié)議 Modbus/TCP客戶端 Modbus/TCP報(bào)文
中圖分類號(hào):TP273 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1672-3791(2019)01(b)-0-04
Abstract:With the rapid development of fieldbus technology and industrial Ethernet technology, the communication network in the field of industrial automation is gradually unifying to industrial Ethernet. Modbus/TCP is one of the most promising industrial Ethernet technologies and has high application value in the field of industrial automation. This paper briefly summarizes the history and current status of Industrial Ethernet and Modbus/TCP, as well as the basic content of Modbus protocol, and expounds the transmission and receiving applications of Modbus/TCP client, which improves the automation level of industrial automation enterprises in China and improves the comprehensive competition of enterprises. It is of practical significance to accelerate and accelerate the construction of enterprise information.
Key Words:Fieldbus; Indusntrial Ethernet; Modbus Protocal; Modbus/TCP Client; Modbus/TCP Message
隨著現(xiàn)場(chǎng)總線技術(shù)和工業(yè)以太網(wǎng)技術(shù)的快速發(fā)展,以及關(guān)鍵問(wèn)題的突破,使得工業(yè)自動(dòng)化領(lǐng)域的通信網(wǎng)絡(luò)正在逐步統(tǒng)一到工業(yè)以太網(wǎng)。
Modbus/TCP是工業(yè)以太網(wǎng)技術(shù)中最有發(fā)展前景的一種。Modbus主從式通信機(jī)制能很好地滿足確定性的要求,與互聯(lián)網(wǎng)的客戶機(jī)/服務(wù)器通信機(jī)理相對(duì)應(yīng)。
Modbus通過(guò)與TCP/IP相結(jié)合,在TCP幀中嵌入Modbus信息幀,在工業(yè)自動(dòng)化領(lǐng)域具有很高的性價(jià)比,是一種真正開(kāi)放的理想解決方案,試驗(yàn)表明了它的有效性,應(yīng)用案例己證明了它在實(shí)際應(yīng)用中的價(jià)值。
1 工業(yè)以太網(wǎng)
隨著現(xiàn)場(chǎng)總線技術(shù)和工業(yè)以太網(wǎng)技術(shù)的快速發(fā)展,以及關(guān)鍵技術(shù)的突破進(jìn)展,使得工業(yè)自動(dòng)化領(lǐng)域控制級(jí)以上的通信網(wǎng)絡(luò)正在逐步統(tǒng)一到工業(yè)以太網(wǎng)。嵌入式技術(shù)的快速發(fā)展使得以太網(wǎng)進(jìn)入工控領(lǐng)域成為可能,而以太網(wǎng)技術(shù)的不斷發(fā)展很大程度上解決了以太網(wǎng)成為工業(yè)控制網(wǎng)絡(luò)的實(shí)時(shí)性問(wèn)題。所謂工業(yè)以太網(wǎng),一般來(lái)講其在技術(shù)上與商用以太網(wǎng)(即IEEE802.3)兼容,但在產(chǎn)品設(shè)計(jì)時(shí),在材質(zhì)選用、產(chǎn)品強(qiáng)度、適用性以及實(shí)時(shí)性、可互操作性、可靠性、抗干擾性和本質(zhì)安全等方面能滿足工業(yè)現(xiàn)場(chǎng)環(huán)境的要求。按照國(guó)際電工委員會(huì)IEC SC65C的定義,工業(yè)以太網(wǎng)是指用于工業(yè)自動(dòng)化環(huán)境、符合IEEE802.3標(biāo)準(zhǔn)、按照IEEE802.1D媒體訪問(wèn)控制網(wǎng)橋規(guī)范和IEEE802.IQ局域網(wǎng)虛擬網(wǎng)橋規(guī)范、對(duì)其沒(méi)有進(jìn)行任何實(shí)時(shí)擴(kuò)展而實(shí)現(xiàn)的以太網(wǎng)絡(luò)[1]。通過(guò)采用減輕以太網(wǎng)符合、提高網(wǎng)絡(luò)速度、采用交換式以太網(wǎng)和全雙工通信、采用信息優(yōu)先級(jí)和流量控制以及虛擬局域網(wǎng)等技術(shù),目前為止可以將工業(yè)以太網(wǎng)的實(shí)時(shí)響應(yīng)時(shí)間做到5~10ms,相當(dāng)于現(xiàn)有的現(xiàn)場(chǎng)總線。工業(yè)以太網(wǎng)作為一種新興、統(tǒng)一、快速發(fā)展的標(biāo)準(zhǔn),己經(jīng)在工業(yè)企業(yè)綜合自動(dòng)化系統(tǒng)中的資源管理層、執(zhí)行制造層得到了廣泛應(yīng)用,同時(shí)已呈現(xiàn)出向下延伸直接應(yīng)用于工業(yè)控制現(xiàn)場(chǎng)的趨勢(shì)。
2 Modbus/TCP的歷史與現(xiàn)狀
Modbus協(xié)議原為美國(guó)Modicon公司PLC產(chǎn)品通信協(xié)議,后來(lái)由于其使用十分廣泛,由Modbus組織于2002年發(fā)展延伸為Modbus TCP/IP規(guī)范[2]。Modbus對(duì)于分布式自動(dòng)化解決方案的未來(lái)很重要。通過(guò)Modbus協(xié)議,控制器相互之間、控制器經(jīng)由網(wǎng)絡(luò)(如以太網(wǎng))和其他設(shè)備之間可以通信。它是一個(gè)標(biāo)準(zhǔn)的、真正開(kāi)放的、在工業(yè)自動(dòng)化領(lǐng)域應(yīng)用最廣泛的網(wǎng)絡(luò)通訊協(xié)議,SCADA和HMI軟件可以通過(guò)Modbus協(xié)議非常方便地與串行設(shè)備集成到一起。
Modbus/TCP協(xié)議是Modbus協(xié)議的另一版本,于1999年由施耐德公司推出,以一種非常簡(jiǎn)單的方式將Modbus幀嵌入到TCP幀中,使Modbus與以太網(wǎng)和TCP/IP結(jié)合,成為Modbus TCP/IP[3]。Modbus/TCP和它的一個(gè)配套協(xié)議RTPS一起,作為實(shí)時(shí)工業(yè)以太網(wǎng)協(xié)議簇,被提交給IEC SC65C。
Modbus/TCP已經(jīng)成為世界領(lǐng)先的工業(yè)以太網(wǎng)協(xié)議。Modbus/TCP協(xié)議的開(kāi)放性及用戶對(duì)它的熟悉程度再加上其應(yīng)用的簡(jiǎn)單易學(xué),是Modbus/TCP在當(dāng)今市場(chǎng)中獲得成功的關(guān)鍵。Modbus協(xié)議的串行鏈路版本已經(jīng)在市場(chǎng)上長(zhǎng)期占有主導(dǎo)地位,并且己有大量的網(wǎng)關(guān)產(chǎn)品可以實(shí)現(xiàn)串行鏈路Modbus和Modbus/TCP之間的橋接。
3 Modbus/TCP的通信協(xié)議
3.1 Modbus的通信協(xié)議簡(jiǎn)介
Modbus協(xié)議定義了一個(gè)控制器能認(rèn)識(shí)使用的消息結(jié)構(gòu),而不管它們是經(jīng)過(guò)何種網(wǎng)絡(luò)進(jìn)行通信的。
當(dāng)在一個(gè)Modbus網(wǎng)絡(luò)上通信時(shí),此協(xié)議決定了每個(gè)控制器須要知道它們的設(shè)備地址。如果需要回應(yīng),控制器將生成反饋信息并用Modbus協(xié)議發(fā)出。在其他網(wǎng)絡(luò)上,包含了Modbus協(xié)議的消息轉(zhuǎn)換為在此網(wǎng)絡(luò)上使用的幀或包結(jié)構(gòu)。這種轉(zhuǎn)換也擴(kuò)展了根據(jù)具體的網(wǎng)絡(luò)解決節(jié)地址、路由路徑及錯(cuò)誤檢測(cè)的方法。
3.2 Modbus/TCP的通信結(jié)構(gòu)模型
Modbus/TCP的通信系統(tǒng)可以包括不同類型的設(shè)備。所有連接到Modbus/TCP通訊網(wǎng)絡(luò)的設(shè)備都通過(guò)Modbus事務(wù)報(bào)文來(lái)實(shí)現(xiàn)Modbus客戶端和服務(wù)器端之間的通訊任務(wù)。而Modbus客戶端和服務(wù)器TCP/IP網(wǎng)關(guān)則實(shí)現(xiàn)了將在串行鏈路上的Modbus通訊設(shè)備連入到Modbus/TCP通訊網(wǎng)絡(luò)。如圖1所示。
3.3 Modbus/TCP應(yīng)用數(shù)據(jù)單元
Modbus協(xié)議定義了一個(gè)與底層通信協(xié)議無(wú)關(guān)的簡(jiǎn)單協(xié)議數(shù)據(jù)單元(PDU)。特定總線或網(wǎng)絡(luò)上的Modbus協(xié)議映射能夠在應(yīng)用數(shù)據(jù)單元上引入附加域。啟動(dòng)Modbus事務(wù)處理的客戶端建立Modbus應(yīng)用數(shù)據(jù)單元,服務(wù)器接收應(yīng)用數(shù)據(jù)單元并根據(jù)功能碼執(zhí)行相應(yīng)的動(dòng)作。其在串行鏈路上的應(yīng)用數(shù)據(jù)單元如圖2所示。
Modbus在TCP/IP上使用專用報(bào)文頭識(shí)別Modbus應(yīng)用數(shù)據(jù)單元。這種報(bào)文頭稱為MBAP報(bào)文頭。Modbus在TCP/IP網(wǎng)絡(luò)上的應(yīng)用數(shù)據(jù)單元如圖3所示。
4 Modbus/TCP客戶端的發(fā)送、接收應(yīng)用
4.1 常用Modbus/TCP功能碼
讀線圈:0x02(輸入)、0x01(輸出);
寫(xiě)線圈:0x0f(輸出);
讀寄存器:0x04(輸入)、0x03(輸出);
寫(xiě)寄存器:0x10(輸出);
說(shuō)明:一般線圈用于開(kāi)關(guān)量、寄存器用于模擬量。
4.2 讀線圈的Modbus/TCP發(fā)送包格式以及返回包格式
4.2.1 Modbus/TCP發(fā)送包格式
[0][0][0][0][0][包長(zhǎng)度][設(shè)備號(hào)][功能碼][初始線圈高八位][初始線圈低八位][讀取線圈數(shù)高八位][讀取線圈數(shù)低八位]
說(shuō)明:每個(gè)[]內(nèi)代表2位16進(jìn)制整型數(shù),轉(zhuǎn)換為二進(jìn)制是8bit;一個(gè)[]可以稱為一個(gè)功能位。
[0][0][0][0][0]:約定為該套接字連接發(fā)送Modbus包的數(shù)量,例如發(fā)送第一個(gè)Modbus包時(shí)為[1][0][0][0][0],發(fā)送第十五個(gè)Modbus包時(shí)為[F][0][0][0][0],發(fā)送第十六個(gè)Modbus包時(shí)為[0][1][0][0][0],不必考慮清零。
[包長(zhǎng)度]:該功能位標(biāo)明Modbus包在該位之后的字節(jié)數(shù)。
[設(shè)備號(hào)]:每個(gè)Modbus設(shè)備的編號(hào),通常從1到31依次編號(hào)。
[功能碼]:使用方法參見(jiàn)5.1,這里用功能碼0x02。
[初始線圈高八位]、[初始線圈低八位]、[讀取線圈數(shù)高八位]、[讀取線圈數(shù)低八位]各功能位意義與字面意思一致。
4.2.2 Modbus/TCP返回包格式
[0][0][0][0][0][包長(zhǎng)度][設(shè)備號(hào)][功能碼][返回的數(shù)據(jù)長(zhǎng)度][返回?cái)?shù)據(jù)1][返回?cái)?shù)據(jù)2]……[返回?cái)?shù)據(jù)n]
說(shuō)明:每個(gè)[]內(nèi)代表2位16進(jìn)制整型數(shù),轉(zhuǎn)換為二進(jìn)制是8bit;一個(gè)[]可以稱為一個(gè)功能位。
[0][0][0][0][0]:約定為該套接字連接發(fā)送Modbus包的數(shù)量,例如發(fā)送第一個(gè)Modbus包時(shí)為[1][0][0][0][0],發(fā)送第十五個(gè)Modbus包時(shí)為[F][0][0][0][0],發(fā)送第十六個(gè)Modbus包時(shí)為[0][1][0][0][0],不必考慮清零。
[包長(zhǎng)度]:該功能位標(biāo)明Modbus包在該位之后的字節(jié)數(shù)。
[設(shè)備號(hào)]:同發(fā)送包的設(shè)備號(hào)。
[功能碼]:同發(fā)送包的功能碼。
[返回的數(shù)據(jù)長(zhǎng)度]:該功能位標(biāo)明該位之后數(shù)據(jù)位的長(zhǎng)度。
[返回?cái)?shù)據(jù)1]:即讀取的數(shù)據(jù)。
……
[返回?cái)?shù)據(jù)n]:即讀取的數(shù)據(jù)。
4.3 寫(xiě)線圈的Modbus/TCP發(fā)送包格式以及返回包格式
4.3.1 Modbus/TCP發(fā)送包格式
[0][0][0][0][0][包長(zhǎng)度][設(shè)備號(hào)][功能碼][初始線圈高八位][初始線圈低八位][寫(xiě)入線圈數(shù)高八位][寫(xiě)入線圈數(shù)低八位][寫(xiě)入的數(shù)據(jù)長(zhǎng)度][寫(xiě)入數(shù)據(jù)1] [寫(xiě)入數(shù)據(jù)2]……[寫(xiě)入數(shù)據(jù)n]
說(shuō)明:每個(gè)[]內(nèi)代表2位16進(jìn)制整型數(shù),轉(zhuǎn)換為二進(jìn)制是8bit;一個(gè)[]可以稱為一個(gè)功能位。
[0][0][0][0][0]:約定為該套接字連接發(fā)送Modbus包的數(shù)量,例如發(fā)送第一個(gè)Modbus包時(shí)為[1][0][0][0][0],發(fā)送第十五個(gè)Modbus包時(shí)為[F][0][0][0][0],發(fā)送第十六個(gè)Modbus包時(shí)為[0][1][0][0][0],不必考慮清零。
[包長(zhǎng)度]:該功能位標(biāo)明Modbus包在該位之后的字節(jié)數(shù)。
[設(shè)備號(hào)]:每個(gè)Modbus設(shè)備的編號(hào),通常從1到31依次編號(hào)。
[功能碼]:使用方法參見(jiàn)5.1,這里用功能碼0x0f。
[初始線圈高八位]、[初始線圈低八位]、[寫(xiě)入線圈數(shù)高八位]、[寫(xiě)入線圈數(shù)低八位]各功能位意義與字面意思一致。
[寫(xiě)入的數(shù)據(jù)長(zhǎng)度]:該功能位標(biāo)明該位之后數(shù)據(jù)位的長(zhǎng)度。
[寫(xiě)入數(shù)據(jù)1]:包含寫(xiě)入的數(shù)據(jù)。
……
[寫(xiě)入數(shù)據(jù)n]:包含寫(xiě)入的數(shù)據(jù)。
4.3.2 Modbus/TCP返回包格式
接收返回的Modbus/TCP包格式和發(fā)送包格式類似,但是沒(méi)有[寫(xiě)入的數(shù)據(jù)長(zhǎng)度] [數(shù)據(jù)1] [數(shù)據(jù)2]……[數(shù)據(jù)n]功能位。
4.4 讀寄存器的Modbus/TCP發(fā)送包格式以及返回包格式
4.4.1 Modbus/TCP發(fā)送包格式
[0][0][0][0][0][包長(zhǎng)度][設(shè)備號(hào)][功能碼][初始寄存器高八位][初始寄存器低八位][讀取寄存器數(shù)高八位][讀取寄存器數(shù)低八位]
說(shuō)明:每個(gè)[]內(nèi)代表2位16進(jìn)制整型數(shù),轉(zhuǎn)換為二進(jìn)制是8bit;一個(gè)[]可以稱為一個(gè)功能位。
[0][0][0][0][0]:約定為該套接字連接發(fā)送Modbus包的數(shù)量,例如發(fā)送第一個(gè)Modbus包時(shí)為[1][0][0][0][0],發(fā)送第十五個(gè)Modbus包時(shí)為[F][0][0][0][0],發(fā)送第十六個(gè)Modbus包時(shí)為[0][1][0][0][0],不必考慮清零。
[包長(zhǎng)度]:該功能位標(biāo)明Modbus包在該位之后的字節(jié)數(shù)。
[設(shè)備號(hào)]:每個(gè)Modbus設(shè)備的編號(hào),通常從1到31依次編號(hào)。
[功能碼]:使用方法參見(jiàn)5.1,這里用功能碼0x04。
[初始寄存器高八位]、[初始寄存器低八位]、[讀取寄存器數(shù)高八位]、[讀取寄存器數(shù)低八位]各功能位意義與字面意思一致。
4.4.2 Modbus/TCP返回包格式
[0][0][0][0][0][包長(zhǎng)度][設(shè)備號(hào)][功能碼][返回的數(shù)據(jù)長(zhǎng)度][ 返回?cái)?shù)據(jù)1高八位][返回?cái)?shù)據(jù)1低八位][ 返回?cái)?shù)據(jù)2高八位][ 返回?cái)?shù)據(jù)2低八位]……[返回?cái)?shù)據(jù)n高八位][ 返回?cái)?shù)據(jù)n低八位]
說(shuō)明:每個(gè)[]內(nèi)代表2位16進(jìn)制整型數(shù),轉(zhuǎn)換為二進(jìn)制是8bit;一個(gè)[]可以稱為一個(gè)功能位。
[0][0][0][0][0]:約定為該套接字連接發(fā)送Modbus包的數(shù)量,例如發(fā)送第一個(gè)Modbus包時(shí)為[1][0][0][0][0],發(fā)送第十五個(gè)Modbus包時(shí)為[F][0][0][0][0],發(fā)送第十六個(gè)Modbus包時(shí)為[0][1][0][0][0],不必考慮清零。
[包長(zhǎng)度]:該功能位標(biāo)明Modbus包在該位之后的字節(jié)數(shù)。
[設(shè)備號(hào)]:同發(fā)送包的設(shè)備號(hào)。
[功能碼]:同發(fā)送包的功能碼。
[返回的數(shù)據(jù)長(zhǎng)度]:該功能位標(biāo)明該位之后數(shù)據(jù)位的長(zhǎng)度。
[數(shù)據(jù)1高八位][數(shù)據(jù)1低八位][數(shù)據(jù)2高八位][數(shù)據(jù)2低八位]……[數(shù)據(jù)n高八位][數(shù)據(jù)n低八位]各功能位意義與字面意思一致。
4.5 寫(xiě)寄存器的Modbus/TCP發(fā)送包格式以及返回包格式
4.5.1 Modbus/TCP發(fā)送包格式
[0][0][0][0][0][包長(zhǎng)度][設(shè)備號(hào)][功能碼][初始寄存器高八位][初始寄存器低八位][寫(xiě)入寄存器數(shù)高八位][寫(xiě)入寄存器數(shù)低八位][寫(xiě)入的數(shù)據(jù)長(zhǎng)度][寫(xiě)入數(shù)據(jù)1高八位] [寫(xiě)入數(shù)據(jù)1低八位] [寫(xiě)入數(shù)據(jù)2高八位] [寫(xiě)入數(shù)據(jù)2低八位]……[寫(xiě)入數(shù)據(jù)n高八位][ 寫(xiě)入數(shù)據(jù)n低八位]
說(shuō)明:每個(gè)[]內(nèi)代表2位16進(jìn)制整型數(shù),轉(zhuǎn)換為二進(jìn)制是8bit;一個(gè)[]可以稱為一個(gè)功能位。
[0][0][0][0][0]:約定為該套接字連接發(fā)送Modbus包的數(shù)量,例如發(fā)送第一個(gè)Modbus包時(shí)為[1][0][0][0][0],發(fā)送第十五個(gè)Modbus包時(shí)為[F][0][0][0][0],發(fā)送第十六個(gè)Modbus包時(shí)為[0][1][0][0][0],不必考慮清零。
[包長(zhǎng)度]:該功能位標(biāo)明Modbus包在該位之后的字節(jié)數(shù)。
[設(shè)備號(hào)]:每個(gè)Modbus設(shè)備的編號(hào),通常從1到31依次編號(hào)。
[功能碼]:使用方法參見(jiàn)5.1,這里用功能碼0x10。
[初始寄存器高八位]、[初始寄存器低八位]、[寫(xiě)入寄存器數(shù)高八位]、[寫(xiě)入寄存器數(shù)低八位]各功能位意義與字面意思一致。
[寫(xiě)入的數(shù)據(jù)長(zhǎng)度]:該功能位標(biāo)明該位之后數(shù)據(jù)位的長(zhǎng)度。
[寫(xiě)入數(shù)據(jù)1高八位] [寫(xiě)入數(shù)據(jù)1低八位] [寫(xiě)入數(shù)據(jù)2高八位] [寫(xiě)入數(shù)據(jù)2低八位]……[寫(xiě)入數(shù)據(jù)n高八位][ 寫(xiě)入數(shù)據(jù)n低八位]各功能位意義與字面意思一致。
4.5.2 Modbus/TCP返回包格式
接收到返回的Modbus/TCP包格式和發(fā)送包格式類似,但是沒(méi)有[數(shù)據(jù)1高八位] [數(shù)據(jù)1低八位] [數(shù)據(jù)2高八位] [數(shù)據(jù)2低八位]……[數(shù)據(jù)n高八位][數(shù)據(jù)n低八位]功能位。
5 結(jié)語(yǔ)
Modbus/TCP協(xié)議是工業(yè)以太網(wǎng)技術(shù)最有發(fā)展前景的一種,研究和探討Modbus/TCP工業(yè)以太網(wǎng)技術(shù)及其在我國(guó)工業(yè)自動(dòng)化的應(yīng)用對(duì)提升我國(guó)工業(yè)自動(dòng)化企業(yè)的自動(dòng)化水平、提高企業(yè)綜合競(jìng)爭(zhēng)力、加快企業(yè)信息化建設(shè)和打破國(guó)際壟斷等方面都具有現(xiàn)實(shí)的意義。
參考文獻(xiàn)
[1] 佚名.工業(yè)以太網(wǎng)協(xié)助工廠向工業(yè)4.0時(shí)代過(guò)渡[J].智慧工廠,2018(10):20-21.
[2] 張玉鵬,溫蜜,李婧,等.面向Modbus的安全認(rèn)證通信機(jī)制分析[J].上海電力學(xué)院學(xué)報(bào),2017,33(4):372-377.
[3] 趙艷領(lǐng),韓丹濤,閆曉風(fēng).一種嵌入式KNX-Modbus TCP網(wǎng)關(guān)的實(shí)現(xiàn)方法[J].智能建筑與智慧城市,2016(7):66-68.