现场应用中经常会涉及到数据的比对,例如:对紫金桥实时库和关系库的数据进行比对,可能有多个解决方案,但是通过内置sql和通用数据表的使用可以方便快速的实现。 下面介绍的事例就是通过二者结合实现紫金桥的历史数据和关系库的数据进行对比的功能。
本事例是针对现场实际的需求写的,具体需求是:实现读取紫金桥历史库里的数据进行运算即当天数据减去前一天的数据的差值(并保存到关系库中),和取自关系库中第三方提供的数据进行对比,进而实现数据校对的功能。这里为了系统的调试把前一天的数据使用画面上的时间控件(#_starttime)值来替代,当天的时间用时间控制加一分钟后的值来代替。
下面是系统架构图:
图一
一. 数据库组态:T001,T002,T003,TP001,TP002,TP003仿真现场数据。
图二
二. 画面组态
图三
起始时间控件:_starttime系统调试时,设定值作为当天时间。
自由报表:nTagName,保存需要查询pv值历史的点的点名。
图四
自由报表:nTagVal,内置 sql返回的点名、前一天8点的值、当天8点的值、时间戳(当天的时间yyyy/mm/dd 8:00:00)
图五
内置sql对象:MyInsql,查询历史数据。(详细使用见紫金桥的相关文档)
通用数据表:MyTable,用来作为数据缓存。(详细使用见紫金桥的相关文档)
三. 关系库里建两个关系数据表
表1存储从历史库查出的当天和前一天的差值。
图六
表2是一组从其他系统读入的校准值即准确值。
图七
四. 运行时的控制逻辑实现
1.在窗口进入窗口脚本里使用间接变量指向TP001,TP002,TP003,这样对TNum[0], TNum[1], TNum[2]的操作就等于对TP001.PV, TP002.PV, TP003.PV的操作。
图八
2.定义通用数据表对象和实型数据变量,字符变量。
图九
3.通过内置sql对象查询“前一天”和“当天”的历史。
图十
4.计算二者的差值写入到紫金桥实时库中(TNum[i] = val1 – val2,见第1步)并插入关系库的表一中。
图十一
5.把时间基、“当天”、“前一天”、差值以及校正值插入自由报表nTagName内显示。
图十二
五. 运行时的效果。
软件系统,在时间控件里设置一个时间。大约一分钟后查看画面如下效果:
图十三
关系库里的表一和表二如下:
图十四
图十五
注意:表2因为没有实际的现场环境,为了测试需要手动写入了一些数据。
到此,本事例介绍完毕。
有任何关于组态软件的技术问题或需要更多的技术资料,可以在微信(微信号:Realinfo)留下联系方式或者到http://www.realinfo.cc/交流论坛里提出,我们将及时为您解答。