PLC论坛-全力打造可编程控制器专业技术论坛

 找回密码
 注册哦

QQ登录

只需一步,快速开始

微信扫码登录

查看: 79695|回复: 0

[西门子] Wincc如何让报警消息发出报警声音呢?带你走进Wincc的语音时...

[复制链接]
发表于 2024-5-3 20:14:17 | 显示全部楼层 |阅读模式


Wincc语音对报警信息进行播放,大多数是采用了wincc系统对wav文件进行播放,采用wav文件播放具有以下几个弊端,

1、  不能对该报警信息进行循环次数的播放

2、  报警信息内容如果发生变化,需要对WAV进行重新录制

3、  设备一旦很多,需要录制录制大量的wav文件

由于以上原因,我对wincc报警事件进行了研究,在网上寻找资料,在网上一篇关于wincc报警发送短信的文章上,对播放报警记录进行了修改,经修改过后,对报警进行了实时报警,并且可以设置循环报警次数,及不需要大量录制语音文件,具体方法如下:

1.首先在计算机属性-启动-在“报警记录运行系统”框前打钩



2.在报警记录里,建立报警内容





右键报警记录,在弹出来的对话框里的“触发一个动作”框里打上勾。

3.打开C脚本,在”标准函数”里找到“GMsgFunction”事件里,复制以下代码:
BOOL GMsgFunction( char* pszMsgData){  MSG_RTDATA_STRUCT mRT;//addalarm info  MSG_CSDATA_STRUCT sM;MSG_TEXT_STRUCT tEstacion;MSG_TEXT_STRUCT tClase;MSG_TEXT_STRUCT tTipo;CMN_ERROR pError;__object *tts;int i;  memset( &mRT, 0, sizeof( MSG_RTDATA_STRUCT ) );
  if( pszMsgData != NULL )  {     printf( Meldung : %s \r\n, pszMsgData );
    // Meldungsdaten einlesen     sscanf( pszMsgData,  %ld,%ld,%04d.%02d.%02d,%02d:%02d:%02d:%03d,%ld, %ld, %ld, %d,%d,  &mRT.dwMsgNr,       // Meldungsnummer  &mRT.dwMsgState,        // Status MSG_STATE_COME, .._GO, .._QUIT, .._QUIT_SYSTEM  &mRT.stMsgTime.wYear,     // Jahr  &mRT.stMsgTime.wMonth,     // Monat  &mRT.stMsgTime.wDay,    // Tag  &mRT.stMsgTime.wHour,     // Stunde  &mRT.stMsgTime.wMinute,    // Minute  &mRT.stMsgTime.wSecond,     // Sekunde  &mRT.stMsgTime.wMilliseconds,  // Millisekunde  &mRT.dwTimeDiff,      // Zeitdauer der anstehenden Meldung  &mRT.dwCounter,      // Interner Meldungsz?hler  &mRT.dwFlags,      // Flags( intern )  &mRT.wPValueUsed,  &mRT.wTextValueUsed );      // Prozesswerte lesen, falls gewünscht    }
  printf(Nr : %d, St: %x, %d-%d-%d %d:%d:%d.%d, Dur: %d, Cnt %d, Fl %d\r\n ,   mRT.dwMsgNr, mRT.dwMsgState, mRT.stMsgTime.wDay, mRT.stMsgTime.wMonth, mRT.stMsgTime.wYear,   mRT.stMsgTime.wHour, mRT.stMsgTime.wMinute, mRT.stMsgTime.wSecond, mRT.stMsgTime.wMilliseconds, mRT.dwTimeDiff,  mRT.dwCounter, mRT.dwFlags ) ;
//getalarm info  if(mRT.dwMsgState == MSG_STATE_COME) //报警到达状态{char aux;MSRTGetMsgCSData(mRT.dwMsgNr, &sM, &pError); //根据报警编号获得报警数据 MSRTGetMsgText( 0, sM.dwTextID[1], &tEstacion, &pError);MSRTGetMsgText( 0, sM.wClass, &tClase, &pError); MSRTGetMsgText( 0, sM.wTyp, &tTipo, &pError); //SetTagBit(Alarm_Coming,1); //报警到达标志变量//SetTagWord(alarm_info,mRT.dwMsgNr); //报警编号变量 sprintf(&aux,%s,tEstacion.szText); //SetTagChar(alarm_info,&aux); // 报警文本变量--报警信息//sprintf(&aux,%d,sM.wClass); //SetTagChar(alarm_info,&aux); //报警类别变量//sprintf(&aux,%d,sM.wTyp); //SetTagChar(Alarm_Type,&aux); // 报警类型变量
//设置报警循环播放次数for(i=0;i<3;i++){//调用微软自身的TTS进行播放tts=__object_create(sapi.spvoice);tts->speak(&aux);}}
   return( TRUE );}


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册哦

本版积分规则

QQ|小黑屋|手机版|Archiver|PLC技术网-PLC论坛 ( 粤ICP备17165530号 )|网站地图

GMT+8, 2024-6-18 20:11 , Processed in 0.059772 second(s), 27 queries .

快速回复 返回顶部 返回列表