Laboratorio Virtual de Ciberseguridad Industrial – Parte 3: Simulación del Proceso con Factory IO

En el anterior post se explicó cómo instalar OpenPLC y ScadaBR. Ahora nos centraremos en la simulación del proceso físico con FactoryIO.

Antes de comenzar, hay que recordar que el fin último del laboratorio es tener disponible un entorno de pruebas donde poder ensayar distintos vectores y técnicas de ataque.

Una simulación completa de un proceso industrial con todas las seguridades y mecanismos que intervienen para garantizar su correcto funcionamiento y niveles de protección adecuados para los operarios, requeriría de una inversión de tiempo injustificada para su propósito.

Teniendo esto en cuenta, no se ha dedicado más tiempo del necesario para tener un proceso funcional básico con un nivel de compromiso adecuado entre realismo y funcionalidad.

Dicho lo cual, empezamos:

 

Descarga e Instalación de Factory IO

Para llevar a cabo esta simulación se ha utilizado FactoryIO. Puedes descargar el software desde su web.

Existen varias versiones que incluyen diferentes módulos (OPC-UA, Modbus TCP, S7, etc.), pero dado que queremos controlarlo desde OpenPLC será necesario utilizar una versión compatible con MocbusTCP. Cabe destacar que la versión de prueba de 30 días contiene todos los módulos y es una buena opción para principiantes.

Factory IO va a cumplir una doble función, ya que va a tener una doble función:

  1. Escena: simula el proceso físico con todos los sensores y actuadores involucrados
  2. Driver: actúa como RTU (Remote Terminal Unit) comunicándose por un lado con OpenPLC mediante Modbus TCP, y  controlando todos los sensores los sensores y actuadores de la escena.
Escena y driver de Factory IO simulando el proceso físico y la RTU respectivamente

Simulación del Proceso Físico – Escena

Antes de empezar a construir la simulación, conviene tener una definición a alto nivel de lo que se pretende conseguir, en este caso el objetivo es el siguiente:

  • Una cinta transportadora mueve cajas hasta un punto de recogida marcado por un sensor retroreflectivo.
  • Cuando se detecta una caja en ese punto, la cinta transportadora se detiene y un robot recoge la caja, depositándola luego en el suelo.
  • El acceso a la línea de producción está controlado por una puerta de seguridad que efectúa una parada de emergencia si se abre mientras el robot se encuentra en funcionamiento.

No me voy a entretener demasiado en cómo utilizar FactoryIO, ya que tiene una documentación bastante detallada en su web.
Una vez instalado, se crea una nueva escena y se sitúan todos los elementos que intervendrán en nuestro proceso:

  • Emitter: elemento que creará las cajas al inicio de la línea
  • Start Button: servirá para encender y apagar el proceso. En una situación real se contaría también con un botón de paro de emergencia, de parada normal, de reset, etc., pero por motivos de simplicidad se va a utilizar únicamente el de encendido.
  • Safety Door: cuenta con un sensor de apretura que detecta si está abierta o cerrada. Limita el acceso del personal a la zona de peligro que presenta el movimiento del robot. En una situación real, toda la zona estaría protegida mediante una valla, pero para facilitar la visualización en este caso solo vamos a utilizar la puerta la puerta.
  • Conveyor Belt: mueve las cajas desde el emitter hasta el punto de recogida
  • Light Emitter: emite continuamente un haz de luz
  • Retroreflective Sensor: detecta la luz emitida por el emisor para determinar cuándo hay una caja en el punto de recogida.
  • Pick and Place Robot: recoge y mueve las cajas. Probablemente el elemento más complejo del sistema ya que cuenta con varios sensores y actuadores, aunque para este ejercicio sólo se utilizan los siguientes:
    • Grab: enciende el succionador del cabezal que coge las cajas
    • Detected: detecta si el cabezal ha hecho contacto con alguna caja
    • 1Z: extiende /retrae el brazo en el eje z
    • Moving Z: detecta si el robot se está moviendo en el eje Z
    • Rotating: detecta si el brazo (no el cabezal) está girando
    • Rotate CW: rota el brazo (no el cabezal) en el sentido de las agujas del reloj
    • Rotate CCW: rota el brazo (no el cabezal) en el sentido contrario a las agujas del reloj
  • Remover: elemento que eliminará las cajas al final de la línea
  • Adornos: estos elementos no tienen ninguna función más que mejorar un poco la apariencia de la simulación:
    • Pallet: sitio donde caen las cajas
    • Column + Electric Switchboard: cuadro donde situar el botón de encendido.

En este punto, deberíamos tener una serie de elementos inmóviles situados en la escena,  de la siguiente manera:

Colocación de elementos en la escena de FactoryIO

Simulación de la RTU – Driver

Con todos los elementos dispuestos en el entorno, vamos a configurar el driver de FactoryIO que se comunicará con OpenPLC, para ello, desde la escena:

  • Accedemos al menú de drivers presionando F4
  • Seleccionamos como driver Modbus TCP/IP Server
Configuración del driver como servidor Modbus TCP
  • Click en la esquina superior derecha (configuración)
    • Server:
    • I/O Config: por defecto
    • I/O Points: solo vamos a usar 6 entradas digitales y 5 salidas (ningún registro) así que configuramos los valores adecuadamente (6,5,0,0) y pulsamos retroceder
Configuración de los valores del servidor Modbus TCP en FactoryIO
Configuración de los valores del servidor Modbus TCP en FactoryIO
  • Arrastra cada una de las entradas y salidas de manera que todas aparezcan en el controlador
Asignación de los diferentes sensores y actuadores de la escena a las entradas y salidas del driver
Asignación de los diferentes sensores y actuadores de la escena a las entradas y salidas del driver
  • Sal y guarda los cambios

Enhorabuena!

Si has llegado hasta aquí, ya tienes disponible un proceso físico que se podrá controlar desde OpenPLC. Para saber cómo, continúa leyendo.