陳騫,劍強,汪鐳,胡飛凰,吳啟迪
OPC(OLE for Process Control)技術(shù)在當今過程控制領(lǐng)域,是一種非常流行的數(shù)據(jù)交換技術(shù)。但是隨著技術(shù)的發(fā)展和設(shè)備的革新,企業(yè)在應(yīng)用OPC技術(shù)的過程中又遭受到重重難關(guān),OPC技術(shù)自身的缺陷成了企業(yè)進一步發(fā)展壯大的瓶頸。首先是它的COM基礎(chǔ),使開發(fā)過程受到限制;其次是OPC規(guī)范的局限性,沒有提供必要的網(wǎng)絡(luò)安全性、協(xié)同互操作性及可靠性;再次是現(xiàn)行OPC平臺不獨立,它受限于Microsoft 公司的操作系統(tǒng),對Linux、OS等系統(tǒng)缺乏支持?;谶@種情況,OPC基金會推出了新一代OPC UA(OPC Unified Architecture)規(guī)范。
OPC UA 是一個新的工業(yè)軟件應(yīng)用接口規(guī)范,其目的在于提出一個企業(yè)制造模型的統(tǒng)一對象和架構(gòu)定義,具有跨平臺、增強命名空間、支持復(fù)雜數(shù)據(jù)內(nèi)置、大量通用服務(wù)等新特點。
OPC UA規(guī)范由十三部分構(gòu)成,其中主要的核心規(guī)范為Data Access,Alarm & Conditions,Historical Access三部分。每種規(guī)范對應(yīng)著一種類型的服務(wù)器和客戶程序的開發(fā),它們的區(qū)別是實現(xiàn)功能的側(cè)重點不同。
其中,歷史存取(Historical Access)服務(wù)器包括歷史數(shù)據(jù)存取和歷史事件存取兩部分,歷史數(shù)據(jù)存取是指將不同應(yīng)用層次的實時數(shù)據(jù)用統(tǒng)一的標準集成起來,保存在數(shù)據(jù)存儲器中,然后根據(jù)客戶程序需求訪問指定的歷史數(shù)據(jù);歷史事件存取是指將警報和條件規(guī)范中得到的事件保存起來,以供客戶程序訪問。
OPC UA規(guī)范作為新一代的OPC技術(shù),勢必將廣泛應(yīng)用在實際工業(yè)生產(chǎn)流程中。如今的工業(yè)信息量在膨脹式增長,在整個流程工業(yè)中所集成的數(shù)據(jù)采集點數(shù)通常有幾千到十幾萬,數(shù)據(jù)采集間隔要達到毫秒級,數(shù)據(jù)量很大,為了使工業(yè)生產(chǎn)系統(tǒng)快速、有效地管理數(shù)據(jù),提高磁盤存儲效率以及查詢性能,必須要有一套高效的數(shù)據(jù)存儲機制來保存歷史數(shù)據(jù)。
歷史數(shù)據(jù)的存取需要數(shù)據(jù)存儲器來管理數(shù)據(jù),數(shù)據(jù)存儲器可以使用文件系統(tǒng),也可以使用關(guān)系數(shù)據(jù)庫,比如SQL Server。 OPC UA規(guī)范描述了歷史訪問服務(wù)器要實現(xiàn)的功能,不涉及服務(wù)器的內(nèi)部實現(xiàn)。歷史數(shù)據(jù)是基于時間的一些連續(xù)模擬量或數(shù)字量(比如溫度、壓力、流量、閥門開關(guān)等) ,完全不同于普通關(guān)系數(shù)據(jù)庫處理的那些離散的、非連續(xù)的、不基于時間的二維關(guān)系表數(shù)據(jù)(比如訂單信息、財務(wù)信息、人事管理信息等)。
因此,本文采用文件系統(tǒng)作為數(shù)據(jù)存儲器,在符合規(guī)范定義的條件下,通過存儲過程、存儲方式和查詢過程三部分給出一種歷史數(shù)據(jù)的存取機制,并設(shè)計了一種文件結(jié)構(gòu),以便客戶程序準確高效地處理歷史數(shù)據(jù)。
數(shù)據(jù)存儲過程分為四個部分完成,首先是將從現(xiàn)場設(shè)備采集的歷史數(shù)據(jù)進行過濾操作,接著是歷史數(shù)據(jù)的壓縮處理,然后是內(nèi)存數(shù)據(jù)操作,包括隊列和緩沖區(qū)的設(shè)計,最后是將緩沖區(qū)的內(nèi)存數(shù)據(jù)歸檔到磁盤文件,如圖 1所示給出數(shù)據(jù)存儲過程的流程圖:
1) 來自不同設(shè)備的數(shù)據(jù)首先要進行過濾,使?jié)M足要求的數(shù)據(jù)被傳送;過濾操作設(shè)置三個參數(shù):過濾最小偏差、過濾最大偏差、最小時間偏差:
過濾最小偏差:當前數(shù)據(jù)和上一個數(shù)據(jù)之間的絕對差值的最小規(guī)定,此參數(shù)限定可以過濾一些變化率較小的數(shù)據(jù)。
過濾最大偏差:當前數(shù)據(jù)和上一個數(shù)據(jù)之間的絕對差值的最大規(guī)定,此參數(shù)限定可以過濾一些異常的數(shù)據(jù)。
最小時間偏差:當前數(shù)據(jù)和上一個數(shù)據(jù)過濾的時間偏差的最小規(guī)定,此參數(shù)限定可以避免部分現(xiàn)場噪音的干擾。
2) 當新數(shù)據(jù)與前一數(shù)據(jù)的絕對差值在設(shè)定的過濾最小偏差和過濾最大偏差之間并且兩個數(shù)據(jù)的時間差大于或等于給定的最小時間偏差,新數(shù)據(jù)將通過過濾而送往歷史數(shù)據(jù)源隊列過濾完的數(shù)據(jù)送到歷史數(shù)據(jù)源隊列中成為需要歸檔的歷史數(shù)據(jù)源, 為了確保高效的數(shù)據(jù)存儲,需要對歷史數(shù)據(jù)進一步壓縮處理;
3)通過壓縮的數(shù)據(jù)被送到位于內(nèi)存中的歸檔數(shù)據(jù)隊列中,歸檔數(shù)據(jù)隊列對送往歸檔文件的數(shù)據(jù)進行緩沖:歸檔過程使用定時器定時將數(shù)據(jù)傳送;如果歸檔數(shù)據(jù)隊列已滿并且歸檔過程不可用時,歸檔數(shù)據(jù)隊列將會把數(shù)據(jù)寫入臨時磁盤文件,等歸檔可用時再轉(zhuǎn)存入歸檔文件中;
為了降低與磁盤的操作頻率,從歸檔數(shù)據(jù)隊列出來的數(shù)據(jù)將被送往歸檔緩沖區(qū)。系統(tǒng)為每個屬性ID設(shè)定一個緩沖區(qū),當歸檔緩沖區(qū)中數(shù)據(jù)達到一定值,則將這些數(shù)據(jù)以數(shù)據(jù)塊形式一起寫入磁盤歸檔文件存儲。
圖1 實時數(shù)據(jù)的存儲過程
由于歷史數(shù)據(jù)的采集、處理、存儲和查詢都有較高的時間要求,數(shù)據(jù)的存儲方式按照OPC UA標準采用網(wǎng)絡(luò)數(shù)據(jù)模型,將數(shù)據(jù)的索引和結(jié)構(gòu)分為設(shè)備、數(shù)據(jù)ID和數(shù)據(jù)其他信息三級,其中設(shè)備和數(shù)據(jù)ID作為索引結(jié)構(gòu)存儲,數(shù)據(jù)其他信息以數(shù)據(jù)塊的形式存儲。
存儲設(shè)備數(shù)據(jù)的每一條歷史數(shù)據(jù)記錄需要包含四個字段:ID,Status Code,Value,Time。ID表示每個標簽點(測量點)的標識符,在同一系統(tǒng)中每個標簽點的ID是唯一的;Status Code表示實時歷史數(shù)據(jù)的質(zhì)量碼,OPC UA規(guī)范書定義質(zhì)量碼為32位的無符整型;Value表示實時歷史數(shù)據(jù)的數(shù)值,根據(jù)設(shè)備數(shù)據(jù)的數(shù)據(jù)類型用不同的結(jié)構(gòu)來存儲;Time表示實時歷史數(shù)據(jù)的時間戳,在存儲過程中,Time采用差分法表示,索引字段中存儲時間基準值,數(shù)據(jù)字段中存儲時間偏移量(以毫秒為單位的整型變量)。
本文設(shè)計的文件結(jié)構(gòu)有如下特點:
歷史數(shù)據(jù)按時間段分為多個文件保存,每個文件保存一段時間內(nèi)的歷史數(shù)據(jù),文件大小可根據(jù)需要設(shè)置,文件路徑根據(jù)時間范圍保存在索引文件中
索引結(jié)構(gòu)采用分級索引,包括外部索引和內(nèi)部索引兩部分,其中內(nèi)部索引和同一段時間內(nèi)的數(shù)據(jù)保存在相同文件中,外部索引保存在索引文件中
實時歷史數(shù)據(jù)的ID與其它數(shù)據(jù)在文件內(nèi)分開保存,便于在查詢過程中快速定位所需標簽點數(shù)據(jù)的位置
存儲系統(tǒng)包括兩種類型的文件:“索引文件”和“數(shù)據(jù)文件”。索引文件記錄所有數(shù)據(jù)文件的基本信息,在系統(tǒng)中是唯一的;
數(shù)據(jù)文件記錄實際的歷史數(shù)據(jù)。
索引文件由外部索引項構(gòu)成,每一項對應(yīng)一個數(shù)據(jù)文件。索引項中的內(nèi)容包括與其相對應(yīng)的數(shù)據(jù)文件的開始時間、結(jié)束時間和文件路徑。
在查詢過程中,使用索引文件可以快速定位查詢條件中時間范圍內(nèi)數(shù)據(jù)所在文件的路徑,結(jié)構(gòu)如下圖所示:
圖2 文件結(jié)構(gòu)圖
數(shù)據(jù)文件由文件頭、設(shè)備組索引區(qū)、標簽點索引區(qū)、時間索引區(qū)和數(shù)據(jù)區(qū)五部分構(gòu)成
5.2.1 文件頭
文件頭包含此文件的基本信息,其大小固定以便于數(shù)據(jù)讀寫操作,如下圖結(jié)構(gòu)所示:
圖3 文件頭結(jié)構(gòu)
設(shè)備組索引區(qū)的每一項包括設(shè)備名稱號和對應(yīng)設(shè)備的標簽點索引區(qū)的初始位置,大小由文件頭的最大設(shè)備組數(shù)決定;標簽點索引區(qū)的所有項按設(shè)備種類分塊順序存儲,每一項都包括歷史數(shù)據(jù)的ID和對應(yīng)的時間索引區(qū)初始位置及當前使用位置,為了提高查詢效率,同一個設(shè)備的ID按升序排列。結(jié)構(gòu)圖如下所示:
圖4 設(shè)備組、標簽點索引區(qū)結(jié)構(gòu)圖
5.2.3 時間索引區(qū)&數(shù)據(jù)區(qū)
時間索引區(qū)的每一項包括對應(yīng)數(shù)據(jù)塊的開始時間和結(jié)束時間,數(shù)據(jù)塊在文件中的位置,以及同一個標簽點使用的下一個時間索引項的位置。這樣,每個標簽點使用的時間索引形成一個鏈表。
數(shù)據(jù)區(qū)是由數(shù)據(jù)塊構(gòu)成的,每個數(shù)據(jù)塊存儲標簽點的時間偏移量(相對于時間索引區(qū)的開始時間)、質(zhì)量碼和數(shù)據(jù)值;數(shù)據(jù)塊的大小由歸檔緩沖區(qū)的大小決定,并且以數(shù)據(jù)塊為基本單位進行數(shù)據(jù)讀取,結(jié)構(gòu)如圖5所示:
圖5 時間索引區(qū)&數(shù)據(jù)區(qū)結(jié)構(gòu)圖
數(shù)據(jù)查詢有很多種類型,一般查詢部分標簽點的一段時間的歷史數(shù)據(jù),查詢條件為標簽點的ID和時間范圍。根據(jù)前面數(shù)據(jù)存儲過程和文件結(jié)構(gòu)的描述,數(shù)據(jù)查詢過程可以分為以下幾步:
第一步:根據(jù)查詢條件的時間范圍,在索引文件中得到數(shù)據(jù)所在的文件路徑;
第二步:讀取上一步得到的文件,根據(jù)查詢條件的標簽點 ID,利用內(nèi)部索引結(jié)構(gòu)的設(shè)備組索引和標簽點索引,得到指定標簽點數(shù)據(jù)的時間索引位置;
第三步:讀取上一步得到的時間索引區(qū),根據(jù)查詢條件的時間范圍得到查詢所需的數(shù)據(jù)塊位置;
第四步:讀取上一步得到的數(shù)據(jù)塊,將所需數(shù)據(jù)信息寫入查詢結(jié)果數(shù)組。
根據(jù)前面的存儲機制和文件結(jié)構(gòu)描述,測試在P43.0G,512M 內(nèi)存的電腦上實驗,采用 VS2005為程序平臺,用VC++的控制臺應(yīng)用程序?qū)崿F(xiàn)數(shù)據(jù)存取功能的模擬,并且通過線程和定時器實現(xiàn)存儲過程,文件的存儲和查詢用二進制數(shù)據(jù)流形式。為了便于控制和測試,數(shù)據(jù)源用定時采集到的周期為30s的模擬數(shù)據(jù)表示,結(jié)構(gòu)符合第四部分的存儲方式要求。下面分別用表格的形式給出存取指定數(shù)據(jù)個數(shù)所花費的時間及單位時間的存取效率。
表1 數(shù)據(jù)存儲的性能測試表
表2 數(shù)據(jù)查詢的性能測試表
從表1和表2的存取數(shù)據(jù)性能測試結(jié)果分析,歷史數(shù)據(jù)的存儲和查詢完全能夠滿足海量數(shù)據(jù)的實時性要求,并且能夠準確地存儲到本文設(shè)計的文件結(jié)構(gòu),以及高效地查詢所需的歷史數(shù)據(jù),實現(xiàn)OPC UA歷史存取服務(wù)的功能。
OPC UA技術(shù)是未來工業(yè)控制接口的發(fā)展方向,由于其對應(yīng)用廣泛的OPC進行補充和改進,各生產(chǎn)廠商可以實現(xiàn)企業(yè)上層網(wǎng)絡(luò)與現(xiàn)場設(shè)備層的無縫集成。但是基于OPC UA的各類數(shù)據(jù)采集設(shè)備會產(chǎn)生數(shù)量龐大的實時數(shù)據(jù),對歷史數(shù)據(jù)存取的性能和效率提出了巨大的挑戰(zhàn)。
本文的創(chuàng)新點:設(shè)計了一種新的文件結(jié)構(gòu),并且給出了一套歷史數(shù)據(jù)存取機制,該機制從存儲查詢過程、存儲方式和文件結(jié)構(gòu)等方面綜合考慮數(shù)據(jù)讀寫性能,通過多級緩存和多級索引的優(yōu)化方案,為OPC UA的歷史數(shù)據(jù)存取服務(wù)器提出了一種高效的文件系統(tǒng)存儲設(shè)計方案。
[1] OPC Foundation. OPC Unified Architecture Specification[Z] . Historical Access Version 1.01 2008.7.
[2] 訾樹波,于德敏,許增樸,王永強.工業(yè)生產(chǎn)實時數(shù)據(jù)采集及管理數(shù)據(jù)庫模型設(shè)計[J] 微計算機信息,2005 7- 3:104-106.
[3] 張志凜.實時數(shù)據(jù)庫原理及應(yīng)用[M] 北京: 中石化出版社,2001.
[4] 劉云生.現(xiàn)代數(shù)據(jù)庫技術(shù)[M] .北京:國防工業(yè)出版社, 2001.
[5] 王成光.流程工業(yè)大型實時數(shù)據(jù)庫理論、技術(shù)與應(yīng)用 [D] .杭州:浙江大學(xué),2003.