西門子自動語音播報(bào)WinCC報(bào)警消息
作者:胡世川?-?西門子數(shù)字化工業(yè)集團(tuán)自動化部
客戶經(jīng)常問到:出現(xiàn)嚴(yán)重故障時(shí),能不能自動語音播報(bào)消息文本?因?yàn)樽霾坏綍r(shí)時(shí)刻刻盯著監(jiān)控畫面。
So?easy!

驗(yàn)環(huán)境:
WinCC 7.5 SP2?
Windows10 及?Windows?Server 2016/2019
?
實(shí)現(xiàn)思路:
實(shí)時(shí)捕捉WinCC的報(bào)警文本
調(diào)用windows自帶的SAPI語音技術(shù)接口,播報(bào)文本
開發(fā)步驟
windows鍵+R,輸入services.msc,打開windows服務(wù)界面

啟動Windows的音頻服務(wù)

在WinCC的“報(bào)警記錄”中,對需要語音播報(bào)的消息變量,勾選“觸發(fā)動作”,此報(bào)警消息觸發(fā)后,會執(zhí)行GMsgFunction函數(shù)。?

在全局C腳本處的GMsgFunction函數(shù)里添加自定義的腳本(如下藍(lán)顏色框),捕捉報(bào)警消息文本,傳遞給內(nèi)部變量(如下紅顏色框)。修改完后,此函數(shù)會自動從左側(cè)目錄樹的“Alarm”進(jìn)入“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腳本觸發(fā)器SetTagChar("alarmText",tMeld.szText);?//報(bào)警消息文本}
VBS全局腳本中調(diào)用SAPI接口播報(bào)消息文本,此腳本采用變量觸發(fā)(內(nèi)部變量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.Speak alarmText? ? ??HMIRuntime.Tags("alarmComing").write 0End IfEnd Function
完成組態(tài)過程
TIA-WinCC 社區(qū)? 看評論區(qū)