Introducción
¿Te gustaría controlar un motor paso a paso con un Dashboard Node-RED desde un PLC basado en Raspberry Pi?
¡Esto es justo lo que vamos a hacer en este post! Gracias a este tutorial de Node-RED, aprenderás a ejecutar un script de Python desde Node-RED para poder controlar el motor paso a paso conectado a un PLC de Raspberry mediante un dashboard de Node-RED.
Últimos Posts sobre automatización industrial
Tablero Node-RED
Una vez aquí, ya te has asegurado de que el driver Microstep y el motor paso a paso están correctamente conectados al PLC Raspberry.
Lo que vamos a hacer ahora es crear un cuadro de mando Node-RED para hacer funcionar mejor el motor paso a paso.
Así que esto es lo que vamos a hacer ahora:
Vamos a añadir un botón de Dashboard para empezar a ejecutar el script de python.
Luego, tomaremos el PID del proceso, ya que cuando se ejecuta este script de python, hay un "while True" en el código, por lo que siempre se está ejecutando.
Finalmente, detendremos la ejecución añadiendo un botón en el tablero que matará el proceso del script python en ejecución.
Pasos para programar con el script de Python y Node-RED
1. Primero de todo, asegurate de que Node-RED está instalado en tu controlador PLC Raspberry Pi >
2. Comprueba que los nodos del tablero Node-RED están instalados >
3. Asegúrate de que tu script funciona cuando lo ejecutas en tu PLC Raspberry y obtén la ruta del archivo.
4. Ahora, ve a Node-RED y añade un botón de tablero. Edítalo y sólo cambia la etiqueta para mostrarlo en el Dashboard, en nuestro caso: ON.
5. Alimenta un nodo exec y escribe el comando, en nuestro caso está en la ruta /home/pi, y se llama stepper_motor_rpi.py, así:
python /home/pi/stepper_motor_rpi.py

6. Añadir un nodo de estado, y obtener el estado sólo del nodo seleccionado: exec.
7. Desde el nodo de estado, podemos obtener el pid en el campo msg.status.text como: pid:XXXX. Lo que vamos a hacer ahora es hacer una variable de flujo sólo con el valor numérico del pid para poder eliminarlo.
Por lo tanto, añade un nodo de cambio, y establece flow.payload a $substringAfter(status.text, ":"). Al hacer esto, sólo tomaremos el valor después de ':', por lo que el número de PID.
8. Por último, añade otro botón del panel de control, configura que cuando se haga clic, envía: payload: flow.payload
9. La señal SIGKILL se envía a un proceso para hacer que termine inmediatamente, y su sintaxis es:
kill SIGKILL pid
Por lo tanto, cablea el botón del tablero Node-RED a un nodo exec con el comando
kill -9
y junta el msg.payload.

Tablero Node-RED
Por último, haz clic en el icono del panel de control, haz clic en el diseño y mueve los botones como quieras.
Tip: Si ves que no puedes cambiar el tamaño del botón en el editor de diseño, vuelve al flujo, edita el nodo del botón y establece cualquier tamaño, como 4x3. Vuelve al diseño y podrás cambiar el tamaño del botón y mostrarlo como prefieras.

Si no has podido hacer funcionar la aplicación, copia el flows.json que aparece a continuación, ve a Node-RED > Menú > Importar > Pégalo allí > Haz clic en Importar.
[{"id":"d757dbb1.993928","type":"tab","label":"Flow 1","disabled":false,"info":""},{"id":"a2c7ba39.575c38","type":"exec","z":"d757dbb1.993928","command":"python /home/pi/stepper_motor_rpi.py","addpay":"","append":"","useSpawn":"false","timer":"","oldrc":false,"name":"","x":390,"y":80,"wires":[[],[],[]]},{"id":"bc77eb35.bb6118","type":"status","z":"d757dbb1.993928","name":"","scope":["a2c7ba39.575c38"],"x":120,"y":160,"wires":[["969b13f5.41742"]]},{"id":"969b13f5.41742","type":"change","z":"d757dbb1.993928","name":"","rules":[{"t":"set","p":"payload","pt":"flow","to":"$substringAfter(status.text, \":\")","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":320,"y":160,"wires":[[]]},{"id":"78de6689.486298","type":"ui_button","z":"d757dbb1.993928","name":"","group":"52b8bacf.7a0fc4","order":1,"width":0,"height":0,"passthru":false,"label":"ON","tooltip":"","color":"","bgcolor":"","icon":"","payload":"","payloadType":"str","topic":"topic","topicType":"msg","x":110,"y":80,"wires":[["a2c7ba39.575c38"]]},{"id":"70ee6d08.a33754","type":"ui_button","z":"d757dbb1.993928","name":"","group":"52b8bacf.7a0fc4","order":2,"width":0,"height":0,"passthru":false,"label":"OFF","tooltip":"","color":"","bgcolor":"","icon":"","payload":"payload","payloadType":"flow","topic":"","topicType":"str","x":110,"y":240,"wires":[["56890f7c.b3568"]]},{"id":"56890f7c.b3568","type":"exec","z":"d757dbb1.993928","command":"kill -9 ","addpay":"payload","append":"","useSpawn":"false","timer":"","oldrc":false,"name":"","x":290,"y":240,"wires":[[],[],[]]},{"id":"52b8bacf.7a0fc4","type":"ui_group","name":"Stepper motor","tab":"beab2351.33bf7","order":1,"disp":true,"width":"6","collapse":false},{"id":"beab2351.33bf7","type":"ui_tab","name":"Home","icon":"dashboard","disabled":false,"hidden":false}]
¡Y disfruta de tu tablero Node-RED controlando el motor paso a paso visualmente con tu PLC de código abierto Raspberry Pi!
