C语言在WinCC监视系统语音报警中的应用

2017-06-01 09:01孙文杰张志勇马志出王银龙
中国高新技术企业 2017年9期
关键词:脚本C语言

孙文杰 张志勇 马志出 王银龙

摘要:WinCC安装了Horn报警组件后,可以通过组态实现语音报警功能,实际应用中为提高WinCC运行性能往往不安装Horn组件。为实现语音报警功能,可以在全局脚本中使用C语言调用Windows函数来实现,驱动蜂鸣器或播放器输出指定音频。文章对C语言在WinCC监视系统语音报警中的应用进行了探讨。

关键词:Wincc监视系统;语音报警;Horn报警组件;脚本;C语言 文献标识码:A

中图分类号:TP273 文章编号:1009-2374(2017)08-0071-02 DOI:10.13535/j.cnki.11-4406/n.2017.08.034

WinCC是SIEMENS推出的运行于Windows操作系统的HMI/SCADA系统。作为全集成自动化系统的重要组成部分,该系统凭借集成方便、功能强大等优点在工业、农业等自动化领域中得到广泛应用。生产过程中如发生异常状况,SCADA系统应在第一时间以语音、图像等多种方式通知现场人员进行故障处理。WinCC的Horn组件可以通过组态配置来实现语音报警功能,但会降低WINCC的运行效率,本文介绍了一种借助脚本程序来实现语音报警功能的Wincc报警应用。

1 语音报警实现原理

WinCC本身不具备发出语音的功能,也没有提供处理声音的相关函数,但鉴于可以与操作系统完美结合的优点,我们可以通过在全局脚本使用C语言调用Windows的API函数来实现语音报警功能。

WinCC可以与PLC控制系统进行实时数据通讯。当生产过程出现异常时,WinCC可以及时准确地获取到PLC控制系统中的故障或异常代码,随后触发全局脚本执行特定程序,进而调用Windows系统API函数,驱动计算机声卡和音箱实现语言报警,如图1所示:

2 语音报警的实现

当我们对WinCC组态了消息归档(报警归档)后,在某報警事件发生时,就会触发相应的消息变量。如果在全局脚本中设定合适的触发器,就可以通过在全局脚本中编写执行C语言程序调用相关的Windows函数,使得电脑播放指定的Wav格式的音频文件,实现语音报警的功能。

2.1 Windows API函数

PlaySoundA(char*pszSound,char*hmode,DWORD dwflag)函数为Windows API函数,可以播放Wav格式的音频文件。

函数声明:

BOOL PlaySoundA(char*pszSound,char*hmode,DWORD dwflag)。

形参:

char*pszSound:指向要播放声音文件的全路径,使用两个连续的反斜杠转义代表一个反斜杠。

char*hmode:应用程序的实例句柄,除非指向一个资源标识符(即fdwSound被定义为SND_RESOURCE),否则必须设置为NULL。

DWORD dwflag:标志的组合,若成功则函数返回TRUE,否则返回FALSE。

当dwflag=0时,声音文件播放一次,该脚本一直等到播放结束。这时声音播放的脚本会一直占用这个线程,其他C脚本无法在期间执行。

当dwflag=1时,声音文件播放一次,同时并行其他的C脚本而不受影响。

当dwflag=2时,如果未找到声音文件,则不播放默认值,而是什么也不播放。

当dwflag=8时,重复该声音文件直到下个PlaySoundA调用。

2.2 全局脚本

WinCC系统运行后,当配置的相关变量的数值超出PLC系统的设定值时,电脑将自动以指定的播放形式播放指定的Wav格式的文件,实现语音报警。

全局脚本中编写相关程序并设定脚本触发器后,当触发条件满足时,WinCC系统会自动执行其中的程序实现语音报警。

实际工业生产使用中,语音报警音乐一般都很短暂,所以一般都会使用循环播放的模式,所以将PlaySoundA()函数的形参dwflag设置为0x0008,即声音文件循环播放,当故障确认后,利用故障确认位来实现报警音乐的停止播放。

此外代码编写时需要注意PlaySoundA()函数在调用中必须首先进行函数的声明,否则无法进行PlaySoundA()函数的调用,编译报错。

3 运行结果

由于该功能为语音报警的实现,虽然系统运行中可以实现语音报警,但无法直接展示运行结果,为此在全局脚本中通过格式化输出函数printf()函数以输出字符串的形式进行打印。如图3所示:

4 结语

通过在全局脚本中编写C语言可以在不安装Horn组件的情况下实现WinCC的语音报警功能,可以播放指定的Wav格式音频文件,具有方式灵活、减少系统占用资源、提高运行速度的优点,有较强的实际意义。

参考文献

[1] 何龄修.读顾城《南明史》[J].中国史研究,1998,

(3).

[2] 杨鸿.C语言在WinCC语言报警中应用[J].自动化应

用,2016,(3).

[3] 王晓东.SIMATIC WinCC环境中C语言的应用[J].控

制工程,1999,(6).

[4] 王禹.基于WinCC的操作画面语音报警设计[J].数字

技术与应用,2015,(7).

[5] 冉井旺,戴滔.语音报警在集中监控系统中的设计应

用[J].自动化应用,2011,(9).

作者简介:孙文杰(1989-),男,山东淄博人,供职于山东中烟工业有限责任公司青岛卷烟厂,研究方向:企业内自动化系统维护、管理;张志勇(1986-),男,供职于山东中烟工业有限责任公司青岛卷烟厂,硕士,研究方向:工厂自动化运维管理。

(责任编辑:蒋建华)

猜你喜欢
脚本C语言
酒驾
基于Visual Studio Code的C语言程序设计实践教学探索
数据库系统shell脚本应用
基于C语言的计算机软件编程
C语言程序设计课程教学与学科专业相结合的探索
快乐假期
神奇的数学
小编的新年愿望
高职高专院校C语言程序设计教学改革探索
论子函数在C语言数据格式输出中的应用