金 石,施偉鋒,張 威,李偉翔
(上海海事大學物流工程學院,上海 201306)
隨著技術的發展,電力系統的拓撲結構越來越復雜,傳統的依靠經驗進行故障判斷的方法已經滿足不了需要,依靠現代化設備進行故障診斷成為必然。而故障現象、數據的采集和處理方式也悄然發生了變化。
傳統的工業數據傳輸主要采用RS-232或RS-485接口,這就導致傳輸的距離短、速度慢,應用受到了限制。信息化今天,網絡已成為人們獲取各種信息的重要方式,在工業領域也是如此。而基于TCP的Modbus協議,由于它開放、簡單、易于理解且性能穩定,成為了工業以太網通訊的標準之一。
本文運用Matlab軟件編程實現了Modbus/TCP通訊,遠程實時采集下位機PLC中的數據,為故障的數據采集和處理打下了基礎。
Modbus協議是應用于工業電子控制設備上的一種通用協議。自從1979年Modicon公司(即現在的Schneider Electric施耐德公司)免費向社會開放了其開發的Modbus協議以來,由于其可以輕松地實現不同廠家的控制設備之間的通訊,Modbus在工業現場應用越來越廣。協議既支持傳統的RS-232、RS-485總線設備,也支持以太網總線設備[1]。本文中所采用的是基于以太網的Modbus通訊協議,即Modbus/TCP協議。Modbus/TCP是基于以太網技術和標準TCP/IP技術發展起來的。
Modbus/TCP是用于主從通訊方式的簡單的、開放式的網絡傳輸協議。基本的工作原理就是Modbus協議幀嵌入到TCP/IP下層的協議幀中,在物理層進行傳輸。因此Modbus/TCP可以被理解為以太網上的Modbus,不過是采用TCP/IP的標準,簡單地把Modbus信息包打包壓縮而已。這樣Modbus/TCP設備就可以通過以太網和光纖網絡進行連接和通信。與RS-485接口相比,Modbus/TCP還允許使用更多的地址、可以采用多主站架構、傳送速率可以達到GB/s的水平。Modbus/TCP網絡的從站數量僅受限于網絡物理層的能力。通常從站的最大數量一般在1024個左右。
與Modbus RTU或ASC的一個重要區別就是Modbus雖然包括了從站地址、功能碼和傳輸的數據,但是不需要校驗控制碼,這是因為Modbus/TCP校驗功能已經在TCP/IP協議和鏈路層的校驗機制得到了保證。
因為Modbus/TCP是一種應用層的協議,上層為Modbus協議,下層為TCP協議,它規定了網絡互聯節點間的請求/應答的通信方式。它的幀格式必須嚴格遵守協議所規定的ADU(Application Data Unit)格式,才能在以太網上實現數據的傳輸[2],[3],如圖 1 所示。

圖1 Modbus/TCP和標準Modbus傳輸幀的比較
MBAP(Modbus Application Protocol Header)幀頭采用的是TCP/IP專用的報文頭,以識別Modbus后續的數據單元。它一共有7個字節,是由4個標識符描述的,如表1。事務元標識符是Modbus請求/響應事物處理的標志碼;協議標識符標示Modbus協議;長度用于描述后續數據總字節數;單元標識符用于與串行鏈路上的其他遠程總線相區別。

表1 MBAP幀頭
功能碼規定了客戶端和服務器端需要執行的相關功能,可以分為位操作和字操作兩種。在Modbus協議的標準中,相應的功能與特定的功能碼已經定義好。實現標準的Modbus協議的關鍵就是使用正確的功能碼,如表2。之后的數據域,可長可短,所需的數據域大小是與之前的功能碼相關的。數據域一般由后續數據的長度、操作所對應的寄存器地址和寄存器數量三種數據構成[4]。

表2 功能碼舉例
另外,Modbus/TCP協議還有專用的端口號-502,利用TCP發送的所有Modbus/TCP ADU數據,都經過502端口發送。Modbus/TCP是唯一一個能分配到互聯網端口的工業以太網通訊協議。
Modbus/TCP數據幀和串行鏈路上的Modbus RTU有很大的區別:(1)它用單個字節的單元標識符取代了RTU中的從站地址;(2)TCP上攜帶Modbus信息時,可以將其報文分成多個信息包來發送,因MBAP中有報文的長度信息,方便接收者識別信息包的邊界;(3)接收者可以用驗證完成報文的方式來設計所有Modbus的請求和響應,例如,對于那些PDU(Protocol Data Unit)有固定長度的功能碼,僅功能碼就足夠表示完整的信息了[5]。
整個Modbus/TCP通信系統可以包括各種不同類型的設備:連在TCP/IP網絡上的Modbus/TCP工控機;TCP/IP網絡和串行鏈路之間的網關;以及負責數據采集的電子儀器和PLC等設備,如圖2所示。

圖2 通訊系統結構
所有連到Modbus通信網絡的設備都是通過Modbus協議來實現客戶端和服務器端之間的通信任務。網關等互聯設備的功能是把串行鏈路上的Modbus通信設備連入到Modbus/TCP網絡。
出于數據處理的需要,本文采用Matlab軟件。Matlab軟件是美國MathWorks公司出品的商業數學軟件,是用于算法開發、數據分析、計算的高級技術計算語言和交互式環境。它將數值分析、矩陣計算、科學數據可視化以及非線性動態系統的建模和仿真等諸多強大功能集成在一個易于使用的視窗環境中,為科學研究、工程設計以及必須進行有效數值計算的眾多科學領域提供了一種全面的解決方案,并在很大程度上擺脫了傳統非交互程序設計語言的編輯模式,代表了當今國際科學計算軟件的先進水平。
Matlab作為一種應用廣泛的科學計算軟件,不僅可以通過直接交互的指令和操作方式進行強大的數值計算、繪圖等,還可以像 C、C++等高級程序語言一樣,根據自己的語法規則來進行程序設計。編寫的程序文件以.m作為擴展名,稱之為M文件。本文編程方式即采用調用M文件函數的方式。
首先建立與外部Modbus傳輸設備的鏈接。

其次需要完成MBAP報文頭,事務元標識符按照默認0,占兩個字節;協議標識符按照默認0,占兩個字節;后續字節長度需要計算,占兩個字節;單元標識符為0xff,占一個字節,共7個字節。

接下來要填充數據,以讀單個線圈為例。由三部分組成:功能碼,讀單個線圈為03,一個字節;請求數據起始地址,兩個字節;請求數據長度,兩個字節。

接下來需要等待遠端Modbus主機的回復,處理傳回的數據。圖3為用網絡監測工具檢測得到的本地和遠端Modbus主機傳輸的數據。

圖3 網絡監測數據截圖


得到的數據的第六個字節為后續數據的長度,再往后數第三個字節為返回的寄存器的數據,每個數據由兩個字節組成。以下為處理數據的代碼。

最終,data為得到的傳輸數據。以上僅為讀取單個寄存器的舉例,實際應用中,為了實現快速讀取,采用的是將數據存放在連續的地址,一次讀取多個數據的方式,以實現數據的快速傳輸。
在實際應用中,本系統的結構如圖4所示。

圖4 系統結構圖
PM800系列電力數據監測儀,是由施耐德公司出品的先進的數字儀表設備。數據通過RS-485連通網關,再由施耐德公司的Twido型和M340型PLC采集整合。最后,PC端通過網絡遠程實時獲取電力檢測數據。
圖5為采樣得到的電機轉速數據圖。采樣時間間隔為0.2 s,可以將采樣得到的數據保存到Matlab的Workspace中進行進一步的處理。
圖6為電機調速時的電壓電流等數據。采樣時間間隔為1 s,左上方為遠程數據源的地址和端口,下邊是電壓電流值的實時曲線,右邊為實時數據顯示。
本文主要介紹了運用Matlab軟件實現Modbus/TCP通訊,實現了電力數據的遠程傳輸和遠程實時獲取,為在PC端運用Matlab軟件處理數據和進行遠程故障診斷創造了條件。對于有Modbus協議組網的現場設備,都可以通過此方式運用Matlab軟件進行數據處理,不僅方便了數據的采集和處理工作,同時,也發揮了Matlab軟件本身在數據計算和處理方面的巨大優勢。

圖5 電機轉速曲線

圖6 電壓電流數據
[1]蔣 近,毛六平,戴瑜興.基于Modbus和TCP/IP協議的遠程網絡通信[J].低壓電器,2005,(01):43-46.
[2]翁建年,張 浩,彭道剛,李 輝.基于嵌入式ARM的Modbus/TCP協議的研究與實現[J].計算機應用與軟件,2009,(10):36-38,68.
[3]郭振市,江 兵,李達平.Modbus/TCP通信協議在MATLAB/Simulink環境下的實現[J].微計算機信息,2011,(03):236-238.
[4]張海源,任春梅,張 冉.Modbus協議在電力系統中的應用[J].繼電器,2007,(17):31-34,57.
[5]高旭彬.基于MSP430單片機的Modbus協議軟件設計方法[J].工礦自動化,2013,(04):35-38.
[6]高旭彬.基于Modbus協議的數據采集系統上位機仿真軟件設計[J].電氣開關,2013,(04):44-47.