Pour obtenir le nom du groupe auquel appartient l'utilisateur connecté dans SIMATIC WinCC, vous pouvez lire les données de la barre d'état du composant de contrôle d'administration des utilisateurs ou utiliser des bibliothèques d'extensions VBScript pour les utilisateurs locaux et Simatic Logon. Dans les deux cas, vous devez utiliser un script VBS déclenché par la modification du tag système @CurrentUser.
Tabla de contenu
- exigences previos
- méthode 1: Extraction via l'objet WinCC UserAdminControl
- méthode 2: Consultation d'utilisateurs locaux via VBScriptLibraryWinCC
- méthode 3: Consultation pour Simatic Logon via GetUserGroupLogon
- Por qué puede no funcionar el méthode esperado
- Comparación de méthodes
- Vérification
- Limites et précautions opérationnelles
- FAQ
- Articles connexes
- Étiquettes connexes
exigences previos
- Projet SIMATIC WinCC ou WinCC Runtime configuré et fonctionnel.
- Tag interne créé dans WinCC de type texte 8 bits (par exemple
CurrentGroup) pour stocker le nom du groupe extrait. - Privilèges d'accès pour modifier les vues d'affichage (files
.PDL) et ajouter des scripts VBScript. - Fichier DLL
VBScriptLibraryWinCC.dllenregistré sur le système client si vous utilisez les fonctions de bibliothèque personnalisées. - Intégration de Simatic Logon configurée si la gestion des utilisateurs est déléguée au système d'exploitation Windows.
méthode 1: Extraction via l'objet WinCC UserAdminControl
Se utiliza mejor lorsque: Vous souhaitez récupérer le nom du groupe directement via les objets d'écran standard de WinCC sans dépendre d'une DLL externe.
Cette méthode exploite le composant graphique de gestion des utilisateurs. Le script lit le texte contenu dans un élément spécifique de la barre d'état du contrôle affiché sur l'écran.
Procédure
- Ouvrez l'écran WinCC principal ou un écran toujours chargé dans VBScript Graphics Designer.
- Insérez l'objet WinCC UserAdminControl sur la vue.
- Définissez la propriété
Namede l'objet surUserAdmin1. - Si vous ne souhaitez pas afficher le contrôle à l'utilisateur, masquez-le derrière un autre composant graphique. Ne désactivez pas la propriété d'affichage (
Display/Visible=False), car cela empêche le script VBS d'accéder aux propriétés de l'élément. - Dans les propriétés de l'écran ou de l'objet, créez une action VBScript déclenchée sur l'événement de changement de valeur du tag système
@CurrentUser. - Insérez le code VBScript suivant :
VB.Net
Dim currentGroup
currentGroup = ScreenItems("UserAdmin1").GetStatusbarElement(1).Text
HMIRuntime.Tags("CurrentGroup").Write currentGroup
Résultat attendu: Le nom du groupe attribué à l'utilisateur actuel est automatiquement extrait du contrôle et écrit dans le tag CurrentGroup.
Vérification: Changez d'utilisateur dans Runtime et vérifiez que le tag CurrentGroup met à jour sa valeur avec le nom du groupe correspondant.
limite: Selon la version de WinCC ou la configuration de la barre d'état du contrôle, l'index de l'élément (GetStatusbarElement) peut différer ou renvoyer un champ vide.
méthode 2: Consultation d'utilisateurs locaux via VBScriptLibraryWinCC
Se utiliza mejor lorsque: La gestion des utilisateurs est configurée localement dans le projet WinCC et que vous ne souhaitez pas ajouter d'objet graphique à vos vues.
Ce procédé utilise une fonction dédiée GetUserGroup contenue dans la bibliothèque d'extension DLL pour WinCC.
Procédure
- Enregistrez et déclarez le composant
VBScriptLibraryWinCC.dllsur la station Runtime. - Déclenchez l'exécution d'un script VBS lors du changement de valeur du tag système
@CurrentUser. - Saisissez le script VBScript suivant :
VB.Net
Dim user, group, obj, rt
Set obj = CreateObject("VBScriptLibraryWinCC.dll")
user = HMIRuntime.Tags("@CurrentUser").Read
rt = HMIRuntime.Tags("@DatasourceNameRT").Read
group = obj.GetUserGroup(rt, user)
HMIRuntime.Tags("CurrentGroup").Write group
HMIRuntime.Trace "User: " & user & " - Group: " & group & vbCrLf
Résultat attendu: La fonction consulte la base de données Runtime (@DatasourceNameRT) et renvoie le groupe associé à l'utilisateur WinCC local.
Vérification: Consultez la fenêtre de diagnostic WinCC (HMIRuntime.Trace) pour vérifier la chaîne générée de type User: [nom] - Group: [groupe].
limite: Ne fonctionne pas si les utilisateurs sont gérés de manière centralisée par Simatic Logon via le système d'exploitation.
méthode 3: Consultation pour Simatic Logon via GetUserGroupLogon
Se utiliza mejor lorsque: Le projet WinCC utilise Simatic Logon pour l'authentification et que les utilisateurs proviennent du domaine Windows ou des groupes locaux du système d'exploitation.
Lorsque Simatic Logon est actif, la structure des utilisateurs n'est pas stockée dans la base de données locale WinCC User Administrator. Cette méthode utilise la fonction adaptée GetUserGroupLogon.
Procédure
- Assurez-vous que la DLL d'extension prend en charge les requêtes réseau/OS pour Simatic Logon.
- Configurez une action VBS sur la modification du tag système
@CurrentUser. - Ajoutez le script VBScript suivant :
VB.Net
Dim user, group, obj, rt
Set obj = CreateObject("VBScriptLibraryWinCC.dll")
user = HMIRuntime.Tags("@CurrentUser").Read
rt = HMIRuntime.Tags("@DatasourceNameRT").Read
group = obj.GetUserGroupLogon(rt, user)
HMIRuntime.Tags("CurrentGroup").Write group
HMIRuntime.Trace "Simatic Logon User: " & user & " - Group: " & group & vbCrLf
Résultat attendu: La bibliothèque interroge le système d'exploitation ou le serveur Simatic Logon et renvoie le groupe Windows/Logon correspondant.
Vérification: Vérifiez le journal de traçabilité WinCC Diagnostics et la valeur du tag CurrentGroup.
limite: Nécessite une version de la bibliothèque d'extension compatible avec la version de Simatic Logon installée (par exemple Simatic Logon v1.5).
Pourquoi cela se produit
Por qué el método de UserAdminControl puede devolver un campo en blanco
Le comportement de la méthode GetStatusbarElement() dépend de la configuration de la barre d'état au sein du composant UserAdminControl.
- Si l'index spécifié dans le code (par exemple
GetStatusbarElement(1)) pointe vers un élément masqué, non configuré ou réordonné dans les propriétés du contrôle, la méthode renvoie une chaîne vide (""). - Dans certaines versions de WinCC (comme WinCC v7.3), l'élément d'index
0renvoie le nom de l'utilisateur (CurrentUser), tandis que le groupe peut se trouver à un index différent ou ne pas être affecté à la barre d'état. - Si la propriété d'affichage globale du composant est désactivée (
Visible = False), le modèle d'objet Runtime ne met pas à jour les éléments texte de l'interface graphique, ce qui bloque la lecture par script.
Comparación de méthodes
MéthodeSe utiliza mejor lorsqueQué revelalimite principalUserAdminControlProjets standards sans composants externesLe texte affiché dans la barre d'état du composantL'objet doit être présent sur l'écran et visible (ou masqué physiquement)GetUserGroup (DLL)Utilisateurs gérés localement dans WinCCLe groupe stocké dans la base Runtime WinCCIncompatible avec Simatic Logon et la signature électroniqueGetUserGroupLogon (DLL)Intégration avec Simatic Logon / WindowsLe groupe attribué dans le système d'exploitation ou le domaineDépend d'une DLL externe personnalisée
Vérification
Le procédure se realizó correctamente lorsque:
- Le tag interne
CurrentGroupcontient le nom exact du groupe de l'utilisateur lors de la session active. - L'action VBS s'exécute automatiquement lors de chaque changement d'utilisateur (événement sur
@CurrentUser). - La trace de diagnostic WinCC affiche le nom d'utilisateur associé au groupe correct dans la fenêtre
Global Script DiagnosticsouAPDIAG.
Limites et précautions opérationnelles
- Propriété d'affichage graphique: Si l'objet
UserAdminControlest masqué en définissant la propriétéDisplayouVisibleàFalse, l'accès viaScreenItemséchouera ou renverra des valeurs vides. Superposez un autre élément graphique pour le masquer visuellement si nécessaire. - Compatibilité des versions: Les index de la barre d'état dans
UserAdminControlpeuvent varier selon les versions de SIMATIC WinCC (v7.0, v7.3, v7.5). Validez toujours l'index exact des éléments dans la configuration de votre composant. - Dépendance des DLL externes: L'utilisation de bibliothèques tierces comme
VBScriptLibraryWinCC.dllnécessite un enregistrement manuel sur chaque poste client ou serveur WinCC du réseau.
FAQ
Pourquoi GetStatusbarElement(1).Text renvoie-t-il une valeur vide sous WinCC v7.3 ?
L'index 1 ne correspond pas toujours au groupe d'utilisateurs. Si la barre d'état du contrôle UserAdminControl a été modifiée, l'index 0 peut afficher l'utilisateur et l'index 1 un autre champ. Vérifiez l'ordre des éléments dans les propriétés de la barre d'état du composant graphique.
Puis-je masquer complètement le composant UserAdminControl ?
Vous ne devez pas utiliser la propriété Visible = False de l'objet. Pour rendre le composant invisible pour l'opérateur, placez-le au dernier plan (arrière-plan) ou recouvrez-le par un rectangle opaque de la même couleur que le fond de l'écran.
Pourquoi la fonction GetUserGroup ne fonctionne-t-elle pas avec Simatic Logon ?
GetUserGroup interroge uniquement la base de données interne de WinCC User Administrator. Lorsque vous utilisez Simatic Logon, la gestion des utilisateurs est déléguée à Windows. Vous devez utiliser une fonction compatible comme GetUserGroupLogon.
Comment déclencher le script automatiquement à chaque connexion d'un utilisateur ?
Associez l'action VBS à l'événement de changement de valeur du tag système @CurrentUser. Ce tag est automatiquement mis à jour par WinCC lors de chaque connexion ou déconnexion.
Articles connexes
- Comment configurer la gestion des utilisateurs dans WinCC avec Simatic Logon
- Utilisation des tags systemes @CurrentUser et @DatasourceNameRT dans WinCC VBScript
- Guide de dépannage du composant UserAdminControl dans SIMATIC WinCC
Étiquettes connexes
Code: C163