Benutzerwechsel durch das Programm

Beiträge
14
Reaktionspunkte
4
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebes Forum,

ob es Sinn macht oder auch nicht... Ein Kunde möchte den Benutzer durch das Programm umschalten können. Leider habe ich keine Lösung ansatzweise ergooglen können. Ich vermute, dass es nicht möglich ist. Hat hier jemand Erfahrung damit?

LG
 
Ein paar detailierte Informationen zum System wären hilfreich wenn du Hilfe erwartest.
Unter TwinCat3 und VisiWin6.5 haben wir vor ein paar Jahren schonmal eine Benutzerumschaltung über RFID gemacht.
Es gibt aber auch fertige Lösungen dazu, Benutzerverwaltung wäre auch hier im Forum der Suchbegriff.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Es geht hier rein um die Codesys-Benutzerverwaltung. Mit einer speziellen Visu wie z.B.: TX VisuPro würde ich es direkt über die Optionen der Visualisierung machen und im Codesys-Projekt lediglich entsprechende Variablen nutzen.
Ich hatte gehofft, dass es sowas wie "visuelems.SetUser" gibt.
 
Es geht - aber nicht so einfach wie du es dir vorstellst. Die CoDeSys Oberfläche ermöglicht dir ja z.B. verschiedene unabängige Visu-Anzeigen und somit verschiedene Benutzer...
Ich habe von anno-muff für TwinCAT (ist bestimmt 3-4 Jahre her) einen Codeschnipsel. Müsste hier eigentlich passen - aber ob sich etwas wie/wo geändert hat kann ich nicht sagen.

=====
Visu-Variablen im Manager aktivieren

Current User : VisuElemsWinControls.CurrentFullUserName
CurrentUserGroupName VisuElems.CurrentUserGroupName
currentUserGroup: VisuElems.CurrentUserGroupId
CurrentUserName: VisuElems.CurrentUserName
CurrentfullUserName: VisuElems.CurrentFullUserName
AutoLogOff: VisuElems.CurrentUseAutoLogoutTime
Remaining Time: VisuElems.CurrentRemainingAutoLogoutTime

Über Benutzerverwaltung
-Anmelden
-Abmelden
-Passwort ändern
-Benutzerverwaltung öffnen

===== Benutzer in der PLC auslesen ====
bStart: BOOL;
udiNum: UDINT;
fbVisuUserMgr: VisuUserManagement.VisuUserMgmt;
pArr: POINTER TO ARRAY[0..0] OF VisuUserManagement.VUM_User;
users : ARRAY[0..4] OF VisuUserManagement.VUM_User; //user.wstUserName ; wString(79);
GetUserCount: INT;
dwUserDb: DWORD;
GetUserDBAsCopy: INT;
i: UDINT;
j: UDINT;
GetUsers: INT;
fbVisuLoginProvierder :VisuUserManagement.VisuLoginProvider;

IF(bStart) THEN
bStart := FALSE;

dwUserDb:=fbVisuUserMgr.GetUserDBAsCopy();
udiNum:= fbVisuUserMgr.GetUserCount(dwUserDB:=dwUserDb);


FOR i:= 0 TO udiNum-1 DO
j:=i; // Bausteinaufruf .GetUsers() überschreibt den Index. Keine Ahnung warum.
// alle 5 Parameter sind als INOUT definiert.
fbVisuUserMgr.GetUsers(
dwUserDB:= 0, // für was ist dieser Parameter überhaupt.
udiStartIndex:= j,
udiEndIndex:= j , // Wert wird auf 0 zurückgesetzt.
pArr:= ADR(users[j]),
udiArrSize:= SIZEOF(Users[j])) ;;
END_FOR

END_IF


=== Login per PLC (TC3_PLCHMI_UserManagement_LoginfromPLC)
// durch die Clients durchiterieren
// Login prüfen
// dann login, UserGroupID muss entsprechend config (siehe graphisches Element) gewählt werden.

pClient: POINTER TO VisuElems.VisuStructClientData;
sUsername: STRING:
sPassword: STRING;
wsUsername: WSTRING;
wsPassword: WSTRING;
ReturnVal : VisuUserManagement.VUM_ReturnValues;
sReturnVal : STRING:='';


VisuElems.g_ClientManager.BeginIteration();
pClient := VisuElems.g_ClientManager.GetNextClient();

WHILE pClient <> VisuElems.NULL DO // wenn die TargetVisu nicht läuft ist pClient = Null. Dann kommt es bei den nachfolgenden Aufrufen zu Exceptions.
IF (pClient^.GlobalData.CurrentUserGroupId <> 1) THEN

wsUsername:=STRING_TO_WSTRING(sUsername);
wsPassword:=STRING_TO_WSTRING(sPassword);

ReturnVal:=VisuUserManagement.g_VisuUserMgmt2.CheckLogin(wsUsername, wsPassword);

IF ReturnVal = 0 THEN
sReturnVal :='Password correct';
VisuUserManagement.g_VisuUserMgmt2.LoginToUserGroup(pClient, 1, wsUsername, "");
END_IF

IF ReturnVal = 20486 THEN
sReturnVal :='Wrong Password';
END_IF
END_IF
pClient := VisuElems.g_ClientManager.GetNextClient();
END_WHILE


======LOGOUT per PLC, analog Login===

sReturnVal:='';
VisuElems.g_ClientManager.BeginIteration();
pClient := VisuElems.g_ClientManager.GetNextClient();

WHILE pClient <> VisuElems.NULL DO
VisuUserManagement.g_VisuUserMgmt2.LoginToUserGroup(pClient, 0, "", "");
pClient := VisuElems.g_ClientManager.GetNextClient();
END_WHILE


=== Logon mit Drop-Box für die Benutzer (somit nur Passwort-Eingabe)===
war damals noch nicht möglich.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Jetzt muss ich doch endlich mal Rückmeldung geben.
Es funktioniert mit Codesys V3.5 SP16

Beim Login-Code habe ich nur die UserGroupID in eine Variable geschrieben, da mit dem Code jeder als Admin angemeldet wurde. Interessanterweise geht das, obwohl in der Benutzzerverwaltung eine andere Zuordnung vorgenommen wurde:
VisuUserManagement.g_VisuUserMgmt2.LoginToUserGroup(pClient, iSetUserGroupID, wsUsername, "");
statt
VisuUserManagement.g_VisuUserMgmt2.LoginToUserGroup(pClient, 1, wsUsername, "");

Das Auslesen der User funktioniert nicht für alle User. Bei 5 Usern ist Schluß. Ich habe die users Deklaration also geändert, von
users: ARRAY[0..4] OF VisuUserManagement.VUM_User;
gemäß meiner Anzahl an Test-Usern auf
users: ARRAY[0..8] OF VisuUserManagement.VUM_User;
Aber immer, wenn ich über 5 komme schmiert mir die Kiste mit Ausnahmefehler ab. Keine Ahnung warum...
 
Zurück
Oben