Una máquina de estados en SCL, llamada a llamada

Una cinta con tres estados: parada, marcha y fallo. Cambia las entradas y observa qué hace el programa antes de llevar el ejemplo a TIA Portal.

Práctica gratuita de Programación Siemens. Sin registro. Código y lista de pruebas descargables.

Ensaya la secuencia

Marca las entradas y ejecuta una llamada. Las entradas se mantienen hasta que las desmarques.

Llamada 0
Entradas para la próxima llamada
0Parada
10Marcha
20Fallo de proceso

Estado tras la llamada 0

0 · Parada

Motor
FALSE · Detenido
EstadoValido
TRUE
EstadoHMI
0

Las salidas cambian al ejecutar, no al marcar una entrada.

Últimas llamadas (0)

Todavía no has ejecutado ninguna llamada.

Simulador didáctico web. Reproduce las decisiones de este ejemplo; no emula una CPU, tiempos de ciclo, E/S ni funciones de seguridad.

Tu primer ensayo, en cuatro pasos

  1. Marca Arranque y ejecuta una llamada. Estado pasa de 0 a 10 y Motor se activa. Desmarca Arranque y vuelve a ejecutar: la marcha se mantiene.
  2. Marca FalloProceso y ejecuta. Estado pasa a 20 y Motor se desactiva. Aunque marques Rearme, el fallo activo impide salir de ese estado.
  3. Retira FalloProceso y Rearme. Ejecuta: sigue en 20. Ahora marca Rearme y ejecuta para volver a parada.
  4. Pulsa Probar estado 99. La práctica prepara un valor no previsto y retira las entradas. Ejecuta para recorrer ELSE; después marca Rearme y ejecuta para recuperar 0.

INT, constantes y CASE: qué aporta cada uno

Estado es una variable INT que conserva su valor entre llamadas al FB. Las constantes locales EST_PARADA = 0, EST_MARCHA = 10 y EST_FALLO = 20 permiten leer el programa sin memorizar números.

CASE selecciona una rama según el estado al llegar a esa instrucción. Cambiar Estado dentro de una rama no ejecuta inmediatamente otra rama del mismo CASE. Por eso un rearme lleva primero a parada.

Esto no declara un ENUM. El tipo INT admite también 99. Las constantes nombran valores; no restringen el tipo. EstadoValido comprueba en el programa si el valor es 0, 10 o 20. Un fallo de proceso (20) es un estado válido, aunque el motor esté detenido.

Las salidas se calculan después del CASE: muestran el estado resultante de esa misma llamada. El ejemplo supone una llamada al FB por ciclo y entradas estables durante esa llamada.

Comprueba las transiciones

Entradas no mencionadas = FALSE. Resultado tras una llamada.
Estado previoEntradas activasEstado siguienteMotorQué observar
0 · ParadaArranque10 · MarchaTRUELa orden de arranque inicia la marcha.
0 · ParadaArranque + Parada0 · ParadaFALSELa parada impide arrancar.
10 · MarchaNinguna10 · MarchaTRUEEl estado se conserva entre llamadas.
10 · MarchaParada0 · ParadaFALSELa salida se calcula después de la transición.
CualquieraFalloProceso (con cualquier otra orden)20 · FalloFALSEEl fallo tiene prioridad, incluso sobre Rearme.
20 · FalloNinguna; fallo ya retirado20 · FalloFALSEDesaparecer la causa no rearma el estado.
20 · FalloRearme; sin fallo ni arranque0 · ParadaFALSEEl rearme recupera parada.
99 · No previstoNinguna99 · No previstoFALSEELSE conserva el valor; EstadoValido = FALSE.
99 · No previstoRearme; sin fallo0 · ParadaFALSESe recupera un estado conocido.

Prueba el arranque mantenido. Desde fallo, retira FalloProceso y mantén Arranque + Rearme. La primera llamada termina en 0; la siguiente termina en 10. Si tu aplicación exige una nueva pulsación después de rearmar, necesitas una condición de nueva orden, por ejemplo detección de flanco correctamente gestionada. Esta práctica usa señales por nivel.

Llévalo a un FB de TIA Portal

Crea un FB en SCL y declara esta interfaz antes de pegar el cuerpo descargado. Es un fragmento didáctico original: no es un proyecto TIA ni una fuente completa de bloque.

SecciónVariablesTipo / valor inicial
InputArranque, Parada, FalloProceso, RearmeBOOL / FALSE
OutputMotor, EstadoValidoBOOL
OutputEstadoHMIINT
StaticEstadoINT / 0
ConstantEST_PARADA, EST_MARCHA, EST_FALLOINT / 0, 10, 20 respectivamente

En SCL, las constantes locales se usan con #. Por ejemplo, #Estado := #EST_MARCHA; asigna 10 a Estado sin escribir ese número en cada transición.

Llama al FB desde OB1 con su DB de instancia, conecta variables de prueba y compila para tu CPU y versión de TIA Portal. Después reproduce la tabla en PLCSIM. La compilación del fragmento en TIA Portal queda pendiente de realizar en tu entorno. El simulador web comprueba su modelo de decisiones, no la compilación SCL.

FalloProceso representa un diagnóstico de control estándar. Esta práctica no implementa una parada de emergencia ni una función de seguridad.

Documentación para contrastarlo

La documentación de STEP 7 V21 describe las constantes locales en la interfaz de bloque y CASE para S7-1200, S7-1500 y S7-1200 G2. Son referencias de lenguaje; no certifican este ejemplo.

Sigue practicando con TIA Portal

Para situar el ejercicio, consulta qué es TIA Portal y cómo empezar. Si buscas formación guiada desde la configuración hasta la programación, revisa el temario del curso completo de TIA Portal con CPU S7-1200.