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
| Elemento | Ejemplos | Observación |
|---|---|---|
| Booleano | BOOL | Verdadero o falso |
| Enteros | INT, DINT, UINT | Distintos rangos y bits |
| Reales | REAL, LREAL | Coma flotante; no se comparan con igualdad exacta |
| Tiempo | TIME, T#5s | Constantes de tiempo |
| Cadenas | STRING | Texto |
| Compuestos | ARRAY, STRUCT | Tablas y registros |
| Lógicos | AND, 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ódulo | Corriente calculada |
|---|---|
| 0 | 0 A |
| 19354 | 28 A (corriente nominal del motor) |
| 27648 | 40 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,CASEy 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
WHILEsin 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
CASEsin 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.
-
CASEcon 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
- PLC y automatización de subestaciones
- PLC de subestación con IEC 61850
- CCM inteligente
- Modbus RTU y TCP
- SCADA y HMI de subestación
- Temporizadores y contadores en PLC: TON, TOF, TP y CTU
- Function Block Diagram (FBD): bloques de función en PLC
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.