一、引言
在项目中,经常会用到增强报警组件来显示报警信息,但是往往发生报警后或者在查看历时报警时,还想关注一下报警点的在报警时一段时间内的数据变化走势,通常的做法为人为的记录该报警点的位号,并到趋势画面中进行查询,这样操作起来比较麻烦,现在可以通过较为简单的方法来达到该目的。
二、功能实现
首先,创建两个窗口,一个命名为“报警显示”,在窗口属性中将“打开其他窗口时自动关闭”的勾去掉,在窗口中添加“增强型报警组件”,命名为_Alarm;另一个串口命名为“趋势分析”,在窗口属性中将窗口类型设置为“弹出式窗口”,在窗口中添加“趋势分析”组件,命名为_Curview,定义一个整形的窗口变量nFlag。其次,创建一个间接变量“SendMessage”做数组用,用来在两个窗口之间传递报警点的信息。
1.报警显示窗口设置
在“报警显示”窗口中,双击“增强型报警组件”,在弹出的“报警属性”对话框中的“报警设置”标题页点击“设置报表”按钮,弹出“自由报表设置”对话框。
在“单元格触发动作设置”中选择“左键双击”动作,输入如下脚本:
SendMessage.Clear();
SendMessage.Add(#_Alarm.GetAlrmTxt(2,$R));
SendMessage.Add(#_Alarm.GetAlrmTxt(7,$R)+" "+StrLeft(#_Alarm.GetAlrmTxt(7,$R),8));
Display("趋势分析");
该段脚本的含义为将报警点的点名与报警时间加入到数组SendMessage中。
2.趋势分析窗口设置
在“趋势分析”窗口中,在窗口动作“进入窗口”中编写如下脚本:
string _PenName;
string _PenEUHi;
string _PenEULo;
string _PenHi;
string _PenLo;
_PenName = SendMessage[0]+".PV";
_PenHi = SendMessage[0]+".HI";
_PenHi = SendMessage[0]+".LO";
#本地.RegTag(_PenName);
#本地.RegTag(_PenHi);
#本地.RegTag(_PenLo);
#_Curview.SetPen(0,_PenName);
#_Curview.SetPen(1,_PenHi);
#_Curview.SetPen(2,_PenLo);
nFlag = 1;
该短脚本中要注意数据库函数RegTag()的使用,由于数组SendMessage传递来的是不带参数的点位号,所以要通过_PenName、_PenHi、_PenHi拼接成点名,但拼接成的点名数据库并不承认,所以要用该函数注册之后才可以使用。之后要向“趋势分析”组件中添加三支画笔,分别为实时值、报警上限、报警下线。其中,nFlag为标志位,用于判断曲线显示的起始时间,在周期脚本中调用。
在“窗口运行时中期执行”中编写如下脚本:
if#_Curview.GetTimeBegin(0) <> LongTime(SendMessage[1]) &&#_Curview.GetPenDesc(0) <> "" && nFlag == 1 then
#_Curview.SetTimeBegin(0,LongTime(SendMessage[1]));
nFlag = 0;
endif
该短脚本的含义为将曲线的起始时间设置成报警点的报警时间。
这样,在系统运行时,在“报警显示”窗口双击某一条报警信息,则会弹出该报警点在触发报警之后的一段时间内的趋势图,方便用户对该报警点的走势进行分析。
三、结束语
通过该方式可以实现报警信息与趋势分析的快速切换,提供了工作效率同时,也给广大用户带来了方便。