WinCC的声音报警(通过HORN控件和脚本分别实现)
WinCC实现声音报警的方法

#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中使⽤脚本实现报警WinCC中使⽤脚本实现报警wincc 2009-01-19 14:30:04 阅读99 评论0 字号:⼤中⼩在6.2⾥,新建⼀个画⾯,两个按钮,⼀个开始播放声⾳(循环播放)按钮,⼀个停⽌播放按钮(没次按钮将循环播放,退出wincc同样在播放),试验成功了,就是第⼀次反应很慢,第⼀次成功报警后,之后在调⽤就快了。
开始播放按钮代码。
#pragma code("Winmm.dll")BOOL WINAPI sndPlaySoundA(char* szWave,DWORD dwFlag);#pragma code()DWORD SND_ASYNC=0x0001;DWORD SND_LOOP=0x0008;//循环播放sndPlaySoundA("d:\\致爱丽丝.wav",SND_ASYNC|SND_LOOP);停⽌播放按钮代码。
#pragma code("Winmm.dll")BOOL WINAPI sndPlaySoundA(char* szWave,DWORD dwFlag);#pragma code()DWORD SND_ASYNC=0x0001;DWORD SND_LOOP=0x0008;//停⽌播放sndPlaySoundA(NULL,SND_ASYNC); 00000000000000000000000000000000000000000000000000积累—WinCC报警实例wincc 2009-01-19 14:33:28 阅读458 评论0 字号:⼤中⼩这是⽹友给的实际⼯程中的例⼦,以后做项⽬使⽤时可以仔细研究⼀下,再次感谢那位热⼼的⽹友,我贴出来供⼤家学习:在WinCC全局脚本编辑器中完成,达到了语⾔报警的预期效果。
具体步骤如下:A.监控系统所在项⽬创建⽂件夹Voices,所有的语⾳报警⽂件存储在该⽂件夹。
wincc软件报警声音的做法

Wincc软件报警声音的触发和确认
通过wincc内部变量的Horn变量组,报警记录,报警器,实现触发报警声音
第一步:打开wincc变量管理器,选中内部变量,在Horn变量组新建几个内部变量,本例中新建HORN_ALM,数据格式定无符号的值,8位,16位,32位都可以,本例中定义为32位,新建HORN1,HORN2,HORN3,数据格式为二进制变量
第二步:打开报警记录,在消息下面可以新建消息,本例中创建了三个消息组,按报警的等级创建了一级报警,二级报警,三级报警,等级的划分看项目上是否有要求,没有就不用划分
第三步:将HORN_ALM变量在添加到三个消息组中,消息位不能重复,HORN_ALM定位32位值,消息位可以从0-31中任意选择
第四步:打开报警器,在消息分配中将三个报警等级选上,消息类别对应的变量为新建内部变量的HORN1,HORN2,HORN3
第五步:在信号分配中,组态HORN1,HORN2,HORN3,对应报警声音文件
总共五步步骤可以实现通过Horn变量组,报警记录,报警器,触发报警声音
报警声音的确认:使用wincc AlarmControl报警控件,当报警消息到达后,会出现报警栏中,通过报警栏上的单个确认按钮或全部确认按钮确认到达的报警条目,当报警消息确认后报警声音停止。
Wincc语音报警及C#实现文字转语音

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.以上可以看出,不管哪一种方式,本质上都是在播放已经存在的文件,那比如像钢卷号什么的每次都不一样,想要实现语音播放就不可能。
wincc声音报警实现方法

else
sndPlaySoundA(NULL,SND_ASYNC);
//sndPlaySoundA("C:\\windows\\media\\office97\\laser.wav",SND_ASYNC|SND_LOOP);
#pragma code("Winmm.dll")
BOOL WINAPI sndPlaySoundA(char* szWave,DWORD dwFlag);
#pragma code()
DWORD SND_ASYNC=0x0001;
DWORD SND_LOOP=0x0008;
DWORD alarmsum,alarmunack;
#pragma code( )
if (GetTagByte("TAG")==1) 或 if (GetTagByte("TAG")>500)
{PlaySoundA("d:\\ringout.wav",NULL,1);}
return 0;
}
用以上程序就可以实现单个变量报警,开关量为1或模似量大于500都可以报警,用户可以根据自己的情况改变以上数值,如果有多个变量可以增加多个if .
MSRTGetMsgActual(&alarmsum,errorsum);
SetTagDWord("sum",alarmsum);
if (alarmsum==0)
sndPlaySoundA(NULL,SND_ASYNC);
else
WinCC实现声音报警的方法

//next PidD:1
//WlNCCFICNAMEeSECTIONeEND
^include,⅛pdefap h"
^PrSgmaCOde("Winmrn.dll,,)
VOlD WlNAPl PleySOUndA (CharfcPSZSOUnd,ChGL广hmode, DWORD dυvflag);
#Pragma code(
PlaySOUndA(
}
PlaySOUndA ι⅛数的说啊=
姿数char* PSZSoUndt
指定声音文件r.wav ±ftj的全S⅛径G
篆武CharThmodθf为NLILL.
参数DWoRD Clvxflag:
SND,SYNC = OXOOOOf津首文件播取一次J诙脚本一宜尊到播歆结朿
^pragmaOPtiOn(mbcs)
//WIN ∞:TAGNAME-BSECTlONeSTART
// syntax: #define TQgNameInAetion "DMTagName11
//nextTQglD:1
//WIN CC:TAGNAME_S ECTIONLEND
/∕WIN∞PICNAME-SECTION-START
在WirlCC中实现声音报警功能
内容介绍;
1、C脚本播放WaV文件
2、C脚本触发Pe蜂鸣器
3、VBS脚本调用媒体播放器
3、报警器HORN的使用
C脚本播放WaV文杵
ffinclude "aρdefap.h
VOid OnCliCk(Char
ffpragma COde ('Winmrτι.dll
wincc6.0-的horn声音报警的使用

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的声音报警(通过HORN控件和脚本分别实现)

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文件,播放完毕后将控制转移回你的应用程序中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
WinCC的声音报警
对于组态软件WinCC中的声音报警,也有不少的朋友在讨论这个话题,在这里写的是我在出差期间,需要在项目中用到的声音报警,并且实现自动触发,按钮关闭声音,再次自动触发的循环声音报警代码.
在这之前我也不会用这一方面的报警,毕竟C语言对我来说,我只能说了解而不是精通,下面的代码实现过程是我从其他地方咨询了多次找来的可行的解决办法.
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);
else
sndPlaySoundA(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 文件,播放完毕后将控制转移回你的应用程序中。
是不会一直响个不停的。
0x1:播放WAV文件,然后将控制立即转移回你的应用程序中,而不管对WAV文件的播放是否结束。
0x8:循环播放WAV 文件。
使用该代码即可实现WinCC中的声音报警.
2.采用Wincc中的Horn控件实现
在WinCC变量管理编辑器中,您创建几个或几个数据类型为二进制的信号变量,在“Horn”编辑器中,每一个信号变量被指派到一个信号模板或者“WA V”文件。
信号模板的输出能够被连接到一个喇叭或者另外的信号转送装置。
如果在运行模式中一个信号变量的值为“1”,则相对应于该信号变量的信号模板输出或者配置的WA V文件将被播放。
打开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”(基本过程控制)安装即可。
确认报警:
1. 通过报警控件中的工具栏实现:
2. 通过脚本实现:
可以用如下的函数确认报警窗口单个报警
4版本和低于此版本的WinCC:BOOL
OnBtnSinglAckn(char*lpszPictureName,char*lpszObjectName)
5版本和高于此版本的WinCC:BOOL
AXC_OnBtnSinglAckn(char*lpszPictureName,char*lpszObjectName)
可以用如下的函数确认报警窗口所有可见的报警:
4版本和低于此版本的WinCC:BOOL
OnBtnVisibleAckn(char*lpszPictureName,char*lpszObjectName)
5版本和高于此版本的WinCC:BOOL
AXC_OnBtnVisibleAckn(char*lpszPictureName,char*lpszObjectName) 其中char*lpszPictureName 是报警控件所在的页面名称,,如果按钮跟控件在同一个页可以不用写
char*lpszObjectName 是报警控件的名称,,注意不是标题名称.
可以给每个变量分配各自的声音。
当一类报警来时都会触发声音。