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

上传人:b****4 文档编号:5195947 上传时间:2022-12-13 格式:DOCX 页数:9 大小:541.79KB
下载 相关 举报
Wincc语音报警及C#实现文字转语音.docx_第1页
第1页 / 共9页
Wincc语音报警及C#实现文字转语音.docx_第2页
第2页 / 共9页
Wincc语音报警及C#实现文字转语音.docx_第3页
第3页 / 共9页
Wincc语音报警及C#实现文字转语音.docx_第4页
第4页 / 共9页
Wincc语音报警及C#实现文字转语音.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

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

《Wincc语音报警及C#实现文字转语音.docx》由会员分享,可在线阅读,更多相关《Wincc语音报警及C#实现文字转语音.docx(9页珍藏版)》请在冰豆网上搜索。

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

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

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

Wincc语音报警

Wincc本身可以利用C脚本,VBS及HORN来做语音报警,但是上述本质上是调用的已存在的音频文件,想实现播放实时更新的信息是不行的,本文主要介绍通过C脚本,VBS及HORN来实现语音报警,并最后介绍一种文字转语音---TTS的实现方法。

1.C脚本实现语音报警

利用C脚本实现语音报警,只能是播放WAV文件。

在C脚本中添加如下代码:

#include"apdefap.h"

long_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;

}

 

另外需设置触发器,如下:

 

2.VBS实现语音报警

利用VBS,实际是在调用媒体播放器,可以播放视频,代码如下:

FunctionBackColor_Trigger(ByValItem)

Dimsound

DimobjWshShell

sound="c:

\wav\1.avi"

SetobjWshShell=CreateObject("Wscript.Shell")

objWshShell.Run"mplay32.exe/play/close"&sound,0

EndFunction

 

3.利用HORN实现语音报警

a.首先打开报警器

 

b.变量设置,此处和报警记录的设置一样,如下

 

报警记录中设置:

当testbool为1时,报警控件显示如下:

4.以上可以看出,不管哪一种方式,本质上都是在播放已经存在的文件,那比如像钢卷号什么的每次都不一样,想要实现语音播放就不可能。

那么我们可以利用TTS来实现,就是翻译词典的语音功能一样。

a.首先把需要语音播放的文件存在txt文檔中,以CAL上下线带钢准备焊接为例,代码如下:

#include"apdefap.h"

long_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会

生成如下内容:

 

b.由于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;//定义线程

FileSystemWatcherwatcher=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]+",";

}

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,安装完后可以在以下路径选择语音:

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 人力资源管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1