En los sistemas SIMATIC PCS 7, la extracción de caracteres de una cadena de salida de HMI (como aislar la subcadena 'AS2' de un identificador compuesto para generar una entrada de supervisión booleana) se puede ejecutar en los gráficos de WinCC OS mediante funciones VBScript Mid() o en el sistema de automatización utilizando bloques de cadena estándar IEC de S7 (MID, FIND, EQ_STRING). La implementación de la comparación de cadenas requiere configurar longitudes de cadena coincidentes en Tag Management y seleccionar activadores basados en eventos para evitar cargas excesivas de CPU o de ejecución de scripts.
Índice de contenidos
- Manejo de datos de cadenas en las capas OS y AS de SIMATIC PCS 7
- Método 1: Extracción y comparación mediante VBScript en WinCC OS
- Método 2: Extracción y comparación de cadenas IEC en la estación de automatización (CFC)
- Configuración de Tag Management y transferencia de datos AS-OS
- Verificación
- Limitaciones y precauciones operativas
- Preguntas frecuentes de ingenieros
- Referencias técnicas
- Artículos relacionados
- Etiquetas relacionadas
Manejo de datos de cadenas en las capas OS y AS de SIMATIC PCS 7
En la automatización de procesos, las cadenas alfanuméricas representan identificadores de lotes, códigos de recetas, IDs de equipos y cadenas de entrada de operador. Con frecuencia, la lógica de supervisión debe analizar un subconjunto de caracteres de una cadena de texto dinámica para activar acciones de automatización posteriores (por ejemplo, detectar si el código de un recipiente contiene "AS2" para activar un bit de autorización):
* Formato de cadena S7: En STEP 7 / CFC, una variable STRING se estructura con dos bytes de cabecera de gestión: el Byte 0 define la longitud máxima asignada (hasta 254 caracteres), el Byte 1 define la longitud real actual, seguido de los bytes de caracteres ASCII.
* Variable de texto de WinCC: En WinCC OS, las cadenas se mapean como Variable de texto de conjunto de caracteres de 8 bits o Variable de texto de conjunto de caracteres de 16 bits.
* Ubicación de procesamiento: La extracción de cadenas se puede realizar en la capa de supervisión de la OS (mediante VBScript o ANSI-C) o de forma determinista dentro de la estación de automatización (mediante bloques de la librería IEC en CFC).
Método 1: Extracción y comparación mediante VBScript en WinCC OS
Para analizar caracteres directamente dentro de una pantalla del Graphics Designer de WinCC:
1. Abra la imagen de proceso (.pdl) en el Graphics Designer.
2. Seleccione el campo de E/S o el objeto de visualización de texto donde se muestra la cadena de origen.
3. En las propiedades del objeto, vaya a Eventos -> Temas de propiedades -> Salida/Entrada -> Valor de salida.
4. Haga clic derecho en el evento Modificación y seleccione Acción VBS.
5. Implemente la lógica de extracción utilizando la función VBScript Mid():
Dim sourceStr, subStr, targetTag
sourceStr = ScreenItems("IOField_Source").OutputValue
' Extract 3 characters starting from character position 4
subStr = Mid(sourceStr, 4, 3)
' Compare substring against target string
Set targetTag = HMIRuntime.Tags("HMI_Input_Bool")
If subStr = "AS2" Then
targetTag.Write 1
Else
targetTag.Write 0
End If
Set targetTag = Nothing
- Configure el activador (trigger) en En modificación de la variable de la cadena de origen. Nunca utilice un temporizador cíclico (p. ej., 250 ms) para scripts de cadenas para evitar una carga innecesaria en la cola de ejecución de scripts.
Método 2: Extracción y comparación de cadenas IEC en la estación de automatización (CFC)
Para enclavamientos críticos para la seguridad o deterministas, el análisis de cadenas debe ejecutarse dentro del controlador S7-400 o CPU 410 en lugar de en WinCC:
1. En el diagrama CFC, abra el catálogo de bloques en Librerías -> Librería estándar -> Bloques de funciones IEC.
2. Instancie los siguientes bloques IEC estándar:
* MID (FC26): Extrae una subcadena de longitud especificada (L) a partir de una posición de carácter (P) de la cadena de entrada (IN).
* EQ_STRNG (FC10): Compara dos cadenas de entrada (S1 y S2) y emite un booleano 1 si coinciden de forma idéntica.
* FIND (FC17): Busca la presencia de una subcadena dentro de una cadena más grande y devuelve el índice de la posición del carácter (devuelve 0 si no se encuentra).
3. Conecte la variable de la cadena de origen dinámica a la entrada IN de MID.
4. Establezca el parámetro de entrada L = 3 (longitud) y P = 4 (posición de inicio).
5. Envíe la cadena de salida extraída de MID a la entrada S1 de EQ_STRNG.
6. Asigne la constante 'AS2' a la entrada S2.
7. Conecte la salida booleana OUT de EQ_STRNG directamente al pin de entrada del bloque de control o enclavamiento APL de destino.
Configuración de Tag Management y transferencia de datos AS-OS
Al transferir variables de cadena entre el AS y la OS:
* Consistencia de longitud: Asegúrese de que la longitud de la cadena declarada en el bloque de datos de S7 coincida con la longitud configurada en el Tag Management de WinCC (p. ej., STRING[16]). Las longitudes no coincidentes pueden causar truncamientos en el búfer o corromper bytes de datos adyacentes.
* Compilación AS-OS: Al crear la cadena de origen en un bloque CFC con el atributo S7_m_c = 'true', ejecute una compilación AS-OS para generar la variable de texto de WinCC automáticamente, garantizando punteros de dirección coincidentes.
* Consistencia de datos: Debido a que las variables de cadena abarcan múltiples bytes de datos, actualice las cadenas como registros atómicos en la lógica del AS para evitar que WinCC lea texto parcialmente actualizado durante los ciclos de ejecución.
Verificación
- En el Runtime de WinCC, introduzca una cadena de prueba que contenga
"PREFIX_AS2_SUFFIX"en el campo de entrada. - Verifique que la lógica de VBScript o CFC aísle
"AS2". - Confirme que la variable de estado booleana cambie de
0a1. - Introduzca una cadena alternativa (p. ej.,
"PREFIX_AS3_SUFFIX"): verifique que la salida booleana vuelva a0. - Compruebe la ventana de diagnóstico de Global Script de WinCC (
apdiag.exe) para confirmar que no se hayan producido errores de ejecución de VBScript o excepciones de discrepancia de tipos.
Limitaciones y precauciones operativas
- Evite ejecutar scripts de manipulación de cadenas en activadores de pantalla cíclicos de WinCC; las operaciones cíclicas de cadenas provocan una alta utilización de la CPU en los clientes OS.
- Las operaciones de cadena S7-400 en CFC consumen significativamente más ciclos de instrucción de CPU que la lógica estándar de enteros o booleanos; evite ejecutar funciones de cadena en OBs de interrupción cíclica rápida (p. ej., OB35 a 100 ms) a menos que sea necesario.
- Las comparaciones de cadenas en VBScript distinguen entre mayúsculas y minúsculas por defecto; utilice
UCase()en VBScript o cadenas normalizadas en el AS para garantizar una coincidencia fiable.
Preguntas frecuentes de ingenieros
- ¿Cuál es la diferencia entre MID y FIND en los bloques de cadena IEC de S7?
MIDextrae una subcadena de longitud fija a partir de un desplazamiento de caracteres conocido, mientras queFINDbusca una subcadena y devuelve su índice de posición dinámica. - ¿Cómo se estructuran las cadenas en los bloques de datos de Siemens S7-400?
El Byte 0 contiene la longitud máxima asignada, el Byte 1 contiene la longitud actual real de la cadena y los bytes posteriores almacenan los caracteres ASCII. - ¿Puedo usar C-Script en lugar de VBScript en WinCC para la extracción de cadenas?
Sí, utilizando funciones de biblioteca de C estándar comostrncpy()ostrstr()dentro de un script de acción activado por cambio de variable. - ¿Por qué mi VBScript generó un error de 'Discrepancia de tipos' durante el análisis de cadenas?
Este error se produce cuando la variable referenciada está vacía (VT_EMPTY), es nula o no se puede convertir implícitamente a una cadena. Valide siempre la calidad de la variable antes de llamar aMid(). - ¿Escribir en una variable booleana interna de la HMI notifica automáticamente al controlador AS?
Solo si la variable es una variable de proceso externa mapeada a una dirección de bloque de datos del AS; las variables internas de la HMI existen únicamente dentro del espacio de memoria de WinCC. - ¿Cómo puedo hacer que la comparación de cadenas en VBScript no distinga entre mayúsculas y minúsculas?
Envuelva las variables enUCase(), por ejemplo:If UCase(subStr) = "AS2" Then. - ¿Pueden los bloques de cadena IEC de CFC manejar cadenas de más de 254 caracteres?
No, las variablesSTRINGestándar de STEP 7 tienen un límite arquitectónico máximo de 254 caracteres ASCII. - ¿Qué sucede si la posición de inicio P en MID excede la longitud de la cadena?
El bloqueMIDdevuelve una cadena vacía ('') y establece el byte de longitud real en 0 sin causar un fallo de la CPU. - ¿Cómo puedo supervisar los errores activos de VBScript en el Runtime de WinCC?
Inicie la herramienta de diagnóstico de WinCCC:/Program Files (x86)/Siemens/WinCC/bin/apdiag.exey abra la ventana de salida (Output Window). - ¿La comparación de cadenas en CFC está libre de sacudidas (bumpless) durante la conmutación redundante del AS?
Sí, los datos de cadena en los bloques de datos de instancia se sincronizan a través de enlaces redundantes de fibra óptica de manera idéntica a otros tipos de datos.
Referencias técnicas
- Manual de referencia de funciones estándar y del sistema SIMATIC STEP 7 V5.6
- Manual de referencia de VBScript para comunicación de procesos de SIMATIC HMI WinCC V7.5
- Entrada del Servicio de Asistencia en Línea de Industria de Siemens: Operaciones de cadena en STEP 7 y WinCC (ID de entrada 298697)
- Manual de funciones de la librería SIMATIC PCS 7 Advanced Process Library (APL)
Artículos relacionados
- Extracting Recipe Materials and Parameters in SIMATIC BATCH via Export and Batch API
- Configuring Mass Digital Input State Alarms in SIMATIC PCS 7 Without OS Compile Overwrites
Etiquetas relacionadas
PCS 7, WinCC, VBScript, Manipulación de cadenas, CFC, Funciones IEC, MID, EQ_STRNG, Tag Management, S7-400