Hola a todos,
este es el primero de 5 videos
de cómo conectar tu fábrica con la nube
Iremos paso a paso en cómo conectar
esta instalación
Usando un dispositivo EDGE al nube de Azure
Utilizaremos Machine Learning (aprendizaje automático) para detectar anomalías antes de que se conviertan en problemas,
y utilizaremos las siguientes tecnologías:
utilizaremos TIA Portal (Siemens) y algo de lógica
para controlar la salidas digitales del PLC,
y tratar la señal analógica proveniente de un sensor de vibración.
Utilizaremos Node-RED
Instalado en una Rapsberry Pi usando la librería de Python Snap7
para controlar el PLC desde el EDGE
Utilizaremos una interfaz Human-Machine (HMI)
dentro de Node-RED
después usaremos
KepServerEX para conectar
el PLC Siemens S7 1200
con Azure IoT Hub por MQTT
también utilizaremos...
la herramientas Azure Stream Analytics
conectada a Azure IoT HUB
con una función de Machine Learning (aprendizaje automático)
embebida dentro de una consulta a una base de datos Transact-SQL
y
por último
utilizaremos
Power BI para crear un panel de control y ver el resultado en tiempo real
Incluyendo un Script de Python
dentro de un visual de Python en Power BI
En la parte de Hardware, contamos con este pequeño laboratorio
que va a simular nuestra propia
pequeña fábrica, y que consiste en este pequeño
motor trifásico
que mueve este disco
a velocidades variables
mediremos vibración en este rodamiento
Con un sensor de vibración piezoeléctrico TOKIN
 
Este es nuestro dispositivo EDGE
una Raspberry Pi 4 conectada por ethernet
a este PLC Siemens S7 1200
el cual controla este
variador de frecuencia
Así que vamos a empezar con la Parte 1: Node -RED
... y PLC Siemens S7 1200
desde el EDGE
En este caso
Utilizaremos Node-RED no para extraer datos
del PLC, sino para mandar instrucciones
y escribir valores en algunas entradas del PLC
vamos a utilizar las 3 entradas digitales del variador
 
porque nuestro PLC no tiene salidas analógicas
Podemos ver el detalle de la conexión física
3 cables desde las 3 salidas digitales del PLC
van a las 3 entradas digitales del variador
y
aprovecharemos una funcionalidad interesante del variador Siemens
llamada Binary-coded  selection
que permite a los usuarios fijar hasta
8 frecuencias fijas usando
las 3 entradas digitales
Antes de empezar con Node-RED necesitamos
necesitamos algunas instrucciones básicas (Ladder Logic) en el PLC
empezaremos abriendo el
TIA portal.  
Aprender los básicos
de TIA portal y la programación del PLC
esta fuera del objetivo de este video, pero como podemos ver
la lógica presentada es muy básica.
Ya hemos añadido nuestro PLC y escrito nuestro bloque de programa básico,
Bien, ¿qué tenemos aquí?
Primero:
Tenemos las 3 entradas digitales
del PLC, estas serán sobre las que
escribiremos, las que controlaremos
desde Node-RED
y 3 salidas digitales,
que están físicamente conectadas al variador.
Como podéis ver, utilizamos variables del tipo
M0.0,
M0.1, M0.2, en lugar de utilizar
entradas regulares del tipo I0.0
utilizamos direcciones de memoria como entradas
esto es necesario para poder controlar
el PLC desde Node-RED
Veremos más tarde como construir este HMI
veamos...
Solo quiero enseñaros como funciona
la lógica en conjunto.
 
el resto de
networks
son para el procesado de señal del sensor, lo veremos en el siguiente video.
Así que empecemos con Node-RED.
Aunque...
Node-RED conecta diferentes hardwares IoT,
para poder leer y escribir desde el
Siemens S7 1200, necesitamos utilizar
Snap7
que es una
suite de comunicaciones Ethernet
para comunicar de forma nativa
con los PLC S7 de SIemens.
Puedes descargarla e instalarla
siguiendo este buen tutorial, dejo el link
en la descripción del video
Entonces: ¿Qué es Node-RED?
esta es su página web,
Node-RED es una herramienta de programación para conectar
dispositivos de hardware, APIs,
y servicios online de forma nueva e interesante.
ok, primero
debemos instalar
Node-RED en Raspberry Pi,
aquí están las instrucciones específicas
son bastante sencillas,
Nada más que comentar,
solo resaltar que si quieres
usar Node-RED de forma contínua,
probablemente querrás que arranque
automático en cada reinicio,
aquí están los comandos.
Puedes abrir el editor
para esto necesitamos conocer
la IP de nuestra Raspberry PI,
copiar la URL
cambiar 
por nuestra dirección IP
y debe funcionar.
ok
Esta es la pinta que tiene. 
Esto es un FLOW en blanco,
Podemos ver distintos nodos,
para inyectar datos,
funciones, APIs,
protocolos de comunicación como MQTT,
Lo bueno es que existen miles de nodos
para usar en Node-RED disponibles para descargar (gratuíto)
En nuestro caso vamos a utilizar
un nodo para comunicar con el PLC Siemens
así que lo instalamos.
Instalar los nodos es muy sencillo,
vamos a "manage pallete"
 
 
buscamos el nodo específico
en nuestro caso este es el que vamos a instalar
le damos a instalar
instalar
Pauso el video mientras se instala...
 
está instalado
ahora tenemos 3 nuevos nodos,
debajo de PLC
este, para leer datos
del PLC
este, que escribe en direcciones de memoria,
es el que vamos a utilizar
este es para control avanzado del PLC
no vamos a utilizarlo.
Necesitamos este,
lo arrastramos y soltamos aquí,
Qué tenemos aquí
Nos pide un nuevo "endpoint"
seleccionamos "new endpoint"
después tenemos que meter
la dirección IP
de nuestro PLC
en nuestro caso
es esta
dejamos "port" como está
usaremos "slot 1"
para el Siemens S7 1200
y para S7 1500 es "slot 1"
para S7 300 es "slot 2"
y para la serie S7 400
"slot 3".
En nuestro caso "slot 1"
Vamos a darle un nombre, por ejemplo...
plc_s7_1200
 
 
y clicamos en "variables"
necesitamos añadir las variables que vamos a utilizar
en el PLC
volvemos al TIA portal
podemos ver
M0.0, M0.1,
M0.2, son las que vamos a
escribir
y ahora solo tenemos que escribirlas tal cual
M0.0
name
"input 1" por ejemplo
añadiré dos más
 
para uso general,
en la página del nodo S7 de Node-RED
podemos ver
las direcciones de variables
igual si estás utilizando
direcciones de Memoria, DBs o las que sea,
tienes los nombres
en Node-RED, la primera columna,
la segunda columna son las direcciones equivalentes en TIA portal (Step7)
clicamos en "Add"
ya está listo.
cuando hacemos click aparece el nodo,
Necesitamos seleccionar la variable, cada nodo va a ser
una variable distinta
el primero va a ser "input 1"
Lo llamaremos "input 1"
 
por simplicidad
y ahora
ya que tenemos 3
3 entradas, copiaremos  3 nodos
y solo cambiaremos
el "input" para cada uno de ellos
 
input 2
este va a ser...
input 3
ahora crearé una lógica simple para que veas cómo funciona
usaremos un "inyecting node"
sirve para inyectar datos manualmente
seleccionaremos el tipo "boolean"
ya que nuestras entradas son digitales
y  pueden ser "true" y "false"
creamos otro
para "false"
lo llamamos "false"
Bien, ¿Cómo funciona?
Conecto el nodo a la primera entrada ("input 1")
y conecto el "false" también a la primera entrada ("input 1")
Voy a usar un nodo "debug" para que podamos leer
qué valores estamos pasando al nodo del PLC
Podemos verlo en el tab "debug", pulsamos en "deploy"
estamos "online", por lo que podemos asegurar que estamos conectados al PLC
Para ver mejor el sistema en funcionamiento,
voy a mostrar, en lugar de mi cara (xD), la imagen del PLC
para ver los cambios en tiempo real en el PLC.
ahora, si pulsamos "true"
deberíamos ver  el LED en el PLC
correspondiente a la salida 1
y en el variador podemos ver la frecuencia fija de 7 Hz
si pulsamos "false"
vuelve a 0
"true"
"false"
Para controlar la entrada 2
podríamos copiar, pegar...
a la entrada 3
si todas están en "false", el sistema está parado
si "input 1" es "true"
corresponde a la primera frecuencia fija (7 Hz)
Si ponemos a "true" la primera y la tercera,
eso son 35 Hz (frecuencia fija nº 5)
y así sucesivamente
Pero claro, esto no es muy óptimo
para cambiar la frecuencia de una manera más conveniente,
utilizaremos un nodo "selector",  del conjunto de nodos "Dashboard".
Esto será nuestro propio HMI dentro de Node-RED
Buscamos (en Manage Pallette) "dasboard"
Este es, vemos que fue actualizado hace sólo 3 semanas.
Lo instalamos
ok, ya está instalado,
Podemos ver que hay muchos nuevos nodos ahora,
vamos a utilizar el nodo "silder",  y el nodo "gauge"
Seleccionamos "slider"
nos pide "new Interface Group"
hacemos click
elegimos un nombre
por ejemplo
"motor Frequency"
Ahora debemos añadir también el "UI tab"
lo dejaremos así
pulsamos "add"
otra vez "add"
El "range" va a ser de 0 a 49, que es nuestro rango preseleccionado en el variador
"step" va a ser 7 (cambiará de 7 en 7)
y seleccionaremos "only on release"
para poder ver el Step seleccionado, lo veremos después.
no vamos a mandar ningún mensaje
lo dejaremos así por ahora
ahora el "gauge"
seleccionamos el mismo "group"
de 0 a 49, igual que en el "slider".
Cambiaremos el color del "gradient"
por ejemplo este color, y rojo.
y le damos a "done"
vamos a conectar
el "silder" con el medidor de frecuencia ("gauge")
y le damos a "deploy",   veamos qué pasa
si vamos a "dashboard"
y hacemos click aquí,  veremos...
Nuestro Human-Machine Interface (HMI)
funcionando
Ok, vamos a quitar estos nodos (manual inputs, eran de demostración)
Y veamos que nos está devolviendo este "slider"
voy a utilizar un nodo "debug", lo conectamos,
le damos "deploy"
y veremos qué pasa si selecciono :
14, 21, 35
aquí vemos el 14...
así que nos está devolviendo el msg.payload, el número de frecuencia que hemos seleccionado
esto es lo que nos devuelve el slider.
Ok, entonces, ¿Cómo convertimos esto en "inputs",
que toman el valor "true" y "false, para cada una de las entradas del PLC?
Para esto, vamos a utilizar una función de JavaScript
aquí.
Este nodo, te permite escribir una función de JavaScript,
y devolverá lo que queramos que devuelva.
Voy a seleccionar 3 salidas,
para conectar cada una a las "inputs" del PLC
después voy a escribir la lógica aquí.
pego el código,
esta es la lógica básica, muy simple.
Tenemos declaradas 3 variables:
input1, input2, input3  que corresponden a las 3 entradas del PLC.
les asignamos 0 de inicio.
Esto es lo que leemos del nodo "slider"
 
estamos leyendo:
msg.payload
en caso de que msg.payload sea 0,
vamos a escribir "false" en las 3 entradas,
si el msg.payload es 7,
escribiremos "true" en la primera, y "false" en la segunda y tercera
según la instrucción "binary-code selection" de Siemens
la función simplemente nos devuelve las 3 "inputs"...
y las envía a los nodos del PLC
lo conectamos,
lo llamaremos "JavaScript Function"
le damos a "deploy"
podemos ver qué pasa si vamos al ... (HMI)
veamos, 7, 14,
pues ya está!
este es nuestro Human-Machine interface (HMI)
Hecho con Node-RED
Aunque no vayamos a utilizar esta vez Node-RED para mandar datos a la nube,
Usaremos KepServerEX, y lo veremos en el próximo vídeo,
qué fácil sería mandar datos del PLC desde Node-RED a la nube
crearemos un nuevo "Flow"
Utilizaremos el nodo "reads data from PLC" (leer datos del PLC)
seleccionamos el mismo "endpoint"
y añadimos una nueva variable,
aquí teníamos los datos de vibración,
esta es la dirección: DB1.DBD0
volvemos a Node-RED
escribimos la dirección equivalente en Node-RED,
que es esta,
escribimos: "vibration (m/s2)"
se trata de una medida de aceleración, le damos a "update"
seleccionamos la nueva variable, pulsamos "done"
Podemos usar un nodo "debug"
para ver qué está saliendo, le damos "deploy"
y empezamos a ver los valores de vibración.
podríamos ahora usar un nodo de "MQTT" para conectar a un broker MQTT,
conectaríamos al Broker de esta manera,
seleccionaríamos el servidor, configuraríamos,
tan simple como eso.
No vamos a hacerlo
Como hemos comentado, vamos a usar KepServerEX, pero esto será en el próximo vídeo.
Espero que os haya gustado y nos vemos en el siguiente vídeo, 
adios!
