Wincc语音报警及C#实现文字转语音Word下载.docx
- 文档编号:18167897
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:9
- 大小:541.79KB
Wincc语音报警及C#实现文字转语音Word下载.docx
《Wincc语音报警及C#实现文字转语音Word下载.docx》由会员分享,可在线阅读,更多相关《Wincc语音报警及C#实现文字转语音Word下载.docx(9页珍藏版)》请在冰豆网上搜索。
,NULL,1);
}
return0;
}
另外需设置触发器,如下:
2.VBS实现语音报警
利用VBS,实际是在调用媒体播放器,可以播放视频,代码如下:
FunctionBackColor_Trigger(ByValItem)
Dimsound
DimobjWshShell
sound="
\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上下线带钢准备焊接为例,代码如下:
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"
IR_PL1_Thick"
));
//txt文档写入内容格式:
钢卷号,宽度保留0位小数,厚度保留3位小数
fclose(fp);
//关闭文档
//----------------------下线-----------------------------------------------//
elseif(GetTagBit("
B_LwPL_NextSelect"
IL_PL2_ID"
IR_PL2_Width"
IR_PL2_Thick"
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=@"
\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;
privatevoidcalculate()
StreamReaderobjReader=newStreamReader(@"
\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]+"
s_all2="
+c2[3]+"
入口准备焊接"
+"
+s_all1+s_all2+s3;
objReader.Close();
objReader.Dispose();
GC.Collect();
synth.Speak(s_all);
synth.Dispose();
Thread.Sleep(1100);
以上完成后,就会把txt里面的内容读出来,暂时微软默认的语音引擎说中文有点难听,可以自己安装语音库,此处安装的是nerospeech,安装完后可以在以下路径选择语音:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Wincc 语音 报警 C# 实现 文字