历史数据
在工业控制中,常常要从一些数据的历史趋势分析问题和发现问题,保存历史数据就显得十分重要。紫金桥实时数据库支持历史数据的快速保存和检索,它按照一定的条件把数据保存到历史库中,用户需要时可随时从历史数据库中访问历史数据。
历史数据是位号在某一时刻的瞬时值,是与时间有关的数据,每一个历史数据记录上都有一个事件戳,记录历史数据的采样时间。位号是否保存历史数据,历史数据的保存条件都由用户进行数据组态时决定。实时数据库按照用户指定的采样条件在库中进行采样,如果采样的条件满足,就将采样数据加上时间戳,记入历史库中。
历史数据库是磁盘文件,为了防止频繁的写磁盘,紫金桥实时数据库在内存中开辟了历史数据缓冲区。历史数据从实时数据库中采集以后,首先放在内存缓冲区中,当存盘时间到达或缓冲区已满时一次性的写入磁盘历史库文件。用户访问历史数据时,系统首先检查历史数据缓冲区中是否有用户需要的历史数据,如果没有然后在检查历史数据库文件中是否有用户需要的历史数据。历史数据缓冲区的设立大大加快了历史数据的存取速度。
历史数据保存
紫金桥实时数据库采用两种方式来保存历史数据,即定时保存和变化率保存。定时保存是指不管数据的变化情况如何,数据库只是按照一定的时间间隔,周期性的采样数据存入历史库,这种保存方式容易造成较大的误差。变化率保存方式可以让用户指定一个变化的精度,当数据发生变化时,如果系统发现当前数据和上次采样数据之差和数据量程之比在用户指定的变化精度之内,那么就忽略本次变化不予存盘,只有超过了用户指定的变化率之后,系统才认为数据真的发生了变化,保存历史。这种保存方式保存的历史数据的误差在用户的控制之内,而且还有效的压缩了数据,是最常用的一种保存方式。
紫金桥实时数据库对历史数据库可以进行插入历史操作,这种功能主要是针对历史数据采集滞后的情况设立的。比如一些仪表可以保存一定的历史纪录,当从仪表中把这些历史纪录采集出来时,必须利用插入历史操作把数据插入历史库中。紫金桥系统针对历史的插入操作进行了大量的优化处理,仍然能够迅速的完成。
用户在访问历史数据时,紫金桥实时数据库自动对压缩的历史数据进行展开,因此,历史数据的压缩对用户是透明的。历史数据展开时,不进行插值处理,用在历史库中从当前时间向前搜索到的第一个历史数据作为当前的历史数据。
退出时保存数据作为下次启动初始值
在应用过程中,有时不希望每次启动时位号的值初始化为0,而是希望启动时的初始值是上一次退出时的采集值。针对于这种情况,紫金桥实时数据库提供了对应的选项,可以在系统退出时,把该位号的当前值保存入历史库,而当系统重新启动时,再次把历史库中该位号的历史值取出重新赋值给该位号。
历史保存的组态
给变量组态保存历史非常简单,下面使用一个简单的例子来说明问题。
创建一个新的工程,起名为“历史数据保存示例”,将导航器切换到数据库页,双击点组态项进入点组态管理对话框,在组态管理对话框的右侧点列表中用鼠标双击一空白行,在弹出的对话框中选择模拟IO点并点击“继续”按钮,弹出点定义对话框。在点定义对话框的上方点名栏里输入AI101作为点名,点击“确定”成功创建模拟IO点AI101。选中新创建的点,按下快捷键Ctrl+C复制该点,连续按下快捷键Ctrl+V,粘贴出AI102至AI105四个点。
在点组态管理对话框中选择点AI101此时在点列表的下方的点设置属性页自动的显示了AI101的属性,将属性页切换到“历史组态”页可以看到如下所示的设置区域:
选中保存历史的复选框,可以看到有两个选项可用,包括数据变化保存和数据定时保存,它们分别对应历史数据的变化率保存方式和定时保存方式。选中数据变化保存方式,并且在精度栏里输入1,表示只有数据的改变量超出了它量程的1%之后,数据才保存入历史库。在这里因为点AI101的量程我们使用的是却省设置即0-100,所以一旦位号的数值变化量超过1,数据就会被保存入历史库。
对AI102进行同样的设置,不过精度栏里我们输入0.1,它将比AI101保存数据更精细,使用它的历史数据绘制的曲线也会有较小的误差。同样设置AI103这次我们将它的精度设定为5,让它保存的比较粗略。对于AI104我们让它和AI102的设置相同,但是我们选中“退出时保存实时值作为下次启动值”复现框,让它每次启动时和上一次的退出值保持相同。对于AI105我们不选择保存历史,来作为比较。
创建模拟设备
我们使用一个紫金桥自带的模拟设备来给我们建立的实时数据库点提供数据。首先将导航器切换到数据库页,展开设备驱动选项,可以看到仿真仪表项,展开并双击“仪表仿真驱动”选项卡,弹出如下所示的设备定义对话框:
在设备名称栏里输入Sim作为设备名,设备地址栏里输入1,如图所示,单击“完成”按钮,即可完成仿真仪表的定义。
创建IO数据联接
进入点组态管理程序,我们可以看到已经定义的5个点。使用鼠标点击AI101点右侧的“外部联接”格,可以看到下面的点属性框已经自动的切换到“数据联接”页,在此页中选择设备Sim并单击“增加联接项”按钮,弹出如下所示的设备联接对话框:
选择寄存器类型为正弦波寄存器,其它的设置如图所示,单击确定按钮,即可把AI101和仿真设备的地址为0的正弦波寄存器联接起来。同样进行其他点的设备联接如下表所示:
点名
|
地址
|
寄存器类型
|
数据范围
|
每周期改变
|
AI101
|
0
|
正弦波寄存器
|
0—100
|
0.1
|
AI102
|
0
|
三角波寄存器
|
10—80
|
0.1
|
AI103
|
1
|
正弦波寄存器
|
15—75
|
0.1
|
AI104
|
0
|
常量寄存器
|
0—100
|
——
|
AI105
|
0
|
随机数寄存器
|
10—80
|
——
|
使用实时趋势来查看位号的实时值
为了进行比较,我们先创建一个实时趋势对象,用来显示数据的时实变化趋势。点击工具条命令按钮 调出子图选择对话框,在对话框左侧的浏览树中选中“趋势分析”项目,在右侧列表中双击图标 或直接拖动此图标到当前窗口中,可以看到窗口中已经创建了实时趋势组件。双击组件弹出实时趋势设置对话框,在笔号为0的位号名编辑框中双击鼠标,选择AI101.PV,把AI101.PV和0号笔关联起来。同样为其它的几支笔分别选择AI102至AI105,单击确定按钮完成设置。
使用历史趋势来查看位号的历史纪录
点击工具条命令按钮 调出子图选择对话框,在对话框左侧的浏览树中选中“趋势分析”项目, 在右侧列表中双击 图标或直接拖动此图标到当前窗口中,可以看到窗口中已经创建了历史趋势组件如下图所示:
双击历史趋势组件,弹出设置对话框,和实时趋势设置类似在对话框的曲线页中为每支笔设置关联的点位号名。将对话框切换到坐标系页,选择“可以使用鼠标放大”和“放大XY轴”选项。点击确认完成历史趋势的设置。关于历史趋势的设置请参看帮助。
运行系统查看趋势
运行系统,可以看到历史趋势和实时趋势都可以显示位号的趋势图形,但是因为实时趋势仅仅显示的是该位号的实时数据趋势,所以当关闭该窗口在重新打开之后,实时趋势又要重新显示该位号的趋势图形。而历史趋势由于每次都是从历史库中读取数据,所以历史趋势显示的图形并不受影响。但是由于AI104和AI105并没有组态保存历史,所以当刷新历史趋势时,该位号的趋势图形和时实趋势的表现相同。
可以通过使用鼠标在历史趋势上框选来放大曲线图形,下图就是一段放大的图形,其中绿色的是AI101的趋势图,浅蓝色的是AI103的趋势图,可以看到,因为AI101设置的保存变化率较精细,所以AI103的趋势图形比AI101的要粗糙的多。
给AI104赋值为12,退出整个系统,然后才次重新启动整个系统,可以看到此时数据库中AI104的值在启动时就变为了12,保持了上一次退出时的瞬时值。
通过历史趋势上的按钮可以操作趋势,使它显示不同时刻的历史数据。以下是进一步的介绍。
“1倍”“2倍”“4倍”按钮,通过按下它们可以放大窗口的Y轴为原来的1倍、2倍或4倍。
“10分”“30分”…“一天”按钮,通过它们可以设置窗口的时间轴为10分、30分…一天。
第二排的前三个复合按钮可以移动趋势的时间轴一定的时间,其中按小时偏移的按钮如下:
单击左侧箭头,趋势时间轴向过去移动一小时,右侧箭头相反。可以在中间的文本框内输入想偏移的小时数。其他的两个按钮和它类似。
播放停止按钮 ,点击停止按钮,曲线停止滚动;点击播放按钮,曲线将滚动到当前时刻,并且随着时间的推移,不停的滚动。
百分比移动按钮 ,通过点击左右箭头,可以按一定的百分比左右移动趋势,其中中间的文本框可以输入想要左右移动的百分比。
设置趋势按钮 ,您可以点击它来调出曲线设置对话框,来在运行时刻动态的修改趋势的趋势笔。
起始时刻设置 ,此处显示了趋势的起始时刻。您可以通过直接在文本框中修改起始时刻来改变趋势,也可以通过点击“起始:”字样来使用对话框修改起始时刻。
采样范围设置 ,可以设置趋势的采样范围。和起始时刻设置类似也可以通过两种方式修改趋势的采集范围。
放大恢复按钮,它的作用和鼠标右击相同,用于放大曲线后的恢复。
关于历史趋势的设置和操作请参考历史趋势帮助。
趋势分析的使用
对于位号之间的历史数据的比较和分析,也可以使用趋势分析来完成,和历史趋势相比趋势分析有着更强大的功能,它可以显示一个位号的不同时间段的数据来进行比较,也可以对位号的历史数据进行统计显示。可以用鼠标选择任何区域,对其进行放大。过程趋势同时提供统计分析功能,可以对任何一段趋势曲线的统计值进行计算,帮助工艺技术员和工程师进行统计分析。窗口中的趋势笔可以随意指定,并且可以保存到文件中,以便下次调用。
点击工具条命令按钮 调出子图选择对话框,在对话框左侧的浏览树中选中“趋势分析”项目, 在右侧列表中双击 图标或直接拖动此图标到当前窗口中,可以看到窗口中已经创建了趋势分析组件,如下图所示:
双击精灵弹出设置对话框,如下所示:
设置对话框共分两个属性页,其中第一个属性页主要是对趋势分析的曲线颜色、线型和统计参数进行设置,第二页主要用来对趋势显示的外观进行设置。
颜色、连线、点类型设置:在这里可以设置每一条曲线的色彩,连线的类型以及曲线上数据点的显示方法,这样在趋势分析中通过颜色和线型就可以简单的区分各条曲线。
数据源:此选项指出需要显示的曲线的数据源。如果想要显示本计算机上的数据库点,请选择“本地数据库(DB)”选项。如果想采集其他计算机上的数据库点,请首先建立数据源,然后再在数据源下拉框中选择即可。
采集类型:采集类型可以分为瞬时值、平均值和所有值。历史趋势组件从数据库中获得数据时,一般按照一定的采样间隔抽样得到。当选择“瞬时值”时,采样的值就是采样点处的真实值。当选择“平均值”时,采样的值是两次采样间隔的平均值。当选择“所有值”时,趋势将把采样范围内的所有的值都采集过来。注意:一般请不要选择所有值项(特别是选择了远程数据源时更要慎用),因为如果采集范围较长可能需要采集大量的数据,造成短时间内占用大量的CPU或者是通讯瓶颈。
总采样个数:此项将决定了“平均值”和“瞬时值”方式下,在采样范围内一次采样的个数。它的范围为200-1000,设置时请结合远程数据源的通讯速度以及计算机的CPU资源等问题来考虑。
每个统计小组的样本个数:趋势分析组件在对采集到的数据进行统计时,是按照分组的方式来进行的,此处可以指定每一个小组包含的样本个数。
滑动平均计算的跨度:趋势分析组件可以对采集到的数据进行滑动平均计算,然后以滑动平均图的形式显示出来。此处Pi是滑动平均求出的第i个值,Xi表示采样数据的第i个值,而n就是滑动平均的跨度。
曲线的初始采集长度:此处用来指定趋势分析组件缺省状态下对曲线的采集时间范围,以分钟为单位。可输入的范围是1-1440分钟。
曲线的初始数值轴:此处指定了在向趋势分析中动态添加曲线时,曲线的数值轴的却省范围。在这里我们使用缺省值即可。 运行系统,打开趋势分析所在的窗口,点击 弹出增加曲线对话框,如下图所示:
双击位号名,选择AI101.Pv点击确定按钮即可查看到该位号的趋势图形。
下面介绍一下趋势分析的工具条:
,曲线修改按钮。点击此按钮将弹出曲线修改对话框,对当前活动曲线的属性进行修改。
,删除曲线按钮。点击此按钮将让您选择删除当前活动曲线或删除所有已定义的曲线。
,趋势分析属性修改按钮。点击此按钮将弹出趋势分析属性修改对话框,让您修改趋势分析的属性。
,保存曲线按钮。点击此按钮可以让您有选择的保存当前曲线到文件中。
,打开曲线文件按钮。点击此按钮可以让您选择曲线文件,并且有选择的打开文件中的曲线。
,操作所有曲线模式按钮。当此按钮处于按下的状态时,上下移动曲线放大曲线当操作将针对所有的曲线。
,操作当前活动曲线模式按钮。当此按钮处于按下的状态时,上下移动曲线放大曲线当操作将只针对当前活动曲线。
,按百分比上下移动曲线按钮组。在两按钮中间的文本框中输入一个数字比如25,那么当点击 时,曲线将向下移动25%,点击 时,曲线将向上移动25%。
,放大数值轴按钮。当按下此按钮时曲线在纵向被放大2倍。
,缩小数值轴按钮。当按下此按钮时曲线在纵向被缩小为原来的二分子一。
,恢复原始状态按钮。不论曲线进行了多少次放大、缩小或移动操作,只要按下此按钮,曲线显示范围将恢复到初始的状态。
,显示到当前时刻按钮。按下此按钮曲线将显示到当前时刻。
,显示保存当前曲线数据按钮。当按下此按钮后,曲线的当前数据将会以列表的方式显示出来,同时您可以选择把它保存成Excel可以识别的csv格式的文件或纯文本文件。
,普通曲线显示方式。当此按钮处于按下的状态时,以普通的方式显示曲线。
,控制范围显示方式。当此按钮处于按下的状态时,趋势将把当前的数据认为是处在标准正态分布下,它计算并绘制上下两条水平线,也就是控制范围线。如果该过程量被控制的比较好,那么采集到的数据应该接近是标准正态分布,那么落在控制范围内的采样点应该占总采样点个数的99.74%。
,滑动平均显示方式。当此按钮处于按下的状态时,趋势利用采集到的数据计算其滑动平均数据,并且以曲线图形的方式显示出来。
,起始时刻设置按钮。在此处显示的是曲线的开始时间,点击 将会弹出起始时间设置对话框,可以对曲线的起始时刻进行设置。
,时间范围设置按钮。同时间起点设置类似,在这里可以更改曲线显示的时间范围。
,按百分比左右移动曲线按钮组。它和上下移动曲线按钮组功能类似,只不过变成了按百分比左右移动曲线。
,移动曲线起始时刻按钮组。点击左右的按钮,可以按照输入的时间前后的移动曲线的起始时刻,用来观察历史数据。
在趋势分析的中间为曲线显示区,在曲线上用鼠标左键拖动一个矩形框并释放左键,那么在矩形框中的图形将会被放大显示。在曲线显示区,点击鼠标右键曲线显示范围将恢复到初始的状态。
在显示区的右侧列着当前曲线的说明,并在每一个说明下用方括号显示当前游标所在时刻处过程量的数值。注意,曲线说明以凹下方式显示的为当前活动曲线,您可以通过是用鼠标点击曲线说明方框内部来切换当前活动曲线。
在黑色的曲线绘制区的两侧分别有一蓝一红两根线,在它们中间的区域为统计区域,趋势分析组件将对落在此区域内的曲线进行统计分析。可以通过拖动区域线上方的方块来更改统计区域。
在趋势分析的最下方是统计显示区,依次的列出每一条曲线的笔号、曲线说明以及它的各种统计数据。
统计数据包括:左值、右值、最小值、最大值、平均值、平均方差、UCL、LCL、CP、CPK、SK和KU。 关于,统计数据的意义请参见趋势分析的帮助。
历史数据的相关函数
1、GetHisData(Var,Year,Month,Day,Hour,Minute,Second,MilliSecond)
从历史库中取出某一个变量在某一个时刻的历史数据值。第一个参数是需要检索历史数据的变量的名称,后面的参数依次为数据时刻的年、月、日、时、分、秒和毫秒。各时间参数的值如为0表示当前时间单位,比如年参数的值为0,表示当前年,以此类推。如时间参数为负数,表示当前时间的前多少时间,比如月参数的值为-1,表示一个月以前。
例:AI.PV = GetHisData(“AI101.PV”,0,0,0,10,0,0,0);表示把AI101在当前天的10点钟的时刻的值取出赋给变量AI.PV。
2、InsertHisData(Var,Data,Year,Month,Day,Hour,Minute,Second,MilliSecond)
把某一个数据,作为一个历史数据,按照特定的时刻插入某个位号的历史中。其中第一个参数表示需要插入历史的变量的名称,第二个参数表示需要插入的数据,后面的参数依次为插入时刻的年、月、日、时、分、秒和毫秒。各时间参数的意义和GetHisData相同。
例:I nsertHisData(“AI101.PV”, AI.PV,0,0,0,10,0,0,0);表示把AI.PV的值作为当前天10点钟的历史数据插入位号AI101中。