摘 要:以Aspen公司的實時數據庫產品IP21為例,介紹幾種不同的方式實現實時數據庫和其它應用系統的數據集成。并對不同的數據集成方式在應用范圍、性能、使用效果等方面進行比較。
關鍵詞:實時數據庫;數據集成;API;ODBC;WebService;
中圖分類號:TE-9 文獻標識碼:A 文章編號:1674-3520(2014)-04-00169-03
引言
實時數據庫系統是生產流程型企業(如:石化企業、電力企業、冶煉企業)的基礎數據平臺。在生產過程中,生產流程型企業主要使用實時數據進行生產管理、調度和數據分析。不同類型的企業對實時數據的要求不盡相同,如冶煉企業主要關注的是模擬量數據,對溫度、壓力、流量信號的數據準確性要求較高;電力企業更加關注開關量數據,對電網調度開關信號的響應速度要求更高;石化企業則對模擬數據和開關數據的實時性都有較高的要求。
隨著信息化發展進程的深入,企業中越來越多的上層應用系統需要使用到實時數據。如:MES(生產制造執行系統)系統使用實時數據能減少人工數據的錄入、提高系統中生產數據的準確性和及時性;環境監測系統使用實時數據在線監控環保指標,及時調整生產,達到國家環保要求;設備管理系統利用設備運行中的實時數據能分析出設備運行狀態等。實時數據庫系統如何能快速高效的和這些上層應用系統進行數據集成,也已成為企業信息化建設過程中普遍關注的問題。
一、 實時數據庫介紹
(一) 實時數據庫特性。區別于關系數據庫,實時數據庫的特性就是實時性。包括數據實時性和事務實時性兩個指標。數據的實時性是指儀表IO數據的更新周期,這個指標主要受儀表設備等硬件條件的制約。事務的實時性是指實時數據庫對其事務處理的速度。這個指標根據實時數據庫的軟件產品而有所不同。事務一般采取事件觸發或定時觸發這兩種方式。事件觸發是該事件一旦發生可以立刻獲得調度,這類事件可以得到立即處理,但是比較消耗系統資源;而定時觸發是在一定時間范圍內獲得調度權。舉個簡單的例子,一般模擬量數據都有高低報警,如果采取事件觸發,報警方式為:一旦數據超過了報警上下限制,系統立即調度觸發事件;如果采取定時觸發,則報警的方式為:系統定時調度一段時間內這個數據是否有超標數據發生,并執行相應的事務。
(二)實時數據庫產品。主流實時數據庫有3 個產品:OSI公司的 PI ( Plant Information System ) 、HONEYWELL公司的 PHD ( Process History Database ) 、AspenTech公司的 IP21 ( InfoPlus .21 )。 PI 采用了旋轉門壓縮專利技術對數據進行了最有效的壓縮,極大地節省了硬盤空間,是效率最高,在國際上也使用最廣泛的實時數據庫。PHD HONEYWELL主要使用在工控領域DCS端,其內核使用的是簡化版的關系數據庫,因此在數據存儲方面沒有優勢。在國內市場主要使用的是AspenTech公司IP21實時數據庫, IP21進入中國市場10 a多,現已成為中國石化使用的最多的實時數據庫。
二、實時數據庫系統總體架構
實時數據庫系統總體架構分為數據采集層、數據存儲層、數據應用層。數據采集層通過OPC接口進行生產裝置的數據采集并傳入IP21實時數據庫;數據存儲層主要是將采集的實時數據存儲到IP21的歷史庫中;數據應用層主要是對采集上來的實時數據和保存的歷史數據進行一些基本應用。
系統架構圖如下所示:三、實時數據庫集成方式的實現
(一)ODBC方式。ODBC(Open Database Connectivity)是微軟提出的數據訪問接口標準。其定義了訪問數據的一個規范,這個規范獨立于具體編程語言,是一種通用的數據集成的方式。按照ODBC規范,數據庫廠商提供ODBC驅動程序以方便用戶訪問數據庫中的數據。一般比較熟悉使用的是如:ORACLE、SQL SERVER等關系數據庫的ODBC驅動,和關系數據庫類似的,實時數據庫也提供了ODBC的驅動程序。
IP21的ODBC驅動程序主要包含3個動態鏈接庫:ip21odbc.dll、libc21.dll和PFWAuth.dll。在使用驅動程序之前,需要在系統中注冊這3個庫文件。當然,注冊前需要將這3個庫文件拷貝到SYSTEM32系統目錄下。
32位系統中注冊信息為:
[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\AspenTech SQLplus]
\"UsageCount\"=dword:00000007
\"Driver\"=\"C:\\WINDOWS\\system32\\ip21odbc.dll\"
\"Setup\"=\"C:\\WINDOWS\\system32\\ip21odbc.dll
[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers]
\"AspenTech SQLplus\"=\"Installed\"
64位系統中注冊信息為:
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBCINST.INI\AspenTech
SQLplus]
\"UsageCount\"=dword:00000007
\"Driver\"=\"C:\\AspenODBC32\\system32\\ip21odbc.dll\"
\"Setup\"=\"C:\\AspenODBC32\\system32\\ip21odbc.dll\"
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBCINST.INI\ODBC Drivers]
\"AspenTech SQLplus\"=\"Installed\"
IP21的ODBC驅動在系統中注冊完成后,可以直接在操作系統的ODBC數據源管理器中進行數據源配置。如下圖所示:
建立完數據源后,即可通過編程方式使用這個數據源來訪問IP21,訪問方法和通過ODBC訪問關系數據庫是一樣的。也可在一些應用程序中直接訪問ODBC數據源,如通過使用Excel軟件中的MICROSOFT QUERY功能,可以直接在Excel表格中引用IP21的實時數據和歷史數據。
(二)API方式
IP21實時數據庫提供了一組靈活的用于數據訪問的API接口,程序開發人員可以調用接口中的函數來訪問和操作數據庫。調用API函數需要用到的動態鏈接庫有:infoplus21_api.dll、cimsrvapi.dll、CimWin32Util.dll、ip21admin_client.dll、ip21ezrpcw32.dll、ip21winrpc32.dll、libc21.dll。由于IP21的API接口是非托管代碼,在dotnet環境下進行開發的開發人員,在使用前需要對接口進行重新封裝。下面給出主要的封裝代碼:
[DllImport(\"infoplus21_api.dll\", EntryPoint = \"DaInitialize\")]
private static extern bool Init(bool isReadCfgFile);
[DllImport(\"infoplus21_api.dll\", EntryPoint = \"DaShutdown\")]
private static extern bool UnInit();
[DllImport(\"infoplus21_api.dll\", EntryPoint = \"DaAddServer\")]
private static extern short AddServer(string configLine, ref ERRBLOCK err);
[DllImport(\"infoplus21_api.dll\", EntryPoint = \"GETNAMDB\")]
private static extern void GetNameByRecID(ref int recid, byte[] name, ref short len);
[DllImport(\"infoplus21_api.dll\", EntryPoint = \"DECODFT\")]
private static extern void GetFldIDByFldName(string name, short len, ref int id, ref ERRBLOCK err);
[DllImport(\"infoplus21_api.dll\", EntryPoint = \"FIELDDEFNINFO\")]
private static extern void GetFldInfo(int recid, int fldid, int seq, ref FIELDDEFN flddefinfo, ref short stop, ref ERRBLOCK err);
[DllImport(\"infoplus21_api.dll\", EntryPoint = \"DB2REAL\")]
private static extern void ReadFloat(int recid, int ft, ref float data, ref ERRBLOCK err);
[DllImport(\"infoplus21_api.dll\", EntryPoint = \"DB2DUBL\")]
private static extern void ReadDouble(int recid, int ft, ref double data, ref ERRBLOCK err);
[DllImport(\"infoplus21_api.dll\", EntryPoint = \"RHIS21DATA\")]
private static extern void ReadHisData(int mode, int step, int outsiders, int recid, int fid, ref XUSTS startTime, ref XUSTS endTime, short numFts, int[] fts, short[] ptdtypes, int maxNum, short[] keyLevels, XUSTS[] keyTimes, IntPtr ptdatas, ref short occsok, ref short ftsok, ref ERRBLOCK err);
[DllImport(\"infoplus21_api.dll\", EntryPoint = \"REALADD2DB\")]
private static extern void WriteFloat(int recid, int ft, ref float data, ref ERRBLOCK err);
[DllImport(\"infoplus21_api.dll\", EntryPoint = \"DUBLADD2DB \")]
private static extern void WriteDouble(int recid, int ft, ref double data, ref ERRBLOCK err);
封裝完成后,可以在微軟的集成開發環境visual studio中直接調用函數來訪問IP21中的數據。
(三)webservice方式
Web Service技術能使得運行在不同機器上的不同應用無須借助第三方軟件或硬件,就可相互交換數據或集成。以這種方式實現IP21的數據集成能更容易達到利用實時數據庫數據的目的。實現方法為先基于實現了ODBC或API方式正常獲取IP21中的數據后,再開發部署取數服務。筆者用微軟IIS服務管理器來部署IP21的數據服務。webservice代碼整理如下:
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.Services;
using IPLIB;
using System.Configuration;
namespace IPServices
[WebService(Namespace = \"http://tempuri.org/\")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(1)]
public class IPService : System.Web.Services.WebService
[WebMethod]
public double GetRDData(string tagName)
Rtdb db = new Rtdb();
return db.GetTagData(tagName);
[WebMethod]
public double GetHisRDData(string tagName,DateTime dataTime)
Rtdb db = new Rtdb();
return db.GetTagDataByTime(tagName, dataTime);
以上代碼提供取數的web服務,IPLIB命名空間實現IP21的取數邏輯,可以由ODBC或API來實現。服務部署后,其它應用系統可以在代碼中直接引用服務器地址,通過上面代碼中的兩個方法獲取實時數據和歷史數據。
四、3種集成方式的比較
采用webService方式獲取IP21的數據,開發成本最低,部署一臺服務器提供IP21取數服務,就可實現整個網絡內各個應用系統對IP21的數據集成,但這種方式數據響應速度相對較慢,執行效率不高,對有大批量數據需求的應用系統有性能瓶頸;應用系統通過ODBC方式實現對IP21的數據集成可以解決一部分的性能問題,但由于每個客戶端都需要部署安裝IP21的驅動,這樣就增加了應用系統的實施難度和應用范圍。以API方式集成IP21實時數據,技術難度和開發成本較高,每個要集成IP21數據的應用系統都需要單獨開發取數模塊,但這種方式具有性能優勢,取數效率最高。
五、結論
針對這三種不同方式的優缺點,筆者建議:類似于生產執行系統(MES)這種應用范圍廣但實時數據需求量不大的系統,可以使用webService方式獲取數據;數據需求量大且用戶數也較多的應用系統,如在線監測系統,工藝參數分析系統等可以使用API方式進行數據集成;數據需求量大但用戶數較少的應用系統則直接用ODBC方式獲取數據,如生產調度系統、全流程優化系統等。