实验环境:
WinCC 7.5 SP2
Windows10 及 Windows Server 2016/2019
实现思路:
实时捕捉WinCC的语音服务报警文本
调用windows自带备用的SAPI语音技术接口语音播报 ,播报文本
开发步骤
windows键+R语音播报 ,输入services.msc,打开播报windows服务界面
启动售后语音Windows的音频服务
在WinCC的“报警记录”中,对需要语音播报的消息变量,勾选“触发动作”,此报警消息触发后,会执行GMsgFunction函数语音播报 。
在全局C脚本处的GMsgFunction函数功能里添加自定义的脚本(如下蓝翻译颜色框),捕捉报警消息文本,传递给内部变量(如下红颜色框)语音播报 。修改完播报后,此函数会自动从左侧目录树的“Alarm”进入“alarm”下控制:
MSG_RTDATA_STRUCT mRT;
设播报MSG_CSDATA_STRUCT sM; // holds alarm info
平台自动挡报警MSG_TEXT_STRUCT tMeld; // holds message text info
CMN_ERROR pError;
编程语言memset( mRT, 0,西门子语音服务器, sizeof( MSG_RTDATA_STRUCT ) );
if(mRT.备用西门子dwMsgState == MSG_STATE_COME)
MSRTGetMsgCSData(mRT.dwMsgNr, sM, pError);
MSRTGetMsgText(0, sM.报警dwTextID[0], tMeld, pError);
SetTagBit("alarmComing",TRUE); //置位VBS脚本触发器触摸屏服务器报警自动
SetTagChar("alarmText",tMeld.消息自助szText); //报警消息消息文本plc
VBS全局脚本中调用SAPI接口播报消息文本,此脚本采用变量触发(内部变量 alarmComing)语音播报 。
Dim speaker, alarmText
Dim alarmComing
alarmComing=HMIRuntime.触摸屏设plc售后Tags("alarmComing").Read
alarmText=HMIRuntime.消息Tags("alarmText").Read
If alarmComing = 1 Then
Set speaker = CreateObject("SAPI.翻译自助WinCCWinCCSpVoice")
speaker.以做语音服务播报rate = 0 '语速
speaker.功能volume = 100 ‘音量
speaker.Speak alarmText
HMIRuntime.自助Tags("alarmComing").write 0
End If
End Function
完成组态过程
TIA-WinCC 社区