文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.180960
中文引用格式: 鐘洋洋,,王毅璇,王皓,,等. 跨平臺(tái)SCADA的歷史數(shù)據(jù)收集與存儲(chǔ)設(shè)計(jì)[J].電子技術(shù)應(yīng)用,,2018,44(12):111-114.
英文引用格式: Zhong Yangyang,,Wang Yixuan,,Wang Hao,et al. Historical data collection and storage design of cross-platform SCADA[J]. Application of Electronic Technique,,2018,,44(12):111-114.
0 引言
隨著現(xiàn)代化工業(yè)的不斷發(fā)展,,生產(chǎn)企業(yè)的規(guī)模越來越大,,對(duì)生產(chǎn)過程中的安全性和穩(wěn)定性要求越來越高。因此,,需要對(duì)整個(gè)生產(chǎn)過程進(jìn)行監(jiān)控,。將分散使用的儀器,、儀表、控制器等集中起來管理,,于是就產(chǎn)生了數(shù)據(jù)采集與監(jiān)視控制系統(tǒng),,又稱工業(yè)組態(tài)軟件(Supervisory Control And Data Acquisition,SCADA),??缙脚_(tái)SCADA的著重點(diǎn)在于系統(tǒng)在不同的操作系統(tǒng)平臺(tái)之間進(jìn)行移植,都能夠穩(wěn)定正常地運(yùn)行,。
組態(tài)軟件是用于數(shù)據(jù)采集與過程控制的專用軟件[1],,是位于自動(dòng)控制系統(tǒng)監(jiān)控層一級(jí)的軟件平臺(tái)和開發(fā)環(huán)境中,一般由數(shù)據(jù)采集與控制信息發(fā)送,、歷史數(shù)據(jù)記錄與趨勢顯示,、報(bào)警記錄及事件處理、報(bào)表生成和打印等部分組成,。其中,,歷史數(shù)據(jù)的收集和存儲(chǔ)是工業(yè)組態(tài)軟件不可或缺的一部分,用于記錄SCADA系統(tǒng)中各個(gè)控制器數(shù)據(jù)及狀態(tài)值,為控制系統(tǒng)的故障診斷與數(shù)據(jù)分析等提供數(shù)據(jù)依據(jù),。它主要服務(wù)于設(shè)備性能的維護(hù),、故障原因的診斷以及工藝流程的改進(jìn)。
理論上,,歷史數(shù)據(jù)是系統(tǒng)定時(shí)從實(shí)時(shí)數(shù)據(jù)庫中采樣,,保存到歷史數(shù)據(jù)庫中的數(shù)據(jù),用戶需要時(shí)可隨時(shí)從歷史數(shù)據(jù)庫中訪問歷史數(shù)據(jù)[2],。歷史數(shù)據(jù)存儲(chǔ)具有歷史數(shù)據(jù)量龐大,、歷史數(shù)據(jù)存儲(chǔ)的格式相對(duì)簡單固定以及數(shù)據(jù)保存的時(shí)間間隔相差很大等特點(diǎn)[3-4]。
目前,,組態(tài)軟件實(shí)時(shí)數(shù)據(jù)庫系統(tǒng)的一些主流產(chǎn)品一般都提供歷史數(shù)據(jù)收集和存儲(chǔ)功能,,能夠較長時(shí)間地保存、備份現(xiàn)場生產(chǎn)運(yùn)行的過程數(shù)據(jù),。但是由于工業(yè)生產(chǎn)現(xiàn)場的采集點(diǎn)多,、采集種類多樣以及采集時(shí)間周期較短,因而要保存的歷史數(shù)據(jù)量非常大,。就客觀而言,如果將這些數(shù)據(jù)直接存儲(chǔ),,不僅會(huì)占用大量的系統(tǒng)存儲(chǔ)空間,,而且會(huì)降低數(shù)據(jù)庫中數(shù)據(jù)的實(shí)時(shí)性,使數(shù)據(jù)的傳輸,、查詢變得困難,。因此需要改良目前歷史數(shù)據(jù)的收集和存儲(chǔ)方式,,不僅可以節(jié)省磁盤開銷,同時(shí)也保證對(duì)歷史數(shù)據(jù)訪問的快捷性[5],。
本文研究著重點(diǎn)在于如何將大量的實(shí)時(shí)數(shù)據(jù)有效地存入本地SQLite數(shù)據(jù)庫中,,采用關(guān)鍵幀和變更集的兩種方式進(jìn)行數(shù)據(jù)收集,在數(shù)據(jù)的質(zhì)量和存量方面找到平衡點(diǎn),,優(yōu)化現(xiàn)有的歷史數(shù)據(jù)收集存儲(chǔ)方式,。在Qt開發(fā)平臺(tái)上編寫程序,并且在Windows和Linux操作系統(tǒng)平臺(tái)上進(jìn)行實(shí)際驗(yàn)證,。
1 總體設(shè)計(jì)
設(shè)計(jì)整體分為歷史數(shù)據(jù)收集設(shè)計(jì)和歷史數(shù)據(jù)存儲(chǔ)設(shè)計(jì),。歷史數(shù)據(jù)收集主要負(fù)責(zé)從國產(chǎn)可編程邏輯控制器(Programmable Logic Controller,PLC)中采集到數(shù)據(jù)并存入內(nèi)存塊中,。歷史數(shù)據(jù)存儲(chǔ)主要負(fù)責(zé)將內(nèi)存塊中的數(shù)據(jù)經(jīng)過一定處理加工后存入本地SQLite數(shù)據(jù)庫中,,以便日后查詢所需??傮w設(shè)計(jì)框圖如圖1所示,。
本設(shè)計(jì)采用的數(shù)據(jù)庫是SQLite數(shù)據(jù)庫。SQLite是微型關(guān)系型嵌入式數(shù)據(jù)庫,,可獨(dú)立運(yùn)行且無需安裝和配置,,運(yùn)行速度塊,內(nèi)存占用小,,API易用性強(qiáng),,支持大部分SQL-92標(biāo)準(zhǔn),支持事物的ACID特性(持久性,、隔離性,、一致性和原子性),并且使用一個(gè)數(shù)據(jù)庫文件來存儲(chǔ)整個(gè)數(shù)據(jù)庫,,同一個(gè)數(shù)據(jù)庫文件可以在不同應(yīng)用平臺(tái)上使用,,代碼完全開源[6]。
2 歷史數(shù)據(jù)收集設(shè)計(jì)
歷史數(shù)據(jù)收集部分是上位機(jī)監(jiān)控軟件(SCADA)所具有功能的一部分,,是位于上位機(jī)軟件與國產(chǎn)PLC接口部分的上行方向,,實(shí)現(xiàn)對(duì)PLC原始數(shù)據(jù)的獲取、協(xié)議解析,,然后將數(shù)據(jù)存入內(nèi)存塊中,。其中,采用的數(shù)據(jù)收集方法是對(duì)死區(qū)限值壓縮算法的優(yōu)化,,衍生出關(guān)鍵幀和變更集兩種數(shù)據(jù)記錄方式,。
2.1 系統(tǒng)設(shè)計(jì)
歷史數(shù)據(jù)收集子系統(tǒng)與PLC設(shè)備的數(shù)據(jù)通信方式采用有線方式,使用100 Mb/s(含)以上的以太網(wǎng)通過國產(chǎn)控制器實(shí)現(xiàn)對(duì)現(xiàn)場測控設(shè)備實(shí)時(shí)運(yùn)行信息的采集,,將實(shí)時(shí)協(xié)議數(shù)據(jù)解析后存儲(chǔ)在內(nèi)存塊中,,再提交給上位機(jī)數(shù)據(jù)處理子系統(tǒng)處理,。
歷史數(shù)據(jù)收集子系統(tǒng)作為上位機(jī)監(jiān)控軟件的內(nèi)部數(shù)據(jù)源提供者,要求常年不間斷運(yùn)行,,實(shí)時(shí)獲取PLC設(shè)備運(yùn)行數(shù)據(jù),,所以必須具有高度的可靠性、穩(wěn)定性和擴(kuò)展性,,同時(shí)依據(jù)工業(yè)生產(chǎn)狀況,,也要具有強(qiáng)大的數(shù)據(jù)采集能力,其大致流程如圖2所示,。
功能說明如下:
(1)數(shù)據(jù)采集:通常采集工業(yè)生產(chǎn)運(yùn)行設(shè)備的模擬量輸入,、數(shù)字量輸入、脈沖量,;如有需要也可以采集模擬量輸出值和數(shù)字量輸出值,。且同時(shí)支持多個(gè)控制器、大數(shù)據(jù)量的采集,。采集的數(shù)據(jù)僅僅是數(shù)值,,沒有狀態(tài)和時(shí)間戳。采用定時(shí)機(jī)制采集數(shù)據(jù),,最小請(qǐng)求周期可設(shè)置為100 ms(或其整數(shù)倍)~1 s(由控制器傳輸量的多少?zèng)Q定),。
(2)協(xié)議解析:采用庫方式支持各種通信協(xié)議的解析,例如自有協(xié)議,、Modbus協(xié)議,、OPC協(xié)議等[7],每種協(xié)議或者規(guī)約采用獨(dú)立的庫,,實(shí)現(xiàn)設(shè)計(jì)要求中的擴(kuò)展性需求,。
(3)變更數(shù)據(jù)轉(zhuǎn)發(fā):解析后的采集數(shù)據(jù)臨時(shí)被放置于數(shù)據(jù)緩沖區(qū),一旦數(shù)據(jù)緩沖區(qū)中的數(shù)據(jù)發(fā)生了變化,,即達(dá)到存儲(chǔ)數(shù)組的最大下標(biāo)值,,則將變更的數(shù)據(jù)集提交給數(shù)據(jù)存儲(chǔ)子系統(tǒng),由數(shù)據(jù)存儲(chǔ)子系統(tǒng)進(jìn)一步對(duì)數(shù)據(jù)進(jìn)行加工處理,,加入狀態(tài)和時(shí)間戳[8]等操作,。
(4)診斷統(tǒng)計(jì):診斷功能是指周期性檢測控制器的主從狀態(tài)(PLC有主從冗余模式:存在兩個(gè)CPU模塊,主CPU運(yùn)行時(shí),,副CPU進(jìn)行備份),,采集數(shù)據(jù)和下發(fā)指令僅面向主控制器。另外診斷功能還負(fù)責(zé)與任務(wù)管理進(jìn)程通信,,告知其當(dāng)前進(jìn)程的運(yùn)行狀態(tài),;監(jiān)察對(duì)應(yīng)的通信接口工作狀態(tài),在發(fā)生故障時(shí)發(fā)出報(bào)警。統(tǒng)計(jì)功能指通信過程的調(diào)試記錄,、通信速率、傳輸字節(jié)數(shù)等附加功能,。
2.2 數(shù)據(jù)記錄
2.2.1 收集算法
收集子系統(tǒng)采用的算法原型是死區(qū)限值壓縮算法,,在其基礎(chǔ)上進(jìn)行優(yōu)化設(shè)計(jì)。
死區(qū)限值壓縮算法的原理是通過判斷當(dāng)前值偏離最后一個(gè)記錄的范圍是否大于死區(qū)限值,,來決定是否記錄此數(shù)據(jù),。如果大于死區(qū)限值,則記錄該數(shù)據(jù)并以此數(shù)據(jù)為新的起點(diǎn)進(jìn)行死區(qū)限制壓縮[9],。算法圖如圖3所示,。
設(shè)算法的門限值是T,起點(diǎn)A的值為V,,那么點(diǎn)A的死區(qū)范圍為區(qū)間(V-T,,V+T)。點(diǎn)A之后的點(diǎn)值只要沒有超出死區(qū)范圍就直接放棄,,直到F超出死區(qū)范圍,,成為新的起點(diǎn)[10]。
死區(qū)限值壓縮算法雖然能夠得到不錯(cuò)的壓縮率,,但是屬于有損壓縮,,在工業(yè)生產(chǎn)中,如果長期缺少某一點(diǎn)的數(shù)據(jù)信息是不合適的,,不利于后期分析問題,。所以為了確保穩(wěn)定記錄工業(yè)設(shè)備運(yùn)行時(shí)的數(shù)據(jù),在數(shù)據(jù)收集算法設(shè)計(jì)上,,對(duì)死區(qū)限值壓縮算法進(jìn)行優(yōu)化,,在保持原有算法思想不變的基礎(chǔ)上,增加獲取關(guān)鍵幀的數(shù)據(jù)收集方式,,定時(shí)收集全部采集點(diǎn)的數(shù)據(jù)信息,,形成關(guān)鍵幀和變更集兩種數(shù)據(jù)收集方式。
2.2.2 收集方式
在數(shù)據(jù)收集子系統(tǒng)中,,為了保證數(shù)據(jù)的準(zhǔn)確性,,同時(shí)確保收集的數(shù)據(jù)量也不至于過大,系統(tǒng)采用兩種數(shù)據(jù)收集方式:關(guān)鍵幀和變更集,。兩種方式在系統(tǒng)運(yùn)行時(shí),,同時(shí)進(jìn)行操作,互不干擾,。
(1)關(guān)鍵幀:操作員可以設(shè)定一定時(shí)間間隔(一般是15 min),,系統(tǒng)會(huì)每隔該時(shí)間值對(duì)所有要求收集的點(diǎn)信息全部記錄一遍。
(2)變更集:系統(tǒng)內(nèi)會(huì)自動(dòng)識(shí)別每一時(shí)刻采集點(diǎn)信息的數(shù)據(jù)值是否存在變化(系統(tǒng)設(shè)計(jì)時(shí),,將數(shù)據(jù)變化的閾值默認(rèn)設(shè)計(jì)為0),。數(shù)據(jù)如果存在變化,,系統(tǒng)會(huì)將該點(diǎn)信息記錄在內(nèi)存緩沖區(qū)中;反之,,系統(tǒng)將不會(huì)收集該點(diǎn)此時(shí)間點(diǎn)的信息數(shù)據(jù)值,,即系統(tǒng)只會(huì)收集此時(shí)間點(diǎn)變化的采集點(diǎn)信息數(shù)據(jù)值。
關(guān)鍵幀的優(yōu)勢在于保證采集點(diǎn)信息的完整性,,不會(huì)存在長時(shí)間缺失某一點(diǎn)信息的情況,。同時(shí),變更集的優(yōu)勢在于優(yōu)化存儲(chǔ)采集點(diǎn)信息的數(shù)據(jù)量,。兩種方式共同作用,,優(yōu)勢互補(bǔ),提高歷史數(shù)據(jù)收集效率,,將收集的數(shù)據(jù)量控制在合適的范圍內(nèi),。
在Qt開發(fā)平臺(tái)上,采用設(shè)計(jì)原理,,編寫程序?qū)煞N方式結(jié)合在一起,,具體流程圖如圖4所示。
3 歷史數(shù)據(jù)存儲(chǔ)設(shè)計(jì)
歷史數(shù)據(jù)存儲(chǔ)子系統(tǒng)負(fù)責(zé)對(duì)數(shù)據(jù)收集子系統(tǒng)收集的數(shù)據(jù)進(jìn)行實(shí)時(shí)的處理和存儲(chǔ),,目的是將數(shù)據(jù)收集子系統(tǒng)的“生數(shù)據(jù)”加工成“熟數(shù)據(jù)”,,即轉(zhuǎn)化為滿足上位機(jī)系統(tǒng)真正需要的數(shù)據(jù)結(jié)構(gòu),并且將數(shù)據(jù)存儲(chǔ)到歷史庫中,,便于以后查詢,。
3.1 工作方式
當(dāng)接收到數(shù)據(jù)收集子系統(tǒng)的轉(zhuǎn)發(fā)模塊發(fā)送來的消息通知后,系統(tǒng)會(huì)對(duì)數(shù)據(jù)進(jìn)行處理和存儲(chǔ)操作,,大致流程如圖5所示,。
關(guān)鍵模塊說明:
(1)時(shí)間戳處理:在校時(shí)子系統(tǒng)保證下,為待處理的數(shù)據(jù)批量打上時(shí)標(biāo),,標(biāo)明該批數(shù)據(jù)采集的時(shí)刻,,為后來操作提供幫助。
(2)模擬量處理:具備工程量程轉(zhuǎn)換,、線性/非線性變換,、零漂修正算法、數(shù)值死區(qū)處理等功能,,每個(gè)功能可以采用模塊化設(shè)計(jì),。
(3)數(shù)字量處理:具備取反功能。
(4)報(bào)警處理:檢查收集的數(shù)據(jù)是否存在異常,,如有異常即報(bào)警提示工作人員,。
3.2 關(guān)鍵環(huán)節(jié)
歷史數(shù)據(jù)存儲(chǔ)系統(tǒng)的關(guān)鍵環(huán)節(jié)分為實(shí)時(shí)數(shù)據(jù)存儲(chǔ)至內(nèi)存緩沖區(qū)中和數(shù)據(jù)從內(nèi)存緩沖區(qū)中轉(zhuǎn)存至本地SQLite數(shù)據(jù)庫兩部分。
(1)第一部分
當(dāng)收集子系統(tǒng)運(yùn)行并有數(shù)據(jù)到來時(shí),數(shù)據(jù)存儲(chǔ)子系統(tǒng)會(huì)自動(dòng)識(shí)別并在本地磁盤固定位置新建數(shù)據(jù)庫文件,。數(shù)據(jù)庫文件是以此刻設(shè)備時(shí)間值為起始,,以數(shù)據(jù)庫文件記錄結(jié)束時(shí)間值為終止的方式進(jìn)行命名。在存儲(chǔ)系統(tǒng)運(yùn)行時(shí),,一般是以10 min的時(shí)間跨度來新建一個(gè)數(shù)據(jù)庫文件,。如果數(shù)據(jù)記錄時(shí)間跨度不等于10 min,系統(tǒng)會(huì)以當(dāng)時(shí)結(jié)束時(shí)間值來替換新建該數(shù)據(jù)庫文件時(shí)的結(jié)束時(shí)間值,。文件命名形式例如RECORD_20180130014305_20180130014510。數(shù)據(jù)庫文件新建完成后,,并不會(huì)立刻寫入數(shù)據(jù),,而是等到有內(nèi)存切換的情況,才進(jìn)行寫入操作,。
同時(shí),,系統(tǒng)開辟兩個(gè)內(nèi)存緩沖區(qū)memA和memB,用于臨時(shí)存儲(chǔ)從收集子系統(tǒng)到來的數(shù)據(jù),。為了使該子系統(tǒng)存儲(chǔ)和轉(zhuǎn)存能夠不停地進(jìn)行,,故生成兩塊內(nèi)存區(qū)域:當(dāng)memA存滿時(shí),系統(tǒng)就會(huì)自動(dòng)切換到memB繼續(xù)進(jìn)行存儲(chǔ),,而memA就會(huì)進(jìn)行數(shù)據(jù)轉(zhuǎn)存至本地?cái)?shù)據(jù)文件的過程,。對(duì)于單個(gè)點(diǎn)信息數(shù)據(jù),系統(tǒng)采用結(jié)構(gòu)體數(shù)組的形式進(jìn)行存儲(chǔ),,數(shù)組的下標(biāo)是根據(jù)當(dāng)前時(shí)間值經(jīng)過一定數(shù)學(xué)變化來確定的,,部分代碼如下所示:
pst=(tsmp/(m_isMsec ?1 :1000) )/m_secCount ;
index=(tsmp/(m_isMsec?1:1000) ) %m_secCount ;
該結(jié)構(gòu)體數(shù)組就是位于當(dāng)前內(nèi)存塊的空間中,系統(tǒng)會(huì)設(shè)定數(shù)組的大小,,當(dāng)數(shù)組下標(biāo)值達(dá)到設(shè)定值后,,系統(tǒng)就會(huì)發(fā)送信號(hào),觸發(fā)響應(yīng)函數(shù),,自動(dòng)切換到另一塊內(nèi)存緩沖區(qū)中,。
(2)第二部分
當(dāng)存在一塊內(nèi)存空間存滿后,系統(tǒng)會(huì)自動(dòng)切換內(nèi)存塊,,并利用Qt的信號(hào)和槽機(jī)制對(duì)存滿的內(nèi)存塊進(jìn)行轉(zhuǎn)存至數(shù)據(jù)庫操作,對(duì)另一個(gè)內(nèi)存塊會(huì)繼續(xù)進(jìn)行數(shù)據(jù)收集操作,。實(shí)現(xiàn)的部分代碼如下所示:
if(mem== memA)
{
mem= memB;
}
else
{
mem= memB;
}
cleanCache(mem);
m_pst.position = 0;
m_pst.index = 0;
對(duì)于當(dāng)前進(jìn)行數(shù)據(jù)轉(zhuǎn)存至數(shù)據(jù)庫操作的內(nèi)存塊,因?yàn)槠渲写嬖谀M量和數(shù)字量數(shù)據(jù),,所以系統(tǒng)會(huì)進(jìn)行轉(zhuǎn)存哈希表,、區(qū)分?jǐn)?shù)據(jù)和存入數(shù)據(jù)庫等處理,最后形成完整的數(shù)據(jù)文件,,存在本地磁盤中,。
數(shù)據(jù)庫中存在兩種數(shù)據(jù)文件表:模擬量和數(shù)字量,對(duì)兩種數(shù)據(jù)分別進(jìn)行存儲(chǔ),利于后期對(duì)數(shù)據(jù)庫查詢操作,。
4 結(jié)束語
本文主要介紹關(guān)于歷史數(shù)據(jù)收集和存儲(chǔ)設(shè)計(jì)的思想,、關(guān)鍵方法以及實(shí)現(xiàn)。編寫的數(shù)據(jù)收集和存儲(chǔ)系統(tǒng)在基于Windows和Linux操作平臺(tái)的實(shí)際運(yùn)行中對(duì)國產(chǎn)PLC的數(shù)據(jù)采集和存儲(chǔ)操作都能正常穩(wěn)定進(jìn)行,,性能指標(biāo)都達(dá)到設(shè)計(jì)要求,。
參考文獻(xiàn)
[1] 嵇月強(qiáng).工業(yè)歷史數(shù)據(jù)庫的研究[D].杭州:浙江大學(xué),2007.
[2] 徐國風(fēng).實(shí)時(shí)數(shù)據(jù)庫關(guān)鍵技術(shù)研究[D].西安:西安建筑科技大學(xué),,2006.
[3] 江勇,,王文海,張龍旗.組態(tài)軟件中歷史數(shù)據(jù)存儲(chǔ)與查詢的一種新方法[J].江南大學(xué)學(xué)報(bào)(自然科學(xué)版),,2005,,4(6):579-583.
[4] 張?jiān)?組態(tài)軟件中的歷史數(shù)據(jù)處理過程[J].福建電腦,2010(9):81-82.
[5] 任寶強(qiáng).監(jiān)控組態(tài)軟件實(shí)時(shí)數(shù)據(jù)庫系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].保定:華北電力大學(xué),,2009.
[6] 張欣.嵌入式數(shù)據(jù)庫在嵌入式設(shè)備中的研究和應(yīng)用[D].成都:電子科技大學(xué),,2012.
[7] 陳騫,劍強(qiáng),,汪鐳,,等.關(guān)于OPC UA的歷史數(shù)據(jù)獲取[J].微型電腦應(yīng)用,2010,,26(2):35-37.
[8] 王凌峰,,吳海鑫,陳彥彪,,等.工控組態(tài)軟件中數(shù)據(jù)處理的設(shè)計(jì)和實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,,2000,16(2):33-35.
[9] 陳騫.基于工業(yè)實(shí)時(shí)數(shù)據(jù)的壓縮算法研究[J].科協(xié)論壇,,2009(9):106-108.
[10] 金陳武.基于WoT的傳感器數(shù)據(jù)管理技術(shù)[D].北京:北京郵電大學(xué),,2014.
作者信息:
鐘洋洋,王毅璇,,王 皓,,傅一帆
(華北計(jì)算機(jī)系統(tǒng)工程研究所,北京100083)