Come possiamo aiutarti?
Utenti, gruppi di utenti e registro dei log degli utenti
Cosa verrà realizzato

Il progetto finito comprende due gruppi, quattro utenti, controlli protetti per gruppo, un’area di login e un registro delle operazioni che mostra chi ha modificato che cosa.
| Gruppo | Utenti | Autorizzati a (esempio) |
|---|---|---|
| Operators | Operator1, Operator2 | Far funzionare la macchina: avvio e arresto, setpoint, selezione delle ricette |
| Maintenance | Tech1, Tech2 | Tutto ciò che possono fare gli Operators, più le schermate di impostazione, l’esportazione del registro e la cancellazione del registro |
Nomi e diritti sono esempi; sostituirli con i propri. Assegnare a ogni utente una password univoca e non mantenere alcuna password predefinita.
Prima di iniziare
Utilizzare User Permission per tutto ciò che riguarda questo tutorial; è l’attuale gestione utenti di CommandHMI
|
![]() |
Creare i due gruppi
Creare prima i gruppi, in modo che esistano quando si aggiungono gli utenti.
- Nel Project Manager, aprire Setting e fare doppio clic su User Permission.
- Utilizzare Add user group e inserire il nome
Operators - Ripetere per
Maintenance - Lasciare al loro posto gli utenti e i gruppi predefiniti. Il software non consente di eliminarli.
Usare nomi di gruppo brevi: l’HMI visualizza il gruppo corrente tramite LW63200, che contiene 32 caratteri.
Creare i 4 utenti
Aggiungere ogni utente nella stessa finestra di dialogo e assegnarlo a un solo gruppo.
|
![]() |
Limitare i controlli per gruppo
L’accesso si imposta per ogni controllo (Bit switch, Word switch,..). La scheda Advanced stabilisce chi può azionarlo, la scheda Visibility stabilisce chi può vederlo.
|
![]() |
Solo i controlli di input dispongono di questa opzione: 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 e recipe selector. I controlli di visualizzazione possono essere nascosti solo tramite la scheda Visibility.
Login, logout e visualizzazione dell’utente corrente
- Pulsante di login: vedere “Function Button” Log on
- Pulsante di logout: vedere “Function Button” Cancel user login
- Visualizzazione dell’utente connesso
- Nome dell’utente corrente, ASCII Display, Monitor address LW60838, Total 32
- Nome del gruppo corrente, ASCII Display, Monitor address LW63200, Total 32
Posizionare questi quattro controlli in un’intestazione visibile su ogni schermata; una schermata pubblica è adatta a questo scopo.
Per eseguire il logout da uno script o dal PLC, impostare LB60133 a 1. Il bit si azzera automaticamente una volta completato il logout.
Configurare il registro delle operazioni con il registro storico
Utilizzeremo:
- LW1000~1015 : nome utente da scrivere nel registro (32 caratteri ASCII, campo libero, da adattare)
- LW39900~39915 : copia del nome utente precedente (campo libero, da adattare)
- LW60838~60853 : nome dell’utente connesso (32 caratteri ASCII, sola lettura)
- LB1000 : trigger per la registrazione degli eventi
|
![]() |
Lo script che monitora i cambi di utente e i logout
#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;
}
}
Incollarlo in un nuovo script (New script) dello Script Editor, compilarlo, quindi richiamarlo ogni 500 ms.

e aggiungere il controllo Historical data display

Per ottenere questo:

Per i test è possibile aggiungere pulsanti di cambio utente e di logout con dei bit button

È possibile scaricare il progetto qui



