我在WINCC 6。0的全局脚本中写了精华版中的声音报警的一段程序,出现以下的问题:
在运行状态下点击一个利用WINCC向导组态为退出WINCC运行状态的按钮后,出现提示“动作仍在执行,是否退出动作?”不管是选择“退出动作”还是选择“不退出动作”,都可进入组态状态,而后再激活项目,进入运行状态,第一次点一些用C脚本组态的按钮可正常运行,但第二次再点同样这些按钮时则无效!
删除这段脚本后,无上面讲的提示,而且一切正常!西门子支持说这个声音脚本有问题!!!???
以下是这段肢本:
在全局脚本里面新建一个循环的东东,可以设置 2s,代码如下
#include "apdefap.h"
int gscAction( void )
{
MSG_RTDATA_STRUCT mRT;
int i;
char* pszToken;
//Now is my code
#pragma code("Winmm.dll")
BOOL WINAPI sndPlaySoundA(char* szWave,DWORD dwFlag);
#pragma code()
DWORD SND_ASYNC=0x0001;
DWORD SND_LOOP=0x0008;
DWORD alarmsum,alarmunack;
LPCMN_ERROR errorunack,errorsum;
#pragma code("msrtcli.dll")
#pragma code()
LPDWORD lpdwServiceID;
MSG_SERVICE_NOTIFY_PROC lpfnNotifyProc;
LPMSG_FILTER_STRUCT lpMsgFilter;
DWORD dwNotifyMask;
LPVOID lpvUser;
LPCMN_ERROR lpError;
BOOL n1;
n1=MSRTGetMsgQuit(&alarmunack,errorunack);
SetTagDWord("number",alarmunack);
MSRTGetMsgActual(&alarmsum,errorsum);
SetTagDWord("sum",alarmsum);
if (alarmsum==0)
sndPlaySoundA(NULL,SND_ASYNC);
else
{
if (alarmunack>0)
sndPlaySoundA("C:\\Program Files\\Windows NT\\Pinball\\SOUND36.WAV",SND_ASYNCSND_LOOP);
else
sndPlaySoundA(NULL,SND_ASYNC);
//sndPlaySoundA("C:\\windows\\media\\office97\\laser.wav",SND_ASYNCSND_LOOP);
}
return 1;
}