搬家第42天-wincc7.3報警彈窗的實現


前兩天在一個西門子的技術討論群上,有一個網友遇到這樣一個情況,他的甲方希望實現這樣一個功能,就是說有關鍵的報警到來時,能夠彈窗提醒一下。一般說來報警直接在一個頁面使用報警控件來顯示,工藝畫面上可以變色和閃爍來提醒。但是既然有這樣的應用需求產生,我也想了想如果是我遇到的,怎么來實現,當時的自覺就是使用畫面窗口,不能用消息框彈窗。這兩天一直懶,沒去細想,今晚實際做了一下,基本上實現了需求。
新建一個wincc項目,因為沒有連接實際的PL,就創建6個內部變量PT101至PT106,均為32點浮點數。然后創建無符號8位變量Alarmstatus存放報警狀態,創建8位無符號變量AckAlarm存放報警確認信息。本次練習嘗試PT101至PT104四個變量超限彈出報警信息,PT105和PT106報警不彈窗。在報警記錄中創建消息組1和消息組2,消息組1包含PT101至PT104,消息組1的狀態變量為Alarmstatus,狀態位0,確認變量為AckAlarm,狀態位為0。消息組2不做設置。
建立6個模擬消息,消息號為1001至1006,分別使用PT101至PT106,歸到兩個消息組中。
新建一個頁面Alarm,放置一個報警控件和一個按鈕,報警控件
在條件設置中新建一個“編號”條件,限制編號大於等於1001,小於等於1004,也就是限制只顯示PT101至PT104這幾個關鍵變量的報警信息,其他變量的報警不顯示。
報警控件的Ontoolbarbuttonclick事件(也就是點擊了工具欄上的按鈕)寫入以下vbs代碼
Sub OnToolbarButtonClicked(ByVal Item,  ByVal lId)     
Dim AckAlarm,time1
Set AckAlarm=HMIRuntime.Tags("AckAlarm")
If lId=11 Then
 time1=Now
 AckAlarm.Write 17
End If
While Datediff("s",time1,Now)<2 '等2秒
wend
AckAlarm.Write 0
End Sub
 
在這里對點擊報警控件的工具欄上組確認按鈕(也就是確認消息組1)作出處理,讓確認變量AckAlarm數值變成17,2秒鍾后回0.Alarm頁面的按鈕鼠標點擊事件寫如下代碼:
Sub OnClick(ByVal Item)
hmiruntime.Screens.Item(1).ScreenItems("PICWIN").Visible =False
End Sub
這就是當鼠標點擊按鈕,關閉main的畫面窗口。


 
新建一個頁面main,上面放置靜態文本、輸入輸出域、slide控件等,用於顯示PT101至PT106、Alarmstatus、AckAlarm變量,滑塊控件用來改變PT101至PT106的數值。放置一個畫面窗口控件picwin
畫面窗口的畫面名稱是Alarm,默認不顯示,不能點擊右上角關閉,可調整大小。其他控件屬性設置不做介紹,因為很簡單。
新建一個vbs的全局動作腳本,周期性觸發,周期為1s,腳本如下:
Option Explicit
Function action
Dim alarmstatus
Set alarmstatus=HMIRuntime.Tags("Alarmstatus")
If alarmstatus.Read=17 Then
 HMIRuntime.Screens.Item(1).screenitems("picwin").visible=True
End If
End Function
 
這里就是周期性判斷報警狀態變量是不是17,如果是17,就讓畫面窗口顯示出來。顯示出來后,如果用戶沒有組確認就直接關閉彈窗,那么會再次彈出,如果組確認了,然后關閉彈窗,不會彈出,除非再來新的報警信息。
17這個數字我也是通過測試得出來的。
保存項目編譯,運行就能看到效果了。




 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM