让人又爱又恨的C脚本

已锁定

EngineerStation

  • 帖子

    18
  • 精华

    0
  • 被关注

    2

论坛等级:游民

注册时间:2011-08-15

普通 普通 如何晋级?

让人又爱又恨的C脚本

1139

4

2014-04-30 09:48:26

C脚本以它强大的功能、丰富的API使得全世界的攻城狮们都追随它的脚步在工控的道路上前行,但是WinCC的C脚本用起来真是让人心都碎了,为了偷一点点懒,不想把所有报警的变量都组态到Horn,就用全局脚本触发一个变量,只要有未确认的报警脚本机会置位这个变量,因此我只需要在Horn中组态这一个变量就可以实现语音报警,代码如下
#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);
SetTag DWord("sum",alarmsum);
if (alarmsum==0)
//sndPlaySoundA(NULL,SND_ASYNC);
SetTagBit("AlarmSoundStart",FALSE);
else
{
if (alarmunack>0)
SetTagBit("AlarmSoundStart",TRUE);
//sndPlaySoundA("C:Program FilesWindows NTPinballSOUND36.WAV",SND_ASYNCSND_LOOP);
else
SetTagBit("AlarmSoundStart",FALSE);
//sndPlaySoundA(NULL,SND_ASYNC);
//sndPlaySoundA("C:windowsmediaoffice97laser.wav",SND_ASYNCSND_LOOP);
}
return 1;
}
代码看起来运行正常,但是只要搁一晚上,WinCC就会神奇的所有脚本都停止了,而且还会显示unhandled exception was raised look wincc diagnose directory for details对话框
退出WinCCRuntime只会卡在s cript这一步
另外还有更奇葩的,上述代码里面的注释其实以前是为了实现直接的声音报警而不需要Horn,但是运行后发现s cript.exe程序会频繁读写硬盘直至程序自己挂掉,磁盘IO可以读到100多G~~~~不得以才改成触发变量的形式用Horn来实现,哪知道还是出错~~~~没有了良好的API支持 C脚本还有什么优势?
让人又爱又恨的C脚本 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC WinCC / Panel

共有32564条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。