如何根据报警优先级循环播放不同声音 点击:542 | 回复:0



PLC酷客

    
  • [版主]
  • 精华:9帖
  • 求助:31帖
  • 帖子:1460帖 | 7990回
  • 年度积分:457
  • 历史总积分:59176
  • 注册:2004年7月13日
发表于:2013-08-27 09:10:56
楼主

如何根据报警优先级循环播放不同声音

 

一、添加点。
1、添加三个不同等级的告警点。等级分别为2、3、4

 

2、添加三个常数点sleep、Almstop、form。




二、制作弹出窗口
1、打开绘图,绘制弹出界面

2、打开报警摘要模版,拷贝优先级模版P列中的第一个12。



 

 

 

 

 

 

3、保存dj2.bgr


4、下载图片并启动daq。调出刚才保存的dj2.bgr

5、调整窗口大小,并保存为dj2.dsp。


6、同理绘制等级3、等级4弹出窗口。
三、脚本编写
1、弹出窗口。
由于优先级系统点为局部变量,因此只能在指定界面中取到值,而不能为全局脚本。假设弹出前的窗口为main,编辑脚本使不同告警弹出不同的窗口。

set tag "%AALMSUMS"
SETVAL $tag=2
set tag "%TLV(%TALMSUM1 0 %AALMSUMP)"
if {[GETVAL %AALMGLOBAL]==1} then {

if {[GETVAL form]==0} then {

if {[GETVAL $tag]==2} then {

SETVAL form=1

DSPPOPUPTOP DJ2.DSP

} elseif {[GETVAL $tag]==3} then {

SETVAL form=1

DSPPOPUPTOP DJ3.DSP

} elseif {[GETVAL $tag]==4} then {

SETVAL form=1

DSPPOPUPTOP DJ4.DSP

}

}
}


2、弹出窗口后循环播放音乐。在需要弹出的界面中添加脚本。根据报警等级播放不同声音。


set tag "%AALMSUMS"
SETVAL $tag=2
set alm [GETVAL %AALMGLOBAL]
set tag "%TLV(%TALMSUM1 0 %AALMSUMP)"
if {$alm > 0} then {

if {[GETVAL $tag]==2} then {

SETVAL {sleep=%LOOPPLUS 1}

SETVAL ALMstop=1

} elseif {[GETVAL $tag]>=3 && [GETVAL ALMstop]==1} then {

SETVAL sleep=0

SETVAL ALMstop=0

MCISEND {close wave}

MCREXEC close2.mcr

}

} elseif {$alm==0 && [GETVAL ALMstop]==1} then {

SETVAL sleep=0

SETVAL ALMstop=0

MCISEND {close wave}

MCREXEC close2.mcr
}
set sleep [GETVAL sleep]
if {$sleep==1} then {
#当sleep=1的时候开始播放(直到播完或者遇到 close wave 命令)

MCISEND {close wave}

MCISEND {open bj2.mp3 alias wave wait}

MCISEND {play wave}
} elseif {$sleep>=25} then { #当sleep达到 5 时(起延时作用,避免把正在播放的声音关掉),

SETVAL sleep=0
;
#重置sleep的值,这样sleep就有机会重新等于1,即重新开始播放
}

3、关闭窗口的宏指令
报警消失后关闭相应窗口。




楼主最近还看过


热门招聘
相关主题

官方公众号

智造工程师