分享

自动语音播报WinCC报警消息

 AllenLI123 2021-03-03

作者:胡世川 - 西门子数字化工业集团自动化部


客户经常问到:出现严重故障时,能不能自动语音播报消息文本?因为做不到时时刻刻盯着监控画面。

So easy!有视频有真相图片

实验环境:

  • 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); //报警消息文本
}

  • 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

  • 完成组态过程


若采用PC蜂鸣器提醒报警到来,可参考下面链接:

www.ad.siemens.com.cn/service/elearning/course/1791.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多