Tiza Group

Inicio / Guías / Industria y automatización

Structured Text (ST) en PLC: fundamentos y ejemplos

Fundamentos del Structured Text (IEC 61131-3): variables, IF, CASE, bucles, funciones y bloques de función, con un ejemplo de motor.

Por Shadai García, CEO e ingeniero de protecciones de Tiza Group.

ST · una sola sentenciakm1 := (marcha OR km1) AND paro_ok AND termico_ok;LD · el mismo resultadomarchakm1paro_oktermico_okkm1OR = contactos en paralelo, AND = contactos en serieCASE estado OF · máquina de estados012marchaKM1 okparo o fallaestado 0: reposo, salidas apagadasestado 1: arranque, espera confirmaciónestado 2: marcha, km1 = 1vuelve al estado 0cada ciclo ejecuta solo la rama del estado activoCadenaEntradasSentencia STEstado (CASE)Salida© tizagrp.comST · una sola sentenciakm1 := (marcha OR km1) AND paro_ok AND termico_ok;LD · el mismo resultadomarchakm1paro_oktermico_okkm1OR = contactos en paralelo, AND = contactos en serieCASE estado OF · máquina de estados012marchaKM1 okparo o fallaestado 0: reposo, salidas apagadasestado 1: arranque, espera confirmaciónestado 2: marcha, km1 = 1vuelve al estado 0cada ciclo ejecuta solo la rama del estado activoCadenaEntradasSentencia STEstado (CASE)Salida© tizagrp.com
Structured Text: una sentencia, su equivalente en ladder y la máquina de estados con CASE. Ubicación en el sistema y principio de funcionamiento. Ilustrativo: los valores reales salen de la placa y del manual del fabricante.
Respuesta corta

El texto estructurado (ST) es el lenguaje textual de alto nivel de la IEC 61131-3, parecido a Pascal. Se compone de declaraciones de variables, asignaciones, condicionales IF y CASE, bucles FOR, WHILE y REPEAT, y llamadas a funciones y bloques de función. Es el más adecuado para cálculos, datos y lógica compleja.

Respuesta corta

El texto estructurado (Structured Text, ST) es el lenguaje textual de alto nivel definido en la IEC 61131-3. Su sintaxis recuerda a Pascal: se declaran variables, se asignan valores y se controla el flujo con IF, CASE y bucles. Cada fabricante lo ofrece con ligeras diferencias de sintaxis y de nombre (algunos lo llaman SCL u otro nombre propio). Es el lenguaje para lo que en ladder se vuelve inmanejable: fórmulas, arreglos, escalado, recetas y máquinas de estados.

Estructura de un programa

Un programa en ST tiene dos zonas: la declaración de variables y el cuerpo.

PROGRAM Motor1
VAR
  marcha   : BOOL;
  paro_ok  : BOOL;
  termico_ok : BOOL;
  km1      : BOOL;
END_VAR

km1 := (marcha OR km1) AND paro_ok AND termico_ok;
END_PROGRAM

La sentencia equivale al enclavamiento marcha-paro que se dibuja en ladder: la salida se mantiene sola y se corta con el paro o con la protección. Cada instrucción termina en punto y coma. Los comentarios se escriben entre (* y *).

Tipos de dato y operadores

ElementoEjemplosObservación
BooleanoBOOLVerdadero o falso
EnterosINT, DINT, UINTDistintos rangos y bits
RealesREAL, LREALComa flotante; no se comparan con igualdad exacta
TiempoTIME, T#5sConstantes de tiempo
CadenasSTRINGTexto
CompuestosARRAY, STRUCTTablas y registros
LógicosAND, OR, XOR, NOT
Comparación=, <>, <, >
Aritmética+ - * /, MOD
Asignación:=No confundir con =

Los tipos importan: una división entre enteros devuelve un entero, y mezclar tipos sin conversión explícita provoca errores de compilación en algunos entornos o truncamientos en otros. Vea direccionamiento y tipos de datos.

Control de flujo

Condicional IF:

IF nivel < nivel_bajo THEN
  bomba := TRUE;
ELSIF nivel > nivel_alto THEN
  bomba := FALSE;
END_IF;

Este fragmento implementa histéresis: entre ambos niveles, la bomba conserva su estado.

Selección múltiple CASE: conviene para máquinas de estados, donde una variable entera indica la etapa actual.

CASE etapa OF
  0: (* reposo *)
     IF marcha THEN etapa := 10; END_IF;
  10: (* arranque *)
     km1 := TRUE;
     IF t_arr.Q THEN etapa := 20; END_IF;
  20: (* en régimen *)
     IF paro THEN etapa := 0; END_IF;
END_CASE;

Una máquina de estados en CASE es el equivalente textual de un SFC o GRAFCET: cada valor es un paso y cada IF es una transición.

Bucles: FOR (número conocido de repeticiones), WHILE (mientras se cumpla una condición) y REPEAT … UNTIL. Se usan para recorrer tablas, sumar valores o localizar un elemento. Hay que recordar que el bucle se ejecuta completo en un solo scan.

Funciones y bloques de función

Una función devuelve un resultado a partir de sus entradas y no guarda estado. Un bloque de función sí guarda estado y se instancia. Los temporizadores y contadores son bloques de función, y en ST se llaman así:

t_arr(IN := km1, PT := T#5s);
IF t_arr.Q THEN ... END_IF;

Se invoca el bloque con sus entradas y se lee la salida por el nombre de la instancia (ver temporizadores y contadores en PLC). Los bloques propios del usuario se declaran con FUNCTION_BLOCK, y cada motor, válvula o bomba de la planta usa una instancia del mismo bloque.

Ejemplo ilustrativo: escalado de una medida analógica

Datos supuestos: un transmisor de corriente del motor de 15 kW, 400 V, entrega 4-20 mA proporcionales a 0-40 A. El módulo analógico convierte esa señal a un entero entre 0 y 27648 (rango supuesto; cada módulo declara el suyo).

Fórmula de escalado lineal: corriente = (cuentas − 0) / (27648 − 0) × (40 − 0) + 0, es decir, corriente = cuentas × 40 / 27648.

Cuentas del móduloCorriente calculada
00 A
1935428 A (corriente nominal del motor)
2764840 A

En ST se escribe con una sola línea de asignación sobre un REAL. En ladder, la misma operación exige bloques de cálculo encadenados. Es un caso donde el texto gana en claridad. Una observación de diseño: el escalado debe incluir la detección de señal fuera de rango (por debajo de 4 mA indica cable roto en una señal 4-20 mA).

Ventajas y límites

Ventajas: compacto, fácil de comparar con control de versiones, cómodo para datos y algoritmos. Límites: quien mantiene la planta puede no leerlo; la depuración en línea es menos visual; y el abuso de bucles anidados dificulta la predicción del tiempo de ejecución. Muchos proyectos combinan ST para los cálculos y ladder para los enclavamientos, con SFC para las secuencias.

Estilo y legibilidad en texto estructurado

El texto da libertad, y con ella la posibilidad de escribir código ilegible. Algunas reglas de estilo, de uso común en los equipos de automatización:

  • Una sentencia por línea y sangría uniforme dentro de IF, CASE y bucles.
  • Condiciones complejas separadas en variables intermedias con nombre, en vez de expresiones de quince términos.
  • Constantes declaradas (LIMITE_NIVEL_ALTO) en lugar de números dispersos.
  • Funciones cortas, con una sola responsabilidad.
  • Comentarios al comienzo de cada bloque con su propósito, entradas y salidas.
  • Evitar efectos ocultos: una función no debería escribir variables globales.

Máquina de estados como patrón

La combinación de una variable de etapa y un CASE es el patrón más útil del lenguaje. Cada etapa define qué salidas se activan y qué condición lleva a la siguiente. Se recomienda una etapa de falla a la que se pueda llegar desde cualquiera, y un reinicio explícito. Con ese patrón, el diagnóstico en línea consiste en leer el valor de la variable de etapa: dice en qué punto está el proceso.

Cuándo no usar texto

El texto pierde frente al ladder en dos casos. Uno: quien mantiene la planta es personal eléctrico sin formación en programación. Otro: la lógica es una cadena corta de permisivos que se entiende mejor dibujada. Tampoco conviene para lo que debe poder verse «en vivo» contacto por contacto. La mayoría de los proyectos sólidos reparten: texto para cálculos y estados, ladder para enclavamientos y diagnóstico visual.

Depuración y pruebas

En línea, el entorno permite ver el valor de cada variable junto a la línea de código, colocar puntos de parada en algunos controladores y forzar valores de prueba. Para probar un bloque escrito en texto, arme una tabla de casos con entradas y salidas esperadas. Incluya los límites (cero, máximo, valor fuera de rango) y las combinaciones de falla. Un cálculo de escalado, por ejemplo, se prueba con el mínimo, el máximo, un valor intermedio y una señal por debajo de 4 mA. Cuando el resultado no coincide con lo esperado, se descompone la expresión en variables intermedias para localizar el paso que falla. Esas mismas tablas de casos forman la evidencia de pruebas del bloque y se reutilizan cada vez que se modifica.

Errores frecuentes

  • Usar = en lugar de :=.
  • Comparar reales con igualdad exacta; se compara con una tolerancia.
  • Bucles WHILE sin garantía de salida, que disparan el watchdog.
  • Mezclar tipos sin conversión, con pérdida de precisión o desbordamiento.
  • Dividir sin comprobar el divisor.
  • Escribir la misma variable en varios programas.
  • Dejar CASE sin rama de valor inesperado: una variable de etapa corrupta deja la máquina sin estado válido.
  • No comentar: el texto sin comentarios envejece mal.
  • Usar saltos y construcciones que dificultan seguir el flujo.

Lista de verificación

  • Variables declaradas con tipo y nombre significativo.
  • Constantes con nombre, no números sueltos.
  • Bucles con límite conocido y acotado.
  • Divisiones y escalados con protección ante valores inválidos.
  • CASE con rama por defecto y estado seguro.
  • Cada salida se escribe en un solo lugar.
  • Bloques de función reutilizados por equipo.
  • Comentarios que explican el propósito, no la sintaxis.

Dudas técnicas frecuentes

  • ¿Se puede llamar ST desde ladder?: sí; muchos entornos permiten usar bloques escritos en ST dentro de peldaños.
  • ¿Qué es SCL?: el nombre que un fabricante da a su variante de texto estructurado.
  • ¿Hay herramientas para practicar?: existen entornos de código abierto que ejecutan ST en un computador; vea simulación y herramientas de PLC.
  • ¿Es válido para sistemas de seguridad?: depende del controlador y de la certificación del entorno; un programa de seguridad sigue las reglas del fabricante certificado.

Cómo le ayudamos

Un programa de control mantenible nace de una buena arquitectura: bloques por equipo, estados definidos y escalados verificados. En Tiza Group hacemos el diseño de la lógica de control, y luego probamos y ponemos en servicio el sistema. Vea diseño de ingeniería y estudios y pruebas y puesta en servicio, o escríbanos por contacto.

Guías relacionadas

Referencias

  • IEC 61131-3, texto estructurado (norma de pago).
  • PLCopen, material introductorio sobre ST.
  • OpenPLC, editor y runtime con soporte de ST.

Preguntas frecuentes

¿Es más difícil el Structured Text que el ladder?

Exige otra forma de pensar, más cercana a la programación general, pero es más corto y legible para cálculos, tablas y algoritmos. Para quien ya programa en otro lenguaje, la curva es corta.

¿Un bucle puede bloquear el PLC?

Sí. El bucle se ejecuta completo dentro de un ciclo de scan. Si no termina, o recorre demasiados elementos, el ciclo se alarga hasta que el temporizador de vigilancia detiene el controlador.

¿Cuál es la diferencia entre := y = en ST?

:= asigna un valor a una variable; = compara dos valores y devuelve verdadero o falso. Confundirlos es un error común de quien llega de otros lenguajes.

¿El ST se ejecuta más rápido que el ladder?

No por ser texto. Ambos se compilan y el rendimiento depende del compilador y del hardware. Lo que cambia es la claridad según el tipo de problema.

WhatsApp