Para resolver errores de sintaxis SCL tales como Unknown statement que ocurren en líneas huérfanas := FC(...) al compilar un diagrama CFC como tipo de bloque, corrija las asignaciones de llamadas a funciones internas o reestructure su plantilla utilizando Tipos de Módulo de Control (CMT). El compilador de CFC a bloque genera código intermedio de Structured Control Language (S7-SCL) donde cada llamada a función (FC) debe asignar su valor de retorno a una variable válida. Cuando una salida de un FC está desconectada, asignada a una palabra reservada (keyword) o desalineada con los parámetros de E/S del diagrama, el generador SCL emite un token de asignación inicial inválido. Además, compilar diagramas que contienen bloques tecnológicos de la Advanced Process Library (APL) en tipos de bloque compuestos elimina los atributos de WinCC OS (S7_m_c), rompiendo la generación de faceplates. El estándar de la industria recomendado es modelar típicos reutilizables de múltiples bloques como Tipos de Módulo de Control en la librería maestra.
Índice de contenidos
- Mecánica del compilador de CFC 'Compilar diagrama como tipo de bloque'
- Causa raíz del error de sintaxis SCL de asignación huérfana (:=)
- Por qué compilar bloques APL como tipos de bloque rompe la integración con WinCC OS
- Método: Implementación moderna utilizando Tipos de Módulo de Control (CMT)
- Verificación
- Limitaciones y precauciones operativas
- Preguntas frecuentes de ingenieros
- Referencias técnicas
- Artículos relacionados
- Etiquetas relacionadas
Mecánica del compilador de CFC 'Compilar diagrama como tipo de bloque'
En STEP 7 y SIMATIC PCS 7, la función Compilar -> Diagrama como tipo de bloque automatiza la traducción de un diagrama de funciones continuas (CFC) gráfico en un Bloque de Función (FB) reutilizable:
1. Análisis (Parsing): El compilador escanea todos los bloques, interconexiones internas y E/S de diagrama definidas en el gráfico.
2. Generación de código: Sintetiza un archivo fuente S7-SCL basado en texto que se almacena en la carpeta Sources de S7 en el proyecto.
- Los Bloques de Función secundarios (como Pcs7DiIn) se instancian como variables de multi-instancia estáticas (VAR ... END_VAR).
- Las Funciones secundarias (como Or04 / FC364 u Or08 / FC365) se llaman de forma en línea durante la ejecución cíclica.
3. Compilación: El compilador interno de S7-SCL compila el texto fuente generado en un Bloque de Función ejecutable (por ejemplo, FB500) y lo guarda en la carpeta de bloques.
Causa raíz del error de sintaxis SCL de asignación huérfana (:=)
Cuando el compilador genera sentencias SCL para funciones estándar, produce código de acuerdo con el patrón:
//-- Block: BlockName
TargetVariable := FC365(In1 := Connection1, In2 := Connection2, ...);
Si ocurre un error donde la línea generada dice:
//-- Block: Error (Or08)
:= FC365(In1 := FbkOpen.Bad, ...);
El identificador faltante antes de := desencadena el error del compilador SCL: E: L 01150 C 00007: Unknown statement. Esto ocurre debido a dos fallas de configuración distintas:
* Valor de retorno no asignado o inválido: A diferencia de los Bloques de Función que almacenan estado en DBs de instancia, una Función S7 (FC) calcula un valor de retorno transitorio (RET_VAL) o parámetro de salida. Si la salida del FC en el diagrama CFC se deja completamente sin asignar, o si el nombre de instancia del bloque dentro del diagrama entra en conflicto con una palabra reservada de S7-SCL (por ejemplo, nombrar a un bloque Error o Status), el generador de código no logra generar un nombre de variable para el lado izquierdo.
* Incompatibilidad de tipos con la E/S del diagrama: Si la salida del FC se enrutó a una E/S interna de diagrama cuyo tipo de dato se modificó después de la interconexión inicial, el enlace simbólico se rompe, lo que resulta en un token vacío.
Por qué compilar bloques APL como tipos de bloque rompe la integración con WinCC OS
Más allá de los errores de compilación de sintaxis, compilar diagramas tecnológicos que contienen bloques de la Advanced Process Library (APL) (como VlvL, MotL o PIDConL) en tipos de bloque compuestos infringe los principios de diseño de PCS 7:
S7_m_c := 'true' generan automáticamente tags de WinCC, mensajes de Alarm Logging e iconos de bloque.S7_m_c; los faceplates no pueden apuntar a bloques secundarios dentro de un FB de multi-instancia.ST) y rutas de enclavamiento en modo de prueba de CFC.Método: Implementación moderna utilizando Tipos de Módulo de Control (CMT)
Para crear módulos de equipos estandarizados y reutilizables (por ejemplo, una válvula con drivers de canal de entrada y enclavamientos de múltiples entradas) sin compilar diagramas en tipos de bloque rígidos, implemente Tipos de Módulo de Control:
Paso 1: Crear el CMT en la librería maestra
- En SIMATIC Manager, abra la Master Data Library de su proyecto.
- Vaya a la carpeta Templates, haga clic derecho y seleccione Insert New Object -> Control Module Type.
- Asigne un nombre al CMT (por ejemplo,
CMT_ValveLean_Advanced). - Haga doble clic en el CMT para abrirlo en el editor CFC.
Paso 2: Ensamblar bloques tecnológicos y lógica
- Desde el catálogo de la librería APL, arrastre los bloques requeridos al diagrama:
-VlvL(FB1899) para la lógica tecnológica de la válvula principal.
-Pcs7DiIn(FB1871) para entradas digitales (retroalimentación abierto, retroalimentación cerrado).
-Pcs7DiOu(FB1873) para la salida de comando.
-Or08(FC365) o bloques de lógica estándar para enclavamientos. - Interconecte los estados de señal y valores (por ejemplo,
Pcs7DiIn.OutaVlvL.FbkOpen). - Conecte la salida de
Or08a la entrada de enclavamientoVlvL.PermitoVlvL.Intlock.
Paso 3: Definir parámetros y señales del Módulo de Control
- Abra el Technological Editor en CFC (View -> Technological Editor).
- Arrastre los parámetros operativos que requieren conexión externa o visibilidad para el operador (como direcciones de E/S de campo, bypasses de enclavamiento y puntos de consigna - setpoints) al panel de interfaz tecnológica.
- Asigne nombres de ingeniería significativos a cada puerto tecnológico.
Paso 4: Instanciar CMTs en la jerarquía de planta
- En la vista de planta (Plant View), arrastre
CMT_ValveLean_Advanceda la carpeta de jerarquía de planta de destino (por ejemplo,Plant1/UnitA/Valves). - Asigne el nombre de instancia (por ejemplo,
XV_101). - Conecte las direcciones de E/S de campo directamente a los pines de E/S tecnológica asignados.
- Ejecute Options -> Match Control Module Types cada vez que se apliquen actualizaciones de librerías.
Verificación
Para confirmar que el módulo de automatización compila y funciona correctamente:
- Abra el programa S7 en SIMATIC Manager y ejecute Chart -> Compile -> Charts as Program.
- Asegúrese de que la compilación termine con 0 errores y 0 interconexiones textuales no resueltas.
- Ejecute una compilación de OS (OS Compile) y verifique que WinCC genere automáticamente el icono de bloque para la válvula, enlace el faceplate y registre todos los mensajes de alarma.
- Cambie el AS a modo RUN, abra el CFC en modo de prueba online (Test Mode) y confirme que los estados de las entradas digitales se propaguen a través de Pcs7DiIn y Or08 hasta VlvL con el estado de señal correcto 16#80 (Bueno).
Limitaciones y precauciones operativas
- Dimensionamiento de la memoria de código de CPU: El uso de Tipos de Módulo de Control instancia bloques de función individuales para cada dispositivo tecnológico. Asegúrese de que la memoria de trabajo de la CPU y la capacidad de licencia de objetos de proceso (PO) admitan el recuento total de bloques.
- Modificaciones al código fuente SCL: Si restricciones heredadas exigen compilar un diagrama en un tipo de bloque, no edite manualmente el archivo fuente
.SCLgenerado en la carpetaSourcesa menos que planee mantenerlo como una fuente SCL pura; cualquier acción futura de "Compilar diagrama como tipo de bloque" sobrescribirá las modificaciones de texto manuales. - Numeración de DBs de instancia: Asigne un rango de números de bloque dedicado y no reservado (por ejemplo, FB500–FB999) en las propiedades del objeto de diagrama antes de compilar para evitar colisiones con los bloques del sistema de Siemens.
Preguntas frecuentes de ingenieros
¿Por qué eliminar el token ':=' en el código SCL permitió compilarlo?
Eliminar := convirtió la línea de una asignación inválida a una llamada directa a subrutina de la función FC365(...). Si bien esto satisface al comprobador de sintaxis SCL, el valor de retorno de la función se descarta, lo que significa que la salida de la lógica OR se pierde.
¿Puede un bloque FC tener su propio DB de instancia en PCS 7?
No. Las funciones S7 (FCs) no tienen estado y no poseen bloques de datos de instancia. Cualquier bloque que requiera memoria de estado persistente, integración con el operador de WinCC o marcas de tiempo de alarma debe escribirse como un Bloque de Función (FB).
¿Qué sucede con los iconos de bloque si incrusto un bloque APL dentro de un tipo de bloque compilado?
El compilador de WinCC OS solo detecta atributos S7_m_c en la interfaz del bloque de nivel superior. No puede recorrer variables de multi-instancia dentro de un FB compuesto personalizado, lo que hace que WinCC omita la generación de iconos de bloque y faceplates para los bloques internos.
¿Cómo actualizo todas las instancias de un Tipo de Módulo de Control cuando modifico la plantilla?
Abra la Master Data Library, edite el CMT en la carpeta de plantillas y luego ejecute Options -> 'Plant Types' -> Synchronize. El asistente analiza todos los diagramas del proyecto y propaga los cambios sin romper las conexiones de campo existentes.
Referencias técnicas
- Siemens Industry Online Support: Manual de SIMATIC PCS 7 CFC para S7 (A5E00278782).
- Entrada SIOS 109742323: PCS 7 Compendium Part A - Pautas de configuración (Sección: Ingeniería de módulos de control).
- Entrada SIOS 109809264: Manual de SIMATIC Process Control System PCS 7 Advanced Process Library.
- Guía de programación de Siemens: Trabajo con S7-SCL y CFC en SIMATIC Process Control.
Artículos relacionados
- How to Structure Program Data in PCS 7: Moving from TIA Portal to Control Module Types
- How to Resolve PCS 7 Invalid Object Type Errors During Block and CMT Copying
- How to Pack and Unpack Double Words (DWORD) in SIMATIC PCS 7 CFC
Etiquetas relacionadas
- CFC
- S7-SCL
- Control Module Type
- PCS 7
- APL
- Compilando
- Automatización Industrial