一、引言
在項目中,經常會用到增強報警組件來顯示報警信息,但是往往發生報警后或者在查看歷時報警時,還想關注一下報警點的在報警時一段時間內的數據變化走勢,通常的做法為人為的記錄該報警點的位號,并到趨勢畫面中進行查詢,這樣操作起來比較麻煩,現在可以通過較為簡單的方法來達到該目的。
二、功能實現
首先,創建兩個窗口,一個命名為“報警顯示”,在窗口屬性中將“打開其他窗口時自動關閉”的勾去掉,在窗口中添加“增強型報警組件”,命名為_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
該短腳本的含義為將曲線的起始時間設置成報警點的報警時間。
這樣,在系統運行時,在“報警顯示”窗口雙擊某一條報警信息,則會彈出該報警點在觸發報警之后的一段時間內的趨勢圖,方便用戶對該報警點的走勢進行分析。

三、結束語
通過該方式可以實現報警信息與趨勢分析的快速切換,提供了工作效率同時,也給廣大用戶帶來了方便。