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