文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.179011
中文引用格式: 徐一鳳,豐大軍,張瀚文,等. 基于跨平臺的實時數據處理系統的設計[J].電子技術應用,2017,43(9):98-100,105.
英文引用格式: Xu Yifeng,Feng Dajun,Zhang Hanwen,et al. The design of the real-time data processing system based on multi-platform[J].Application of Electronic Technique,2017,43(9):98-100,105.
0 引言
數據采集與監視控制系統(SCADA)是以計算機為基礎的生產過程控制與調度自動化系統,可以對現場的運行設備進行監視和控制。雖然SCADA系統從上世紀70年代誕生之初到現在已經經歷了幾代的發展,其與計算機硬件與操作系統的關系始終比較密切。在Windows上開發的SCADA系統不能運行于UNIX和LINUX操作系統上,反之亦然。在工控安全日益嚴峻的今天,對能夠運行于國產計算機和國產操作系統的自主可控SCADA系統的需求迫在眉睫[1]。本文設計的實時數據處理系統是SCADA系統的核心,采用跨平臺的軟件架構設計:硬件采用國產飛騰處理器的服務器和臺式機(或筆記本),操作系統采用國產中標麒麟,開發工具采用可跨平臺的Qt,支持在國產中標麒麟和Windows操作系統上跨平臺運行。
1 整體結構
數據采集與監視控制系統按照數據處理流程可分為四個層次:數據采集、實時數據處理、數據通信、數據顯示[2],如圖1所示。
數據采集子系統是SCADA系統與PLC控制器的接口部分,分為上行、下發兩個方向。上行方向通過實現PLC原始數據的獲取、協議解析,對現場測控設備的實時運行信息進行采集。下發方向通過實現協議封包和數據輸出,對現場測控設備進行調控。數據采集子系統作為SCADA系統的內部數據源,要求常年不間斷連續運行,必須具有高度的可靠性、穩定性、擴展性和強大的數據采集能力。
數據處理子系統負責對數據采集子系統采集的數據進行復雜的實時加工和處理,目的是將數據采集子系統的“生數據”加工成“熟數據”,即將采集的數據轉化為滿足上位機系統需要的、便于使用的數據結構,并且將數據存儲到實時數據表和歷史數據庫中。同時,上位機下發的控制指令也要經過數據處理子系統后才能下發至對應控制器,完成對測控設備的調控。數據處理子系統是SCADA系統的數據核心,同樣要求不間斷連續運行,必須具有高度的可靠性、實時性、魯棒性和強大的數據處理能力[3]。
數據通信子系統根據系統配置信息,通過以太網完成系統中各個站點之間的狀態監控、組態同步、進程控制、文件維護等工作,實時數據表的站間一致性和歷史數據訪問也需要借助數據通信子系統的數據傳輸功能。所有數據通信功能以API方式提供給各個上層應用調用,實現將底層的網絡功能和上層應用程序分離。
數據顯示子系統通過圖形界面的方式將現場設備的運行信息展現給用戶。通過圖形組態工具提供的圖元可以組成系統圖、流程圖、工藝圖、監控圖、趨勢圖、餅圖、棒圖、報表等各種形式,實現操作員和SCADA系統之間的友好交互。
2 功能及實現
2.1 功能結構
實時數據處理子系統負責對進入數據站的各種數據進行統一管理,將統一處理后的數據寫入SCADA系統的各個數據隊列,供系統內部的對應模塊使用。它的工作方式是事件驅動周期保護方式,實現方式是將Qt提供的消息機制和定時器相結合。采用Qt的實現方式使系統能夠跨平臺運行。當收到PLC通信驅動模塊的通知消息,或收到通信管理模塊的通知消息,或到了保護周期還沒有被驅動時,實時數據處理子系統開始讀取接口隊列中的數據,處理各個狀態點的數值和狀態,并將處理過的數據輸出到各個輸出內存中[4]。
系統中的數據采用集中收集、全網同步的處理方法,保證系統內部各種數據收集時間一致性。在主歷史站上,實時數據處理子系統讀取各個數據隊列中的數據,根據組態信息,處理系統數據的報警信息和狀態變位信息,并將處理結果寫入報警數據緩存和數字量狀態變位緩存,同時將所有數據的數值和狀態寫入實時表,如圖2所示。在非主歷史站(從歷史站、操作員站)上,實時數據處理子系統只需要管理本機的實時數據表,如圖3所示。
實時數據處理子系統的工作流程如圖4所示,數據采集子系統上傳的PLC數據經過數據處理模塊的處理后,分別產生報警和變位等數據狀態,報警點被報警處理模塊處理后寫入報警隊列中,同時寫入全記錄隊列,變位點直接寫入全記錄隊列中。所有上傳的數據都要經過實時處理模塊,產生其對應的狀態,并寫入實時數據表中。如果數據點的變化超過了歷史數據的死區設定,則寫入歷史數據隊列中。操作員的下發指令除了立即下發到指定控制器外,還要記錄到全記錄隊列中,同時進入實時數據處理,寫入實時數據表。
其中時間戳處理模塊在校時子系統保證下,為待處理的數據批量打上時標。模擬量處理模塊具有工程量程轉換、線性/非線性變換、零漂修正算法、數值死區處理等功能,每個功能可以采用模塊化設計。數字量處理具備取反功能。操作員指令處理模塊包含人工置數、遙調、遙控、在線修改數據點屬性等功能。人工置數、遙調、遙控支持對批量指令的處理,例如群控、順控處理。數據通信子系統對實時數據進行站間的同步處理,使得歷史主站和從站及操作員站上的數據和時間都能保證一致,避免系統數據的重復處理,提高系統性能[5]。
2.2 實現方式
實時數據處理子系統接收數據采集子系統采集數據的最快速率為50 ms,為了提高實時數據處理的速度,采用在共享內存中創建多個輸入與輸出隊列的方式。為了保證系統可以跨平臺運行,共享內存的實現采用Qt提供的QSharedMemory類。創建的隊列如下所示:
(1)采集數據隊列
數據采集子系統采集到的PLC控制器的數據寫入該隊列。
(2)操作數據隊列
SCADA的用戶操作和狀態的更新數據都寫入該隊列。
(3)報警數據隊列
實時數據處理模塊逐一處理接口隊列中報警點的報警信息,并將報警信息寫入報警數據隊列。寫入該隊列中的信息包括:報警發生信息、報警恢復信息、壞點報警。
(4)全記錄隊列
實時數據處理模塊在處理各個輸入接口隊列中的數據時,將需要記入全記錄中的信息寫入該隊列。
(5)歷史數據隊列
在歷史站主站上,實時數據處理模塊在處理采集接口隊列中的數據時,對于滿足收集條件的歷史點的數值和狀態寫入歷史數據隊列,該隊列將作為歷史數據收集模塊的輸入數據。歷史數據的收集條件為:①模擬量變化超過死區;②數字量變化滿足定義條件;③數值未變,但狀態發生了變化(這里的狀態是指任何一個系統定義狀態)。
隊列的實現方式相同,均采用循環隊列的方式,每個隊列都存放一個共享內存中。隊列的結構如圖5所示。
在對隊列的的操作過程中共有3種狀態,分別為:空狀態、正常讀寫狀態和溢出狀態,說明如下:
(1)空狀態:當隊列的讀指針等于寫指針時,則認為隊列為空。例如SCADA系統剛啟動時,沒有讀寫時隊列為空;或者SCADA系統運行時,數據處理速度快于寫入速度,導致隊列被讀空等情況,如圖6所示。
(2)正常讀寫狀態:讀指針追著寫指針,如圖7所示。
(3)溢出狀態:寫指針寫滿整個隊列,重頭開始寫,并追上了讀指針。
當要寫入的新包的長度將要覆蓋未處理或處理中的數據包,則隊列寫入模塊將新來的數據包丟棄,對該丟棄事件做報警記錄,并在下一次符合寫入條件時寫入一個全點包。如果要寫入數據包的長度需要覆蓋多個隊列中的數據包,則這多個數據包中只要有一個處于處理狀態,就屬于這種情況。如果此時數據處理啟動,則它連續處理未處理包,直到讀指針等于寫指針,如圖8所示。
3 結論
本文設計實現的實時數據處理系統的工作原理采用Qt的消息機制,當接收到數據采集子系統發送的數據消息后,進行采集數據的處理,當收到操作員指令消息后,進行下發數據的處理。數據的處理采用在共享內存中創建多個隊列的方式,使多個進程能夠方便快速地對隊列中的數據進行讀寫。Qt的實現方式使系統可以跨平臺運行。
參考文獻
[1] 陳曦,周峰,郝鑫,等.我國SCADA系統發展現狀、挑戰與建議[J].工業技術創新,2015(1):103-114.
[2] 宋新航.SCADA系統設計和實現[D].天津:天津大學,2009.
[3] ABBOTT R,GARCIA-MOLINA H.Scheduling real-time transactions:A performance evaluation[J].ACM Transactions on Database Systems,1992,2(3):513-560.
[4] OZDEMIR E,KARACOR M.Mobile phone based SCADA for industrial automation[J].Isa Transactions,2006,45(1):67-75.
[5] 呂炳潮,楊揚,伍民友.實時信息的理論研究及應用[J].計算機工程與設計,2010,31(18):4012-4014,4043.
作者信息:
徐一鳳,豐大軍,張瀚文,張 灣,趙德政
(華北計算機系統工程研究所,北京100083)