摘要:本文简述了紫金桥软件读取历史数据的三种方式,重点说明了取批量历史的不同操作方法以及各方法间的区别。
正文:
紫金桥软件自带了过程数据库,可以高效的保存相关数据点的历史记录,同时提供了丰富的方法读取所需的历史记录。笔者使用紫金桥做了多个工程,仅就个人经验进行简单小结,这里和大家分享,还望能起到抛砖引玉的作用,如有不对之处,还望指正。
通过紫金桥组态软件自身的过程数据库,可以通过两种方式自动保存数据点的历史记录,定时保存和变化率保存,定时保存适合保存变化不是很快,或者比较有规律的数据点,变化率保存的应用范围相对更广,适合变化较快或者较慢的情形,这里要注意两点内容:
个人觉得过程数据库很适合保存现场连续的采集值,对于一些字符型的数据,可能还需要借助关系数据库来保留历史值了。而关系数据库在保存连续数值方面也远不如过程数据库方便。关于紫金桥对关系数据库的各种操作,笔者将在其它文档中进行说明,这里不再赘述。
紫 金桥软件提供了多种方式读取历史数据,这里仅就一些常用的方法进行说明。一般有三种方式读取历史记录,分别是:历史曲线、读取单点历史、读取批量历史。在 说明各种方式之前先要解释下“坏值”的概念,数据点只有在系统运行时才能保存历史记录,对于系统没有运行时的历史值,如果该时刻早于当前时刻,紫金桥软件 通常会赋一个坏值,-9999。而对于未到时间的历史值可以在“系统参数”进行设置,如图所示:
下面简述下读取历史记录的三种操作:
通过历史曲线或者趋势分析曲线可以直接查询相关点的历史值,这种方法的优点在于数据很直观,便捷、曲线可以任意放大。
历史曲线:
趋势分析:
历史曲线和趋势分析曲线的不同在于,历史曲线可以通过“打散单元”的操作将该组件分解,自行根据需要重新组合;而趋势分析组件功能更强,提供了历史曲线没有的统计数据、全屏显示等功能,但是不支持分解操作,不能自行组合。
单独采集某点某时刻的历史值或某段时间的统计值一般通过脚本函数实现:
GetHisData2(Var,StartTime, MilliSec);
GetHisDataEx(DataSource, VarName ,StartTime,MilliSecond);
GetHisData和GetHisData2前 者适合读取具体时刻的历史值,后者通过一个时间值来获取历史记录,该值是一个整数,表示相对于1970年1月1日08:00时过去的秒数,这个秒数在紫金 桥软件中非常常用。实际工程中,这个秒数可以通过函数LongTime ("2001/01/01 14:50:48")得到,该函数可以自动得到某时刻过去的秒数。秒数也可以通过一些组件得到,比如起始时间组件,如图所示:
图中有一个起始时间组件,其下是该组件的time属性所对应的相对于1970/1/1/08:00:00 过去的秒数。比如该组件被命名为EndTime,在脚本中通过#EndTime.time即可得到相应的秒数。
val = GetStatisDataEx("","FQ101.PV", LongTime("2007/09/04 14:30:00"), 2,0,strTime) 示例中Val变量可以得到FQ101.pv值在2007年9月4日14点30分起2个小时内的平均值。这里要注意的是,GetStatisData 和GetStatisDataEx函数会自动过滤掉坏值。在使用统计函数时,要确保对应的点在组态时选择上统计设置,如图所示:
此 外还要注意的是,由于紫金桥系统是每小时自动统计下历史记录,对于刚保存的历史记录,比如1小时内的历史值,通过统计函数可能无法得到最新的统计值。如果 需要得到即时的统计值,需要借助紫金桥软件提供的SPC历史组件进行统计。关于该组件的一些操作可以参看紫金桥软件相关帮助文档。
读 取批量历史通常以报表的形式显示出来。对于历史报表,依据不同的标准有不同的分法,按照行数区分可以分为固定行列和不固定行数,按显示的类型可以分为统计 和非统计历史报表。所谓统计报表通常是对一些累加值的点进行统计,比如最大值、最小值、或者平均值等,非统计报表就是直接查询某时刻的历史值。不同情况下 具体实现的方法也各不同,这里仅就笔者熟悉的方法进行简述。
对于需要获取某段时间内,固定时间间隔的历史记录,通常其行数是固定的,比如需要对一天内的整点数值采样,其行数是24,时间间隔一小时。这种情况下,使用自由报表的“取批量历史”功能最为简单。具体操作方式简述如下:
首先选中自由报表中需要显示历史记录的一列,然后点击自由报表工具栏中右侧的公式选择按钮,如图所示:
点击后选择“取批量历史”,如图所示: