声音报警
打开Horn,在Message assignment选项页选定Message Class为Error,
定义一个Bool型的Tag,此变量是内部变量,与报警变量没有关系;在Signal assingment选项页选定Tag为刚才定义的Bool型的Tag,
在Sound中选择要播放的.wav声音文件。运行时,只要Error类别的报警触发,
则Bool型的Tag置位,.wav声音循环播放;
在报警控件中确认报警,.wav声音中止,也可以将Bool型的Tag复位,.wav声音中止。
Horn是基本过程控制(BPC)的组件,标准安装是不会安装的。
安装WinCC时选择“自定义安装”,已经安装了就选择“安装卸载组件”,
组件栏中选择“选项”,右边栏子选项选择“Basic Process Control”安装即可。
Wincc报警过滤
去年参加wincc7的一个介绍会,曾经提到了wincc7的报警增加了所谓的高级过滤功能,即面对大量的报警导致关键的报警被淹没,wincc7提供了一种智能化的过滤策略。
前段时间参加了pcs7V7的介绍,也提到了这个功能。事实上在以前的项目里面很少会想到做报警过滤的功能,用户也基本上没有这方面的要求,
在实际运行过程中,一般都是一页一页的翻看过往的报警。而在事故的时候,系统产生的报警特别多,此时要找出有用的报警就需要耐心和细心了。
又或者一个大型系统,很多设备但是集中监控,那么就可以按照设备和区域来显示各自的报警。
现在想想,有时候报警过滤应该是很有用的,比如按类别过滤,按时间过滤,按报警文本内容过滤以及综合几个条件进行过滤等等。
手上的机器没有按照wincc7,不过wincc6的报警过滤应该是可以简单实现的。
搜了下西门子网址,果然有个编号为5668269的条目解答了这个问题,即对报警控件的msgfiltersql属性进行改写。
例子里面是用c脚本写的,我测试的时候改用vbs,看上去要少敲点字母:) ,例如:
ScreenItems("algwinccCtrl").msgFilterSql="#VisibleOnly\\CLASS IN(1)"
在组态画面双击报警控件-消息列表-数据准备-选择想要显示的报警类别、类型,在下面提示框内可以看到VBS编程需要的class和type代码
报警的确认按钮脚本
昨天改一个WINCC项目,用到报警的确认按钮脚本,折腾好几次都报错。
又重新温习了C的基本知识,发现脚本写法还是不少。因为按钮与报警控件在同一画面,直接用lpszPictureName就可以了。
下面几种写法都可行,特此做个记录:
AXC_OnBtnVisibleAckn("ALARM.PDL", "ALARM_ALL");
AXC_OnBtnVisibleAckn("ALARM", "ALARM_ALL");
AXC_OnBtnVisibleAckn(lpszPictureName, "ALARM_ALL");
假设你建立的报警控件名字为控件1,所属画面名字为alarmline.pdl
C动作里面输入
AXC_OnBtnSinglAckn("alarmline.pdl","控件1"); //Return-Type :BOOL
Wincc报警记录查询(大于1000条)
报警控件一次最多装载1000条报警记录。
因此,如果在设定的时间范围内,比如1天,超过1000条的话,那么超过部分的报警通过翻页是翻不到的。
可以通过设置更短的时间范围,来查看,比如半天等等。分几次查询来实现。
Wincc报警闪烁
终于找到WINCC报警闪烁的设置了,郁闷找了好久
消息类别点击右键-〉确认列表中有一个闪烁开始选项,选择就可以了
关于SFB35(ALARM_8P)的使用方法及原理
SFB 35 "ALARM_8P"表示将SFB 33 "ALARM"线性扩展至八个信号。
只要未启用确认触发报告,在一个或多个信号处检测到信号转变时即会生成消息(例外:初次调用块时将始终发送消息)。所有八个信号拥有公用消息ID,它在显示设备上被拆分成八个独立的消息。可以分别确认各个消息或确认一组消息。可以使用ACK_STATE输出参数在程序中处理单个消息的确认状态。如果禁用或启用ALARM_8P块的消息,在任何情况下均会影响整个ALARM_8P块。无法禁用或启用单个信号。
每个SFB35 "ALARM_8P"的实例可以使用一个带有两个存储器块的存储器。
参数 声明 数据类型 存储器区 说明
EN_R INPUT BOOL I、Q、M、D、L、
常数 为接收该项而启用的控制参数
决定调用块时
更新
(EN_R=1)还是不更新(EN_R=0)输出ACK_STATE。
SIG_i,1 = i = 8 INPUT BOOL I、Q、M、D、L 要监视的i(th)信号
ID INPUT WORD I、Q、M、D、L、
常数 消息的数据通道:
仅在初次调用时判断W#16#EEEE
ID。
EV_ID INPUT DWORD I、Q、M、D、L、
常数 仅在初次调用时判断消息号(不允许为0)
EV_ID。此后每次使用相应的情景数据块调用SFB 35时,都将应用初次调用所使用的消息号。STEP 7会自动分配消息号以确保消息号的一致性。用户程序内的消息号必须唯一。
SEVERITY INPUT WORD I、Q、M、D、L、常数 事件权重
有效值:0至127 (0表示最高权重)
此参数与该消息的处理无关。
DONE OUTPUT BOOL I、Q、M、D、L DONE状态参数:消息生成
已完成
ERROR OUTPUT BOOL I、Q、M、D、L ERROR状态参数
ERROR=TRUE表示处理过程中出错。有关详细信息,请参考参数STATUS。
STATUS OUTPUT WORD I、Q、M、D、L STATUS参数:显示出错信息
ACK_STATE OUTPUT WORD I、Q、M、D、L 包含所有八个消息的当前确认状态的位字段:(1:事件已确认,0:事件未确认):?0到7位分别对应SIG_1至SIG_7的进入事件?8到15位分别对应SIG_1至SIG_7的离开事件初始化状态:W#16#FFFF,即已确认所有进入和离开事件
SD_j,1?j ?0 IN_OUT ANY I、Q、M、D、T、C j-th关联值关联值将应用于所有消息。只允许使用以下数据类型:BOOL (不允许:
位字段)、BYTE、CHAR、WORD、
INT、DWORD、DINT、REAL、
DATE、TOD、TIME、S5TIME、
DATE_AND_TIME。注意:
如果ANY指针访问某个DB,则务必指定该DB (例如:P# DB10.DBX5.0 Byte 10)。
出错信息
下表包含所有可通过ERROR和STATUS参数输出的SFB 35特有的出错信息。
ERROR STATUS (十进制) 解释
0 11 警告:消息丢失,至少一个信号转变/消息无法发送。
0 22 ?指向关联值SD_i的指针出错:- 与数据长度或数据类型有关- 无法访问用户存储器中的关联值(例如,由于DB已被删除或区域长度出错)激活的消息未与关联值一起发送?所选的SEVERITY实际参数
超出了允许的范围。激活的消息将
在SEVERITY=127下发送。
0 25 启动了通讯。正在处理消息。
1 1 通讯问题:连接中止或未登录启用了确认触发报告时:临时显示,如果没有显示设备可以支持确认触发报告
1 4 初次调用时:?指定的EV_ID超出了允许的范围或?ANY指针SD_i有形式错误?超出了每个SFB 35可以为CPU发送的最大存储器区
1 10 无法访问本地用户存储器(例如,访问的DB已被删除)
1 12 调用SFB时:?指定了不属于SFB 35的情景数据块?指定的是共享数据块而不是情景数据块
1 18 EV_ID已由SFB 31或33至36中的一个使用。
1 20 工作存储器空间不足。H系统:更新过程中调用了此SFB
1 21 禁用了带有指定EV_ID的消息。
注意初次调用块后,将设置ACK_STATE输出的所有位,并假定输入SIG_i (1< I < 8)的先前值均为0。