发布于 2008-06-18 09:17:19
0楼
这是PCS7_OperationLog_V6的脚本!
//--------------------------------------------------------------------------------------------------------------------------------------------
// Copyright (C) 2000 Siemens AG All Rights Reserved.
// Datum: 20.06.2004
// Version: V6.1
//
// Changing this s cript can cause abnormal behaviour of faceplates
//--------------------------------------------------------------------------------------------------------------------------------------------
// Generate an log message and put into WinCC Alarm Logging
//--------------------------------------------------------------------------------------------------------------------------------------------
#ifndef RUN_ON_WEBNAVIGATOR
#include "apdefap.h"
#pragma code ("ssmrt.dll")
#include "ssmrt.h"
#pragma code ()
#endif
void PCS7_OperationLog_V6(char* lpszPictureName, double dOldValue, double dNewValue, char* lpszOperationText, char* lpszUnit)
{
BOOL bOkay;
char szVariable[_MAX_PATH];
char * lpszparent;
char * lpszareaname;
char* lpszbatchname;
char *lpszCurrentUser;
char *lpszTag;
char *lpszVarSTEP_N1;
char *lpszVarSTEP_NO;
char *lpszVarBatchID;
char *lpszVarBName;
char *lpszVarAreaname;
char szCommentAndCurrentUser[_MAX_PATH];
CMN_ERROR Error;
DWORD dwBA_ID;
DWORD dwServiceID;
DWORD dwSTEP_NO;
DWORD dwState;
MSG_RTDATA_INSTANCECOMMENT_STRUCT MsgCreate;
struct tm* OperationTime;
SYSTEMTIME stTime;
time_t ltime;
time( <ime ); // Get time as long integer
OperationTime = localtime (<ime); // Convert to local time
stTime.wYear=(WORD)(OperationTime->tm_year + 1900);
stTime.wMonth =(WORD) (OperationTime->tm_mon + 1) ;
stTime.wDay=(WORD)(OperationTime->tm_mday);
stTime.wHour=(WORD)(OperationTime->tm_hour);
stTime.wMinute=(WORD)(OperationTime->tm_min);
stTime.wSecond=(WORD)(OperationTime->tm_sec);
stTime.wMilliseconds=0;
MsgCreate.stMsgTime = stTime;
MsgCreate.dwMsgState = MSG_STATE_COME;
if (OperationTime->tm_isdst)
MsgCreate.dwMsgState = MSG_STATE_SUMTIME; // summertime
MsgCreate.dwMsgNr = 1013004;
MsgCreate.wPValueUsed = 0x001E;
MsgCreate.wTextValueUsed = 0x03E1;
// get user and tagname (member of parent)
lpszparent = GetParentPicture(lpszPictureName);
#ifdef RUN_ON_WEBNAVIGATOR
lpszCurrentUser = GetUserName();
#else
lpszCurrentUser = GetPropChar(lpszparent,"@Faceplate", "CurrentUser");
#endif
lpszTag = GetPropChar(lpszparent,"@Faceplate", "tag"); // tagname without server prefix
// add block comment to textvalue of username
{
#define KEY_SIZE 260
char RegEntry[KEY_SIZE] = "";
SSMRTGetRegistryString ("SOFTWARE\\Siemens\\WinCC\\PCS7 FACEPLATES\\RelVersion",
"OperatingMessageWithBlockComment",
"@",
RegEntry,
KEY_SIZE,
&Error);
if ( RegEntry[0] == '1')
{
strcpy(szCommentAndCurrentUser,GetTagCharWait(".#comment"));
strcat(szCommentAndCurrentUser," / ");
strcat(szCommentAndCurrentUser,lpszCurrentUser);
}
else
strcpy(szCommentAndCurrentUser,lpszCurrentUser);
}
// get area and batchparameter ---------------------------------------------------------------------------------------------------------------------------------------------------------------
lpszVarAreaname = GetPropChar(lpszparent,"@Faceplate","Areaname");
if (strcmp(lpszVarAreaname,"")!=0)
{
lpszareaname = GetTagCharStateWait(lpszVarAreaname, &dwState);
// copy message data into AlarmLogging structure
strcpy(MsgCreate.mtTextValue[8].szText, lpszareaname); // areaname
}
lpszVarBName = GetPropChar(lpszparent,"@Faceplate","BName");
if (strcmp(lpszVarBName,"")!=0)
{
lpszbatchname = GetTagCharWait(lpszVarBName);
// copy message data into AlarmLogging structure
strcpy(MsgCreate.mtTextValue[0].szText, lpszbatchname); // name of batch
}
// get stepnumber STEP_NO---------------------------------------------------------------------------------------------
lpszVarSTEP_NO = GetPropChar(lpszparent,"@Faceplate","STEP_NO");
if (strcmp(lpszVarSTEP_NO,"")!=0)
{
dwSTEP_NO = GetTagDWordWait(lpszVarSTEP_NO);
// copy message data into AlarmLogging structure
MsgCreate.dPValue[1] = dwSTEP_NO; // stepnumber of batch;
}
// read STEP_N1 if STEP_NO is 0
if (dwSTEP_NO == 0)
{
lpszVarSTEP_N1 = GetPropChar(lpszparent,"@Faceplate","STEP_N1");
if (strcmp(lpszVarSTEP_N1,"")!=0)
{
dwSTEP_NO = GetTagDWordWait(lpszVarSTEP_N1);
// copy message data into AlarmLogging structure
MsgCreate.dPValue[1] = dwSTEP_NO; // stepnumber of batch
}
}
// get batch ID--------------------------------------------------------------------------------------------------------------------
lpszVarBatchID = GetPropChar(lpszparent,"@Faceplate","BatchID");
if (strcmp( lpszVarBatchID,"")!=0)
{
dwBA_ID = GetTagDWordWait(lpszVarBatchID);
// copy message data into AlarmLogging structure
MsgCreate.dPValue[2] = dwBA_ID; // batch id
}
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// copy message data into AlarmLogging structure
MsgCreate.dPValue[3] = dOldValue; // old value
MsgCreate.dPValue[4] = dNewValue; // new value
strcpy(MsgCreate.szInstance, lpszTag); // tagname
strcpy(MsgCreate.mtTextValue[5].szText, lpszOperationText); // operation
strncpy(MsgCreate.mtTextValue[6].szText, szCommentAndCurrentUser,254); // login of operator
MsgCreate.mtTextValue[6].szText[255] = '\0';
strcpy(MsgCreate.mtTextValue[7].szText, lpszUnit); // unit
// send message to Alarmlogging
bOkay = MSRTCreateMsgInstanceWithComment(0,&MsgCreate,&Error);
if (!bOkay)
printf("MSRTCreateMsgInstanceWithComment szErrorText = %s \r\n",Error.szErrorText );
不以物喜,不以己悲;
达则兼济天下,穷则独善其身。