WINCC70组态报警声音演示过程
- 格式:doc
- 大小:2.41 MB
- 文档页数:12
wincc7.0中如何用上升沿触发音频输出,起到报警的作用想在工控机上装音响,设备停机就报警,这个该如何做?问题补充:不想用报警控件来触发让音响报警,除了这个之外还有别的办法吗?重点是在软件上如何编写指令使连接在工控机上的音响发声。
最佳答案其实不用horn报警器也是做出来。
上次试了试完全没有问题。
用wincc的全局脚本,做语音报警,1:用周期性1s做触发器2:当变量”报警”置1时,语音报警一直持续。
当变量”报警”置0时,语音报警停止继续。
程序如下:#include”apdefap.h”intgscaction(void){#pragmacode(“winmm.dll”)voidwinapiplaysounda(char*pszsound,char*hmode,dworddwfla g);#pragmacode()if(gattagbit(“报警”))playsounda(“c:\winnt.400\media\tada.wav”,null,0x1);return0;}注意:1:音乐地址为c:\winnt.400\media\tada.wav。
为\。
是不行的。
2:0x1也可以写成0x8.playsounda函数的说明:参数char*pszsound:指定声音文件(*.wav文件)的全路径。
参数char*hmode:总为0。
参数dworddwflag:snd_sync=0x0000:声音文件播放一次,该脚本一直等到播放结束snd_async=0x0001:声音文件播放一次,同时并行处理该脚本snd_nodefault=0x0002:如果未找到该声音文件,则不播放默认值,而是什么也不播放。
snd_loop=0x0008:重复该声音文件直到下个playsounda 调用(只能通过0x0001)=>总是指定0x0009。
#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;}这个可以实现报警记录中只要有报警发生,那么就触发声音报警。
wincc7.0中如何用上升沿触发音频输出,起到报警的作用想在工控机上装音响,设备停机就报警,这个该如何做?问题补充:不想用报警控件来触发让音响报警,除了这个之外还有别的办法吗?重点是在软件上如何编写指令使连接在工控机上的音响发声。
最佳答案其实不用horn报警器也是做出来。
上次试了试完全没有问题。
用wincc的全局脚本,做语音报警,1:用周期性1s做触发器2:当变量”报警”置1时,语音报警一直持续。
当变量”报警”置0时,语音报警停止继续。
程序如下:#include”apdefap.h”intgscaction(void){#pragmacode(“winmm.dll”)voidwinapiplaysounda(char*pszsound,char*hmode,dworddwfla g);#pragmacode()if(gattagbit(“报警”))playsounda(“c:\winnt.400\media\tada.wav”,null,0x1);return0;}注意:1:音乐地址为c:\winnt.400\media\tada.wav。
为\。
是不行的。
2:0x1也可以写成0x8.playsounda函数的说明:参数char*pszsound:指定声音文件(*.wav文件)的全路径。
参数char*hmode:总为0。
参数dworddwflag:snd_sync=0x0000:声音文件播放一次,该脚本一直等到播放结束snd_async=0x0001:声音文件播放一次,同时并行处理该脚本snd_nodefault=0x0002:如果未找到该声音文件,则不播放默认值,而是什么也不播放。
snd_loop=0x0008:重复该声音文件直到下个playsounda 调用(只能通过0x0001)=>总是指定0x0009。
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实现有声报警的方法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 (GetT agByte("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* pszT oken;//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\\Windows NT\\Pinball\\SOUND36.WAV",SND_ASYNC|SND_LOOP); else sndPlaySoundA(NULL,SND_ASYNC);//sndPlaySoundA("C:\\windows\\media\\office97\\laser.wav ",SND_ASYNC|SND_LOOP);}return 1;}这个可以实现报警记录中只要有报警发生,那么就触发声音报警。
.
一、使用Horn报警器
WINCC软件“帮助”中有报警器用法的详细说明
Horn有关的系统变量
专业资料Word
.
@RestartHorn
@Horn TriggeringSingalsActive 禁止或者运行播放声音文件@HornSettingTagsActive
@HornReset 可以用来确认报警,停止报警声音
开始组态
专业资料Word
.
创建两个信号变量
在图形编辑器下报警记录下完成
专业资料Word
.
打开报警器组态消息分配
专业资料Word
.
组态信号分配(需要提前下载WAW格式的报警声音文件)
专业资料Word
.
二、用C脚本播放WAV文件
专业资料Word
.
专业资料Word
.
专业资料Word
.
组态:启动按钮字体-文本-启动效果-全局颜色方案-否颜色-背景颜色-绿色停止按钮字体-文本-停止效果-全局颜色方案-否颜色-背景颜色-红色为了监视程序运行,要插入智能对象
专业资料Word
.
组态启动按钮C动作
专业资料Word
.
#include”apdefap.h”
#pragma code(”Winmm.dll”)
VOID WINAPI PlaySoundA(char*pszSound,char*hmode,DWORD dwflag); #pragma code()
printf(“Start\r\n”);
专业资料Word
.
PlaySoundA(“C:\\WINDOWS\\Media\\ALARM8.WAV”,NULL,0); printf(“End\r\n”);
组态启动按钮的SetTagBit
组态停止按钮的SetTagBit
专业资料Word
.
三、用C脚本触发PC蜂鸣器
#include”apdefap.h”
#pragma code(”Kernel32.dll”)
BOOL Beep(DWORD dwFreq,DWORD dwDuration); #pragma code()
BOOL Beep(1000,100);
专业资料Word。