搬家第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这个数字我也是通过测试得出来的。
保存项目编译,运行就能看到效果了。




 
posted @ 2021-03-11 11:16  来自金沙江的小鱼  阅读(5546)  评论(0编辑  收藏  举报