FAQs Técnicas

Realizar una pregunta

En Vijeo Citect ¿Cómo podemos grabar todos los movimientos y acciones que se producen en una aplicación?

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)
¿Ha sido útil?
¿Qué podemos hacer para mejorar la información?