关键词:紫金桥,组态软件,SQL,历史数据查询,自由报表
紫金桥监控组态软件的内置SQL查询功能,主要用于紫金桥实时数据库查询历史数据和报警记录,还可以查询实时数据和统计数据,配合自由报表和起始时间控件,能够快速灵活的查询需要数据。
下面通过示例工程介绍内置SQL查询历史的使用方法。
首先来看一下运行时的画面:
示例中使用了两个时间组件,一个自由报表,三个按钮。查询历史数据之前必须先连接数据源,右上方有显示连接数据源的结果,是连接正常或是故障。连接状态显示正常后,分别选择查询数据的起始和结束时间,然后单击‘查询全部历史’按钮,在下面的列表就会显示已经查询到的历史数据。查询某一时刻的历史,选择起始时间即可,无需选择结束时间,然后单击‘查询某刻历史’,在报表中就能够显示查询到的该时刻的历史值了。
在组态中给各组件命名,开始时间组件的名称是time1,结束时间组件的名称是time2,报表名称是fr。三个按钮功能我们按照字面意思理解即可。
下面我们来看一下脚本部分:
连接数据源:
此部分只有一行脚本,其功能是连接‘本地’数据源,将返回值赋给一个窗口变量,用于查看数据源连接是否成功,连接状态就是通过窗口变量‘ZT’做动画连接显示的。
ZT =
#ObSql.Connect("");
查询历史数据:
这部分脚本分成了几个部分,具体见下面的截图:
这部分脚本内容简单的说明一下,第一部分就是定义临时变量,为了下面的使用方便;第二部分是把整型的时间值(紫金桥软件里的时间默认都是整型值)转换成字符型,用于下面拼接字符串;第三部分应该算是关键的部分,这里使用了内置SQL函数查询历史数据,而且字符串拼接需要特别注意,稍有大意就会导致数据查询不成功。因为是示例工程,只做了两个数据点,如果数据点较多,这部分字符串的拼接脚本可能要复杂一些;第四部分比较简单,就是控制报表的行数,如果本次查询的数据少于16条,那么报表保留16行,如果本次查询数据多于16条,那么按照数据的数量调整报表的行数;最后一部分是将二维表里的数据显示到报表中,该循环语句中每执行一次循环,是将二维表里的一条数据的时间、点名、数值放到报表的一行中,这部分主要需要注意的是二维表里数据的列号,如果取错了列号,那就不是需要的数据了。
查询某时刻的历史值:
下面来看一下查询时刻历史的脚本,截图如下:
这部分脚本与查询全部历史的差别不是非常大。因为查询的是某一个时刻的历史,所以这里只需要一个时间点即可;关于报表行数,由于本例中只用了两个数据点,所以某刻的历史只会有两条数据,无需控制报表行数,直接保留16行;另外一点就是内置SQL查询语句的字符串拼接部分略有不同。
内置SQL查询历史数据的功能介绍就是这样,示例中的脚本可以灵活使用,以后会陆续发布关于内置SQL查询的其他三个功能。