# Máquina de estados SCL: lista de comprobaciones

Práctica pública original de Programación Siemens.
https://programacionsiemens.com/recursos/maquinas-de-estados-scl

## Preparación

- [ ] Anotar versión de TIA Portal, modelo CPU y firmware usados.
- [ ] Crear un FB SCL con Input BOOL: Arranque, Parada, FalloProceso, Rearme.
- [ ] Declarar Output BOOL: Motor, EstadoValido; Output INT: EstadoHMI.
- [ ] Declarar Static INT: Estado, inicial 0. No declararlo como Temp.
- [ ] Declarar Constant INT: EST_PARADA=0, EST_MARCHA=10, EST_FALLO=20.
- [ ] Pegar el cuerpo descargado. No importarlo como fuente completa de FB.
- [ ] Llamar una vez por ciclo desde OB1 con su DB de instancia.
- [ ] Compilar para la CPU seleccionada y comprobar en PLCSIM.

La compilación y prueba en TIA Portal están pendientes de realizar por quien
utiliza este fragmento. El simulador de la web no emula el PLC ni compila SCL.

## Pruebas

Todas las entradas no mencionadas deben estar a FALSE.

- [ ] Inicial 0: Motor FALSE, EstadoValido TRUE, EstadoHMI 0.
- [ ] Arranque desde 0: Estado 10, Motor TRUE en esa llamada.
- [ ] Retirar Arranque: mantener 10 y Motor TRUE.
- [ ] Parada desde 10: Estado 0, Motor FALSE.
- [ ] Arranque + Parada desde 0: conservar 0, Motor FALSE.
- [ ] FalloProceso desde cualquier estado: Estado 20 y Motor FALSE.
- [ ] FalloProceso + Rearme + Arranque: permanecer 20.
- [ ] Retirar fallo sin Rearme: permanecer 20.
- [ ] Rearme desde 20 sin fallo ni arranque: Estado 0, Motor FALSE.
- [ ] Con todas las entradas FALSE, escribir 99 en Estado: al ejecutar,
      conservar 99, Motor FALSE, EstadoValido FALSE, EstadoHMI 99.
- [ ] Rearme desde 99 sin fallo: Estado 0, EstadoValido TRUE.
- [ ] Desde 20, retirar FalloProceso, mantener Arranque + Rearme:
      primera llamada a 0; siguiente llamada a 10. Si necesitas una nueva
      pulsación, diseña y prueba la detección de una nueva orden.

EstadoValido indica pertenencia a 0/10/20, no ausencia de fallo.
FalloProceso es un diagnóstico estándar, no una parada de emergencia.
Las constantes no limitan INT a esos tres valores; no se declara un ENUM.

## Referencias de lenguaje (Siemens STEP 7 V21)

- Constantes locales:
  https://docs.tia.siemens.cloud/r/en-us/v21/programming-basics/using-and-addressing-operands/constants/declaration-of-symbolic-names-for-constants
- CASE:
  https://docs.tia.siemens.cloud/r/en-us/v21/scl-s7-1200-s7-1500-s7-1200-g2/program-control-operations-s7-1200-s7-1500-s7-1200-g2/case-create-multiway-branch-s7-1200-s7-1500-s7-1200-g2
