恒峰娱乐官方唯一登录-恒峰娱乐真人网红-恒峰娱乐百家乐

实时数据库数据集成的实现及性能比较

   以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”=dword00000007 
  ”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”=dword00000007 
  ”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(false) 
  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方式获取数据,如生产调度系统、全流程优化系统等。