WinCC实现声音报警的方法
- 格式:doc
- 大小:2.41 MB
- 文档页数:25
WinCCHorn报警器的使用
关键词:WinCC Horn 报警器
西门子WinCC的报警器Horn是Wincc自带的一个功能,在上位机监控的系统中,由于操作台的取消,没有了声光报警,声音报警就显得很重要了。
Horn的使用是很简单的,配置也不多,但是,在使用过程中还是经常要出一些问题,引起无法发出声音,本文介绍一些使用的注意事项。
1. 声音的准备
不能发音的很多问题都是由于声音文件造成的,声音文件要采用WAV 格式,而且最好是直接产生WAV声音文件,有些通过其它软件转换过来的WAV格式声音,WINCC无法识别,不能使用。
如果不能确定是否为声音文件的问题,最好的办法就是使用Windows自带的声音测试,C:\Windows\Media目录下的WAV文件,比如:Ring09,如果这个测试正常,系统就没有问题。
2. 启动选项设置
要勾选报警记录,是HMRT.EXE运行
3. 报警变量优先级设定
优先级不是必须的,当报警很多时,需要区分报警,最多可以设置16个级别的报警
4. 建内部变量,触发报警
变量必须是二进制变量,=1时触发声音,通过声音复位按钮,复位。
5. 报警器-消息分配设置
如果是单用户,没有提供登录的,要把登陆后激活取消。
消息类别可以不选,优先级选择后,可以分类报警
6. 报警器-信号分配
将前面设置的变量,分配声音文件就可以了。
7. 画面声音复位和变量监视
在画面上做一个变量监视和使用复位,如果变量为1,没有声音,就要看看声音文件有没有问题和系统的设置。
通常在WINCC系统启动后,会延时发出声音,稍微等一会,把变量置为1,检测一下就可以了。
#include "apdefap.h"int gscAction( void ){#pragma code("Winmm.dll")VOID WINAPI PlaySoundA(char* pszSound,char* hmode,DWORD dwFlag);#pragma code( )if (GetTagByte("TI101")>100){PlaySoundA("C:\\\\Program Files\\\\Windows NT\\\\Pinball\\\\SOUND36.WAV",NULL,1);} return 0;}报警可以用以下两种实现方法:1、建一个全局脚本,时基为2S#include "apdefap.h"int gscAction( void ){#pragma code("Winmm.dll")VOID WINAPI PlaySoundA(char* pszSound,char* hmode,DWORD dwFlag);#pragma code( )if (GetTagByte("TAG")==1) 或if (GetTagByte("TAG")>500) {PlaySoundA("d:\\ringout.wav",NULL,1);}return 0;}用以上程序就可以实现单个变量报警,开关量为1或模似量大于500都可以报警,用户可以根据自己的情况改变以上数值,如果有多个变量可以增加多个if .2、通过报警记录,先在报警记录中组态好报警记录建一个全局脚本,时基为2S#include "apdefap.h"int gscAction( void ){MSG_RTDATA_STRUCT mRT;int i;char* pszToken;//Now is my code#pragma code("Winmm.dll")BOOL WINAPI sndPlaySoundA(char* szWave,DWORD dwFlag);#pragma code()DWORD SND_ASYNC=0x0001;DWORD SND_LOOP=0x0008;DWORD alarmsum,alarmunack;LPCMN_ERROR errorunack,errorsum;#pragma code("msrtcli.dll")#pragma code()LPDWORD lpdwServiceID;MSG_SERVICE_NOTIFY_PROC lpfnNotifyProc;LPMSG_FILTER_STRUCT lpMsgFilter;DWORD dwNotifyMask;LPVOID lpvUser;LPCMN_ERROR lpError;BOOL n1;n1=MSRTGetMsgQuit(&alarmunack,errorunack);SetTagDWord("number",alarmunack);MSRTGetMsgActual(&alarmsum,errorsum);SetTagDWord("sum",alarmsum);if (alarmsum==0)sndPlaySoundA(NULL,SND_ASYNC);else{if (alarmunack>0)sndPlaySoundA("C:\\Program Files\\WindowsNT\\Pinball\\SOUND36.WAV",SND_ASYNC|SND_LOOP);elsesndPlaySoundA(NULL,SND_ASYNC);//sndPlaySoundA("C:\\windows\\media\\office97\\laser.wav",SND_ASYNC|SND_LOOP); }return 1;}这个可以实现报警记录中只要有报警发生,那么就触发声音报警。
Wincc语音报警Wincc本身可以利用C脚本,VBS及HORN来做语音报警,但是上述本质上是调用的已存在的音频文件,想实现播放实时更新的信息是不行的,本文主要介绍通过C脚本,VBS及HORN来实现语音报警,并最后介绍一种文字转语音---TTS的实现方法。
1.C脚本实现语音报警利用C脚本实现语音报警,只能是播放WAV文件。
在C脚本中添加如下代码:#include"apdefap.h"long _main(char* lpszPictureName, char* lpszObjectName, char*lpszPropertyName){void WINAPI PlaySoundA(char *pszSound,char*hmode,DWORD dwflay);#pragma code()if (GetTagBit("testsound")==1){PlaySoundA("c:\\wav\\1.wav",NULL, 1); }return 0;}另外需设置触发器,如下:报警器变量设置语音文件路径2.VBS实现语音报警利用VBS,实际是在调用媒体播放器,可以播放视频,代码如下:Function BackColor_Trigger(ByVal Item)Dim soundDim objWshShellsound= "c:\wav\1.avi"Set objWshShell=CreateObject("Wscript.Shell")objWshShell.Run "mplay32.exe/play/close" & sound,0End Function3. 利用HORN 实现语音报警a.首先打开报警器b.变量设置,此处和报警记录的设置一样,如下报警记录中设置:当testbool 为1时,报警控件显示如下:为1时报警此时会同时播放1.WAV 文件4.以上可以看出,不管哪一种方式,本质上都是在播放已经存在的文件,那比如像钢卷号什么的每次都不一样,想要实现语音播放就不可能。
2017年8月16日15:05:27如何在WINCC 中做单个报警触发对应单个报警声音如某个电机故障报警,就发出“某某电机故障报警”起到警示作用 一、首先安装一个文字转语音的软件!并打开软件!二、在软件里输入报警内容,如“P001收尘风机电机故障”三、点击生成MP3四、指定存放文件的路径,最好是存放在所要实现该功能的WINCC项目在网上邻居上的路径下的Horn下,这样到后面的组态就方便很多。
在WINCC项目在本电脑被正确打开后就会在网上邻居存放有WINCC项目和路径。
以上就是刚刚生成的报警声音所在的路径的报警声音文件,但它们格式只是MP3格式,不是WINCC系统所要求的WAV 格式,所以要下载的格式转换软件,将刚刚生成的MP3格式转换成WAV格式才行。
利用这个格式转换软件将MP3转换成WAV格式,再次将文件存放在刚刚的路径中来。
方便后面的组态。
打开WINCC项目,新建一个二进制变量内部变量Error打开WINCC报警器组件在报警器组态的对话框中的消息分配中设置如上图所示内容,意思就是当报警记录中的错误类别有报警触发时就置位刚刚新建的内部变量Error。
然后在报警器组态的信息分配中组态最关键的内容4的意思即使有很多报警同时触发时,也只能有一个声音报警响起,5组态触发声音报警的变量,6组态触发声音报警变量所对应的报警声音。
此处选择触发的报警变量此处选择报警触发变量所对应的报警声音至此报警器组态工作完成。
五、然后在WINCC项目的主画面组态能打开和关闭报警声音的按钮功能所用的报警的内部系统自动的变量如下:其内部变量对应的功能如上图所示它在WINCC项目的位置如下:六、在WINCC主画面中新建一个打开声音报警功能的按钮组件:它的属性如下:几何属性颜色属性样式属性字体属性主要是在文本中输入“报警音关”内容闪烁属性如下不开闪烁功能其它功能如下主要是想组态当报警声音被关闭的时候显示该按钮填充属性如下画面属性如下效果属性如下然后就在事件选项中组态意思就是当在按钮组件上释放左键时就将常数1赋值给@HornTriggeringSignalsActive,打开声音报警功能七、再新建一个取消声音报警功能的按钮组件该按钮的属性如下几何属性如下颜色属性如下:样式属性如下:字体属性如下:关键是在文本里输入“报警音开”字体闪烁属性如下:闪烁功能不开其它属性如下:意思是当报警声音开时显示该按钮组件填充属性如下:画面属性如下:效果属性如下:下面组态事件意思当鼠标在该按钮有鼠标动作时有如下C动作1、会弹出一个对话框,让你选择是进行取消报警声音的操作,并进行操作提示“请确认是否取消报警声音”2、同时赋值0给@HornTriggeringSignalsActive和@HornRese完成后将两个按钮重叠在一起并在画面中合适的位置上!C脚本如下:#include "apdefap.h"void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName){#pragma option(mbcs)// WINCC:TAGNAME_SECTION_START// syntax: #define TagNameInAction "DMTagName"// next TagID : 1// WINCC:TAGNAME_SECTION_END// WINCC:PICNAME_SECTION_START// syntax: #define PicNameInAction "PictureName"// next PicID : 1if( MessageBox(NULL,"请确认是取消报警声音","报警声音取消操作提示!!",MB_OKCANCEL )== IDOK){SetTagBitWait("@HornTriggeringSignalsActive",0); //Return-Type: BOOLSetTagBitWait("@HornReset",0); //Return-Type: BOOL}// WINCC:PICNAME_SECTION_END //Return-Type: BOOL// WINCC:PICNAME_SECTION_START// syntax: #define PicNameInAction "PictureName"// next PicID : 1// WINCC:PICNAME_SECTION_END}至此整个组态工作完成以上的这种消除报警声音的方法只要取消报警声音按钮按下,即使系统再有报警出现也不会发出报警,除非再次点击“报警音开”打开报警音功能,此时若再有报警出现才会有报警声音出现。
wincc 的horn声音报警的使用•悬赏分:20•- 解决时间:2009-5-22 17:14在horn中,我用一个报警类触发一个变量,用这个变量触发声音文件,但是报警类最多定义16个,我报警有50个,怎么做啊?我又不能直接用报警变量触发声音文件,因为这样如果报警存在,是复位不掉的,声音一直响,请问应该怎么做啊,是不是我理解错了问题补充:问题是如果用PLC的变量触发,上位机复位,你复位按钮怎么知道现在复位的报警是那个报警啊?问题ID: 36379提问者:炜- 资深学长第3级最佳答案1.WinCC V6.0可以用Horn组态实现声音报警,不用编程。
打开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时选择“自定义安装”,已经安装了就选择“安装卸载组件”,组件栏中选择“选项”,右边栏子选项选择“Ba sic Process Control”安装即可。
2.自定义两个内部32位变量stat1和stat1_save,然后在报警记录里面消息位使用外部变量,状态位为stat1中的位。
然后在脚本中:定义两个DWord变量A1、B1连接stat1和stat1_save。
#pragma code("Winmm.dll")void WINAPI PlaySoundA(char* pszSound ,char* hmode,DWORD dwFlag);#pragma code()A1=GetTagDWord("stat1");B1=GetTagDWord("stat1_save");if((A1^B1)&A1)SetTagBit("ok_1",1);if(GetTagBit("ok_1"))PlaySoundA("C:\\winnt\\music\\06.wav",NULL,1);SetTagDWord("stat1_save",A1);回答者:满- 高级工程师第11级2009-5-22 07:45提问者对于答案的评价:多谢30天内的投票结果:好100% (1)不好0% (0)其他回答可以再plc中,几个报警触发一个变量让他置位。
WinCC的声音报警对于组态软件WinCC中的声音报警,也有不少的朋友在讨论这个话题,在这里写的是我在出差期间,需要在项目中用到的声音报警,并且实现自动触发,按钮关闭声音,再次自动触发的循环声音报警代码.1.采用代码实现首先,这是一个全局脚本(在全局脚本中创建一个项目函数,然后调用此函数),可以放在当前显示的画面的任何元素中,并对代码进行如下的添加:建个变量(Bit)“AlarmSound”有报警的时候为“1”,没有报警的时候“0”,写个全局脚本触发器里选择变量触发“AlarmSound”(脚本触发变量为内部变量,若是外部变量则使其与一内部变量关联)int gscAction( void ){#pragma code("Winmm.dll")BOOL WINAPI sndPlaySoundA(char* szWave,DWORD dwFlag);#pragma code()if(GetTagBit("AlarmSound")!=0)sndPlaySoundA("c:\\win2003\\system32\\ALSNDMGR.WAV",0X1|0X8);elsesndPlaySoundA(NULL,0X0);return 0;}即可实现在肩控画面中出现报警的同时启动声音文件.在停止的时候用按钮控制,其中事件代码为:#include "apdefap.h"void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName){#pragma code("Winmm.dll")BOOL WINAPI sndPlaySoundA(char* szWave,DWORD dwFlag);#pragma code()sndPlaySoundA(NULL,0X0);}对上述代码中:关于windows API函数sndPlaySoundA(char* szWave,DWORD dwFlag);char* szWave是声音文件的路径DWORD dwFlag是标识常量0x0:播放WAV文件,播放完毕后将控制转移回你的应用程序中。
WinCC PRO V16 声音报警WinCC RT Rrofessional V16 项目支持在报警产生时播放声音。
实现原理如下:当某个报警类别的包含的启用了“报警器”功能的报警消息“到达”时,该报警类别的“报警器确认变量”置位;通过“计划任务”可以触发脚本动作,在脚本中可以根据该变量的数值来播放声音。
下面,我们以一个示例来看一下具体组态过程。
组态步骤1.为“报警类别”设置“报警器确认变量”在HMI报警> 报警类别的属性里,设置报警类别的“报警器确认变量”。
如下图所示,为3个报警类别组态了“报警器确认变量”。
注:示例中使用的是3个Bool 型的内部变量,实际使用过程中用户可以根据需要选择其他数据类型的变量或外部变量。
2.为报警消息激活“报警器”功能对于希望触发播放声音的报警消息,需要在报警消息的属性里激活“报警器”功能。
注:如下图所示,3个报警类别中各有2条报警消息激活了“报警器”功能,则这6条消息“到达”时会触发声音播放;这3个报警类别中的其他消息没有激活“报警器”功能,则剩余的其他消息“到达”时不会触发声音播放。
3.创建C脚本播放声音文件在项目树中,添加C脚本,通过PlaySoundA 函数来播放声音文件,如下图所示。
注:脚本逻辑:判断3个报警类别的“报警器确认变量”是否为“真”,为“真”则播放声音;全部为“假”,则静音。
注:脚本运行特点:由于PlaySoundA 函数的运行特点,该脚本中如果多个报警类别同时满足播放条件,则仅播放靠后的PlaySoundA 函数所对应的声音文件。
4. 创建“计划任务”触发脚本动作在项目树中,添加计划任务,在计划任务属性> 事件中关联上一步创建的C脚本,如下图所示。
然后,如下图所示,设置该计划任务的触发器为“变量触发器”,触发变量为各报警类别的“报警器确认变量”。
运行系统中的操作在WinCC 运行系统中,当满足条件的报警消息“到达”时,对应的报警类别的“报警器确认变量”会置位,从而触发声音播放。
WINCC声⾳报警显⽰订货号站配置声卡或信号模块。
该实例描述了如何组态报警设备的报警和警告事件类来触发语⾳信号。
下述内容包括了⼯程站的所有组态(包括冗余服务器和OS客户端组态及消息确认)。
1.按照PCS 7 V6.0组态⼿册在SIMATIC Manager中组态所有单站、服务器、冗余服务器和客户OS站。
2.在⼯程站上通过WinCC Explorer打开 SIMATIC PCS 7 单站或服务器OS站。
3.切换到WinCC Explorer中的“内部变量”管理,在“Horn”变量组中分别为报警和警告事件类创建内部变量(也可以创建/选择新的变量组)。
图 01:报警设备编辑器中为后续连接创建内部变量4.注意事项:该程序仅⽤于在连接的OS客户站上进⾏组确认的情况下。
这时,需要其他的变量。
在同⼀组中创建该内部变量并确保对这些变量设置为“项⽬范围更新”。
图 02:通过“项⽬范围更新”定义的变量属性对话框5.双击WinCC Explorer中的Horn图标打开报警编辑器。
在“信号分配”标签中的事件类的下拉菜单中选择“报警”,下⼀⾏选择“警告”。
插⼊需要的其他事件类。
图 03:在“信号分配”标签中为报警编辑器组态和选择事件类。
6.通过“变量”栏中的变量选择对话框选择内部变量,该变量先前已被创建⽤于报警和警告事件类。
在后⾯通过这些变量的赋值过程控制声信号的触发。
图 04:在“信号分配”标签中选择报警编辑器的内部变量7.在“信号分配”标签中可从下拉菜单中使应⽤⽤户权限设置,并且此处必须按优先级激活事件变量。
您可以在⽂本末列出的⽂档中找到更多信息。
8.在该例的报警编辑器中组态“信号分配”标签,如下图所⽰。
图 05:报警编辑器中组态“信号分配”标签9.打开“信号分配”标签。
该标签中,先前选择的变量与信号模块的输出相连接(输出1、2或3),或者,如实例所⽰,通过声卡为信号的声输出选择语⾳⽂件(*.WAV)。
在每⾏中选择两个内部变量⽤于报警和警告;通过变量选择对话框的“Tag”栏选择。