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 );}
|