WinCC 声音报警控件
WINCC语音报警脚本

通过报警记录报警,现在报警记录中组态好报警记录
建全局脚本,时基为2s
#include "apdefap.h"
int gscAction(void)
{
MSG_RTDATA_STRUCT mRT;
int i;
char* pszToken
//NOW is my code
#pragma code ("Winmm.dll")
LPVOID lpvUser;
LPCMN_ERROR lpError;
BOOL n1;
n1=MSRTGetMsgQuit(&alarmunack,errorunack);
SetTagWord("number",alarmunack);
MSRTGetMsgActual(&alarmsum,errorsum);
BOOL WINAPI sndPlaySoundA(char* szWave,DWORD dwFlag);
#pragma code)()
DWORD SND_ASYNC=0x0001;
DWORD SND_LOOP=0X0008;
DWORD alarmsum,alarmunack;
LPCMN_ERROR errorunack,errorsum;
if (GatTagByte)("TAG")==1) 或 if (GetTagByte("TAG")>500)
{PlaySoundA("d:\\ringout.wav",NULL,1);}
return 0;
}
可实现单变量报警,开关量为1或模拟量大于500即可报警,若有多个变量可增加多个if.
如何在WINCC在做单个报警触发对应单个报警声音

如何在WINCC在做单个报警触发对应单个报警声音
在WinCC中,可以通过配置报警触发器来实现单个报警触发对应单个报警声音的功能。
下面将详细介绍如何进行配置。
1.创建需要监控的变量
在WinCC项目中创建需要监控的变量。
例如,创建一个名为"AlarmTag"的变量。
2.创建报警触发器
3.配置报警触发器
在报警触发器列表中选中要配置的报警触发器,并点击右键,在上下文菜单中选择"Properties..."。
在报警触发器属性对话框中,选择"Actions"选项卡。
4.设置报警声音
在报警触发器属性对话框的"Actions"选项卡中,点击"New..."按钮以添加一个新的动作。
在动作类型下拉菜单中选择"Play alarm sound file"选项,然后点击"..."按钮选择要播放的报警声音文件。
5.配置报警条件
6.保存配置
点击报警触发器属性对话框中的"OK"按钮保存配置。
通过以上步骤,配置就完成了。
当监测的变量"AlarmTag"的值满足设定的触发条件时,报警触发器会自动触发,并播放指定的报警声音文件。
注意:在WinCC项目编译和运行前,确保报警声音文件存在于正确的位置,并已正确配置报警触发器的声音文件路径。
WINCC实现声音报警

在WINCC中实现声音报警2009-02-06 20:13先在alarm logging里把报警分类打开自定义的报警类属性有3项 "status tag" "lock tag" "acknowledge tag" 后两个没用在status tag里添加一个byte格式的tag "A"然后你可以试验一下有报警了A为0x1f 确认后为0x01然后C s cript编一下须要编一下了if(GetTagByte("OS1_ALARM") &0xf0){cc_playsound("A.wav");return 1;}此外还需要cc_playsound()和GetProjectPath()两个函数我有现成了把这两个函数复制到项目library里编译一下脚本就行了对了声音文件*.wav放在项目sound下没有的自己建一个//Project Function GetProjectPath()BOOL GetProjectPath(char* lpstrProjectPath){BOOL bRet = FALSE;char szProjectFile[_MAX_PATH+1];char* psz = NULL;CMN_ERROR Error;bRet = DMGetRuntimeProject(szProjectFile,_MAX_PATH+1,&Error);if (bRet == FALSE){return FALSE;}psz = strrchr(szProjectFile,'\');if (psz ==NULL){return FALSE;}*(psz+1) = 0;strcpy(lpstrProjectPath, szProjectFile);return TRUE;}//Project Function CC_PlaySound()#include "apdefap.h"void cc_playsound(char* lpszSoundFile){#pragma code("winmm.dll")BOOL PlaySound(LPCTSTR lpszSound, HMODULE hModule,DWORD dwSound); #define SND_FILENAME 0x00020000L#define SND_ASYNC 0x0001#define SND_LOOP 0x0008#pragma code()BOOL bRet = FALSE;char szProjectPath[_MAX_PATH];char szSoundPath[_MAX_PATH];if (lpszSoundFile == NULL){bRet=PlaySound(NULL,NULL,SND_FILENAME|SND_ASYNC);}else{GetProjectPath(szProjectPath);sprintf(szSoundPath,"%sSound%s", szProjectPath, lpszSoundFile); bRet=PlaySound(szSoundPath,NULL,SND_FILENAME|SND_ASYNC);}if (bRet == FALSE){MessageBeep((WORD)-1);}}报警可以用以下两种实现方法: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: ingout.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 FilesWindowsNTPinballSOUND36.WAV",SND_ASYNC|SND_LOOP);elsesndPlaySoundA(NULL,SND_ASYNC);//sndPlaySoundA("C:windowsmediaoffice97laser.wav",SND_ASYNC|SND_LOOP) ;}return 1;}这个可以实现报警记录中只要有报警发生,那么就触发声音报警。
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内部变量的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实现声音报警的方法

^JWindo*rs XPK£]WlndQrS XP J
Windows XF PS^Jringin WaVsΛjWιndovs XP ^^jrlngout. WaVrJWindO^SXP
请单击继续
大才
——
40
39
39
首先请记录声音文件所
WaV
.WaV
.VraLv
.Wav
vfs XF腿?单命令・way
工15t辽t∙*3
23
23
22
22
20
20
17
10
7
6
3
2
2
205
□≡≡同步
匚:线性标定
过程值范圉
值1
≡2
变呈值范国
从操作粟纭观点看变星的数据类型
取消
⅛
■全局库
÷IBiSPlayrS
÷ _J OPerati on
÷ _J Γl WtELein^nt 2
SlQ
+_J SyiTlbOIS
念项目库
⅛ ⅛β X
^pragmaOPtiOn(mbcs)
//WIN ∞:TAGNAME-BSECTlONeSTART
// syntax: #define TQgNameInAetion "DMTagName11
//nextTQglD:1
//WIN CC:TAGNAME_S ECTIONLEND
/∕WIN∞PICNAME-SECTION-START
inf
+:」InStalIer
,*∣j ⅛v∙⅛
12 sChelnaS
Media
Mi CrOSOft. NEr ms agent Risapps fhui network diagnostic OfnLRe Web P⅛ξβs
WINCC报警声音如何设置

WINCC 报警声音如何设置请教一下WINCC里的报警如何发出声音。
希望您能尽量简单的指点以下我.现在我做了一个测试的工程,报警里面设置了模拟量报警,报警控件部分没什么问题了,只是如何实现当报警时发出声音这个问题仍然没有解决。
我从百度搜索了好多资源。
也看了点介绍,听说有2种主流方法,一种通过C语言的全局脚本,另一种是通过HORN的控件。
我的WINCC版本是6.2,我现在已经通过网上的资源做了2个按钮,一个可以发出声音,另一个可以停止发声,接下来就不会做了。
请教以下问题:1、我如何查看我是否安装了HORN控件,HORN控件如何安装2、通过C语言全局脚本这个方法来添加报警声音的话,具体应该如何操作,网上搜的这个脚本编译的时候有问题。
把这个脚本添加上以后又改如何操作呢#pragmacode(“winmm.dll”)BOOLPlaySound(LPCTSTRlpszSound,HMODULEhmodule,D WORDdwsound);BOOLss=(GetTagBit(“S11.8”)==1||GetTagBit(“S12.8”)==1||Get T agBit(“S11.7”)==1||GetTagBit(“S11.6”)==1||GetTagBit(“S11.4”)==1||GetTagBit(“S11.5”)==1||GetTagBit(“S12.6”)==1) #pragmacode()if(GetTagBit(“111”)==1&&ss==1){PlaySound(“d:\qhhmi11-7-11\ringout.wav”,NULL,8);最佳答案1:你可以打开WINCC后,在系统树中看到HORN组件有没有安装,如果没有安装,你得重新运行WINCC安装文件,选择自定义安装,在里面虽然看不到HORN组件,但是你把有安装的都安装了,我就是这么做的。
2:你上面代码肯定有问题呀,首先差一个}。
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 声音报警设置办法

WINCC 声音报警设置办法
1、建立一个WINCC的内部变量,例如建立内部变量―――state。
2、修改“全局脚本”条目下的“标准函数”条目下的“Alarm”目录下的
“GmsgFunction”这个WINCC自带函数的内容,在其中添加―――
“ SetTagBit(“state”,1 ); ”这条语句并保存退出。
3、组态“报警记录”,在“模拟量报警”目录下添加需要报警的变量消息行,右
击该消息行,打开该变量消息行的“属性”对话框,把“触发一动作”前的选项框选中,保存。
4、组态“全局脚本”条目下的“全局动作”,建立一个用于发出声音的全局动作
脚本(例如叫“报警.PAS”,可以复制别的现有项目中的现成脚本来修改得到),在该脚本里面主要是编写有根据“state”变量的“1”或“0”状态来执行一条播发声音文件的语句;再建立一个用于“自动定时消除声音”的全局脚本(例如叫“消音.PAS”),在该脚本里面主要是有使变量“state”进行复位(置“0”)的语句。
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
WinCC语音报警说明

WinCC语音报警说明1、需要建立一个语音数据库,用来保存需报警的语音文件名,打开SQL的“EnterpriseManager”,如下图所示:新建一个数据库,名为“comm”,如下图所示:2、修改comm数据库的属性,将Model改为Simple,勾选Auto Shrink,如下所示:3、新建一张数据表sound,如下图所示:表的结构如下所示:保存,名为“sound”,如下图所示:关闭Sql。
4、打开Windows的控制面板-> 管理工具-> 数据源(ODBC),如下图所示:点击“添加”按钮:选中SQL Server,点击“完成”.在名称中输入comm,在服务器中选择本机的WinCC,然后点击“下一步”:默认选择,点击“下一步”:选中“更改默认的数据库为”,选择comm数据库,点击“下一步”:默认选择,点击“完成”:点击“测试数据源按钮”:出现“测试成功!”时,说明ODBC数据源添加OK,点击“确定”即可:5、打开WinCC的报警记录,将需要报警的项选中“触发一个动作”,如果想让变量在下降沿报警,就还要选中“是在下降沿创建”,如下图所示:6、打开WinCC的全局脚本,添加一个项目函数AddSoundToDatabase,代码如下:void AddSoundToDatabase(char* DatabaseName,char* TableName,char* Text){__object *db, *rs;char sql[500];db = __object_create("ADODB.Connection");rs = __object_create("ADODB.Recordset");if(db!=NULL){sprintf(sql,"DSN=%s",DatabaseName);db->Open(sql);if(db->State!=0){sprintf(sql,"INSERT %s VALUES (1,'%s')",TableName,Text);rs->Open(sql,db,1);}}db->Close();__object_delete(rs);__object_delete(db);}如下图所示:7、当变量“aaa”由0变成1时,就会触发一个动作,执行WinCC内部的GMsgFunction,我们需要修改这个脚本。
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文件,播放完毕后将控制转移回你的应用程序中。
WinCC PRO V16 声音报警

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 V7.3基于上位机声音报警的实现方法

11.Wincc V7.3基于上位机声音报警的实现方法(2016-02-29 19:24:09)转载▼标签:wincc上位机声音报警分类:西门子软硬件案例:Wincc V7.3做上位机程序,希望有报警到来时,发出声音报警防止操作员打盹。
这里描述了实现这种功能的方法之一,但不是唯一的方法。
Wincc建以下内部变量:Alarm 32位浮点数;Path 文本变量8位字符集。
Wincc中建立一个主画面,有一排导航按钮,有一个picturewindow,点击导航按钮跳转到相应工艺画面,有一个报警控件,名字为ctrlAlarm,有一个消音按钮用于消除声音和报警确认,如下图所示。
在画面的打开事件中,写入以下VBS脚本,把项目路径和波形文件路径写入path变量。
Sub OnOpen()Dim path_vbs,path_cSet path_vbs=HMIRuntime.Tags("Path")path_vbs.write HMIRuntime.ActiveProject.Path & "\alarm.wav"'以下代码将'\'替换成'\\',以备c脚本引用项目路径path_c=Replace(path_vbs.read,"\","\\")HMIRuntime.Tags("Path").Write path_cEnd Sub建立一个全局VBS脚本,判断是不是有新的报警产生,5秒循环触发。
Option ExplicitFunction action'每5秒通过每个工艺画面报警控件"组确认"按钮是不是灰色的判断是不是有新的报警,如果有就把ResetAlarm复位Dim ctrlAlarm,ctrlToolbarButtonSet ctrlAlarm=HMIRuntime.ActiveScreen.ScreenItems("ctrlAlarm")Set ctrlToolbarButton=ctrlAlarm.GetToolbarButton("QuitVisible")If ctrlToolbarButton.Enabled Then‘如果按钮'组确认'不是灰色的,说明有新的报警产生HMIRuntime.Tags("Alarm").Write 1.0ElseHMIRuntime.Tags("Alarm").Write 0End IfEnd Function建立一个全局C脚本,用于播放声音文件,5秒循环触发.#include "apdefap.h"int gscAction( void ){// 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 : 1// WINCC:PICNAME_SECTION_END//每5秒做一次判断#pragma code("Winmm.dll")void WINAPI sndPlaySoundA(char *szWave,DWORD dwflag);#pragma code()char* prjpath;prjpath=GetTagChar("Path");//Return-Type: char*if (GetTagFloat("Alarm")==1.0){if (GetTagChar("Path")!=""){sndPlaySoundA(GetTagChar("Path"),1);}}return 0;}在WINCC-计算机属性的启动选项中,勾选“全局脚本运行系统”和“报警记录运行系统”。
WinCC的声音报警(通过HORN控件和脚本分别实现)

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);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通过PC电脑主机输出报警音效

WINCC通过电脑机箱~输出报警音效
步骤一:建立WINCC变量,对应PLC的报警输出变量(例Q1.0)
步骤二:建立WINCC内部变量,在WINCC报警控件报警时,做为联接电脑里音频文件用。
名称任意:例:1:eorrsond,2:syssond
步骤三:编辑WINCC“报警记录”连接变量Q1.0,做为报警输出
步骤四:编辑WINCC”报警器”
连接变量:
1、消息分配:(可以编辑两种类型的报警,2种形式)
选择“错误”对应wincc内部变量1:eorrsond,
新建行:选择“系统,需要确认”对应wincc内部变量2:syssond 2、信号分配:变量1对应C:\Windows\Media\DJ.wav
变量2对应C:\Windows\Media\任意.wav
注:连接的音频文件,需是(.wav)格式,pcm编码
步骤五:编辑WINCC”画面编辑器”
步骤六:编辑WINCC”画面编辑器”-勾选报警记录运行系统
步骤七:保存,运行,与PLC进行通信,正常运行控制
步骤八:模拟报警变量Q1.0置1,报警记录输出,音频同时播放,步骤九:取消报警,需要点击“WINCC ALARM CONTROL”上按钮,经岗位确认后,进行报警取消。
WinCC实现声音报警的方法

内料介绍:C 脚本播放wav 艾件 C 脚木触发PC 蜂鸣器 VBS 脚木调用媒休播放器 报警器HORN 的使用、、、〕._j C:\WIHDOWS\Media、x 名称大才Q Config 亠(Sljonest^p. mi d40 39 3-91 _J CursorsXP 关键性终止.WWXp 电话拨入wav@1 Dowiiloade& Frogrsiii lil^s+ 二 Driver Cacheehome鬥 Fonts 田亡j HelpIIS Temporary Compressed Files ime in£InstallerowsWindows @L|Win ^WindowsWindows ^Jrecycle, w l±lX 首先请记录声音文件所 存放的路径名及文件名 (脚本当中需要填写) j125chemas MediaMicrosoft. HETiris agent crisapps rriuinetwork diagnostic + 因Offline Web Pa.ges +: _j pchoalth;3 Fe^rNet,J Prefetch^Windows X (g^flonri sh. (gjwindovs XFWindows XF town.(Tii iWindows XPWindows XPe]Windows XF(£]Windoys XF 込Ji-ingim wav^Windows XF^^jringout. waWindows XPWindows XFg ijilstart. wav请单击继续电 .wav av .wav .wav .wav 单命令川葩 23 23 22 22 20 20 17 10 7 6 3 2 2 205首先创建一个模拟水泵运行状 态的Bool 型变量“ Pump i ”濟抽电直X f W SE M 舒3舍局库E-C ] Displays + _J Op er at i CRB + 口 FlantELem ents⑥曰 _______ + 口 Symb ols 电SiemensHTAI ■库 D: \TESTPRJ\raCC\ELearning\0®总/电皂X 囤|》注ffii [画&-»—Q-& —M A$¥J -Ky J -?ra IS 曲如如符设管处、员Mf ns D HT昭跟A 全形科暖作规 (Tler AS AS AS Is 安泵变材采操常□□口□口 Hl rr l i ..砂t r r a ^^H M 冷却泵简易立式泵2 口离心泵1[®fil离心泵3 离心泵4离心泵2■对象属性扈性事件SymbolLibrary Cont roll打开泵对象的属性窗口进行属性设置■ Symb olLi brary i几何其它拄岸屁性Pi cture伸展符号翻转对象闪烁速度静态动?原本・0中-500添加泵的湄/停‘控制按钮在画面中插入诊断窗口(使于检验脚本执行过程D■对象冒性11形按钮园形按钮1十-1双点划线线宽二E 智能对象□画面窗口 0控件OLE 元素 筍入/辐出域应用程序窗口 对鎳展性GSC Diagnostics&翠玄应用程厚窗口融示勰翅框题IA斥显可可边标_冒前应用鸟窗口 1是是是是是是是否□匣園函=国形对象 伏态显示厘性爭件划启动/停止“按钮组态事件在以下情况下执行释放左键 按右键 释放右键动作动作边… E直接连接@)・.・ 总册]除鬼)^include •'apdefap -h" void OrtCIick(chIp§zPictureName, char^IpszObjectName, char* IpszPropertyName) { ^pragma option(mbcs)//WINCC:TAGNAME_SECTION_START// syntax:卡define TagNameInAction "DhCTsgMsme" //nextTsglD : 1//WIN CQTAGNAME.S ECTION 上 ND〃 WIN CCPICNAM E_SECTION_START// syntax: #define PicN&melnAction ''PictureName" //next PicID: 1/./WIN CCPICNAM E.SECTION.END ^include "apdefap.h"fKpragmacode ("Winmm.dll '*)VOID WINAPI PlaySoundA (char* pszSound, char^hmode, DWORD dwflag); #pragmacodeO printfC Start V\n H );PlaySoundA(,,C :WINDOWSWedia\VXLARM8.WAV ,,z NULLO); printf(,,End\rAn ,,)J T}t^pragma option (mbes)// WINCCTAG NAME.S E CTION^START//syntax: #define TagNameInAction "DMTagName" //next Tag ID : 1// WINCCTAG NAME_S E CTION.END圖SetTagBit3 SetTagByte 蜀 SetTagChar 圃 SetTagJouble 窗 SetTagDWord ►3SetTagfloa.t 圃 SetTagRaw 圃 SetTagSByte :...3 SetTagSDWord ; (3)SetTagSWord :蜀 SetTag :ViLu.e •““ 畐 SetTagWord.•♦-目 wince启动按钮C 脚本&匸空都崖欽►2Jallocate c_bibgraphics13邑曲 Sgset£1S Q state wait^include "apdefap.h"void OnCli ck(ch IpszPictureName, chs.^ IpszObjectName, char* IpszPropertyName) #pragm a option (m b cs)// WIN CC:TAG NAME^S E CTION_START// syntax: ^define TagNameInActi o n "DMTagName"//nextTagID : 1// WIN CC:TAG NAME.S E CTIO N_END// WIN CC:PICNAME_S ECTION_START// syntax: #define PicNameInAction "PictureName"//next PicID : 1//WINCC:PICNAME_SECTION_END尹in elude "apdefaph"^pragmacode ("Winmm.dll')VOID WIN API PlaySoundACchar" pszSound, char^hmode, DWORD dwflag);#pragmacodeQprintff Start \r\n n):PlaySoundAC'CA^INDOWS^MedisX^L^RMSWAV^N UIXO); printfCEndW1);^etTagBitfPumpI"J); //Return-Type:BOOL^)停止按钮C脚本include "apdefap-h11void OnClick(char^ IpszPictureName, char^ IpszObjectName, chat^ IpszPropertyN ame) {#pragma option(mbcs)//WINCC:TAGNAME_SECTION.START// syntax: #deline TagNamelnAction "DMTagName"//nextTagID : 1//WINCC:TAGNAME_SECTION_END//WINCCFICNAME.SECTION.START// syntax: #deline PicName InAction "PictureName"//nextPiclD:1//WINCC:PICNAME_SECTION_END#include "apdefap.h"#pragma code ("Winmm.dll '*)VOID WIN API PlaySoundA (char^ pszSound, char^ hmode z DWORD dwflag);# pragma codeOprintfCStart^n11);PlaySoundAC'OWINDOWS^Media^LARMS.WAV'LNU 丄0); printfC'End^n'1);SetTagBitC'Pumpl'lO); //Return-Type: BOOL注意:Flag =0x0000,该脚本独占C脚本线程,其它C脚本在此期间无法执行。
WinCC C语言声音报警

如何在WinCC 中通过 C 脚本输出声音?解答:附件是一个小实例。
该C 动作位于按钮后,这样只需单击该按钮就可产生声音。
C 动作:#include "apdefap.h"void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINT nFlags, int x, int y){#pragma code ("Winmm.dll ")VOID WINAPI PlaySoundA ( char* pszSound, char* hmode, DWORD dwflag );#pragma code()PlaySoundA("C:\\Winnt.400\\Media\\tada.wav",NULL,1);}该功能需要有声卡。
PlaySoundA 函数的说明:参数char* pszSound:指定声音文件(*.wav 文件) 的全路径。
参数char* hmode:总为0。
参数DWORD dwflag:SND_SYNC = 0x0000:声音文件播放一次,该脚本一直等到播放结束SND_ASYNC = 0x0001:声音文件播放一次,同时并行处理该脚本SND_NODEFAULT = 0x0002:如果未找到该声音文件,则不播放默认值,而是什么也不播放。
SND_LOOP = 0x0008:重复该声音文件直到下个PlaySoundA 调用(只能通过0x0001) => 总是指定0x0009。
这些参数也可通过逐位逻辑‘或’进行组合(如:SND_ASYNC | SND_LOOP)注意事项:如果想使用计算机内部扬声器的蜂鸣声而不是声音文件,则实现如下脚本:由于寻址内部扬声器,无需声卡。
#include "apdefap.h"void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName, UINTnFlags, int x, int y){#pragma code ("Kernel32.dll")BOOL Beep( DWORD dwFreq, DWORD dwDuration); //dwFreq 定义蜂鸣声的频率,单位:Hz//dwDuration 指定蜂鸣声的持续时长,单位:ms#pragma code()Beep(1000,100); //实例:频率:1000 Hz,100 ms}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在运行模式,信号变量自动拥有已配置消息类别的报警状态,只要内部系统变量“@HornSettingTagsActive” 的值为“1”,默认的情况,这个值在变量管理器中被初值化为1。
如果,例如,系统变量的值从“0”设置为“1”并且此刻已经有消息到达,这样将引起一个声音输出,信号变量没有被立即置位,因此声音输出将不会被立即触发。信号变量和声音输出只有在一个消息再次到来或者重新启动“Horn”才会被触发。您可以通过设置内部系统变量“@RestartHorn” 为“1”来重新启动“Horn”。当“Horn”被重新启动后,系统自动重置系统变量“@RestartHorn”的值为“0”。
配置horn
在WinCC变量管理编辑器中,您创建几个或几个数据类型为二进制的信号变量,在“Horn”编辑器中,每一个信号变量被指派到一个信号模板或者“WAV”文件。信号模板的输出能够被连接到一个喇叭或者另外的信号转送装置。如果在运行模式中一个信号变量的值为“1”,则相对应于该信号变量的信号模板输出或者置的WAV文件将被播放。
设置信号变量
当符合过滤标准的消息到来时,信号变量的状态从“0”变到“1”。
重置消息变量
当所有的按照预先设置信号变量的过滤标准配置的消息被确认后,信号变量的状态从“1”改变为“0”。当经过“acknowledge horn”按钮,“Horn”被分别确认后,信号变量同样会给重置。 . 在运行模式,在基本过程控制的按钮设置后,这个按钮能够使用。
问题ID: 39527 提问者:心灵之约 - 毕业实践员 第4级
最佳答案
正解请参考:
如何设置带有声音的信号消息?
说明:
"Horn"编辑器用来配置与报警相关事件信号模板和PC声卡的输出。Horn编辑器是WinCC选件“基本过程控制”的一个组件,自WinCC V6.0版本以后,“基本过程控制”不需要任何附加的授权,默认获得。
关于“Horn”主题的信息可以通过以下方式获得
WinCC帮助系统下“Options > Options for Process Control > Horn”
配置手册“SIMATIC Process Control System PCS 7 V7.0 Operator Station”。 该手册可在条目ID 24449737.下获得。
当您改变实现多重确认的过程,定义的确认组和确认变量将丢失。
根据多重确认使用的过程的不同,内部变量"@HornReset" 的行为不同:
"@HornReset"没有多重确认或者使用确认变量实现的确认组
当信号传输状态(信号模板或者WAV文件的输出)变为“1”,变量"@HornReset"的值从“0”变到“1”。经过点击“acknowledge horn”按钮确认信号传输,"@HornReset"被重置。
注意:
实现多重确认需要选择正确的终端总线。注意在“Simatic Shell”中的设置。关于Simatic Shell 的更多的信息在条目 ID 18967416. 可以获得
为了能够通过使用组确认实现多重确认,您应当对组确认使用唯一的名字。这个名字在整个终端总线上必须唯一。 注意,使用相同的组确认,但不直接属于当前工程的WinCC工作站可以在总线上存在。
"@HornReset" 通过组确认实现的多重确认
在这样的情况下,变量的被设置为不变。经过点击“acknowledge horn”按钮确认“Horn”后,变量“@HornReset”被直接重置为“0”,然后被迅速的再次设置为“1”。
如果信号变量经过在报警控件中确认所有相关报警被重置或者脚本直接重置变量,在这样的操作下计算机的声音信号被确认(关闭),但是在这种情况下“@HornReset”不会被设置为“0”。 这样,在某一台计算机,为了实现多重确认的计算机配置收不到信号已经被确认的信息。在这样的情况下,为多重确认配置的计算机的信号传输不能够被确认(关闭)。多重确认只能在分别点击“acknowledge horn” 按钮后起作用。
通过用户自定义逻辑设置/重设信号变量
信号变量的值没有必要必须连接到消息级别的报警状态。设置/重设信号变量的逻辑同样也可以在用户指定逻辑中编程。
消息的声音输出能够在WinCC服务器和WinCC客户端执行。“Horn”需要在每一WinCC工作站单独配置。
“Horn”编辑器允许您使用确认变量或者一个确认组来配置一个多重确认。使用确认组的多重确认选件将从WinCCV6.2以后可以获得。在这里,“Horn”确认可应用于在被设置为相同的确认组的WinCC工作站。确认组是一个简单的,实现客户端,服务器和冗余服务器器的声音信号输出的多重确认的方法 ,推荐使用一个确认组的来实现多重确认。
注意:
只有在内部系统变量“@HornTriggeringSignalsActive”是“1”的情况下,输出才会被执行或WAV文件被播放,在默认的情况下,这个值在变量管理器中作为初始值被置位。
在运行模式中用两种不同的途径使一个变量被赋值。
信号变量
在运行模式中,一个信号变量的值能够直接连接到一个配置消息的报警状态。将信号变量赋值到消息可以在“Horn”编辑器中的“Message assignment”菜单中配置。这个参数对话框提供了连接一个信号变量到指定的报警状态的不同的过滤标准(消息类别,优先级,数据源,范围,事件,允许)。
我用WinCC 6.0 sp3 Asia 编写WinCC 报警,想实现声音报警,例如1#泵故障之后,触发WinCC中的变量,声音报警"1#泵故障",直到故障解除,不知如何实现?
问题补充:我用的是WinCC 6.0 sp3 Asia版本,不是WinCC 6.2版本,大家一定要搞清楚,在WinCC 6.0 sp3 Asia中没有Horn 控件.