eCockpit - Feststellen ob man durch Benutzerverwaltung eingelogged ist

shg

Level-1
Beiträge
16
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebes Forum,

folgendes Problem:

-Ich verwende eCockpit in der aktuellen Version, PLC-Programm + VISU
-Benutzerverwaltung angelegt
-Methoden/Variablen etc. wie Visuelems. etc. sind bekannt
-Problem:
-> Ich möchte im ST feststellen, ob ich gegenwärtig als z. B. Admin eingelogged bin!

-> Abfrage von Visuelems.GetCurrentGroupID o. ä. führen zu einem scheinbar instabilen Zustand der Variable
(Sie hüpft zwischen verschiedenen Zuständen), Wenn ich z. B. einen Stringvergleich wie
...GetFullCurrentUserName <> ''... mache, zeigt sich das gleiche Bild.

-> Bibliotheken habe ich gewälzt (gibt es eigentlich eine übersichtliche Doku?) - ohne Erfolg.

-Habt Ihr ne Idee?

Danke - Gruß

Stefan
 
In der Zwischenzeit hab' ich ein Bisschen herumprobiert - was macht man denn sonst an einem sonnigen Sonntag Nachmittag...
Vielleicht hilft es jemandem...

Folgende Erkenntnis: Das Programm der Visu und das des PLC laufen ja zueinander Asynchron - ab und zu wenn das PLC die Variable
Visuelems.GetCurrentUserName abfragen will, greift es scheinbar ins Leere... so die Vermutung.

Habe folgenden Workaround probiert:

Nehmen wir an, wir haben ein Programm mit drei Visu-Seiten, nennen wir sie A, B und C.
Das Programm verfügt über eine Benutzerverwaltung.
Ich logge mich ein.
Ich logge mich aus... nun wird eine Seite angewählt, die nicht Bestandteil der anzuzeigenden Visu-Seiten ist, z. B. D.
Das funktioniert indem ich in der Benutzerverwaltung anwähle, dass beim Ausloggen die Standardseite angezeigt werden soll;
diese wiederum kann im Prg-Baum unter Visualisierungsmanager -> Webvisu angegeben werden.
Nun kann ich im PLC-Prg die Variable Visuelems.Currentvisu auf Gleichheit mit der Seite 'D' abfragen. Ist dies der Fall,
kann ich automatisch zu Seite A weiterschalten (if-Abfrage) und gleichzeitig das Signal der Gleichheitsabfrage dazu verwenden um
festzustellen, dass ich ausgeloggt bin...

Achso...warum der ganze Spaß mit der zusätzlichen Seite...? Nun, würde ich nach dem Ausloggen gleich auf die Seite A schalten
und das Signal 'Ausgeloggt' absetzen, gibt es keine Unterscheidungsmöglichkeit zwischen I) Ausgeloggt weil ich die Seite A per Hand
angewählt habe oder II) Ausgeloggt weil ich mich bei der Benutzerverwaltung ausgeloggt habe; daher die Zusätzliche Seite um dieses
Unterschreidungskriterium festzumachen.

Ja, ich weiß, kein guter Stil... aber der Weck heiligt die Mittel.

Ideen, Ratschläge, Anregungen, Wünsche... bitte!!
 
Zuletzt bearbeitet:
Ich habe es eben mal nachgestellt. Folgender Workaround wäre m.E. einfacher.

Lege eine WSTRING Varibale an
Code:
PROGRAM PLC_PRG
VAR
xAdminLog:BOOL;
username : WSTRING := "Administrator";
END_VAR

Code:
IF Visuelems.CurrentFullUserName <> username THEN
    xAdminLog := FALSE;
ELSE 
 xAdminLog := TRUE;    
END_IF

Damit funktioniert es.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo CCore,

danke - das hat prima geklappt!

Trotzdem hätte ich noch eine Frage: Ich habe ja ebenfalls die Abfrage Visuelems.CurrentFullUserName <>... durchgeführt, aber
so:

IF Visuelems.CurrentFullUserName <> STRING_TO_WSTRING('Administrator') THEN...

Aber auf diese Weise klappt es nicht - dann wechselt der Inhalt der Variable schnell zwischen verschiedenen Zuständen;
Kannst Du mir sagen warum das so ist? Liegt es evtl. daran, dass die von mir verwendete Typumwandlung nicht funktioniert,
wenn ich einen String wie 'Administrator' in einen WString umwandeln will... (da für einen Wstring prinzipiell eine Variable die
ein offenes Array enthält angelegt werden muss oder so...?).

Danke für Deine Hilfe, bin froh, dass es klappt!
Gruß
 
Zurück
Oben