Tutorial de Node-RED: C贸mo conectar PostgreSQL con Raspberry Pi PLC
Guarda los datos de tus proyectos de c贸digo abierto en una base de datos relacional de objetos
9 noviembre, 2021 por
Tutorial de Node-RED: C贸mo conectar PostgreSQL con Raspberry Pi PLC
Boot & Work Corp. S.L., Fernandez Queralt Martinez

Introducci贸n

Cada vez aparecen m谩s programas con los que se puede programar sin tener que codificar estrictamente, como es el caso de Node-RED.

En esta entrada del blog, haremos una peque帽a aplicaci贸n en la que recibiremos datos de entrada del PLC, y los enviaremos a la base de datos.

驴Quieres saber c贸mo?聽聽

脷ltimas publicaciones

NODE-RED-CONTRIB-POSTGRESQL

Una vez que tengas todas las herramientas listas para hacer que Node-RED se ejecute en tu PLC industrial Raspberry Pi, abre tu navegador favorito con Node-RED, 隆y empecemos!聽

La aplicaci贸n consistir谩 en leer una entrada anal贸gica cada cinco segundos, y si el valor es superior a 1023, enviaremos la informaci贸n a la base de datos. Adem谩s, iremos solicitando todos los datos de la tabla durante el mismo tiempo, cinco segundos, y mostraremos el resultado de los 煤ltimos datos almacenados en un cuadro de mando.

As铆, hay tres nodos que necesitaremos que no est谩n instalados por defecto con Node-RED y que vamos a instalar. Ve al Men煤 > Gestionar Paleta > Instalar, y escribe e instala estos tres:

  1. node-red-contrib-postgresql

  2. node-red-dashboard

  3. node-red-contrib-rpiplc-node


Una vez instalado, 隆desarrollemos nuestro flujo!

  • Por un lado, a帽adir un inject node, y repetir un intervalo cada 5 segundos.

  • A帽ade un nodo de lectura anal贸gica desde Industrial Shields, selecciona tu modelo y la entrada donde a帽adir谩s un voltaje.

  • Justo despu茅s del nodo de lectura anal贸gica, cablea un switch node y establece la propiedad msg.payload a dos condiciones:聽

    1. otherwise
    2. > (number) 1023
  • A partir de la salida n煤mero 1 (en caso contrario), conectaremos un debug node, donde veremos los valores cada 5 segundos.

  • Desde la salida n煤mero 2 del switch node, a帽ade un function node con la siguiente condici贸n:

    var now = new Date().toLocaleString("es-ES");
    msg.time = now;
    return msg;
  • Despu茅s del function node, a帽adiremos un nodo postgresql. Configuraremos un servidor. Como hicimos en la entrada del blog de la lectura anterior, vamos a establecer los siguientes par谩metros en el nodo postgresql:

    Host: 127.0.0.1

    Port: (number) 5432
    Database: (String) isdb
    SSL: false

    En la pesta帽a Seguridad, establezca un usuario y una contrase帽a.


    En la secci贸n de consultas, vamos a a帽adir la siguiente consulta:

    INSERT INTO myIStable VALUES ('I0.7', '{{msg.payload}}', '{{msg.time}}');
  • Por otro lado, a帽ade un postgresql despu茅s del inject node con el mismo servidor, y a帽ade esta consulta:聽

    SELECT * FROM myIStable ORDER BY datetime DESC;
  • Obtenga la informaci贸n a帽adiendo un debug node con la salida establecida en msg.payload[0];

  • Por 煤ltimo, vamos a a帽adir los nodos de texto.聽聽
    En el primero, vamos a establecer la etiqueta a "Input", y el formato del valor a: "{{msg.payload[0].name}}".聽

    En el segundo, haremos lo mismo pero estableciendo la etiqueta como Valor, y el formato del valor como {{msg.payload[0].data}}

    Por 煤ltimo, a帽adiremos un tercer text dashboard node, con la etiqueta Datetime y el formato del valor: {{msg.payload[0].datetime}}聽

As铆 es como se ve la estructura b谩sica de nuestra base de datos:

Base de datos - Tutorial de Node-RED: C贸mo conectar PostgreSQL con Raspberry Pi PLC

Si no has conseguido que tu flujo se ejecute, comp谩ralo con nuestro flows.json e inicia tu aplicaci贸n.

flows.json - Tutorial de Node-RED: C贸mo conectar PostgreSQL con Raspberry Pi PLC
[{"id":"a2278800.0ea508","type":"tab","label":"Industrial Shields","disabled":false,"info":""},{"id":"686ee02c.306a","type":"postgreSQLConfig","name":"@127.0.0.1:5432/postgres","host":"127.0.0.1","hostFieldType":"str","port":"5432","portFieldType":"num","database":"isdb","databaseFieldType":"str","ssl":"false","sslFieldType":"bool","max":"10","maxFieldType":"num","min":"1","minFieldType":"num","idle":"1000","idleFieldType":"num","connectionTimeout":"10000","connectionTimeoutFieldType":"num","user":"pi","userFieldType":"str","password":"raspberry","passwordFieldType":"str"},{"id":"711d368a.8b1ec8","type":"ui_tab","name":"Home","icon":"dashboard","disabled":false,"hidden":false},{"id":"b0f41cb4.00be5","type":"ui_base","theme":{"name":"theme-light","lightTheme":{"default":"#0094CE","baseColor":"#0094CE","baseFont":"-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif","edited":true,"reset":false},"darkTheme":{"default":"#097479","baseColor":"#097479","baseFont":"-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif","edited":false},"customTheme":{"name":"Untitled Theme 1","default":"#4B7930","baseColor":"#4B7930","baseFont":"-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif"},"themeState":{"base-color":{"default":"#0094CE","value":"#0094CE","edited":false},"page-titlebar-backgroundColor":{"value":"#0094CE","edited":false},"page-backgroundColor":{"value":"#fafafa","edited":false},"page-sidebar-backgroundColor":{"value":"#ffffff","edited":false},"group-textColor":{"value":"#1bbfff","edited":false},"group-borderColor":{"value":"#ffffff","edited":false},"group-backgroundColor":{"value":"#ffffff","edited":false},"widget-textColor":{"value":"#111111","edited":false},"widget-backgroundColor":{"value":"#0094ce","edited":false},"widget-borderColor":{"value":"#ffffff","edited":false},"base-font":{"value":"-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif"}},"angularTheme":{"primary":"indigo","accents":"blue","warn":"red","background":"grey","palette":"light"}},"site":{"name":"Node-RED Dashboard","hideToolbar":"false","allowSwipe":"false","lockMenu":"false","allowTempTheme":"true","dateFormat":"DD/MM/YYYY","sizes":{"sx":48,"sy":48,"gx":6,"gy":6,"cx":6,"cy":6,"px":0,"py":0}}},{"id":"5ca14fd8.ffd9b","type":"ui_group","name":"Last","tab":"711d368a.8b1ec8","order":1,"disp":true,"width":"6","collapse":false},{"id":"c907ade9.bac43","type":"rpiplc-config","model":"RPIPLC_21","name":""},{"id":"97597042.0079","type":"postgresql","z":"a2278800.0ea508","name":"","query":"SELECT * FROM myIStable order by datetime DESC;","postgreSQLConfig":"686ee02c.306a","split":false,"rowsPerMsg":1,"outputs":1,"x":330,"y":360,"wires":[["9616bb0.fc2d348","b48447e6.f139c8","81d99e93.465bb","d08407fe.6d5de8"]]},{"id":"b48447e6.f139c8","type":"ui_text","z":"a2278800.0ea508","group":"5ca14fd8.ffd9b","order":0,"width":0,"height":0,"name":"Last name","label":"Input","format":"{{msg.payload[0].name}}","layout":"row-spread","className":"","x":750,"y":400,"wires":[]},{"id":"9616bb0.fc2d348","type":"debug","z":"a2278800.0ea508","name":"Select last from db table","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload[0]","targetType":"msg","statusVal":"","statusType":"auto","x":790,"y":360,"wires":[]},{"id":"81d99e93.465bb","type":"ui_text","z":"a2278800.0ea508","group":"5ca14fd8.ffd9b","order":0,"width":0,"height":0,"name":"Last data","label":"Value","format":"{{msg.payload[0].data}}","layout":"row-spread","className":"","x":740,"y":440,"wires":[]},{"id":"e231470c.234588","type":"rpiplc-analog-read","z":"a2278800.0ea508","rpiplc":"c907ade9.bac43","pin":"I0.7","name":"","x":320,"y":160,"wires":[["73b6875.cf02878"]]},{"id":"411796a1.e76da8","type":"inject","z":"a2278800.0ea508","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"5","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"str","x":130,"y":260,"wires":[["e231470c.234588","97597042.0079"]]},{"id":"73b6875.cf02878","type":"switch","z":"a2278800.0ea508","name":"payload > 1023 ? 2 : 1","property":"payload","propertyType":"msg","rules":[{"t":"else"},{"t":"gt","v":"1023","vt":"num"}],"checkall":"true","repair":false,"outputs":2,"x":520,"y":160,"wires":[["5358c90c.ea5ef8"],["418defc9.3ae52"]]},{"id":"5358c90c.ea5ef8","type":"debug","z":"a2278800.0ea508","name":"Value under 1023","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":770,"y":100,"wires":[]},{"id":"bd13d364.a8193","type":"postgresql","z":"a2278800.0ea508","name":"","query":"INSERT INTO myIStable VALUES ('I0.7', '{{msg.payload}}', '{{msg.time}}');\n","postgreSQLConfig":"686ee02c.306a","split":false,"rowsPerMsg":1,"outputs":1,"x":970,"y":220,"wires":[[]]},{"id":"418defc9.3ae52","type":"function","z":"a2278800.0ea508","name":"Get time","func":"var now = new Date().toLocaleString(\"es-ES\");\nmsg.time = now;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":740,"y":220,"wires":[["9ea6befc.650a","bd13d364.a8193"]]},{"id":"9ea6befc.650a","type":"debug","z":"a2278800.0ea508","name":"get msg with value above 1023","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1030,"y":180,"wires":[]},{"id":"d08407fe.6d5de8","type":"ui_text","z":"a2278800.0ea508","group":"5ca14fd8.ffd9b","order":0,"width":0,"height":0,"name":"Last datetime","label":"Datetime","format":"{{msg.payload[0].datetime}}","layout":"row-spread","className":"","x":760,"y":480,"wires":[]}]

Pruebas

Ahora, vamos a probar nuestra aplicaci贸n con dos valores.

  1. Desde el PLC industrial Raspberry Pi, toma un cable de los 5V al I0.7, y obt茅n el resultado. El valor debe ser 1022.

  2. Ahora, toma el cable de los 24V a la entrada anal贸gica I0.7 y obt茅n el resultado. El valor debe ser 2047.

Encuentra lo que buscas. 隆Busca en nuestro Blog!

Tutorial de Node-RED: C贸mo conectar PostgreSQL con Raspberry Pi PLC
Boot & Work Corp. S.L., Fernandez Queralt Martinez
9 noviembre, 2021
Compartir
Archivar

驴Est谩s buscando tu Controlador L贸gico Programable ideal?

Echa un vistazo a esta comparativa de producto de varios controladores industriales basados en Arduino.

Comparamos entradas, salidas, comunicaciones y otras especificaciones con las de los equipos de otras marcas destacadas.


Comparaci贸n PLC industrial >>>

驴Quieres m谩s informaci贸n?

隆Rellena el formulario!

隆Cu茅ntame m谩s!