摘要:
工業(yè)控制已進(jìn)入網(wǎng)絡(luò)時(shí)代,在如今工控技術(shù)和工控產(chǎn)品百家爭(zhēng)鳴的時(shí)代,各種不同設(shè)備之間的通訊已成為一個(gè)系統(tǒng)的關(guān)鍵所在。Modbus工業(yè)網(wǎng)絡(luò)協(xié)議就是解決這一問(wèn)題的一種利器。本文簡(jiǎn)單闡述了Modbus協(xié)議的基本原理,并結(jié)合澀寧蘭輸氣管線SCADA系統(tǒng)中Modbus協(xié)議的實(shí)際應(yīng)用,介紹了Modbus應(yīng)用的一般方法和注意事項(xiàng)。
主題詞:
Modbus 幀 ASCII模式 RTU模式 SCADA RS-485
Modbus 協(xié)議是Modicon 公司開(kāi)發(fā)的一種數(shù)據(jù)通訊協(xié)議,通過(guò)這個(gè)協(xié)議,各種不同的設(shè)備和網(wǎng)絡(luò)可相互進(jìn)行通訊,由于其具有高度的可操作性和開(kāi)放性,Modbus 協(xié)議已經(jīng)成為一種通用性很強(qiáng)的工業(yè)控制網(wǎng)絡(luò)通訊協(xié)議。許多不同品牌、不同廠家的設(shè)備之間都可通過(guò)該協(xié)議交換數(shù)據(jù)。澀寧蘭輸氣管線SCADA系統(tǒng)應(yīng)用了多種通訊和網(wǎng)絡(luò)協(xié)議,使各種設(shè)備有機(jī)的結(jié)合在一起,成為一個(gè)完整的三級(jí)集散控制系統(tǒng),Modbus 協(xié)議是其中一種重要的協(xié)議。
Modbus 協(xié)議簡(jiǎn)介
一、 Modbus的通訊過(guò)程
Modbus協(xié)議定義了一種信息結(jié)構(gòu),這種信息結(jié)構(gòu)可以被所有支持該協(xié)議的各種設(shè)備在通訊時(shí)認(rèn)可和使用。它描述了控制器向其他設(shè)備發(fā)出查詢的過(guò)程以及其他設(shè)備如何進(jìn)行應(yīng)答,以及錯(cuò)誤的檢測(cè)和報(bào)告。
Modbus協(xié)議采用master-slave(主-從)的技術(shù)。在一個(gè)Modbus總線上,只能有一個(gè)master,而slave最多可有247個(gè),地址為1——247。進(jìn)行通訊時(shí),只有master才可以發(fā)起一個(gè)“查詢”,充當(dāng)slave的設(shè)備不斷的檢測(cè),當(dāng)檢測(cè)到有自己地址的“查詢”時(shí),就會(huì)向master發(fā)出一個(gè)“回應(yīng)”,或者根據(jù)master的命令采取相應(yīng)的動(dòng)作。當(dāng)master發(fā)出的“查詢”是一個(gè)“廣播”(地址碼為0)時(shí),所有的slave都執(zhí)行master的命令,但不向master發(fā)出回應(yīng)信息。
二、 Modbus的幀
在網(wǎng)絡(luò)通信中,數(shù)據(jù)都是以“包”(Packet)或 “幀”(Frame)的形式進(jìn)行傳輸,“包”和“幀”含義基本相同,均指通信中的一個(gè)數(shù)據(jù)塊。對(duì)于某種具體通信網(wǎng)絡(luò),一般使用術(shù)語(yǔ)“幀”。在Modbus協(xié)議中,引用了“幀”(Frame)作為通訊過(guò)程中的數(shù)據(jù)單位,Modbus中的“幀”由以下幾部分組成:
1、標(biāo)志位:表示一個(gè)“幀”的開(kāi)始。
2、地址位:表示該“幀”的信息是發(fā)給哪一個(gè)slave的,或是由哪個(gè)slave發(fā)出的信息。
3、功能代碼:表示指令,在Modbus協(xié)議中,有一系列代碼表示不同的指令,例如:代碼“3”表示讀數(shù)據(jù)。
4、數(shù)據(jù)位:是對(duì)功能代碼的進(jìn)一步補(bǔ)充與說(shuō)明,說(shuō)明指令的具體內(nèi)容。
5、校驗(yàn)位:CRC或LRC校驗(yàn)。
6、停止位:表示該“幀”的結(jié)束。
每部分的位數(shù)和表示方法依采取的模式不同而略有區(qū)別,下文將詳細(xì)論述。
三、 Modbus的兩種通訊模式
在Modbus協(xié)議中,依數(shù)據(jù)在傳輸?shù)倪^(guò)程中的具體形式不同,分為兩種模式:ASCII 和 RTU,采用哪種模式由用戶自己根據(jù)需要進(jìn)行選擇。在選擇時(shí),同一Modbus網(wǎng)絡(luò)中的所有設(shè)備的模式選擇必須一致。
1、 ASCII模式
ASCII(American Standard Code for Information Interchange),即美國(guó)信息交換標(biāo)準(zhǔn)代碼。在這種模式中,每個(gè)8比特的字節(jié)被轉(zhuǎn)換兩個(gè)ASCII字符進(jìn)行傳送。這種模式的主要優(yōu)點(diǎn)是傳送的每相鄰的兩字節(jié)之間允許最大的時(shí)間間隔是1秒。
表一:ASCII模式的幀格式在此幀中:
幀是以一個(gè)冒號(hào)(:)來(lái)做為開(kāi)始的標(biāo)志;以CRLF(carriage return-line feed即“回車-換行”)為結(jié)束標(biāo)志;
代碼系統(tǒng)采用十六進(jìn)制,ASCII字符0...9,A...F
每個(gè)ASCII字符由一個(gè)16進(jìn)制的字符組成;
每個(gè)字節(jié)中包括:1個(gè)開(kāi)始位;7個(gè)數(shù)據(jù)位(低位先傳送);1個(gè)奇偶校驗(yàn)位(無(wú)奇偶校驗(yàn)時(shí)為0位);1個(gè)(有奇偶校驗(yàn)時(shí))或2位(無(wú)奇偶校驗(yàn)時(shí))停止位;
ASCII模式采用LRC(縱向冗余校驗(yàn))檢錯(cuò)方法。
2、 RTU模式
RTU(Remote Terminal Unit),即遠(yuǎn)程終端單元,這種模式的特點(diǎn)是信息中每個(gè)8比特的字節(jié)被轉(zhuǎn)換為兩個(gè)4比特的十六進(jìn)制字符來(lái)傳輸。它的優(yōu)點(diǎn)是更大的數(shù)據(jù)密度使它在相同的波特率下比ASCII模式有更強(qiáng)的數(shù)據(jù)吞吐能力。
表二:RTU模式的幀格式在此幀中:
該幀是以一個(gè)相當(dāng)于至少3.5個(gè)字節(jié)傳輸時(shí)間的空閑做為開(kāi)始和結(jié)束的標(biāo)志;整個(gè)幀的所有數(shù)據(jù)必須連續(xù)傳送,如果中間間隔超過(guò)1.5個(gè)字符傳輸時(shí)間,接收設(shè)備會(huì)認(rèn)為下一個(gè)字符為一個(gè)新幀的開(kāi)始,即為一個(gè)地址碼;
代碼系統(tǒng)采用8位二進(jìn)制,十六進(jìn)制數(shù)0...9,A...F;
信息的每個(gè)8比特字符由兩個(gè)16進(jìn)制的字符組成;
每個(gè)字節(jié)中包括:一個(gè)開(kāi)始位;8個(gè)數(shù)據(jù)位(低位先傳送);1個(gè)奇偶校驗(yàn)位(無(wú)奇偶校驗(yàn)時(shí)為0);1個(gè)(有奇偶校驗(yàn)時(shí))或2位(無(wú)奇偶校驗(yàn)時(shí))停止位;
ASCII模式采用CRC(循環(huán)冗余校驗(yàn))檢錯(cuò)方法。
四、 Modbus與其他網(wǎng)絡(luò)的通訊
Modbus網(wǎng)絡(luò)可以通過(guò)設(shè)備內(nèi)置的部件或網(wǎng)絡(luò)適配器與其他兼容Modbus的網(wǎng)絡(luò)進(jìn)行通訊。在其他網(wǎng)絡(luò)上,Modbus協(xié)議的有關(guān)信息將被植入該網(wǎng)絡(luò)的幀或數(shù)據(jù)包結(jié)構(gòu)中,以完成信息的轉(zhuǎn)換,這種轉(zhuǎn)換還可以解譯節(jié)點(diǎn)的地址、路徑和檢錯(cuò)方法等。
在其它網(wǎng)絡(luò)上,控制器使用對(duì)等(peer-to-peer)技術(shù)通信,故任何控制器都能發(fā)起一個(gè)和其它控制器的通信。這樣在單獨(dú)的通信過(guò)程中,控制器既可作為主設(shè)備(master)也可作為從設(shè)備(slave)。多個(gè)內(nèi)部通道可允許多個(gè)傳輸進(jìn)程同時(shí)進(jìn)行。
在傳送消息時(shí),盡管網(wǎng)絡(luò)通信方法是“對(duì)等”的方式,但Modbus協(xié)議仍然遵循“主—從”原則。當(dāng)一個(gè)控制器發(fā)送一個(gè)消息,并期望從其他設(shè)備得到回應(yīng)時(shí),它是做為“主”設(shè)備,。同樣,當(dāng)該控制器接收到一消息,它將建立一個(gè)“回應(yīng)”格式的信息返回給發(fā)送的控制器。這時(shí),他充當(dāng)?shù)氖恰皬摹痹O(shè)備
Modbus 協(xié)議在澀寧蘭SCADA系統(tǒng)中的應(yīng)用
應(yīng)用原理
在澀寧蘭SCADA系統(tǒng)中,Modbus充當(dāng)?shù)氖沁B接流量計(jì)算機(jī)和PLC的數(shù)據(jù)橋梁。流量計(jì)算機(jī)從現(xiàn)場(chǎng)儀表采集相應(yīng)的數(shù)據(jù),計(jì)算出瞬時(shí)流量、累計(jì)流量等流量參數(shù),再通過(guò)Modbus將必要的數(shù)據(jù)傳至PLC中,經(jīng)PLC進(jìn)行必要的處理后,顯示在上位機(jī)上供生產(chǎn)運(yùn)行之用。流程如下圖:
圖1:流量參數(shù)的數(shù)據(jù)流向示意圖調(diào)試過(guò)程
一、 接線
澀寧蘭SCADA系統(tǒng)的PLC采用的是A-B公司的contrologix,其遠(yuǎn)程I/O機(jī)架上有一塊通訊模板,叫做MCM(Modbus Conmminication Model),即Modbus通訊模板。MCM模板在Modbus和PLC的背板之間充當(dāng)一個(gè)網(wǎng)橋,同時(shí)也是Modbus總線的Master。若干臺(tái)流量計(jì)算機(jī)與MCM模板按照RS-485接口標(biāo)準(zhǔn),通過(guò)DB9串口連接器連接成一個(gè)Modbus網(wǎng)絡(luò),接線圖如下(以兩臺(tái)流量計(jì)算機(jī)為例,多臺(tái)可順次并聯(lián)):
圖2:MCM模板與流量計(jì)算機(jī)通訊接線圖注意事項(xiàng):
1、 MCM模板提供的是RJ45的接口,可利用廠家提供的RJ45-- DB9轉(zhuǎn)接線,也可以直接用RJ45接線,方法為:RJ45玻璃體從前直視,自左向右依次為1-8,與DB9接頭1-8端一一對(duì)應(yīng)。本工程采用后者,好處是減少接線次數(shù),提高通訊的穩(wěn)定性。
2、 通訊介質(zhì)采用超五類屏蔽雙絞線,主要是考慮RJ45接頭的連接。我們?cè)趯?shí)驗(yàn)時(shí)曾用過(guò)一般導(dǎo)線,對(duì)通訊效果并無(wú)影響??梢?jiàn)Modbus對(duì)通訊介質(zhì)并無(wú)特殊要求。
3、 連線應(yīng)盡量短,夠用即可,不僅看起來(lái)整齊,而且對(duì)于不同設(shè)備間的通訊,盡量短的線總是穩(wěn)定性要好的多。
4、 導(dǎo)線一定要保證完好無(wú)損,接頭一定連接緊固,要反復(fù)測(cè)試確認(rèn)。因?yàn)樵谡{(diào)試過(guò)程中,任何一點(diǎn)的虛接都可能造成通訊的失敗,而且極難查找原因。一個(gè)可靠的硬件連接可省去調(diào)試過(guò)程中很多不必要的故障和故障查找的步驟。
5、 RS-485總線通訊在連線時(shí)只需遵循一個(gè)原則,那就是收對(duì)發(fā),發(fā)對(duì)收。確認(rèn)此連接無(wú)誤,若其他沒(méi)有問(wèn)題,一定會(huì)成功。
二、 設(shè)備組態(tài)
在此網(wǎng)絡(luò)中,MCM模板充當(dāng)Master,流量計(jì)算機(jī)為slave。對(duì)所用的MCM模板的端口設(shè)置如表三,流量計(jì)算機(jī)相應(yīng)端口設(shè)置如表四:
表三:MCM模板的端口設(shè)置
表四:流量計(jì)算機(jī)的端口設(shè)置 其他相關(guān)設(shè)置項(xiàng)根據(jù)實(shí)際需要進(jìn)行設(shè)置。
設(shè)備設(shè)置時(shí)一定要注意根據(jù)不同設(shè)備的不同要求,兩端的設(shè)置相對(duì)應(yīng)的項(xiàng)一定要相同。
三、 調(diào)試中出現(xiàn)的問(wèn)題及解決方法:
1、 在利用Modbus通訊的過(guò)程中,遇到這樣一個(gè)問(wèn)題,即浮點(diǎn)數(shù)的傳輸問(wèn)題。因?yàn)橐话愀↑c(diǎn)數(shù)都是32位,而Modbus總線中只能傳輸最多16位的數(shù)據(jù)。
解決方法:可以利用兩個(gè)整形數(shù)傳送一個(gè)浮點(diǎn)數(shù)(即將一個(gè)32位的二進(jìn)制數(shù)分割成兩個(gè)16位的二進(jìn)制數(shù)),傳送完以后,再將兩個(gè)整形數(shù)整合為一個(gè)浮點(diǎn)數(shù)。
2、 在調(diào)試過(guò)程中,當(dāng)數(shù)據(jù)傳輸至PLC中后,最初發(fā)現(xiàn)數(shù)據(jù)并不是原來(lái)的數(shù)值,而是一些莫名其妙的數(shù)據(jù),要么大的離譜,要么是負(fù)的多位數(shù)。
經(jīng)過(guò)反復(fù)的嘗試,終于發(fā)現(xiàn)問(wèn)題所在,原來(lái),在Modbus總線中,數(shù)據(jù)傳輸時(shí)是低位字節(jié)先傳送,傳送過(guò)來(lái)后如果不進(jìn)行交換,二進(jìn)制的數(shù)值排列是反向的,即原來(lái)的低字節(jié)在高位,高字節(jié)在低位,所以得到的數(shù)據(jù)和原數(shù)據(jù)相差甚遠(yuǎn)。只要將數(shù)據(jù)的高低位字節(jié)進(jìn)行交換(swap位置1<