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.
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 is installed in your Raspberry Pi PLC controller >
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!
Tutorial de automatización de Node-RED y Raspberry Pi: Cómo hacer funcionar un motor paso a paso