Para restringir una cuenta de usuario específica de modo que solo pueda iniciar sesión en una única estación OS de SIMATIC PCS 7 WinCC a la vez, implemente un mecanismo centralizado de seguimiento de sesiones utilizando variables internas de WinCC en el Servidor OS, coordinado mediante Global Script o restricciones de inicio de sesión de estaciones de Active Directory. WinCC estándar y SIMATIC Logon no bloquean de forma nativa los inicios de sesión concurrentes en múltiples estaciones porque los tokens de autenticación operan de manera independiente por cada cliente. Mediante la supervisión de la variable de sistema @CurrentUser a través de un script de eventos en cada cliente y registrando el nombre de la estación activa en una tabla de variables del Servidor OS, se puede activar un cierre de sesión automático mediante PASSExitUser() si el usuario ya se encuentra activo en otra máquina.
Índice de contenidos
- Resumen ejecutivo
- Mecánica arquitectónica y del sistema
- Procedimiento paso a paso de ingeniería e implementación
- Verificación
- Limitaciones y precauciones operativas
- Preguntas frecuentes del ingeniero
- Referencias técnicas
- Artículos relacionados
- Etiquetas relacionadas
Resumen ejecutivo
En entornos industriales regulados y plantas farmacéuticas que operan bajo estrictos estándares de registros electrónicos, el cumplimiento operativo a menudo exige que las cuentas de usuario con privilegios (como 'Calibration', 'MaintenanceLead' o 'QualityAuditor') solo puedan estar activas en una única estación de operador simultáneamente. Aunque SIMATIC Logon verifica las credenciales de usuario contra un Active Directory central o bases de datos locales, no limita intrínsecamente las sesiones de usuario concurrentes en Clientes OS distribuidos. Este artículo detalla dos enfoques robustos de ingeniería: un mecanismo nativo de registro de sesiones basado en scripts de WinCC que utiliza variables internas del lado del servidor, y un enfoque empresarial de Directiva de Grupo (Group Policy) de Active Directory que restringe las cuentas a nombres de host de estaciones designados.
Mecánica arquitectónica y del sistema
Los Clientes OS de SIMATIC WinCC interactúan con la autenticación de usuarios a través de variables de sistema internas y API específicas:
@CurrentUser: Una variable de tipo texto que contiene el nombre de usuario del operador que ha iniciado sesión actualmente en el runtime del cliente local.@LocalMachineName: Una variable de tipo texto que contiene el nombre de host NetBIOS de Windows de la estación local.PASSExitUser(): Una función de la API de C de WinCC que finaliza inmediatamente la sesión activa del operador, revirtiendo al cliente a los derechos de visualización predeterminados.
Flujo arquitectónico de seguimiento de sesiones:
1. Cuando un operador inicia sesión, @CurrentUser cambia de vacío/predeterminado al nombre de usuario.
2. Un script del lado del cliente detecta el cambio de variable y lee una variable centralizada del servidor (o consulta una tabla SQL) que almacena el nombre de host del cliente activo asociado con ese nombre de usuario.
3. Si la variable del servidor indica que el usuario ya está activo en la Estación B, el script muestra un cuadro de diálogo de bloqueo en la Estación A y ejecuta PASSExitUser().
4. Cuando el usuario cierra la sesión normalmente, el script borra la variable de registro del servidor.
Procedimiento paso a paso de ingeniería e implementación
Paso 1: Crear variables centralizadas de seguimiento de sesiones en el Servidor OS
- En WinCC Explorer en el Servidor OS (o ES), abra Tag Management (Gestión de variables).
- En Internal Tags (Variables internas), cree una variable de texto de 16 bits (cadena) llamada
SESS_<Username>_Hostpara cada cuenta privilegiada que requiera control de concurrencia (por ejemplo,SESS_Calibration_Host). - Establezca el ciclo de actualización de la variable en 'Al cambiar' (Upon Change) con alcance de servidor para todo el proyecto.
Paso 2: Implementar el script de detección de inicio de sesión de cliente en Global Script de WinCC
En Global Script (C-Editor o VBS-Editor), cree una acción activada por cambios en la variable de sistema @CurrentUser:
#include "apdefap.h"
void CheckSingleLogin(char* lpszTagName)
{
char szUser[64];
char szLocalHost[64];
char szServerHost[64];
char szTrackTag[128];
GetTagCharWait("@CurrentUser", szUser, sizeof(szUser));
GetTagCharWait("@LocalMachineName", szLocalHost, sizeof(szLocalHost));
// Apply restriction specifically to target accounts
if (strcmp(szUser, "Calibration") == 0)
{
sprintf(szTrackTag, "OSServerPrefix::SESS_%s_Host", szUser);
GetTagCharWait(szTrackTag, szServerHost, sizeof(szServerHost));
if (strlen(szServerHost) > 0 && strcmp(szServerHost, szLocalHost) != 0)
{
// User is already active on another workstation
MessageBox(NULL, "User is already logged in on another station!", "Access Denied", MB_ICONSTOP);
PASSExitUser();
}
else
{
// Register current station
SetTagCharWait(szTrackTag, szLocalHost);
}
}
}
Paso 3: Implementar el script de desregistro de cierre de sesión
Asegúrese de que cuando @CurrentUser cambie a vacío (""), el script borre la variable del servidor SESS_Calibration_Host para permitir futuros inicios de sesión desde cualquier terminal autorizado.
Paso 4: Restricción alternativa de estaciones en Active Directory
Si la política de TI lo permite, abra Usuarios y equipos de Active Directory (Active Directory Users and Computers), localice las propiedades de la cuenta de usuario, seleccione la pestaña 'Cuenta' (Account), haga clic en 'Iniciar sesión en...' (Log On To...) y especifique los nombres exactos de los equipos en los que se permite autenticarse a este usuario.
Verificación
Verifique la restricción de concurrencia:
1. En el Cliente OS 1, inicie sesión con la cuenta 'Calibration'. Confirme que @CurrentUser se actualiza y SESS_Calibration_Host refleja el nombre de host del Cliente 1.
2. Desplácese al Cliente OS 2 e intente iniciar sesión con la cuenta 'Calibration'.
3. Verifique que el Cliente 2 muestre un mensaje de 'Acceso denegado' (Access Denied) e invoque inmediatamente PASSExitUser(), devolviendo el Cliente 2 al estado de sesión cerrada.
4. Cierre la sesión en el Cliente 1; confirme que SESS_Calibration_Host se borra. Verifique que el Cliente 2 ahora pueda iniciar sesión correctamente.
Limitaciones y precauciones operativas
Precauciones operativas:
- Si una máquina Cliente OS experimenta un fallo repentino de energía o una desconexión de red sin un cierre de sesión limpio, la variable de registro en el servidor puede permanecer bloqueada hasta que un administrador la borre manualmente o se limpie mediante un tiempo de espera de vigilancia (watchdog timeout).
- En sistemas que utilizan múltiples Servidores OS, asegúrese de que las variables de sesión residan en un servidor maestro designado o se sincronicen mediante mensajería de servidor a servidor.
- Asegúrese de que las cuentas administrativas de emergencia estén exentas de las restricciones de sesión única para mantener la continuidad operativa durante perturbaciones en la planta.
Preguntas frecuentes del ingeniero
P: ¿Proporciona SIMATIC Logon una casilla de verificación nativa para el cumplimiento de sesión única?
R: No. SIMATIC Logon se autentica contra proveedores de seguridad de Windows, los cuales permiten inherentemente inicios de sesión de red concurrentes a menos que se restrinjan mediante scripts o directivas de grupo.
P: ¿Qué sucede si un cliente se bloquea mientras el usuario ha iniciado sesión?
R: La variable de sesión en el servidor puede retener el nombre de host. La implementación de un temporizador de vigilancia de inactividad de 15 minutos o un botón administrativo de 'Forzar restablecimiento de sesión' borra las sesiones obsoletas.
P: ¿Se puede aplicar esta restricción a todas las cuentas de operador simultáneamente?
R: Sí, generalizando el script para utilizar una convención de nombres de variables dinámica SESS_ + szUser + _Host para cualquier usuario autenticado.
P: ¿Desconecta PASSExitUser() el runtime de WinCC?
R: No. PASSExitUser() solo cierra la sesión del operador actual y restablece los permisos de WinCC al modo predeterminado de invitado/no autorizado sin cerrar el runtime.
P: ¿Puede el bloque OpSrv de PCS 7 APL hacer cumplir esto a nivel de AS?
R: Los bloques OpSrv y OSStation de APL hacen cumplir la autorización de la estación para equipos específicos, pero no impiden que un usuario de Windows abra múltiples sesiones de cliente.
Referencias técnicas
- SIMATIC WinCC V7.5 SP2 Script: C, VBS, VBA
- SIMATIC Process Control System PCS 7 OS Process Control
- PCS 7 V9.0 SP3 Licenses and Configuration Limits
Artículos relacionados
- Configuring Operator Control Permissions and Command Locking on APL Valve Blocks in SIMATIC PCS 7
- Migrating SIMATIC PCS 7 OS Servers and Engineering Stations to a New Active Directory Domain
- Resolving Multi-User Engineering Chart Lockouts and Access Conflicts in SIMATIC PCS 7
Etiquetas relacionadas
SIMATIC Logon, Concurrent Login, WinCC Scripting, @CurrentUser, PASSExitUser