找答案的高端用户(找答案钻石及双钻级别的用户)将尽可能从此问题下的所有回
答中,为您推荐最佳答案。届时您可以根据推荐数采纳答案。
如果自提问时间起7天内您仍无法选出最佳答案,您可以选择“无满意答案”关闭此问题。
{{itemCategory}}
手机扫码追踪该问题,
觉得实用,立即去分享!
点击复制链接
可以用Wincc组件Horn,报警时会使一个变量置1,确认报警后会置0。
然后全局脚本添加C,判断当变量为1时执行以下代码。
#pragma code(\"Winmm.dll\")
void WINAPI PlaySoundA(char *pszSound,char *hmode,DWORD dwflay);
#pragma code()
if(GetTagBit(\"TAG\"))
PlaySoundA("\"d:\\\\\\\\winnt\\\\\\\\media\\\\\\\\Mircosoft sound.wav\",NULL,8);
TAG是变量,wav声音文件路径自己设置。
全局脚本可以设置每两秒执行一次。
// 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, // Tag
&mRT.stMsgTime.wMonth, // Monat
&mRT.stMsgTime.wDay, // Jahr
&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
}
if (mRT.dwMsgState==MSG_STATE_COME)
{
PlaySoundA("C:\\WINDOWS\\Media\\ringin",NULL,1|8); \\当报警到达,报警声循环发声
}
else if(mRT.dwMsgState==MSG_STATE_QUIT)
{
PlaySoundA("C:\\WINDOWS\\Media\\notify",NULL,0); \\当报警确认,确认声发一声
}
else if(mRT.dwMsgState==MSG_STATE_GO)
{
PlaySoundA("C:\\WINDOWS\\Media\\chimes",NULL,0); \\当报警离开,离开声发一声
}
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 ) ;
return( TRUE );
}
然后,打开报警记录,在每条报警编号的属性里进行组态,在“触发一个动作” 前打上勾,例如有100条报警,那么在这100条报警编号的属性里都要打勾。
进行完这个步骤后,就可以在WINCC平台中实现报警发声功能了。
首次回答问题,获得
双倍西币积分!
立即成为技术知识分享的一员!
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!