Laboratorio Virtual de Ciberseguridad Industrial – Parte 4: Programación de la Lógica de Control

En el anterior post vimos cómo simular el proceso físico mediante FactoryIO, así que el último paso antes de poder comenzar a utilizar el laboratorio (al menos en su versión reducida sin SCADA), será programar la lógica de control que gobierne nuestra escena e integrar FactoryIO con OpenPLC mediante Modbus TCP.

 

Integración de OpenPLC con FactoryIO

Para integrar FactoryIO con OpenPLC, accedemos  al portal web de OpenPLC (si recordamos, en nuestro caso 192.168.88.201:8080) y una vez dentro accederemos a la pestaña “Slave devices” para configurar el Driver  de Factory IO como dispositivo esclavo, teniendo en cuenta las siguientes consideraciones:

  • Device type: debe ser generic modbus TCP device
  • SlaveID: puede ser cualquier número entero mayor que 0, pero debe ser el mismo que se haya configurado previamente en el driver de FactoryIo.
  • IP Address: la misma que se haya configurado previamente en el driver de FactoryIO (adaptador host-only de VirtualBox).
  • IP Port: 502 es el puerto por defecto de ModbusTCP, se aconseja mantenerlo por defecto aunque sería posible cambiarlo siempre que se ajuste adecuadamente en el driver de Factory IO
  • DiscreteInputs: empezando en 0, y  acabando en el número necesario de entradas (6 en nuestro caso)
  • Coils: empezando en 0, y  acabando en el número necesario de entradas (5 en nuestro caso)
  • Input registers: nuestro ejemplo no cuenta con registros (solo entradas y salidas), así que se podrá configurar como 0,0
  • Holding Registers – Read: nuestro ejemplo no cuenta con registros (solo entradas y salidas), así que se podrá configurar como 0,0
  • Holding Registers -Write: nuestro ejemplo no cuenta con registros (solo entradas y salidas), así que se podrá configurar como 0,0
Izquierda: driver configurado en FactoryIO - Derecha: configuración de dispositivo esclavo en OpenPLC
Izquierda: driver configurado en FactoryIO – Derecha: configuración de dispositivo esclavo en OpenPLC

Programación de la Lógica de Control

Para programar la lógica de control se va a hacer uso de OpenPLC Editor, que es un programa independiente de OpenPLC y se puede descargar e instalar en nuestro dispositivo Windows10 (host). Una vez descargado y creado un nuevo proyecto (puedes encontrar más información sobre cómo hacer esto aquí), definiremos todas las variables a utilizar por el programa, teniendo en cuenta las siguientes consideraciones:

  • Las variables declaradas en OpenPLC Editor deben estar en el mismo rango que las declaradas en el SlaveDevice configurado en el punto anterior
  • Utilizaremos una variable auxiliar “RUN” de manera interna durante el programa, que no será necesario asignarla a ninguna entrada o salida (%IX100.x , %QX100.x)
Superior: rango de variables del slave device en OpenPLC – Inferior: variables declaradas en OpenPLC Editor dentro del rango del dispositivo esclavo

Con las variables definidas, ya podemos empezar a desarrollar el programa de control utilizando para ello el lenguaje de escaleras (Ladder Logic) estándar en el sector, implementando las siguientes lógica:

  • Pulsar el botón “StartButton” enciende o apaga la línea
  • Abrir la puerta para todo el movimiento
  • La cinta se para cuando hay una caja esperando
  • Si hay una caja esperando, el robot desciende, enciende el succionador, asciende, gira, suelta la caja y vuelve a su posición de reposo

Cabe destacar que el programa que se verá a continuación no cumple con los estándares ni buenas prácticas del sector, pero es completamente funcional y nos perfectamente para su propósito, que es controlar la línea sin mayores complejidades.

Diagrama de escalera del proceso

Puesta en Marcha

Llegados a este punto se acerca el momento de la verdad, quedan ya solo un par de pasos más, para terminar

  • Exportar el proyecto en OpenPLC como un archivo .ST
  • Encender el router virtual pfSense
  • Encender la máquina virtual de OpenPLC
  • Acceder al portal de administración de OpenPLC
  • Dentro de la pestaña “Programs”, cargar el archivo .ST exportado. Si  todo ha ido bien obtendrás el siguiente mensaje:
Compilación exitosa
  • Enciende FactoryIO, carga la escena apropiada y ponla en modo ejecución
  • Desde el dashboard de OpenPLC, haz click en “StartPLC”.
  • En este punto deberías ser capaz de ver todos los estados de FactoryIO a través de la pestaña de “Monitoring” de OpenPLC
Conjunto de estados de los sensores y actuadores en FactoryIO, vistos desde OpenPLC
  • En FactoryIO, presiona el botón de start situado en el cuadro eléctrico y verás como tu línea cobra vida!
Proceso en FactoryIO controlado desde OpenPLC