自动语音播报WinCC报警消息

文章转载至微信公众号:人机常情 WinCC
自动语音播报WinCC报警消息
原创 He havefun 人机常情 WinCC 3月3日
作者:胡世川 - 西门子数字化工业集团自动化部

实现思路:

实时捕捉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); //报警消息文本
}

VBS全局脚本中调用SAPI接口播报消息文本,此脚本采用变量触发(内部变量alarmComing)。
图片

Dim speaker, alarmText
Dim alarmComing
alarmComing=HMIRuntime.Tags("alarmComing").Read
alarmText=HMIRuntime.Tags("alarmText").Read
If alarmComing = 1 Then
      Set speaker = CreateObject("SAPI.SpVoice")
      speaker.rate = 0  '语速
      speaker.volume = 100 ‘音量
      speaker.Speak alarmText
      HMIRuntime.Tags("alarmComing").write 0
End If
End Function

完成组态过程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值