实时数据库开发注意事项


    实时数据库是以实时数据为存储对象的数据库平台软件,与关系数据库有许多不同的特性,在实时数据库的开发中必须注意

实时数据库的特点:

1.实时数据库是特定类型的数据库,在某些实时数据库中可能会有表的概念,但是没有与关系数据库里同样的Table概念;某些实时数据库提供OLEDB访问接口,里面的table完全是接口虚拟出来的,与关系数据库里面的table完全不是一回事;实时数据库不支持关系数据库里面的事务的概念;

2.实时数据库是以实时数据为处理、存储对象的,它的主要功能不仅包含存储,还包含实时数据的采集、压缩、统计计算、实时数据的展示、报表计算展示等功能。

3.目前实时数据库还没有业界公认的标准,但是基本的功能应该包含实时数据的采集、压缩、存储、发布、数据的统计、报表等,各功能的实现形式不统一;也没有统一的访问接口;

实时数据库的开发分为2类,数据接口的开发和上层应用的开发。

实时数据接口的开发:

实时数据接口是实时数据库与DCS、PLC等现场控制系统的接口,它是实时数据库与现场控制系统之间唯一的发生连接的地方。实时数据接口不仅要完成数据采集的功能,还要实现与控制系统之间的安全隔离的功能。实时数据接口不仅要实现高效、可靠的数据采集,还要尽量减少对现场控制系统的影响,一定要保证不能影响现场控制系统的正常运行,同时要满足现场控制系统对安全防护的要求,特别是国家电监会电力二次系统防护的要求。

按照国家电监会电力二次系统防护的要求,在实时数据接口与控制系统之间必须配置经国家电网认证的电力专用单向隔离设备进行安全隔离,与此要求相适应,国产的电力DCS软件大多提供了UDP数据发送接口,对于这类的控制系统接入实时数据库,相对比较简单,只需编写相应的UDP数据接收程序即可;但是国外产的DCS、PLC、工业控制软件和少部分的国产DCS软件,不提供UDP的数据接口, 国内制定的电力通讯规约101、102、103、104、1801等,除CDT可以单向使用,都是双向通讯规约,不能穿过单向隔离设备,必须在隔离设备之前添加接口装换站,将双向通讯协议转换为单向通讯协议。对于采用CDT通讯规约情况,可以将前端的电气通讯接口(RS232/285/224)调整为单向发送的模式,在电气通讯接口与单向隔离设备之间配置串网转换器,将串口数据转换为UDP数据,来满足单向隔离设备的要求。

实时数据接口的开发工具一般以VC为主。

在接口程序编写中,要注意前端控制系统的要求。阅读接口协议规范时,要注意控制系统和实时数据库的协议规范许多是采用工控系统的习惯编写的,许多概念的含义与我们熟悉的IT行业的定义是有差异的,甚至是两回事,一定不要先入为主,产生理解上的偏差。一定要认真通读全文,尤其要主要前面的前提、约定、定义等内容。

接口的编写中,注意不能为了提高和达到接口的性能要求,忽视了其它系统的需要,更不能影响控制系统的正常运行,现场控制系统是很脆弱的,很小的干扰就可能导致运行不正常、甚至崩溃的;尽量减少多线程的使用,以单线程为主,即可减少编程的难度,提高接口程序的稳定性,还可以防止接口的占用过多的前端控制系统资源,影响控制系统的运行;

程序中内存的分配尽量减少,以事先分配好的内存或堆栈内分配内存为主,即可提高运行速度、也可防止长时间运行生成大量的内存碎片,耗光内存。

实时数据接口一般运行在无人值守的环境,一般发生问题就会造成数据不可弥补的丢失,发生问题也不一定会很快发现和处理,这就要求实时数据接口程序在编写中,一定要把可靠性和稳定性放在首位,错误处理要考虑周全、细致。不仅要保证发生常见异常时要稳定运行,发生小概率的情况时也要稳定运行。

上层应用的开发:

实时数据的上层应用可分为两类,前端用户界面开发和后台程序的开发。

前端用户界面可选用的开发工具范围比较广,可以采用ASP、C#等B/S结构,也可采用VC、VB、C#等C/S结构,但是实时数据流程画面的实时刷新较多的界面不宜采用Java开发,主要原因是Java的界面显示的性能较差,只要画面稍复杂就达不到画面实时刷新的要求。采用B/S结构时,要注意因为有实时数据的刷新功能,WEB服务器的负荷比一般的WEB服务器负荷要高很多,同时客户端不停的刷新数据,可能会引起WEB内存释放方面的问题,影响WEB的稳定性。

后台程序由于对性能要求的比实时接口要求低,开发可选的开发工具也比较多VC、VB、C#、Java(注意:大部分实时数据库都不提供Java访问接口)都可以胜任。后台程序首先要保证运行的稳定、可靠,其次要保证不能占用实时数据库的太多资源。

PI数据库的开发:

Osisoft公司的PI数据库是目前国内电力行业占用率最高的实时数据库产品,它的主要特点就是螺旋门压缩算法,该算法特别适合于变化缓慢的实时数据压缩,可以在保证精度的前提下得到极高的压缩率,目前我们在实施中一般是调整到10000点一天数据量在75M左右。PI提供3种访问接口PI-API、PI-SDK、PI-OLEDB/ODBC,另外也提供了.NET的访问接口(实际是PI-SDK的封装),还提供了Java的β版接口。PI-API的性能较好,一般用于数据接口,PI-SDK的功能最全面,比较方便VB、.NET等访问,一般用于工具软件、应用程序;PI-OLEDB提供与关系数据库类似的接口(注意里面的概念与关系数据库并不相同),只要用于MIS等系统的接口。

采用PI-API接口可以采用多线程,但调用PI-API函数只能是单线程或多线程轮流访问,不能多个线程重叠访问。阅读PI-API文档是一定要注意文档前面的Overview of PI-API这一章节的内容。

通过PI-API访问PI数据库的基本途径是连接数据库、获取测点的内部标识号、通过内部标识号访问数据、断开数据库的连接。简单的访问程序示意如下:

Int32 ires, iLog, iTag; float fval; int32iState,iTime; int32 datatime;

//连接数据库

lres=piut_setservernode(“服务器名/地址”);

//登录

lres=piut_login(“用户名”,”登录密码”, & iLog);

//获取点内部标识号

lres=pipt_findpoint(“测点名”,iTag);

//写数据

lres=pisn_putsnapshot(iTag, 测点值,测点状态,数据时间戳)

//读取快照数据

lres= pisn_getsnapshot(iTag, fval,值变量, iState, datatime);

//读取历史数据

lres= piar_value(iTag, iTime,fval,iState);

//断开数据库连接

lres= piut_disconnect();

通过PI-SDK访问数据库基本途径类似于PI-API;

#import “PISDK.dll”

PISDK.Server server = PISDK.Servers[“PI服务器”];

Server.Open(“UID=登录用户;PWD=登录密码”);

PISDK.PIPiont point = server.PIPoints[“测点名”];

PISDK. PIValue pivalue= point.Data.Snapshot;

Variant val = pivalue.Value;

Server.Close();



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值