Wincc语音报警及C#实现文字转语音

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1Wincc语音报警Wincc本身可以利用C脚本,VBS及HORN来做语音报警,但是上述本质上是调用的已存在的音频文件,想实现播放实时更新的信息是不行的,本文主要介绍通过C脚本,VBS及HORN来实现语音报警,并最后介绍一种文字转语音---TTS的实现方法。1.C脚本实现语音报警利用C脚本实现语音报警,只能是播放WAV文件。在C脚本中添加如下代码:#includeapdefap.hlong_main(char*lpszPictureName,char*lpszObjectName,char*lpszPropertyName){voidWINAPIPlaySoundA(char*pszSound,char*hmode,DWORDdwflay);#pragmacode()if(GetTagBit(testsound)==1){PlaySoundA(c:\\wav\\1.wav,NULL,1);}return0;}另外需设置触发器,如下:22.VBS实现语音报警利用VBS,实际是在调用媒体播放器,可以播放视频,代码如下:FunctionBackColor_Trigger(ByValItem)DimsoundDimobjWshShellsound=c:\wav\1.aviSetobjWshShell=CreateObject(Wscript.Shell)objWshShell.Runmplay32.exe/play/close&sound,0EndFunction报警器变量设置语音文件路径33.利用HORN实现语音报警a.首先打开报警器b.变量设置,此处和报警记录的设置一样,如下报警记录中设置:当testbool为1时,报警控件显示如下:为1时报警此时会同时播放1.WAV文件44.以上可以看出,不管哪一种方式,本质上都是在播放已经存在的文件,那比如像钢卷号什么的每次都不一样,想要实现语音播放就不可能。那么我们可以利用TTS来实现,就是翻译词典的语音功能一样。a.首先把需要语音播放的文件存在txt文檔中,以CAL上下线带钢准备焊接为例,代码如下:#includeapdefap.hlong_main(char*lpszPictureName,char*lpszObjectName,char*lpszPropertyName){//---------------------上线-----------------------------------------------//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(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+);fprintf(fp,%s,%.f,%.3f,GetTagChar(IL_PL2_ID),GetTagFloat(IR_PL2_Width),GetTagFloat(IR_PL2_Thick));fclose(fp);}Return0;}同样的,如第一节所讲,另外需设置触发器,设置完后当事件触发时txt会生成如下内容:5b.由于Wincc本身不支持TTS功能,但是计算机本身是带有TTS引擎的,因此我们可以利用微软的TTS语音引擎来实现,把txt文文件里的文字通过语音读出来,以C#实现为例,原理是通过检测txt文档的变化,当文档内容发生变化时,比如钢卷号改变就播放txt文档里面的内容,代码如下:usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Threading;usingSystem.IO;usingSystem.Speech.Synthesis;usingSystem.Speech;namespaceYPC_TTS{publicpartialclassYPC_TTS:Form{publicYPC_TTS(){InitializeComponent();WatcherStrat();}string[]splite1;strings1,s2,s3;char[]c1;char[]c2;strings_all1;strings_all2;strings_all;Threadth;//定义线程6FileSystemWatcherwatcher=newFileSystemWatcher();//文本监视voidWatcherStrat(){watcher.Path=@D:\test;watcher.Filter=*.txt;watcher.IncludeSubdirectories=true;//允许侦测此目录下的子目录watcher.NotifyFilter=NotifyFilters.LastWrite;watcher.Changed+=newFileSystemEventHandler(OnChanged);watcher.EnableRaisingEvents=true;//开启提交事件}voidOnChanged(objectsource,FileSystemEventArgse){Thread.Sleep(330);watcher.EnableRaisingEvents=false;th=newThread(calculate);th.IsBackground=true;th.Start();Control.CheckForIllegalCrossThreadCalls=false;watcher.EnableRaisingEvents=true;}privatevoidcalculate(){StreamReaderobjReader=newStreamReader(@D:\test\test.txt);SpeechSynthesizersynth=newSpeechSynthesizer();stringstrLine=objReader.ReadLine();if(strLine!=){splite1=strLine.Split(',');s1=splite1[0];s2=splite1[1];s3=钢卷厚度¨¨+splite1[2];c1=s1.ToCharArray();//转成字符数组if(c1.Length!=9){s_all=入口准备焊接;}else{s_all1=钢卷号+c1[0]+`+c1[1]+`+c1[2]+`+c1[3]+`+c1[4]+`+c1[5]+`+c1[6]+`+c1[7]+`+c1[8]+,;c2=s2.ToCharArray();if(c2.Length==3){s_all2=钢卷宽度+c2[0]+`+c2[1]+`+c2[2]+,;7}else{s_all2=钢卷宽度+c2[0]+`+c2[1]+`+c2[2]+`+c2[3]+,;}s_all=入口准备焊接+,+s_all1+s_all2+s3;}objReader.Close();objReader.Dispose();GC.Collect();synth.Speak(s_all);synth.Dispose();Thread.Sleep(1100);}}}}以上完成后,就会把txt里面的内容读出来,暂时微软默认的语音引擎说中文有点难听,可以自己安装语音库,此处安装的是nerospeech,安装完后可以在以下路径选择语音:

1 / 7
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功