Wie können wir helfen?
Benutzer, Benutzergruppen und Benutzerprotokoll
Was Sie erstellen werden

Das fertige Projekt enthält zwei Gruppen, vier Benutzer, gruppengeschützte Steuerelemente, einen Anmeldebereich und ein Bedienprotokoll, das zeigt, wer was geändert hat.
| Gruppe | Benutzer | Berechtigt zu (Beispiel) |
|---|---|---|
| Operators | Operator1, Operator2 | Maschine bedienen: Start und Stopp, Sollwerte, Rezeptauswahl |
| Maintenance | Tech1, Tech2 | Alles, was Operators dürfen, zusätzlich Einstellungsbildschirme, Protokollexport und Löschen des Protokolls |
Namen und Rechte sind Beispiele; ersetzen Sie sie durch Ihre eigenen. Vergeben Sie für jeden Benutzer ein eigenes Passwort und behalten Sie kein Standardpasswort bei.
Bevor Sie beginnen
Verwenden Sie für alles in diesem Tutorial User Permission; dies ist die aktuelle Benutzerverwaltung von CommandHMI
|
![]() |
Die beiden Gruppen anlegen
Legen Sie zuerst die Gruppen an, damit sie vorhanden sind, wenn Sie die Benutzer hinzufügen.
- Öffnen Sie im Project Manager Setting und doppelklicken Sie auf User Permission.
- Verwenden Sie Add user group und geben Sie diesen Namen ein:
Operators - Wiederholen Sie den Vorgang für
Maintenance - Lassen Sie die Standardbenutzer und -gruppen unverändert. Die Software erlaubt es nicht, sie zu löschen.
Halten Sie die Gruppennamen kurz: Das HMI zeigt die aktuelle Gruppe über LW63200 an, das 32 Zeichen fasst.
Die 4 Benutzer anlegen
Fügen Sie jeden Benutzer im selben Dialog hinzu und weisen Sie ihn genau einer Gruppe zu.
|
![]() |
Steuerelemente nach Gruppe einschränken
Der Zugriff wird pro Steuerelement festgelegt (Bit switch, Word switch,..). Die Registerkarte Advanced bestimmt, wer es bedienen darf, die Registerkarte Visibility bestimmt, wer es sehen kann.
|
![]() |
Nur Eingabe-Steuerelemente verfügen über diese Option: 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 und recipe selector. Anzeige-Steuerelemente können nur über die Registerkarte Visibility ausgeblendet werden.
Anmeldung, Abmeldung und Anzeige des aktuellen Benutzers
- Anmeldeschaltfläche: siehe „Function Button“ Log on
- Abmeldeschaltfläche: siehe „Function Button“ Cancel user login
- Anzeige, wer angemeldet ist
- Name des aktuellen Benutzers, ASCII Display, Monitor address LW60838, Total 32
- Name der aktuellen Gruppe, ASCII Display, Monitor address LW63200, Total 32
Platzieren Sie diese vier Steuerelemente in einer Kopfzeile, die auf jedem Bildschirm sichtbar ist; ein öffentlicher Bildschirm eignet sich gut dafür.
Um die Abmeldung über ein Skript oder über die SPS auszulösen, setzen Sie LB60133 auf 1. Das Bit wird automatisch zurückgesetzt, sobald die Abmeldung erfolgt ist.
Das Bedienprotokoll mit dem historischen Protokoll konfigurieren
Wir verwenden:
- LW1000~1015 : Benutzername, der ins Protokoll geschrieben wird (32 ASCII-Zeichen, frei wählbarer Bereich, anzupassen)
- LW39900~39915 : Kopie des vorherigen Benutzernamens (frei wählbarer Bereich, anzupassen)
- LW60838~60853 : Benutzername des angemeldeten Benutzers (32 ASCII-Zeichen, schreibgeschützt)
- LB1000 : Trigger für die Aufzeichnung von Ereignissen
|
![]() |
Das Skript, das Benutzerwechsel und Abmeldungen überwacht
#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;
}
}
Fügen Sie es in ein neues Skript (New script) des Script Editor ein, kompilieren Sie es und rufen Sie es dann alle 500 ms auf.

und fügen Sie das Steuerelement Historical data display hinzu

So erhalten Sie Folgendes:

Zum Testen können Sie mit bit buttons Schaltflächen für Benutzerwechsel und Abmeldung hinzufügen

Sie können das Projekt hier herunterladen



