WinCC C语言声音报警

合集下载

WinCC中使用脚本实现报警

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,所有的语⾳报警⽂件存储在该⽂件夹。

wincc7.0中如何用上升沿触发音频输出,起到报警的作用

wincc7.0中如何用上升沿触发音频输出,起到报警的作用

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。

wincc6.0-的horn声音报警的使用

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中,几个报警触发一个变量让他置位。

wincc6.0 的horn声音报警的使用

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声音报警

wincc声音报警

wincc声音报警用户要求项目的任何一个阀门或泵出现故障后,都要有声音报警。

我在S7-300中把这些故障(60多个)都集中到了一个开关量上。

我点击WINCC的Horn后出现的对话框里面Message class下面只有3个选项:错误。

系统,需要确认。

系统,无确认。

我应当选哪一个呢,另外,我那个开关量,例如M1.0,应当放在哪一列,是Tag吗, 1.HORN编辑器中有两个选项页,第一页指定报警类型(至于是否确认,那要看你的要求了)和报警TAG,也就是要指定TAG的报警类型;2.第二页指定报警声音,也就是报警TAG对应相应的报警声音,这个声音文件是WAV类型的;3.HORN组态起来还是很方便的。

先在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\下没有的自己建一个。

你不就是想在音箱里播放报警吗,这么用最简单:#pragma code ("Winmm.dll ")VOID WINAPI PlaySoundA ( char* pszSound, char* hmode, DWORD dwflag );#pragma code()PlaySoundA("E:\\Projects-zrj\\WinccStandard\\zrj\\AlarmMp3\\alarm2.wav",NULL,1);/*PlaySoundA 函数的说明:参数 char* pszSound:指定声音文件 (*.wav 文件) 的全路径。

WinCC PRO V16 声音报警

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画面制作--报警

Wincc画面制作—报警相关介绍,请参考我的百度文库其它文章:Step7及Wincc新手入门教程:介绍西门子Step7和Wincc通讯方法Wincc画面制作--窗口的使用:介绍画面切换及弹出框Wincc画面制作--动态变化:动态跟踪等本文介绍Wincc画面报警,相关框架都基于上述文章,这里不再赘述。

1.WinccAlarmControl我们在上画面插入一个报警控制器,如下:然后对报警控制器参数设置,使它与上画面大小适合,此处报警仅仅显示最新几个,是在所有画面的顶部显示,不随画面切换而改变,并在旁边添加一个按钮“报警信息”用来查看历史报警记录,如下:报警控制器的参数设置如下:点击查看历史所有报警我们设置的上画面是不随画面切换而切换的,因此报警信息会一直显示最新的几条2.隐藏列主题1.控件可调整参数设定3.报警栏显示的信息选择5.隐藏状态栏4.隐藏工具栏此时在上画面的报警控件制作完成了,接下来对按钮做弹出画面:当然我们新建一个Wincc_Alarm.PDL 画面:如上图,我们新了一个WinccAlarmControl,一个显示所有报警的按钮,一个显示报警1的按钮,一个显示报警2的按钮,及其对报警复位的按钮,我们要实现的功能就是在此报警界面,可以选择显示哪些报警或全部显示并可以复位,在报警控制器中我们需要显示报警的编号,日期,时间,变量,对应的PLC 点位以及详细信息,如下设置:单击鼠标事件添加C 动作显示所有报警 显示报警1显示报警2复位报警1复位报警2在消息块勾选这些选项此处上图中的详细信息,原本的名称为“块3”,此处是已经更改的名字,后续会讲。

对每个消息块做配置:最终如下:接下来对报警记录做设置:默认名称为“块3”对象名称,编程需要字符长度间距由字符长度决定类型:选第一个“报警”,编程时需要用到;消息变量:对应PLC变量消息文本:对此报警做注释;错误点:对于PLC变量的点;报警筛选:ALARM1和ALARM2两类此处报警筛选默认是没有的,如何添加呢?如下:右击添加此处已把“块:3”添加过去了更改名字字符长度设定然后对按钮编写C脚本:显示所有报警,上面说过,我们的类型选的是1—-报警显示报警1显示报警2至于为什么是这个代码,有个官方说明,如下:详细介绍可以看西门子官方网站。

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 的操作画面语音报警设计

基于 WINCC 的操作画面语音报警设计摘要:在大型工业控制系统中,组态软件作为控制系统的中心,监控整个系统的运行状态。

在组态服务器所在的监控中心,值守人员时刻关注系统的运行状况,完成正常的生产操作。

当系统设备出现异常时,组态软件即刻报警,值守人员通知维护人员检修,同时向管理人员汇报以寻求调度处置方案。

由于人工操作不及时或者可能出现的疏忽,导致报警之后故障处理不及时甚至遗漏,可能会造成生产事故,给工厂带来经济损失。

关键词:WinCC;报警1语音报警实现的原理WinCC本身是没有能够进行语音的功能,而且WinCC也不能对相关声音进行处理,没有处理声音的对应函数。

但是WinCC的主要优点是能够与操作系统进行完美的结合,在这个过程中能够通过全局的脚本来使用C语言来调动相关的函数实现语音报警的功能。

与此同时,WinCC也可以与PLC控制系统结合来实现数据的实时通讯。

一旦生产过程,出现异常的现象,就及时的可以采取措施。

WinCC能够及时的获取到其它系统中的异常代码,然后触动执行脚本来执行一定的程序,最后通过这一系列的过程来实现语音报警的功能。

因此语音报警功能的实现是依赖于各个环节共同作用,最后触发和推动音箱实现语音报警的功能。

2系统设计2.1系统构成系统由网络化PLC控制系统与视频监控系统组成,在2个系统的上位机采用组态软件Wincc作为监控管理,以可编程控制器(PLC)作为控制、采集核心,对现场的离散数据进行实时采集,对沉淀、过滤、加药、压泥系统的设备进行控制,并对系统的监测数据(氨氮、pH值、浊度、流量等工艺参数)、历史记录、事故报警、报表日志等数据上传到上位机寄存备份。

2.2工业以太网为了适应工业自控系统分布式发展方向,基于Ethernet技术的工业数据通信得到广泛应用,形成了适应工业控制的工业以太网技术。

工业以太网具有实时、稳定可靠、抗干扰能力强、数据传输速度高,使用通用标准网络协议、兼容性好等特点。

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,所有的语音报警文件存储在该文件夹。

通过C脚本代码获取通用路径。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

如何在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, UINT
nFlags, 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
}。

相关文档
最新文档