文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.179019
中文引用格式: 王毅璇,豐大軍,王皓,等. 跨平臺的上位機監控系統中數據通信的實現[J].電子技術應用,2017,43(10):94-98.
英文引用格式: Wang Yixuan,Feng Dajun,Wang Hao,et al. Implementation of data communicationin cross-platform supervisory control and data acquisition system[J].Application of Electronic Technique,2017,43(10):94-98.
0 引言
目前國產PLC上位機監控軟件廠家有西門子、施耐德、歐姆龍、三菱、橫河、臺達等,各類軟件均有各自的優勢,在國內PLC市場占有較大的份額。然而針對不同系統平臺和開發軟件所開發出的上位機監控系統之間兼容性較差,不能實現跨平臺的數據通信。這是由于系統平臺和開發軟件之間的耦合性較強造成的。
在上位機監控軟件系統的最底層(即網絡層),通信子系統負責與控制器間的數據通信以及操作員站之間的數據同步。通信子系統根據上位機監控軟件系統中配置子系統提供的系統構成信息,通過以太網完成系統中各個站點之間的狀態監控、組態同步、進程控制、文件維護等工作。而不同的PLC上位機監控系統中配置子系統提供的系統構成信息卻因系統平臺和開發軟件的不同而不同。
數據通信子系統接管上位機監控軟件系統內部上層應用軟件需要的所有數據通信和文件傳輸,并能夠以消息方式通知上層應用軟件。如果系統的構成信息有差異,則會導致上位機之間傳輸數據的紊亂。
對此,文獻[1]、[2]均通過在不同上位機軟件之間建立公共的Modbus協議來實現上位機之間通信數據的兼容。雖然Modbus在上位機通信當中使用較多,但中間需將數據轉換成公共“可識別”的數據,降低了通信效率。文獻[3]則是在不同的上位機之間建立以太網,把每個上位機系統當作自己的下層系統,從而實現數據的兼容轉換和傳輸。此種方法對以太網的傳輸效率和系統架構要求較高,不易實現。文獻[4]是在每個上位機監控系統中加裝GPRS通信模塊來實現快平臺的通信。GPRS由于其傳輸距離和本身可靠性的限制,在跨平臺的通信中較少應用。文獻[5]提出使用第三方監控軟件作為公共數據轉換平臺,這種方法和文獻[2]的方法類似,對第三方的系統要求較高且網絡架構較為復雜。
本文采用面向對象設計的方法實現跨平臺開發的上位機監控軟件系統中的數據通信子系統。首先對數據通信子系統進行了功能分析,然后進行了整體設計,并對子系統進行化整為零的模塊拆分,最后對各模塊的實現方式、方法提出參考方案,并進行較為詳細的闡述。
1 系統功能分析
數據通信子系統需要完成監控軟件系統中上層應用軟件需要的所有數據通信和文件傳輸,并能夠以消息方式通知上層應用軟件。數據通信內容包括站間狀態數據包、實時數據表數據包、歷史數據數據包、命令包、請求包等所有需要網絡傳輸的數據包,文件傳輸包含組態文件、配置文件、日志文件等所有需要網絡傳輸和同步的文件。
數據通信子系統通過進程控制命令包方式,對其他站的進程進行帶參數啟動、定時啟動、定時停止、監視等操控,通過站點控制命令包方式,對其他操作員站進行啟動在線、定時啟動在線、定時停止在線等操控。支持一對一和一對多的點對點通信,根據需要,分別提供可靠的TCP傳輸方式和非連接的UDP傳輸方式。TCP方式用于大數據塊的復制和同步,UDP用于少量數據的傳輸。原則是周期性數據用UDP,事件性的數據用TCP。支持優先級控制,不同的優先級數據包發送時按照高優先級先發送原則進行處理,保證重要數據優先發送。當數據包很大時,需分包處理,并自行控制以太網的網絡負荷。以太網網絡負荷最高不超過20%,以10%以下為佳。
2 系統總體設計
如圖1所示,數據通信子系統總體劃分為3個模塊:數據交互模塊、網絡操作模塊和網絡通信模塊。數據交互模塊管理數據的發送和接收,負責完成站與站之間TCP/UDP數據和文件的傳送,發送隊列管理和接收數據,并通知進程;網絡通信模塊用于上位機監控軟件站間各應用程序與傳送數據時的網絡通信接口,主要是發送接口函數、接收接口函數;網絡操作模塊主要完成提供遠程登陸、獲取網絡地址、指定站狀態功能,該模塊主要提供兩個接口函數,分別是獲取指定站的網絡連接狀態和獲取網絡地址。由于數據通信子系統同時支持Windows平臺和Linux平臺,為了解決平臺差異性和實現系統的低耦合性,網絡操作模塊和網絡通信模塊均采用動態鏈接庫形式實現。
當應用程序有數據、文件或者命令要發送到目的站時,先調用網絡操作動態庫中的相關函數,打通路徑;再調用網絡通信動態庫的相關函數將數據按照優先級放到不同的隊列中。數據交互模塊按照優先級算法查詢各個隊列,將各個隊列的數據發送到目的地址;當數據通信收到來自上位機監控系統的網絡數據時,先辨別是哪一類,如果是輸出型模擬量、輸出型數字量等數據,則將數據放到接口輸入隊列;如果是命令,則即刻通知目標應用程序;如果是給應用程序的內存數據,則將數據放到接收內存隊列,并馬上通知上層應用程序來接收處理。校時數據由歷史站主站周期發送給全網,其他站被動接收數據并修改自身的時鐘與歷史站主站保持一致。
當上位機監控軟件系統出現錯誤時,數據交互模塊會調用整個系統錯誤管理程序提供的接口函數顯示錯誤提示。發送和接收錯誤信息一律記入日志文件。為了保證整個系統的安全性,如果發生數據包太多、超過處理能力時,則依據數據包中的重要性信息丟棄一部分不重要的數據,但用于操作PLC的數字量信息包永遠不被丟棄。
3 數據交互模塊
該模塊主要接管上位機監控軟件系統與計算機之間數據的交互工作,包括命令、內存、文件的傳送。對TCP/UDP通信的發送和接收端口進行管理,進行點對點的通信。
接收到內存數據后,判斷數據類型再做處理:需要寫到共享內存隊列的,發送消息通知實時數據處理進程,包括操作數據包;如果是操作包,并且本機是歷史站的主站,則加上時間標簽放到操作數據隊列,通知實時數據處理模塊處理數據,另外還要將這個操作包放到數字量、模擬量輸出隊列,等待PLC驅動模塊處理,并調用數據通信模塊將其分發到其他機器上;需要寫到共享內存的數據,不需要通知應用程序;其他內存數據,送到后,先放到一個緩存,并通知對方接收數據;對于消息和命令,傳送至目標后直接發送到應用程序。接收到命令后先放到程序內部緩存,然后直接用消息通知給應用程序。
文件傳輸直接采用Linux/Windows平臺的文件拷貝命令或者文件序列化的方法。超過一定大小的文件需要先進行文件壓縮,然后再發送壓縮后的文件,并由目標機在其本地解壓縮。為防止變更集數據丟失,對重要數據傳輸采用TCP方式。全網傳送使用UDP組播或廣播方式。管理遠程登錄連接,文件傳送完畢要關閉連接,但為了防止反復的打開和關閉連接,使用超時機制,超時時間到才關閉連接。連接信息放在共享內存中。傳送以字節為單位進行,不修改數據包原來的數據精度。對于PC間內存同步數據,采用UDP傳送,數據包有可能丟失,但是同步數據每秒同步,下一秒的數據到來可以彌補丟失數據[6-8]。
4 網絡通信模塊
提供本機進程間的消息通信機制,調用公共函數可以在進程間任意發消息通知。該模塊提供發送通知、發送文件、發送內存、發送操作數據表、通知目標任務接收數據、接收數據的接口函數。如果數據發送失敗,采用消息方式通知調用任務(此功能在數據交互模塊中)。UDP數據包分為大包、中包和小包。TCP數據包沒有這些限制。數據通信與上位機監控軟件系統其他應用程序的接口包括3種:消息、內存和動態庫[9-12]。
4.1 本地消息實現
鑒于上位機監控軟件系統既要運行在Linux下又要運行在Windows下,但是兩個操作系統對消息的定義不同,所以采用Qt的本地Socket技術封裝上位機監控軟件自己的消息機制,實現進程間的消息通信,其對外接口形式采用近似Windows的消息方式。
本地消息通知分兩種,一種是傳遞消息值及消息參數,另一種是傳遞消息值及一小塊內存數據。實現時采用QlocalSocket類,封裝上述兩個函數并提供類對象,上位機監控軟件系統的所有進程都可以加載網絡通信動態庫,即可具備本地進程間的消息通知功能。發送通知的進程調用類對象的發送命令的函數發送通知,接收通知的進程只需定義本地接收通知的信號及對應信號處理函數即槽函數,即可收到并處理通知。通知傳送處理流程如圖2所示。
4.2 機器間的消息實現
機器間的消息通知亦采用Qt的Socket技術封裝上位機監控軟件自己的消息機制,實現不同機器進程間的消息通知。機器間消息通知亦分兩種,一種是傳遞消息值及消息參數,另一種是傳遞消息值及一小塊內存數據。實現時采用QUdpSocket類,封裝上述兩個函數并提供類對象,上位機監控軟件系統的所有進程都可以加載網絡通信動態庫,即可具備機器間進程的消息通知功能。發送通知的進程調用類對象的發送命令的函數發送通知,接收通知的進程只需定義遠程接收信號及對應槽函數,即可收到并處理通知。通知傳送處理流程如圖2所示。
4.3 機器間文件的發送實現
因為上位機監控軟件系統既要運行在Linux下又要運行在Windows下,所以機器間的文件傳送采用操作系統自身的遠程文件拷貝功能,需要根據操作系統的不同,采用不同的實現機制。在Windows平臺下,在上位機監控軟件系統安裝配置時,就創建上位機監控軟件專用的管理員賬戶,此賬戶所有計算機都一樣,利用系統默認的CS、DS等默認共享,如同操作本機文件一樣在各臺機器之間拷貝文件。在Linux平臺下,在上位機監控軟件系統中設置相同的root用戶密碼,并在系統啟動時,利用腳本打通各個機器之間的訪問路徑,然后如同操作本機文件一樣在各臺機器之間拷貝文件[13]。
4.4 機器間內存同步實現
機器間的共享內存同步,采用Qt的QUdpSocket技術封裝,實現不同機器間共享內存數據的同步。實現時采用QUdpSocket類,封裝上述函數并提供類對象,上位機監控軟件系統的所有進程都可以加載網絡通信動態庫,即可具備機器間共享內存的同步功能。需要同步共享內存的進程調用類對象的發送內存接口函數發送內存數據,函數根據數據區的大小,在最短的時間內分包發送數據,并且每個分包中都帶有此數據包內數據相對于原始共享內存頭部的偏移地址及分包的大小。接收發送內存通知的進程只需定義發送內存通知信號及對應信號處理函數(即槽函數)就能收到并處理內存數據,收到的內存數據根據偏移地址和大小,可以直接覆蓋本機的共享內存中對應部分的數據,實現內存的同步[14]。
4.5 機器間發送操作數據包實現
機器間發送操作數據包,采用Qt的QUdpSocket技術封裝并提供類對象,可以實現不同機器間操作數據包的發送。待發送操作數據包的進程調用類對象的發送操作數據接口函數來發送操作數據包。網絡上接收計算機上的進程只需定義接收操作數據的信號及該信號對應的信號處理函數即槽函數,即可收到并處理操作數據包。模擬量的畫面下發操作的數據包和數字量的置數操作的數據包采用不同的結構[15-16]。
其中包類型可以用于讓通信模塊識別來決定放到輸入接口隊列還是輸出接口隊列,數字量操作隊列有兩種:即畫面數字量操作包類型和非畫面數字量操作包類型,非畫面數字量操作包類型指的是人工置數數字量點。畫面操作包需要為之做輸出型數字量清零處理,非畫面操作包不能清零。這兩個數據包由操作員所在的操作員站寫入,但是時間標簽由歷史站主站打包數據時寫入,過程如圖3所示。
5 結論
本文主要介紹了基于國產PLC、支持跨平臺的上位機監控軟件系統中數據通信的實現方法。在實驗中對系統進行模塊拆分,并應用對每個模塊提出的新方法,實現了跨平臺的上位機數據通信。在對系統進行的長時段高負荷的運行驗證中,整個通信網絡表現出較強的穩定性、實時性和可靠性。
參考文獻
[1] 王雪艷.基于PLC和工控機的監控系統設計[J].煤炭技術,2012,31(1):63-64.
[2] 韓令斗,趙亮,張栗,等.基于PLC重鋪機組遠程監控系統的設計和實現[J].物聯網技術,2017,7(2):92-94.
[3] 高雪蓮,張國平,林光源,等.基于以太網的智能庫房監控系統上位機設計[J].電氣自動化,2017,7(2):92-94.
[4] 蔡桂龍,劉海燕,李勇.GPRS網絡通信與配變遠程監控系統[J].電力需求側管理,2017(1):92-94,112.
[5] 張濤,陳志軍.第三方軟件與監控系統遠程數據交互的應用[J].自動化儀表,2005,7(5):52-55.
[6] 徐忠.地鐵綜合監控系統中的數據交互共享方案研究[J].信息安全與技術,2012(3):79-81.
[7] 廖備水.流域梯級電站多監控系統數據交互模型的研究[D].西安:西安理工大學,2003.
[8] 蔣俊俊.基于信息智能聯盟的監控實時數據交互研究[D].南昌:華東交通大學,2015.
[9] 趙丹丹.無人駕駛智能車遠程監控系統[D].西安:西安工業大學,2014.
[10] 任海科.基于無線網絡通信的視頻監控系統終端數據業務軟件設計[D].杭州:浙江大學,2013.
[11] 王志曉.內網中網絡通信行為監控系統的設計與實現[D].西安:西安電子科技大學,2008.
[12] 方曉楠.基于網絡通信的JRU遠程監控系統[D].北京:北京郵電大學,2014.
[13] 李潮,員天佑.基于Modbus協議的監控系統網絡通信的實現[J].微計算機信息,2010,26(34):58-59.
[14] 毛建一,陳淵睿,伍堂順.基于Modbus協議的電能監控系統網絡通信的實現[J].工業控制計算機,2008,1(4):78-79.
[15] 榮建軍.基于ACE架構的網站信息監控系統[D].成都:電子科技大學,2008.
[16] 許倫輝,鄺先驗.網絡通信與數據庫技術在交通監控系統中的應用研究[J].計算機與現代化,2005,1(12):35-38.
作者信息:
王毅璇,豐大軍,王 皓,張曉莉
(華北計算機系統工程研究所,北京100083)