Cargando el progreso local…
PLC Gym
Inicio de PLC GymNivel 1, 0 XP · tu progreso
Todas las guías

Texto estructurado PLC: guía para principiantes en SCL y Studio 5000

Guía de texto estructurado PLC para principiantes: qué es SCL frente a ST, con ejemplos resueltos para Siemens TIA Portal y Rockwell Studio 5000.

Una laptop en una habitación oscura con un editor de código lleno de código resaltado en colores.
El texto estructurado se lee como un lenguaje de programación corto y estricto
En esta guía
  1. Qué es el texto estructurado en un PLC
  2. ¿El SCL es lo mismo que el texto estructurado?
  3. Cuándo usar texto estructurado en vez de ladder
  4. Lo básico: asignaciones, tipos y comentarios
  5. Ejemplos de texto estructurado PLC en SCL y Studio 5000
  6. Siemens y Rockwell, lado a lado
  7. Errores de principiante
  8. Dónde practicar texto estructurado
  9. Fuentes

El texto estructurado PLC es la parte del trabajo con PLC que más se parece a programar de forma normal. En vez de dibujar renglones o conectar bloques, escribes líneas de código. Si alguna vez escribiste un poco de Python o una fórmula en una hoja de cálculo, te va a resultar familiar muy rápido.

Esta guía es para principiantes. Explica qué es el texto estructurado, cómo se relaciona el SCL de Siemens con él, cuándo usarlo en vez de ladder y los errores en los que cae casi todo el mundo. La parte central son ejemplos resueltos, cada uno escrito dos veces: en SCL de Siemens para TIA Portal y al estilo de Rockwell para Studio 5000.

Los datos vienen de los manuales de los fabricantes, enlazados al final, y el código sigue los patrones de las misiones de PLC Gym. Prueba todo en el software real antes de acercarlo a una máquina real.

Qué es el texto estructurado en un PLC

El texto estructurado, o ST, es uno de los lenguajes de PLC definidos en la norma internacional IEC 61131-3. El ladder y el diagrama de bloques de funciones se dibujan. El ST se escribe, con instrucciones IF, bucles y cálculos, un poco como Pascal si alguna vez lo viste.

Cada fabricante tiene su propia versión.

  • Siemens lo llama SCL, y lo escribes en TIA Portal.
  • Rockwell Automation lo llama Structured Text y lo admite en Studio 5000 Logix Designer, el software para sus controladores Allen-Bradley Logix. Los manuales antiguos llaman a ese software RSLogix 5000.
  • Beckhoff también lo llama ST, en TwinCAT 3, y añade una versión ampliada propia.

Las ideas son las mismas en todos. Cuando sabes escribir ST para un fabricante, los otros son sobre todo cuestión de reglas para los nombres y de cómo se llaman los temporizadores. El glosario de PLC Gym tiene entradas cortas sobre texto estructurado y SCL si quieres la versión de una línea.

¿El SCL es lo mismo que el texto estructurado?

SCL es el nombre que Siemens le da al texto estructurado. Son las siglas de Structured Control Language. La propia guía de estandarización de Siemens dice que el SCL de TIA Portal corresponde al lenguaje ST definido en la IEC 61131-3, y su manual antiguo de S7-SCL para el S7-300 y el S7-400 dice casi lo mismo.

Así que, si estás estudiando programación en SCL, estás aprendiendo texto estructurado. Los IF, los CASE y los bucles FOR se trasladan tal cual.

Pero no es copiar y pegar. Siemens marca sus variables con # y comillas, llama a sus temporizadores de otra forma y tiene instrucciones propias, y Rockwell también. Por eso cada ejemplo de abajo está escrito dos veces.

Quizás también veas un archivo .scl. Es SCL guardado como archivo fuente de texto, que TIA Portal puede convertir en bloques.

Cuándo usar texto estructurado en vez de ladder

El lenguaje ladder es excelente para reglas simples de encendido y apagado. Se lee fácil junto a la máquina, y los equipos de mantenimiento muchas veces lo prefieren. Pero algunos trabajos se complican rápido en ladder y quedan ordenados en texto. La guía de Siemens dice algo parecido: LAD y FBD sirven para procesar bits, mientras que SCL sirve para manejar datos y cálculos más complejos.

TrabajoMejor en ladderMejor en texto
Marcha, paro y enclavamientosSíTambién funciona bien
Cálculos, escalado y promediosSe complicaSí
Un proceso con muchos estadosPosible, pero largoSí, con CASE
Recorrer una lista de valoresDifícilSí, con FOR
Buscar fallas rápido junto a la máquinaSíMás difícil de seguir en vivo

La velocidad no es la razón para elegir. La guía de programación de Siemens dice que, en el S7-1200 y el S7-1500, todos sus lenguajes rinden igual para el mismo tipo de acceso a datos.

La mayoría de los ingenieros usan los dos, muchas veces en el mismo proyecto. Si estás empezando, vale la pena aprender lenguaje ladder junto con ST para poder leer el que te toque.

Un ingeniero en un puesto de trabajo con código en una pantalla y una vista general del proceso en la otra.
El texto va bien para cálculos, datos y decisiones con muchas ramas

Lo básico: asignaciones, tipos y comentarios

Una línea de texto estructurado normalmente fija un valor a partir de otros. El símbolo := significa "pasa a valer", y cada instrucción termina con punto y coma.

PumpOn := Start AND NOT Stop;   // un comentario llega hasta el final de la línea
Level := RawLevel * 0.1;        (* esto también es un comentario *)

Cada variable tiene un tipo. Los que más vas a usar son:

  • BOOL para TRUE o FALSE, como un pulsador o la orden de un motor
  • INT y DINT para números enteros, como la cantidad de botellas
  • REAL para números con decimales, como un nivel o una temperatura
  • TIME para duraciones en Siemens, como T#5s. En Rockwell, los valores de preselección son milisegundos enteros

Una variable conserva su valor hasta que otra línea lo cambia. La excepción son las variables temporales de Siemens, que solo duran la ejecución actual del bloque. Todo lo que necesites en el siguiente escaneo va en una variable estática.

Y recuerda que este código se ejecuta dentro del ciclo de escaneo del PLC. En términos generales, el controlador lee sus entradas, ejecuta tu código de arriba abajo y luego escribe sus salidas, una y otra vez, muchas veces por segundo. Tu código nunca espera. Se ejecuta, termina y vuelve a empezar.

Ejemplos de texto estructurado PLC en SCL y Studio 5000

Aquí tienes cinco ejemplos resueltos, con nombres de variables inventados. En el código de Siemens las variables son locales al bloque, por eso llevan un #.

Ejemplo 1: marcha y paro con autorretención

La lógica simple de encendido y apagado muchas veces no necesita un IF. Esta sola línea es un circuito completo de marcha y paro, la misma autorretención que dibujarías en ladder.

SCL de Siemens:

#PumpOn := (#Start OR #PumpOn) AND NOT #Stop AND #Permit;

Rockwell:

PumpOn := (Start OR PumpOn) AND NOT Stop AND Permit;

El propio valor de la bomba en el escaneo anterior la mantiene encendida después de soltar Start. Stop y Permit están fuera del paréntesis, así que cualquiera de los dos la puede apagar. Pruébalo en la misión de autorretención.

Aquí, Stop es TRUE mientras está pulsado. Una entrada real puede leerse al revés según su cableado, así que compruébalo. Y un paro en el código no es un paro de emergencia: las funciones de seguridad reales necesitan equipos con certificación de seguridad y una persona competente.

Ejemplo 2: IF, ELSIF y ELSE en un tanque

IF es la instrucción que más vas a escribir. Aquí hay un tanque que se llena cuando está bajo y se detiene cuando está alto.

SCL de Siemens:

IF #Level >= 90.0 THEN
    #FillValve := FALSE;
    #HighAlarm := TRUE;
ELSIF #Level <= 20.0 THEN
    #FillValve := TRUE;
    #HighAlarm := FALSE;
ELSE
    #HighAlarm := FALSE;
END_IF;

Rockwell:

IF Level >= 90.0 THEN
    FillValve := 0;
    HighAlarm := 1;
ELSIF Level <= 20.0 THEN
    FillValve := 1;
    HighAlarm := 0;
ELSE
    HighAlarm := 0;
END_IF;

Fíjate en lo que pasa entre 20 y 90. El código no toca FillValve, así que conserva su valor del escaneo anterior. Si el tanque se estaba llenando, sigue. Si estaba lleno, la válvula sigue cerrada. Ese margen se llama histéresis, y evita que la válvula se abra y se cierre sin parar alrededor de un mismo nivel. La misión de ciclos cortos enseña la misma idea, pero en diagrama de bloques de funciones en vez de texto.

Ejemplo 3: un temporizador de retardo a la conexión

Los temporizadores son donde Siemens y Rockwell más se diferencian, y donde más tropiezan los principiantes.

En SCL de Siemens, declaras una instancia de temporizador, normalmente en los datos estáticos del bloque, y la llamas con sus entradas. Siemens recomienda sus temporizadores IEC en vez de los antiguos numerados.

#FillDelay(IN := #Start,
           PT := T#5s);
#PumpOn := #FillDelay.Q;

En el texto estructurado de Rockwell, el temporizador de retardo a la conexión es una instrucción llamada TONR, que trabaja sobre una variable de tipo FBD_TIMER. Fijas sus entradas, la llamas y luego lees sus salidas. Su preselección está en milisegundos.

FillDelay.PRE := 5000;
FillDelay.TimerEnable := Start;
TONR(FillDelay);
PumpOn := FillDelay.DN;

Ahora la trampa. Un temporizador solo vuelve a cero cuando su llamada se ejecuta y ve que su entrada pasa a FALSE (el de Rockwell también tiene una entrada Reset). Si pones la llamada dentro de un IF que deja de ejecutarse cuando la entrada cae, el temporizador nunca ve esa caída. La próxima vez que pulses Start no contará desde cero. La solución es simple: llama a tus temporizadores en cada escaneo, fuera de cualquier IF, y pasa la condición a la entrada del temporizador. Practícalo en la misión de retardo a la conexión.

Una trampa más: TONR significa cosas distintas para cada fabricante. El TONR de Rockwell no es remanente, y su temporizador remanente es RTOR. El TONR de Siemens sí es el remanente: va sumando tiempo hasta que su entrada R lo restablece.

Ejemplo 4: una secuencia por tandas con CASE

Muchos procesos pasan por etapas: llenar, calentar, vaciar y esperar la siguiente tanda. CASE lo resuelve de forma ordenada. Guardas un número para el estado actual, y solo se ejecuta el código de ese número.

SCL de Siemens:

IF #Stop THEN
    #State := 0;
END_IF;

CASE #State OF
    0:  // Reposo
        IF #Start AND NOT #Stop THEN
            #State := 10;
        END_IF;

    10: // Llenado
        IF #TankFull THEN
            #State := 20;
        END_IF;

    20: // Calentamiento
        IF #Temperature >= 80.0 THEN
            #State := 30;
        END_IF;

    30: // Vaciado
        IF #TankEmpty THEN
            #State := 0;
        END_IF;

    ELSE // Un número desconocido vuelve a reposo
        #State := 0;
END_CASE;

#FillValve := #State = 10;
#Heater := #State = 20;
#DrainValve := #State = 30;

Rockwell:

IF Stop THEN
    State := 0;
END_IF;

CASE State OF
    0:  // Reposo
        IF Start AND NOT Stop THEN
            State := 10;
        END_IF;

    10: // Llenado
        IF TankFull THEN
            State := 20;
        END_IF;

    20: // Calentamiento
        IF Temperature >= 80.0 THEN
            State := 30;
        END_IF;

    30: // Vaciado
        IF TankEmpty THEN
            State := 0;
        END_IF;

    ELSE // Un número desconocido vuelve a reposo
        State := 0;
END_CASE;

FillValve := State = 10;
Heater := State = 20;
DrainValve := State = 30;

Numerar de diez en diez deja espacio para meter un estado nuevo más adelante. Cada salida se escribe una sola vez, después de END_CASE, así que no hay dos líneas peleando por ella. Esto se llama máquina de estados, y la misión de máquina de estados por fases te pide escribir una con marcha, espera y recuperación.

Ejemplo 5: un bucle FOR y un arreglo

Un arreglo es una lista numerada de valores del mismo tipo, y un bucle FOR la recorre. Aquí hay un promedio de cuatro lecturas. Siemens declara el arreglo como ARRAY[0..3] OF REAL, y Rockwell como REAL[4], numerado del 0 al 3.

SCL de Siemens:

#Total := 0.0;
FOR #Index := 0 TO 3 DO
    #Total := #Total + #Reading[#Index];
END_FOR;
#Average := #Total / 4.0;

Rockwell:

Total := 0.0;
FOR Index := 0 TO 3 DO
    Total := Total + Reading[Index];
END_FOR;
Average := Total / 4.0;

Mantén los bucles cortos y con un final fijo, porque todo el bucle se ejecuta dentro de un solo escaneo. Rockwell advierte que un bucle que dura más que el watchdog de la tarea provoca una falla mayor. Los controladores de Siemens también tienen un tiempo de vigilancia del ciclo, y pasarlo puede ponerlos en STOP. La misión de arreglos te pide sumar cuatro valores medidos, y el glosario explica los arreglos y los bucles FOR.

Siemens y Rockwell, lado a lado

SCL de SiemensTexto estructurado de Rockwell
Variables locales en el editorCon un # delante, como #StartNombres simples, como Start
Variables globalesEntre comillas, como "Start"Variables de controlador o de programa, nombres simples
Temporizador de retardo a la conexiónInstancia de temporizador IEC, llamada con IN y PTTONR sobre una variable FBD_TIMER, con PRE y TimerEnable
Preselección del temporizadorUn valor de tiempo, como T#5sMilisegundos enteros, como 5000
Salida del temporizador.Q y tiempo transcurrido .ET.DN y tiempo acumulado .ACC
Temporizador remanenteTONRRTOR

Los IF, los CASE y los bucles FOR se leen casi igual en los dos. Si tienes código para uno y lo necesitas en el otro, el conversor de código de PLC Gym lo intenta y te muestra qué cambió. Que pase ahí significa que los dos programas coincidieron en las pruebas del simulador, no es una garantía, así que igual tendrías que probar el resultado en el software real.

Errores de principiante

  1. Pensar que el código espera. Nunca lo hace. Usa temporizadores y estados, no bucles que esperan a que algo pase.
  2. Escribir la misma salida en dos lugares. Gana la última línea que la escribe en el escaneo, y eso puede hacer que la línea anterior parezca rota.
  3. Esconder temporizadores dentro de un IF. Como viste arriba, el temporizador deja de restablecerse bien.
  4. Confundir = con :=. En ST, = compara dos valores y := asigna uno.
  5. Olvidarte del siguiente escaneo. Si nada cambia, ¿qué hace esta línea la próxima vez?

Dónde practicar texto estructurado

Leer sobre texto estructurado solo te lleva hasta cierto punto. Necesitas escribirlo, ejecutarlo y ver qué hace.

PLC Gym funciona en tu navegador sin instalar nada. Escribes SCL de Siemens, texto estructurado de Rockwell o texto estructurado de TwinCAT y lo ejecutas sobre un proceso en 3D que funciona, con pruebas automáticas que revisan tu código. Una prueba fallida se puede volver a ver escaneo por escaneo. El glosario y las primeras misiones son gratis con una cuenta gratis, y el resto es de Pro.

No es un controlador real, no se conecta a entradas y salidas reales y no sustituye el software de los fabricantes. Si vas a trabajar con equipos de Siemens o Rockwell, al final vas a querer el TIA Portal o el Studio 5000 reales.

Si te enfocas en Siemens, la formación en PLC Siemens de PLC Gym te guía por SCL, ladder, FBD y GRAPH. Para Rockwell está la formación en PLC Allen-Bradley. Y para el panorama general, empieza por cómo funciona el código de un PLC.

Fuentes

¿Tienes preguntas sobre esto?Pregunta en el Vestuario

Pruébalo en una máquina

Gratis · Funciona en tu navegador

Pruébalo en una máquina que funciona

Escribe gratis código real de Siemens o Rockwell en el simulador de PLC online y mira cómo una bomba, un tanque o una línea de llenado en 3D hacen exactamente lo que les dijiste. No hay nada que instalar.