Cómo generar alarmas y eventos de operador en WinCC mediante VBScript

No es posible generar directamente alarmas de sistema ni mensajes de evento de operador (Operator Event Messages) en SIMATIC WinCC utilizando exclusivamente funciones nativas de VBScript. La API de secuencias de comandos de WinCC restringe la creación dinámica de alarmas con valores de proceso a las funciones de la interfaz Open Development Kit (ODK), la cual solo está disponible y es accesible mediante la interfaz de programación C-Script (GSC C-Script). Para registrar eventos desencadenados por scripts desde VBScript, debe utilizar C-Script como puente o gestionar las alarmas de manera indirecta vinculando el script VBS a variables del PLC o tags internos de WinCC.

Tabla de contenido

Causa técnica: limitaciones de la API VBScript en WinCC

En el entorno SIMATIC WinCC (WinCC V6, V7 o WinCC Professional), el motor de secuencias de comandos VBScript (GSC VBScript) no expone los métodos de bajo nivel del sistema Alarm Logging. Las funciones nativas de creación de mensajes, tales como MSRTCreateMsgObject o GSCGenAlarm, forman parte de la API C-Script de WinCC ODK.

Dado que el modelo de objetos de VBScript en WinCC está orientado principalmente a la manipulación de la interfaz gráfica (HMI) y al acceso a tags a través del objeto HMIRuntime.Tags, no incluye llamadas nativas a la API de Alarm Logging. Cualquier intento de invocar llamadas del ODK directamente desde un archivo o acción VBS fallará por falta de funciones exportadas en el motor VBS.

Requisitos previos

Para implementar un sistema de alarmas activado desde secuencias de comandos, asegúrese de cumplir con los siguientes requisitos:

  • Sistema de supervisión SIMATIC WinCC con el subsistema Alarm Logging configurado.
  • Un bloque de mensajes (Single Message) o un mensaje de evento de operador registrado previamente en la tabla de Alarm Logging con su correspondiente número de ID de mensaje.
  • Acceso con privilegios de ingeniería al editor de acciones globales (Global Script) o a la pantalla gráfica (Graphics Designer).
  • Tags internos o variables del PLC configuradas como desencadenantes de alarma cuando se utiliza el método indirecto.

Método 1: Generación indirecta de alarmas mediante tags de WinCC (Recomendado)

Se utiliza mejor cuando: Se requiere generar una alarma estándar desde VBScript sin necesidad de utilizar código complejo de la API C/ODK ni licencias especiales.

Procedimiento

  1. Abra el editor de Alarm Logging en WinCC Explorer.
  2. Cree una nueva alarma o utilice un ID de mensaje existente. Configure su propiedad de disparo para que se active mediante un tag de bit de WinCC (por ejemplo, VBS_Trigger_Alarm_Bit).
  3. En su acción o evento VBScript, escriba el valor del tag para conmutar su estado y activar la condición en el Alarm Logging.

VB.Net

' Ejemplo VBScript para activar una alarma mediante un tag de WinCC
Dim tagTrigger
Set tagTrigger = HMIRuntime.Tags("VBS_Trigger_Alarm_Bit")

' Activar el bit para disparar la alarma en Alarm Logging
tagTrigger.Write 1

' Nota: Se puede reiniciar el bit manualmente o mediante un temporizador según la lógica de la alarma

Resultado esperado: Al ejecutarse el script VBS, el tag cambia a valor 1, lo que hace que el subsistema Alarm Logging evalúe la condición y registre inmediatamente la entrada de la alarma en la lista de alarmas activas.

Verificación: Compruebe la ventana de alarmas en Runtime (AlarmControl) para confirmar que el mensaje correspondiente aparece con la marca de tiempo correcta.

Método 2: Encadenamiento de VBScript con C-Script mediante ODK

Se utiliza mejor cuando: El flujo de trabajo principal de la aplicación reside en VBScript, pero es imprescindible invocar un mensaje de evento de operador personalizado con valores de proceso mediante la API C-Script.

Procedimiento

  1. Cree una función global en C-Script (GSC C-Script) que contenga la llamada a la función ODK de generación de mensajes (por ejemplo, GSCGenAlarm o las funciones personalizadas del sistema).
  2. Configure un tag interno de activación (por ejemplo, Trigger_C_Script_Msg).
  3. Asigne la función C-Script a una acción global desencadenada por el cambio de valor del tag Trigger_C_Script_Msg.
  4. Desde el script VBS principal, escriba el valor en el tag interno para forzar la ejecución de la función C-Script.

Plaintext

+------------------+       Escribe Tag       +----------------------+       Ejecuta       +--------------------+
|  Script VBScript | ----------------------> | Tag Interno de WinCC | -------------------> |  Función C-Script  |
+------------------+                         +----------------------+                      +--------------------+
                                                                                                    |
                                                                                                    v
                                                                                           +--------------------+
                                                                                           |  API ODK / Alarma  |
                                                                                           +--------------------+
  1. Código en el script VBS:

VB.Net

' Transmitir orden desde VBScript hacia el desencadenador C-Script
HMIRuntime.Tags("Trigger_C_Script_Msg").Write 1
  1. Código en la acción C-Script (asociada al evento del tag):

C

// Ejemplo conceptual dentro de la acción C-Script
#include "apdefap.h"

void OnTagChanged(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
    if (GetTagBit("Trigger_C_Script_Msg")) {
        // Invocar función de generación de mensajes ODK o script C personalizado
        // ...

        // Restablecer el tag desencadenador
        SetTagBit("Trigger_C_Script_Msg", FALSE);
    }
}

Resultado esperado: VBScript delega el registro del mensaje al motor C-Script, logrando generar el mensaje de evento de operador con valores de proceso en el Alarm Logging.

Verificación: Examine el archivo de registro de eventos de operador o la lista del historial de alarmas para verificar que la entrada generada por C contiene los datos de proceso transferidos.

Verificación

El proceso de integración para la generación de alarmas se considera exitoso cuando:

  • El script VBScript se ejecuta sin errores de compilación ni advertencias en el archivo de registro WinCC_Sys.log.
  • La alarma o evento de operador se visualiza en el componente WinCC AlarmControl en tiempo de ejecución.
  • Las variables del PLC o los tags de proceso asociados al evento reflejan el estado esperado en el momento del disparo.

Limitaciones y precauciones operativas

  • Ausencia de soporte nativo VBS: No intente declarar funciones externas de bibliotecas DLL de C directamente dentro de VBScript mediante instrucciones de tipo Declare, ya que VBScript en WinCC no admite la llamada directa a funciones de la API WinCC ODK.
  • Sobrecarga por eventos: Evite la escritura continua o cíclica de tags de disparo desde scripts VBS en bucles rápidos (While, For). Esto puede saturar la cola de mensajes del Alarm Logging y degradar el rendimiento general de WinCC Runtime.

Preguntas frecuentes

¿Se puede utilizar la función MsgBox en VBScript para mostrar alarmas en WinCC?

La función MsgBox muestra un cuadro de diálogo emergente en la pantalla de la estación local, pero no registra la ocurrencia en el archivo histórico de Alarm Logging ni la distribuye a otros clientes en la red WinCC. Para un registro de alarmas industrial, debe utilizarse Alarm Logging mediante tags o C-Script.

¿Se requiere una licencia especial para usar las funciones ODK en C-Script?

La invocación de ciertas funciones avanzadas de la API de WinCC ODK para la creación dinámica de objetos de alarma puede requerir la licencia de desarrollo WinCC ODK. Sin embargo, las funciones estándar de generación de eventos de operador en C-Script están disponibles dentro de las funciones de script por defecto del sistema.

¿Puedo pasar valores de texto o cadenas desde VBScript a la alarma?

Sí. Puede escribir los valores de texto desde VBScript en tags de texto de WinCC (Text tag 8-bit character set) y configurar la alarma en Alarm Logging para que inserte esos tags de texto como bloques de valor de proceso (Process Value Blocks) en el mensaje.

Artículos relacionados

Etiquetas relacionadas

Code: C163

6 respuestas