实验环境:
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 alarminfo MSG_TEXT_STRUCT tMeld; // holds message textinfo 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); //报警消息文本}
VBS全局脚本中调用SAPI接口播报消息文本,此脚本采用变量触发(内部变量alarmComing)。
Dim speaker, alarmTextDim alarmComingalarmComing=HMIRuntime.Tags("alarmComing").ReadalarmText=HMIRuntime.Tags("alarmText").ReadIf alarmComing = 1 Then Set speaker =CreateObject("SAPI.SpVoice") speaker.rate =0 '语速 speaker.volume =100 ‘音量 speaker.SpeakalarmText HMIRuntime.Tags("alarmComing").write0End IfEnd Function
完成组态过程
若采用PC蜂鸣器提醒报警到来,可参考下面链接:
www.ad.siemens.com.cn/service/elearning/course/1791.html