¿Cómo podemos ayudar?
Usuarios, grupos de usuarios y registro de logs de los usuarios
Qué va a crear

El proyecto terminado incluye dos grupos, cuatro usuarios, controles protegidos por grupo, una zona de inicio de sesión y un registro de operaciones que muestra quién ha cambiado qué.
| Grupo | Usuarios | Autorizados a (ejemplo) |
|---|---|---|
| Operators | Operator1, Operator2 | Manejar la máquina: marcha y paro, consignas, selección de recetas |
| Maintenance | Tech1, Tech2 | Todo lo que pueden hacer los Operators, más las pantallas de ajustes, la exportación del registro y el borrado del registro |
Los nombres y los derechos son ejemplos; sustitúyalos por los suyos. Asigne a cada usuario una contraseña única y no conserve ninguna contraseña predeterminada.
Antes de empezar
Utilice User Permission para todo lo que se hace en este tutorial; es la gestión de usuarios actual de CommandHMI
|
![]() |
Crear los dos grupos
Cree primero los grupos, para que existan cuando añada los usuarios.
- En el Project Manager, abra Setting y haga doble clic en User Permission.
- Utilice Add user group e introduzca el nombre
Operators - Repita la operación para
Maintenance - Deje los usuarios y grupos predeterminados tal como están. El software no permite eliminarlos.
Use nombres de grupo cortos: la HMI muestra el grupo actual mediante LW63200, que contiene 32 caracteres.
Crear los 4 usuarios
Añada cada usuario en el mismo cuadro de diálogo y asígnelo a un único grupo.
|
![]() |
Restringir los controles por grupo
El acceso se define para cada control (Bit switch, Word switch,..). La pestaña Advanced determina quién puede accionarlo y la pestaña Visibility determina quién puede verlo.
|
![]() |
Solo los controles de entrada tienen esta opción: bit button, word button, screen button, function button, multi-function button, multi-state button, numeric input, ASCII input, combo box, radio button, stepping button, slider y recipe selector. Los controles de visualización solo se pueden ocultar mediante la pestaña Visibility.
Inicio de sesión, cierre de sesión y visualización del usuario actual
- Botón de inicio de sesión: véase «Function Button» Log on
- Botón de cierre de sesión: véase «Function Button» Cancel user login
- Visualización del usuario que ha iniciado sesión
- Nombre del usuario actual, ASCII Display, Monitor address LW60838, Total 32
- Nombre del grupo actual, ASCII Display, Monitor address LW63200, Total 32
Coloque estos cuatro controles en un encabezado visible en todas las pantallas; una pantalla pública resulta adecuada para ello.
Para cerrar la sesión desde un script o desde el PLC, ponga LB60133 a 1. El bit se restablece automáticamente una vez finalizado el cierre de sesión.
Configurar el registro de operaciones con el registro histórico
Vamos a utilizar:
- LW1000~1015 : nombre de usuario que se escribirá en el registro (32 caracteres ASCII, campo libre, a adaptar)
- LW39900~39915 : copia del nombre de usuario anterior (campo libre, a adaptar)
- LW60838~60853 : nombre del usuario que ha iniciado sesión (32 caracteres ASCII, solo lectura)
- LB1000 : disparador para registrar los eventos
|
![]() |
El script que supervisa los cambios de usuario y los cierres de sesión
#include "MacroInit.h"
//#include "subFun1.c" //Example
#define USER_NAME_ADDR 60838 // LW60838~60853 : user name of the logged-in user (32 ASCII characters, read-only)
#define PREV_NAME_ADDR 39900 // copy of the previous user name (free-form field, to be adapted)
#define LOG_TEXT_ADDR 1000 // LW1000~1015 : user name to bewrite in log (32 ASCII characters, free-form field, to be adapted)
#define USER_NAME_WORDS 16 // 32 char = 16 words
void Macro_main(IN *p)
{
MarcoInit
int i;
int changed = 0;
char logoutText[] = "User logout";
// Check if logged user changed
for (i = 0; i < USER_NAME_WORDS; i++) { if (LocalWord[USER_NAME_ADDR + i] != LocalWord[PREV_NAME_ADDR + i]) { changed = 1; LocalWord[PREV_NAME_ADDR + i] = LocalWord[USER_NAME_ADDR + i]; } } if (changed) { if (LocalWord[USER_NAME_ADDR] == 0) { // Logout : empty name -> fixed text
for (i = 0; i < USER_NAME_WORDS; i++)
{
LocalWord[LOG_TEXT_ADDR + i] = 0;
}
for (i = 0; logoutText[i] != 0; i++)
{
LocalWord[LOG_TEXT_ADDR + i / 2] |= (unsigned short)logoutText[i] << (8 * (i % 2));
}
}
else
{
// Login : copy of the user’s name
for (i = 0; i < USER_NAME_WORDS; i++)
{
LocalWord[LOG_TEXT_ADDR + i] = LocalWord[USER_NAME_ADDR + i];
}
}
// Trigger for recording events
LocalBit[1000] = 1;
}
}
Péguelo en un nuevo script (New script) del Script Editor, compílelo y, a continuación, llámelo cada 500 ms.

y añada el control Historical data display

Para obtener esto:

Para hacer pruebas, puede añadir botones de cambio de usuario y de cierre de sesión con bit buttons

Puede descargar el proyecto aquí



