Por defecto con Vijeo Citect se puede usar la función Operlog() y reprogramarla para grabar más acciones del operador (aparte del login y logout).
También se puede utilizar alguna de las siguientes funciones de la librería SGC_Include (por defecto con SG2) que permiten insertar más campos:
///////////////////////////////////////////////////////////////////////////////////////// Hace el Log de las acciones de operador
//Device "OperLog"
// {Date,10} {TimeLong,12} {UserName,10} {FullName,15} {MsgLog,50} {Arg1,10} {Arg2,10}
// Parámetros Entrada:
//CM: Identificador del Módulo de Control sobre el que se ha realizado la acción/
//ACTION: Texto descriptivo de la acción que ha realizado el operador
//OLDVALUE: Valor de la variable antes del cambio
//ENTEREDVALUE: Valor introducido por el usuari0
//TAGNAME: Tag que debe forzarse
//NEWVALUE: Valor que debe forzarse
//////////////////////////////////////////////////////////////////////////////////////
FUNCTION WriteAndLog(STRING TAGNAME, REAL NEWVALUE, STRING CM, STRING ACTION, STRING OLDVALUE, STRING ENTEREDVALUE)STRING sParam;
TagWrite(TAGNAME, NEWVALUE);
sParam = "^"" + Date() + "^",^"" + Time(1) + "^",^"" + Name() + "^",^"" + FullName() + "^",^"" + CM + "^",^"" + ACTION + "^",^"" + OLDVALUE + "^",^"" + ENTEREDVALUE + "^"" TaskNew("Logger", sParam, 0);
END
///////////////////////////////////////////////////////////////////////////////////////// Hace el Log de las acciones de operador//
//Device "OperLog"2
// {Date,10} {TimeLong,12} {UserName,10} {FullName,15} {MsgLog,50} {Arg1,10} {Arg2,10}
// Parámetros Entrada
//DATE_TS: Fecha en la que se realizó la operación
//TIME_TS: Hora en la que se realizó la operación
//USERNAME: Identificador del usuario que realizó la acción
//USERFULLNAME: Nombre completo del usuario que realizó la operación
//CM: Identificador del Módulo de Control sobre el que se ha realizado la acción
//ACTION: Texto descriptivo de la acción que ha realizado el operador
//OLDVALUE: Valor de la variable antes del cambio
//ENTEREDVALUE: Valor introducido por el usuario
/////////////////////////////////////////////////////////////////////////////////////
FUNCTION Logger(STRING DATE_TS, STRING TIME_TS, STRING USERNAME, STRING USERFULLNAME, STRING CM, STRING ACTION, STRING OLDVALUE, STRING ENTEREDVALUE)INT hOperLog;
EnterCriticalSection("LoggerSection");
hOperLog = DevOpen("OperLog", 8);
// Abrir el Device en "Logging Mode"
IF hOperLog >= 0 THEN DevAppend(hOperLog);
DevSetField(hOperLog, "Date", DATE_TS);
DevSetField(hOperLog, "TimeLong", TIME_TS);
DevSetField(hOperLog, "UserName", USERNAME);
DevSetField(hOperLog, "FullName", USERFULLNAME);
DevSetField(hOperLog, "MsgLog", CM + " - " + ACTION);
DevSetField(hOperLog, "Arg1", ENTEREDVALUE);
DevSetField(hOperLog, "Arg2", OLDVALUE);
DevClose(hOperLog);
END
LeaveCriticalSection("LoggerSection");
END
La llamada se ha de ejecutar en cada botón (Ejemplo en la imagen adjunta)
También se puede utilizar alguna de las siguientes funciones de la librería SGC_Include (por defecto con SG2) que permiten insertar más campos:
///////////////////////////////////////////////////////////////////////////////////////// Hace el Log de las acciones de operador
//Device "OperLog"
// {Date,10} {TimeLong,12} {UserName,10} {FullName,15} {MsgLog,50} {Arg1,10} {Arg2,10}
// Parámetros Entrada:
//CM: Identificador del Módulo de Control sobre el que se ha realizado la acción/
//ACTION: Texto descriptivo de la acción que ha realizado el operador
//OLDVALUE: Valor de la variable antes del cambio
//ENTEREDVALUE: Valor introducido por el usuari0
//TAGNAME: Tag que debe forzarse
//NEWVALUE: Valor que debe forzarse
//////////////////////////////////////////////////////////////////////////////////////
FUNCTION WriteAndLog(STRING TAGNAME, REAL NEWVALUE, STRING CM, STRING ACTION, STRING OLDVALUE, STRING ENTEREDVALUE)STRING sParam;
TagWrite(TAGNAME, NEWVALUE);
sParam = "^"" + Date() + "^",^"" + Time(1) + "^",^"" + Name() + "^",^"" + FullName() + "^",^"" + CM + "^",^"" + ACTION + "^",^"" + OLDVALUE + "^",^"" + ENTEREDVALUE + "^"" TaskNew("Logger", sParam, 0);
END
///////////////////////////////////////////////////////////////////////////////////////// Hace el Log de las acciones de operador//
//Device "OperLog"2
// {Date,10} {TimeLong,12} {UserName,10} {FullName,15} {MsgLog,50} {Arg1,10} {Arg2,10}
// Parámetros Entrada
//DATE_TS: Fecha en la que se realizó la operación
//TIME_TS: Hora en la que se realizó la operación
//USERNAME: Identificador del usuario que realizó la acción
//USERFULLNAME: Nombre completo del usuario que realizó la operación
//CM: Identificador del Módulo de Control sobre el que se ha realizado la acción
//ACTION: Texto descriptivo de la acción que ha realizado el operador
//OLDVALUE: Valor de la variable antes del cambio
//ENTEREDVALUE: Valor introducido por el usuario
/////////////////////////////////////////////////////////////////////////////////////
FUNCTION Logger(STRING DATE_TS, STRING TIME_TS, STRING USERNAME, STRING USERFULLNAME, STRING CM, STRING ACTION, STRING OLDVALUE, STRING ENTEREDVALUE)INT hOperLog;
EnterCriticalSection("LoggerSection");
hOperLog = DevOpen("OperLog", 8);
// Abrir el Device en "Logging Mode"
IF hOperLog >= 0 THEN DevAppend(hOperLog);
DevSetField(hOperLog, "Date", DATE_TS);
DevSetField(hOperLog, "TimeLong", TIME_TS);
DevSetField(hOperLog, "UserName", USERNAME);
DevSetField(hOperLog, "FullName", USERFULLNAME);
DevSetField(hOperLog, "MsgLog", CM + " - " + ACTION);
DevSetField(hOperLog, "Arg1", ENTEREDVALUE);
DevSetField(hOperLog, "Arg2", OLDVALUE);
DevClose(hOperLog);
END
LeaveCriticalSection("LoggerSection");
END
La llamada se ha de ejecutar en cada botón (Ejemplo en la imagen adjunta)
Publicado para:Schneider Electric España

