- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
在WINCC中实现声音报警
2009-02-06 20:13
先在alarm logging里把报警分类 打开自定义的报警类属性有3项 status tag lock tag acknowledge tag后两个没用 在status tag里添加一个byte格式的tag A
然后你可以试验一下 有报警了A为0x1f 确认后为0x01然后C s cript编一下须要编一下了if(GetTagByte(OS1_ALARM) 0xf0){cc_playsound(A.wav);return 1;}此外还需要cc_playsound()和GetProjectPath()两个函数我有现成了 把这两个函数复制到项目library里 编译一下脚本就行了对了 声音文件*.wav放在项目sound下 没有的自己建一个
//Project Function GetProjectPath()BOOL GetProjectPath(char* lpstrProjectPath){BOOL bRet = FALSE;char szProjectFile[_MAX_PATH+1];char* psz = NULL;CMN_ERROR Error;bRet = DMGetRuntimeProject(szProjectFile,_MAX_PATH+1,Error);if (bRet == FALSE){return FALSE;}psz = strrchr(szProjectFile,\);if (psz ==NULL){return FALSE;}*(psz+1) = 0;strcpy(lpstrProjectPath, szProjectFile);return TRUE;}
//Project Function CC_PlaySound()#include apdefap.hvoid cc_playsound(char* lpszSoundFile){#pragma code(winmm.dll)BOOL PlaySound(LPCTSTR lpszSound, HMODULE hModule,DWORD dwSound);#define SND_FILENAME 0#define SND_ASYNC 0x0001#define SND_LOOP 0x0008#pragma code()BOOL bRet = FALSE;char szProjectPath[_MAX_PATH];char szSoundPath[_MAX_PATH];if (lpszSoundFile == NULL) {bRet=PlaySound(NULL,NULL,SND_FILENAME|SND_ASYNC);}else{GetProjectPath(szProjectPath);sprintf(szSoundPath,%sSound%s, szProjectPath, lpszSoundFile);bRet=PlaySound(szSoundPath,NULL,SND_FILENAME|SND_ASYNC);}if (bRet == FALSE){MessageBeep((WORD)-1);}}
报警可以用以下两种实现方法:
1、建一个全局脚本,时基为2S
#include apdefap.h
int gscAction( void ){#pragma code(Winmm.dll)
VOID WINAPI PlaySoundA(char* pszSound,char* hmode,DWORD dwFlag);
#pragma code( )
if (GetTagByte(TAG)==1)?????????????????? 或?????? if (GetTagByte(TAG)500)????
{PlaySoundA(d: ingout.wav,NULL,1);}
return 0; }
用以上程序就可以实现单个变量报警,开关量为1或模似量大于500都可以报警,
用户可以根据自己的情况改变以上数值,如果有多个变量可以增加多个if .
2、通过报警记录,先在报警记录中组态好报警记录
建一个全局脚本,时基为2S#include apdefap.hint gscAction( void ){MSG_RTDATA_STRUCT mRT;int i;char* pszToken;//Now is my code#pragma code(Winmm.dll)BOOL WINAPI sndPlaySoundA(char* szWav
文档评论(0)