Citect 2018 R2报警弹窗的实现方法

发布时间 2023-06-07 08:57:38作者: 来自金沙江的小鱼

我在新浪博客发表过这一篇学习笔记,不过新浪博客审查机制一直把其作为私密状态,可能出发了某些敏感机制吧。我在这里再记录一遍,以免丢失。

我们现场有一个变频器室,周末发生了变频器空调坏掉,温度高,变频器停机造成生产中断的情况。由于变频器室无人值守,领导希望把变频器室的温度接入控制系统,后台计算机显示温度,有报警功能,还要弹窗提醒。我经过在办公室计算机上模拟测试,实现了上面的要求。我把过程简单记录下来。

上面的需求还需要进一步明确:
1. 温度高就弹窗,无论当前画面是哪一个。
2. 发生弹窗后,中控工通知设备维护人员,在处理完之前,弹窗不能影响中控工其它操作。
3. 如果中控工关掉弹窗,温度还是异常,继续弹窗。
4. 弹窗只有一个,不能满屏不停的弹窗。
根据上面的需求,在citect项目程序中新建变量T100,内部变量,实数,模拟现场温度。新建一个数字量内部变量WENDU_ALARM_DISPLAYED,表示是否已经弹窗。
在主画面上放一个数字显示控件,关联T100。放两个按钮,分别用于T100+20.0和T100-20.0。
 
新建一个小画面,名字交WENDU,作为弹窗,长宽数字都小一点,”退出画面时“事件写下面的脚本
WENDU_ALARM_DISPLAYED=0
写cicode脚本
FUNCTION WENDU_ALARM()
IF T100>50.0 THEN
IF WENDU_ALARM_DISPLAYED=0 THEN
WENDU_ALARM_DISPLAYED=1
pagepopup("WENDU")
END
END
END
 
定义一个事件WENDU_ALARM,周期00:00:10,动作为WENDU_ALARM()
当前画面切换到其他画面的按钮鼠标点击事件写下面的脚本
pagedisplay("page2")
WENDU_ALARM_DISPLAYED=0
WENDU_ALARM()
其它画面切换时,都是类似的操作
保存、编译,做一下计算机向导,启用事件。
运行项目,使用按钮让T100超过50.0,每隔10秒会执行事件,如果没有弹窗就弹窗一次,弹窗期间不影响操作。如果关掉弹窗,每隔10秒还是会执行事件进行判断。
画面切换不影响弹窗。
 
到了这里,95%工作已经完成。考虑到容错性,如果运行着的这个HMI程序意外终止,下一次启动时,很可能WENDU_ALARM_DISPLAYED还是1,如果报警条件具备,就不再弹窗了,这是我们不希望看到的情况。
我是这样解决的。
 
新建一个画面INI,外形尺寸尽可能小,画面的打开事件中,先使用pagedisplay()跳转到其他工艺画面,紧接着写语句
WENDU_ALARM_DISPLAYED=0
保存编译,计算机向导,起始画面设定为INI,这样运行HMI项目程序的时候,打开INI画面,一闪而过到正式的工艺画面,由于INI外形尺寸很小,也不会察觉出来。