资源描述:
《wincc语音报警及c#实现文字转语音》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Wincc语音报警Wincc本身可以利用C脚本,VBS及HORN来做语音报警,但是上述本质上是调用的已存在的音频文件,想实现播放实时更新的信息是不行的,本文主要介绍通过C脚本,VBS及HORN来实现语音报警,并最后介绍一种文字转语音---TTS的实现方法。1.C脚本实现语音报警利用C脚本实现语音报警,只能是播放WAV文件。在C脚本中添加如下代码:#include"apdefap.h"long_main(char*lpszPictureName,char*lpszObjectName,char*lpszP
2、ropertyName){voidWINAPIPlaySoundA(char*pszSound,char*hmode,DWORDdwflay);#pragmacode()if(GetTagBit("testsound")==1){PlaySoundA("c:\wav\1.wav",NULL,1);}return0;}另外需设置触发器,如下:7报警器变量设置语音文件路径1.VBS实现语音报警利用VBS,实际是在调用媒体播放器,可以播放视频,代码如下:FunctionBackColor_Trigger(
3、ByValItem)DimsoundDimobjWshShellsound="c:wav1.avi"SetobjWshShell=CreateObject("Wscript.Shell")objWshShell.Run"mplay32.exe/play/close"&sound,0EndFunction71.利用HORN实现语音报警a.首先打开报警器b.变量设置,此处和报警记录的设置一样,如下为1时报警报警记录中设置:此时会同时播放1.WAV文件当testbool为1时,报警控件显示如下:71.以上
4、可以看出,不管哪一种方式,本质上都是在播放已经存在的文件,那比如像钢卷号什么的每次都不一样,想要实现语音播放就不可能。那么我们可以利用TTS来实现,就是翻译词典的语音功能一样。a.首先把需要语音播放的文件存在txt文檔中,以CAL上下线带钢准备焊接为例,代码如下:#include"apdefap.h"long_main(char*lpszPictureName,char*lpszObjectName,char*lpszPropertyName){//---------------------上线----
5、-------------------------------------------//if(GetTagBit("OBI_Welder_Ready")&&GetTagBit("B_UpPL_NextSelect")){FILE*fp=fopen("D:\test\test.txt","w+");//打开文档,按以下格式写入fprintf(fp,"%s,%.f,%.3f",GetTagChar("IL_PL1_ID"),GetTagFloat("IR_PL1_Width"),GetTagFloat
6、("IR_PL1_Thick"));//txt文档写入内容格式:钢卷号,宽度保留0位小数,厚度保留3位小数fclose(fp);//关闭文档}//----------------------下线-----------------------------------------------//elseif(GetTagBit("OBI_Welder_Ready")&&GetTagBit("B_LwPL_NextSelect")){FILE*fp=fopen("D:\test\test.txt","w+
7、");fprintf(fp,"%s,%.f,%.3f",GetTagChar("IL_PL2_ID"),GetTagFloat("IR_PL2_Width"),GetTagFloat("IR_PL2_Thick"));fclose(fp);}Return0;7}同样的,如第一节所讲,另外需设置触发器,设置完后当事件触发时txt会生成如下内容:a.由于Wincc本身不支持TTS功能,但是计算机本身是带有TTS引擎的,因此我们可以利用微软的TTS语音引擎来实现,把txt文文件里的文字通过语音读出来,以C#实
8、现为例,原理是通过检测txt文档的变化,当文档内容发生变化时,比如钢卷号改变就播放txt文档里面的内容,代码如下:usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.For