紫金桥跨平台组态软件,跨平台实时数据库共提供了两种方式查询历史数据,下面对这两种方式进行详细介绍。
一、使用函数gethisdata查询历史数据
1、函数介绍
Gethisdata用于查询数据库变量在某一时刻的历史数据。
Void GetHisData(String TagName,Real Time)
函数说明:立刻向数据库检索历史数据。
参数说明:
TagName:数据库变量名称,包括点名和参数(如A1.PV)。
Time: 实型日期时间,精确到毫秒
返回值:void,可返回整型或字符串。
2、函数使用方法
在脚本中输入如下文本:
Local.GetHisData("a1.PV",LongTime("2019/08/08 16:00:00.000"))
以上为查询2019年8月8日16点整a1.PV的历史数据。
Local指查询本地实时数据库。若要查询远程数据源,则输入 “远程数据源名. GetHisData”。例如
在脚本中输入如下文本:
test.GetHisData("b1.PV",LongTime("2019/08/08 16:00:00.000"))
以上为查询远程数据源test中,2019年8月8日16点整b1.PV的历史数据。
二、使用内置SQL查询历史数据
使用内置SQL,可以同时查询多个数据库变量在某时间范围内的历史数据。
以下详细说明通过SQL查询向导生成内置SQL语句,查询历史数据。
1、在脚本中使用查询向导
在脚本对话框中右键,点击“查询向导”。
SQL查询向导 在查询向导对话框中,选择要查询的数据源及查询类型。
选择本地实时数据库,查询历史数据
可同时查询多个数据库变量
选择要查询的字段 Value:历史数据,整型或字符串
Name:点名+点参数
DateTime:历史数据的时间
别名:查询返回的数据表中,该查询字段显示的名称。默认为空,即显示字段名。
查询返回的数据表中数据的排序方式 可根据查询的字段名按照升序或降序排列。默认为不勾选,即按照上两步中查询点名的顺序排列。
查询的时间及类型设置 起始时间:可输入起始时间,或使用起始时间控件。
时间长度:可输入时间长度,或使用时间范围控件。
采样类型:可选择瞬时值、所有值、拐点值、极小值或极大值。
时间间隔:表示每隔多长时间取一条数据。只在查询瞬时值时有效。
操作完成后点击“确定”,会在脚本中自动生成相应的查询语句。
使用SQL查询向导生成的查询语句 生成的语句中的查询条件可以根据需要进行修改,查询返回的记录集存储在通用数据表tab中。
附录:通用数据表常见使用方法
通用数据表(ObTable)是一种结构类似于关系数据表的数据表结构,可以把它想象成由若干行和列构成的二维表。通用数据表的不同列的数据类型可以不同,但每一列中的数据类型必须相同。使用时,通常使用列名(字符串)或列号(整型)和行号(整型)来定位到具体的单元格。使用通用数据表可以用来存储一些临时数据,也可以用于临时保存实时数据库或关系库的查询结果。
使用通用数据表函数ObTable定义的对象为临时对象,作用域仅在当前脚本中。在上面的例子中:
使用ObTable定义的对象tab,仅在此鼠标脚本中可以使用。可以在上述脚本后使用其他函数调用tab中的内容。下面列举几种tab的常见使用方法,tab的基本操作请参阅函数手册。
(1)使用msg()函数输出tab中数据:
msg(tab) //弹出通用数据表tab中的数据
(2)使用tab设置表格:
Table.set(tab) //使用tab设置表格数据,表格从0行0列开始
Table.SetAt(tab, Int Row, Int Col);使用tab在指定的位置设置表格数据
(3)使用tab设置XY曲线:
FreeCurveMan.SetByTable(tab) //使用通用数据表设置曲线数据
2、在表格中使用查询向导
新建表格,在要使用查询向导的单元格上右键,点击“单元格属性/查询/脚本”,切换至“单元格”选项卡。
表格单元格查询
单元格选项卡 排列方式:查询返回的记录集插入到表格中时,软件提供三种排列方式:
覆盖(当前位置向右下覆盖):将查询结果记录集以当前单元格为左上角向右向下覆盖,当行列数不足时自动增加行列。
插入(在当前行之后插入新行):将查询结果记录集插入当前行之后,列数不足时自动增加列。如查询结果记录集为N行数据,则表格将在当前行后新插入N行来放置记录集。
覆盖插入(覆盖当前位置再插入新行):将查询结果记录集先覆盖当前行,然后插入新行放置记录集。如查询结果记录集为N行数据,则表格将在覆盖当前行后再新插入N-1行来放置记录集。
字段显示:设置字段是否显示,可以选择显示在表头或者不显示。
基本选项设置完成后,下一步是数据查询设置,下面分项进行详细说明。
查询描述:显示当前单元格查询内容。
删除查询:删除当前单元格查询内容。
查询向导:点击进入查询向导,使用方法与上一节相同。
表格的查询向导设置完毕后,运行工程,当打开表格所在窗口时,表格会执行已设置的查询。若要重复执行查询,可以在按钮或其他想要触发查询的脚本中,使用表格的updata函数:
Table.Update() //执行表格中的查询
三、查询历史数据注意事项
1、要查询的数据库变量一定要保存历史。
2、不建议在周期脚本中查询历史数据,频繁的查询历史会造成系统卡顿。若要同时查询多项历史,请使用内置SQL。
3、查询所有值,会返回查询时间范围内的所有历史数据;查询瞬时值,是根据查询时间范围、查询间隔返回的历史抽样数据。
例如:
近一小时内,A1.PV的值始终为50,历史数据保存方式为周期一小时保存。
若查询近一小时内的所有值,返回的记录集中只有一条数据,即:
A1.PV 50
若查询近一小时内时间间隔为十分钟的瞬时值,则返回的记录集中会有六条数据:
A1.PV 50
A1.PV 50
A1.PV 50
A1.PV 50
A1.PV 50
A1.PV 50