Introducción
A veces, al realizar tareas, se desea que ciertas acciones tengan lugar durante un tiempo determinado. El sistema de semáforos sería un ejemplo. También, si estás realizando una tarea de mantenimiento en una cinta transportadora y quieres que se active durante 30 segundos para comprobar su correcto funcionamiento una vez reparada, te interesaría establecer una cuenta atrás para comprobar esta acción.
En este post, aprenderás a crear un Dashboard básico para establecer una cuenta atrás de forma que una salida de tu PLC basado en Raspberry Pi permanezca activa durante la cuenta atrás, y se desactive cuando ésta termine. Así, gracias a la automatización industrial, conseguiremos una planta automatizada.
Enlaces relacionados
Control previo
En primer lugar, vamos a hacer una comprobación previa para asegurarnos de que Node-RED está correctamente instalado en su PLC industrial Raspberry:
1. Asegúrate de que Node-RED está correctamente instalado en tu PLC industrial Raspberry Pi:
a. Si se trata de un servicio, escribe la siguiente información en la línea de comandos:
sudo systemctl status nodered.service
b. Si no es un servicio, pero está instalado, inícialo:
node-red-start
c. Si no está instalado, ejecuta el siguiente comando para instalar Node.js, npm y Node-RED en un PLC Raspberry Pi industrial:
bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
2.Ve al config.txt de tu PLC de código abierto Raspberry Pi:
sudo nano /boot/config.txt
Y asegúrate de que estas líneas están comentadas:
#dtoverlay=mcp23017,noints,mcp23008,addr=0x20
#dtoverlay=mcp23017,noints,mcp23008,addr=0x21
#dtoverlay=i2c-pwm-pca9685a,addr=0x40
#dtoverlay=i2c-pwm-pca9685a,addr=0x41
#dtoverlay=ads1015,addr=0x48
#dtparam=cha_enable=true,cha_gain=1
#dtparam=chb_enable=true,chb_gain=1
#dtparam=chc_enable=true,chc_gain=1
#dtparam=chd_enable=true,chd_gain=1
#dtoverlay=ads1015,addr=0x49
#dtparam=cha_enable=true,cha_gain=1
#dtparam=chb_enable=true,chb_gain=1
#dtparam=chc_enable=true,chc_gain=1
#dtparam=chd_enable=true,chd_gain=1
#dtoverlay=ads1015,addr=0x4a
#dtparam=cha_enable=true,cha_gain=1
#dtparam=chb_enable=true,chb_gain=1
#dtparam=chc_enable=true,chc_gain=1
#dtparam=chd_enable=true,chd_gain=1
#dtoverlay=ads1015,addr=0x4b
#dtparam=cha_enable=true,cha_gain=1
#dtparam=chb_enable=true,chb_gain=1
#dtparam=chc_enable=true,chc_gain=1
#dtparam=chd_enable=true,chd_gain=1
Node-red-contrib-countdown
Para tener un nodo de cuenta atrás para poder establecer el tiempo de espera, vamos a descargar el nodo node-red-contrib-countdown:
Si todo ha ido bien, podrás ver tus nodos en el menú de la izquierda.
Node-RED Flow
Ahora, ¡creemos el flujo Node-RED!
1. En primer lugar, añade un nodo de conmutación Dashboard con las siguientes configuraciones:
2. A continuación, añade un nodo de cambio para establecer flow.active a msg.payload. Con esta configuración, establecerás una variable de flujo para el valor numérico para iniciar el contador o no.
3. Conecta un nodo interruptor para evaluar la variable flow.active. Si es verdadera, podrás activar la cuenta atrás. En caso contrario, no.
4. Como podemos ver en la documentación de node-red-contrib-countdown, necesitas el tema "control" para recargar el contador. Así que, ahora vas a añadir un nodo Dashboard numérico para tener un widget numérico para establecer el valor del contador, y establecerás el msg.topic a "control".
Además, establecerás un rango de segundos y escribirás una etiqueta para mostrar en el tablero.
5. Añade un nodo interruptor y evalúa si la variable flow.active es verdadera.
6. Añade el nodo "countdown" después del nodo "switch" y configúralo. Ahora, conecta la primera salida del nodo "eval flow.active" a la entrada del nodo "if flow.active is true" y la segunda salida al nodo de la cuenta atrás.
9. Por último, añade un nodo de tablero de texto, para mostrar, desde la segunda salida del nodo de cuenta atrás, cada uno de los números del contador.
Ahora, es el momento de ir a tu panel de control de Node-RED: YOUR-IP-ADDRESS:1880/ui y pruébalo.
Hay que tener en cuenta que cuando se activa el botón del interruptor, no habrá cuenta atrás hasta que se pulse cualquier flecha para fijar el tiempo del contador.
Ve al Menú > Importar > Y pega este código de abajo para pegarlo directamente en el flujo. > Haz clic en Importar y disfruta.
[{"id":"aed4ed95.51fd3","type":"tab","label":"Flow 1","disabled":false,"info":""},{"id":"36dab66.105b04a","type":"ui_numeric","z":"aed4ed95.51fd3","name":"","label":"Set time","tooltip":"","group":"2200bc67.e75214","order":2,"width":0,"height":0,"wrap":false,"passthru":true,"topic":"control","topicType":"str","format":"{{value}}","min":0,"max":"1000000","step":1,"x":120,"y":380,"wires":[["57e3fd14.c6faf4"]]},{"id":"54847c0b.8278a4","type":"ui_switch","z":"aed4ed95.51fd3","name":"","label":"Active","tooltip":"","group":"2200bc67.e75214","order":1,"width":0,"height":0,"passthru":true,"decouple":"false","topic":"","topicType":"str","style":"","onvalue":"true","onvalueType":"bool","onicon":"","oncolor":"","offvalue":"false","offvalueType":"bool","officon":"","offcolor":"","animate":false,"x":110,"y":240,"wires":[["2c4caab0.b6e2e6"]]},{"id":"e3726420.761328","type":"countdown","z":"aed4ed95.51fd3","name":"","topic":"","payloadTimerStart":"true","payloadTimerStartType":"bool","payloadTimerStop":"false","payloadTimerStopType":"bool","timer":"0","resetWhileRunning":true,"setTimeToNewWhileRunning":true,"startCountdownOnControlMessage":true,"x":550,"y":380,"wires":[["c5266af7.683928"],["cdb38e2b.3152d"]]},{"id":"cdb38e2b.3152d","type":"ui_text","z":"aed4ed95.51fd3","group":"2200bc67.e75214","order":3,"width":0,"height":0,"name":"","label":"Time remaining","format":"{{msg.payload}}","layout":"row-spread","x":1020,"y":260,"wires":[]},{"id":"57e3fd14.c6faf4","type":"switch","z":"aed4ed95.51fd3","name":"if flow.active is true","property":"active","propertyType":"flow","rules":[{"t":"true"}],"checkall":"true","repair":false,"outputs":1,"x":330,"y":380,"wires":[["6be8442b.afdf6c","e3726420.761328"]]},{"id":"2c4caab0.b6e2e6","type":"change","z":"aed4ed95.51fd3","name":"set flow.active to msg.payload","rules":[{"t":"set","p":"active","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":490,"y":240,"wires":[["e99f47d5.17f628"]]},{"id":"e99f47d5.17f628","type":"switch","z":"aed4ed95.51fd3","name":"eval flow.active","property":"active","propertyType":"flow","rules":[{"t":"true"},{"t":"false"}],"checkall":"true","repair":false,"outputs":2,"x":760,"y":240,"wires":[["cdb38e2b.3152d","57e3fd14.c6faf4"],["e3726420.761328"]]},{"id":"c5266af7.683928","type":"switch","z":"aed4ed95.51fd3","name":"is msg.payload is false","property":"payload","propertyType":"msg","rules":[{"t":"false"}],"checkall":"true","repair":false,"outputs":1,"x":780,"y":400,"wires":[["3eab10e.ae300f"]]},{"id":"3eab10e.ae300f","type":"rpiplc-digital-write","z":"aed4ed95.51fd3","rpiplc":"d44e8434.83bc08","pin":"Q0.0","value":"0","name":"","x":1020,"y":400,"wires":[]},{"id":"6be8442b.afdf6c","type":"rpiplc-digital-write","z":"aed4ed95.51fd3","rpiplc":"d44e8434.83bc08","pin":"Q0.0","value":"1","name":"","x":550,"y":460,"wires":[]},{"id":"2200bc67.e75214","type":"ui_group","name":"Default","tab":"7e6b74f7.76b2ec","order":1,"disp":false,"width":"6","collapse":false},{"id":"d44e8434.83bc08","type":"rpiplc-config","model":"RPIPLC_57R","name":""},{"id":"7e6b74f7.76b2ec","type":"ui_tab","name":"Home","icon":"dashboard","disabled":false,"hidden":false}]
Tutorial de Node-RED: Cómo establecer una cuenta atrás en el controlador PLC de Raspberry Pi