WINCC文本语音报警与一键消音功能实现
- 1. 全局脚本
- 2. 报警器
- 3. 区分语音报警和普通报警
1. 全局脚本
然后需要找到将导出的声音文件用文本命名加以区分,比如煤气浓度高报警,煤气浓度高高报警。不可以有特殊符号,可以用英文。
打开WINCC项目,新建内部变量。
如果报警时AZT_1001.H表示煤气浓度高报警,那么建立一个煤气高报警状态位ALARM_SOUND_AZT1001H,使用这个状态位来触发语音(因为报警消失的时间不确定,使用一键消音就必须做一个状态位)。同时还需要建立一个全局消音内部变量ALARMSOUND_ALL用来连接一键消音。
打开WINCC项目文件,新建全局脚本。
#include "apdefap.h" int gscAction( void ) { #pragma code("Winmm.dll") void WINAPI PlaySoundA(char* pszSound ,char* hmode,DWORD dwFlag); #pragma code() if(!GetTagBit("AZT_1001.H"))// 煤气浓度高报警 { SetTagBit("ALARM_SOUND_AZT1001H",0); } if(GetTagBit("ALARMSOUND_ALL")&&GetTagBit("AZT_1001.H")) { SetTagBit("ALARM_SOUND_AZT1001H",1); } //声音播报 if(GetTagBit("AZT_1001.H")&&!GetTagBit("ALARM_SOUND_AZT1001H")) { PlaySoundA("C:\\alarmsound\\煤气浓度高报警.wav", NULL, 1); } SetTagBit("ALARMSOUND_ALL",0); return 0; }
最后在C盘下面新建一个文件夹“alarmsound”,然后将语音文件全部放到该文件夹中。然后再画面中建立一个按钮,连接一键消音按钮ALARMSOUND_ALL,设置鼠标,事件,按下置1即可。
上述方法适合程序没有中没有报警状态变量,如果有的话可以直接使用报警器更方便。
2. 报警器
报警状态位与报警并不是一个变量,报警是现场决定的,我们不可以人为复位掉,因此控制报警语音必须要建立一个与报警对应的报警状态位。
如果再程序中建立了一个可以复位的报警状态位,那么可以直接将该变量导入到“报警记录——报警器——信号分配——变量”中去,然后后面声音的文件路径取决于语音文件存放的位置。
3. 区分语音报警和普通报警
在报警控件中需要区分语音报警于普通报警,这样就需要更改报警控件中文本的颜色和填充颜色:
可以在颜色的位置修改颜色。