la máquina digital 2. hmibmi y node-red · 2020-05-27 · la máquina digital 2. hmibmi y node-red...

25
La Máquina Digital 2. HMIBMI y Node-Red Webinars únicos para ocasiones únicas. Confidential Property of Schneider Electric Ramón Antonio Hormigo Luque

Upload: others

Post on 26-Jul-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: La Máquina Digital 2. HMIBMI y Node-Red · 2020-05-27 · La Máquina Digital 2. HMIBMI y Node-Red Webinars únicos para ocasiones únicas. Confidential Property of Schneider Electric

La Máquina Digital 2. HMIBMI y Node-Red

Webinars únicos para ocasiones únicas.

Confidential Property of Schneider Electric

Ramón Antonio Hormigo Luque

Page 2: La Máquina Digital 2. HMIBMI y Node-Red · 2020-05-27 · La Máquina Digital 2. HMIBMI y Node-Red Webinars únicos para ocasiones únicas. Confidential Property of Schneider Electric

Page 2Confidential Property of Schneider Electric |

1 Escalera de Valor

2 Arquitectura

3 ¿Qué es Node-Red?

4 Instalación de Node-Red

5 Instalación del paquete Modbus

6 Importación del Flow de ejemplo

7Creación de Maquina en Machine

Advisor

8 Configuración del Flow

Page 3: La Máquina Digital 2. HMIBMI y Node-Red · 2020-05-27 · La Máquina Digital 2. HMIBMI y Node-Red Webinars únicos para ocasiones únicas. Confidential Property of Schneider Electric

1. Escalera de Valor del Fabricante de Maquinaria.

No Conectada

Conectable

Conectada

Inteligente

Integrada

Nuevo Modelo

de Negocio

Page 4: La Máquina Digital 2. HMIBMI y Node-Red · 2020-05-27 · La Máquina Digital 2. HMIBMI y Node-Red Webinars únicos para ocasiones únicas. Confidential Property of Schneider Electric

M251MESE

Eth1

IP: 192.168.10.51

MK:255.255.255

GT:192.168.10.1

Eth0

IP: 192.168.10.1

MK:255.255.255

GT: -

wlan0

IP: 192.168.1.113

Router

IP: 192.168.1.1

Secure Connect

Advisor

Machine Expert

HMIBMI (Windows 10)

Page 4Confidential Property of Schneider Electric |

2. Arquitectura

Page 5: La Máquina Digital 2. HMIBMI y Node-Red · 2020-05-27 · La Máquina Digital 2. HMIBMI y Node-Red Webinars únicos para ocasiones únicas. Confidential Property of Schneider Electric

Page 5Confidential Property of Schneider Electric |

3. ¿Qué es Node-Red?https://nodered.org/

Page 6: La Máquina Digital 2. HMIBMI y Node-Red · 2020-05-27 · La Máquina Digital 2. HMIBMI y Node-Red Webinars únicos para ocasiones únicas. Confidential Property of Schneider Electric

Page 6Confidential Property of Schneider Electric |

Primero se instala Node.js

https://nodejs.org/en/

La versión a instalar es la LTS.

En la instalación dejar las opciones por

defecto.

4. Instalación de Node-Red (1)El procedimiento actualizado para realizar la instalación de Node-Red se puede encontrar en:

https://nodered.org/docs/getting-started/local

.

Page 7: La Máquina Digital 2. HMIBMI y Node-Red · 2020-05-27 · La Máquina Digital 2. HMIBMI y Node-Red Webinars únicos para ocasiones únicas. Confidential Property of Schneider Electric

Page 7Confidential Property of Schneider Electric |

En una ventana de comandos o

en PowerShell se teclea:

npm install -g --unsafe-perm

node-red

Si se utiliza Powershell hay que

permitir la ejecución de scripts.

set-executionpolicy

remotesigned

4. Instalación de Node-Red (2)El procedimiento actualizado para realizar la instalación de Node-Red se puede encontrar en:

https://nodered.org/docs/getting-started/local

Page 8: La Máquina Digital 2. HMIBMI y Node-Red · 2020-05-27 · La Máquina Digital 2. HMIBMI y Node-Red Webinars únicos para ocasiones únicas. Confidential Property of Schneider Electric

Page 8Confidential Property of Schneider Electric |

Si se tecla node-red se lanza la

herramienta.

4. Instalación de Node-Red (3)El procedimiento actualizado para realizar la instalación de Node-Red se puede encontrar en:

https://nodered.org/docs/getting-started/local

Page 9: La Máquina Digital 2. HMIBMI y Node-Red · 2020-05-27 · La Máquina Digital 2. HMIBMI y Node-Red Webinars únicos para ocasiones únicas. Confidential Property of Schneider Electric

Page 9Confidential Property of Schneider Electric |

Se accede a Node-Red

tecleando en el explorador de

internet:

http://127.0.0.1:1880/

4. Instalación de Node-Red (4)El procedimiento actualizado para realizar la instalación de Node-Red se puede encontrar en:

https://nodered.org/docs/getting-started/local

Page 10: La Máquina Digital 2. HMIBMI y Node-Red · 2020-05-27 · La Máquina Digital 2. HMIBMI y Node-Red Webinars únicos para ocasiones únicas. Confidential Property of Schneider Electric

Page 10Confidential Property of Schneider Electric |

Install pm2

• npm install pm2 -g

Install and config pm2-windows-startup

package :

• npm install pm2-windows-startup -g

• pm2-startup install

Locate the Node-Red red.js File and add it to

pm2:

• pm2 start C:\Users\<USER-

NAME>\AppData\Roaming\npm\node_mo

dules\node-red\red.js

• pm2 save

4. Instalación de Node-Red (5)Instalación de .pm2 para el arranque automático de Node-Red

Page 11: La Máquina Digital 2. HMIBMI y Node-Red · 2020-05-27 · La Máquina Digital 2. HMIBMI y Node-Red Webinars únicos para ocasiones únicas. Confidential Property of Schneider Electric

Page 11Confidential Property of Schneider Electric |

pm2 list → Lista los procesos en ejecución

pm2 stop 0 → Para el proceso con id 0

pm2 start 0 → Arranca el proceso id 0

Pm2 restart 0 → Reinicia el proceso id 0

pm2 info red → Muestra información de la

aplicación red

4. Instalación de Node-Red (6)Comandos .pm2

Page 12: La Máquina Digital 2. HMIBMI y Node-Red · 2020-05-27 · La Máquina Digital 2. HMIBMI y Node-Red Webinars únicos para ocasiones únicas. Confidential Property of Schneider Electric

Page 12Confidential Property of Schneider Electric |

Se abre el menú y se selecciona la

opción Manage palette

Utilizamos el node-red-contrib-modbus.

https://flows.nodered.org/node/node-

red-contrib-modbus

5. Instalación del paquete ModbusPara realizar la comunicación entre la HMIBMI y el controlador, M251, se utiliza un cliente

Modbus TCP. El M251 será el servidor y desde la HMIBMI se leerán los datos.

Page 13: La Máquina Digital 2. HMIBMI y Node-Red · 2020-05-27 · La Máquina Digital 2. HMIBMI y Node-Red Webinars únicos para ocasiones únicas. Confidential Property of Schneider Electric

Page 13Confidential Property of Schneider Electric |

Copiar el

texto de la

columna

de la

derecha

[{"id":"d7dede69.b317f","type":"modbus-

read","z":"be86bda5.2f414","name":"","topic":"","showStatusActivities":false,"logIOActivities":false,"showErrors":false,"unitid":"1","dataType":"HoldingRegister","adr":"0","quantity":"4","rate":"60","rateUnit":"s","delayOnStart":false,"startDelayTime":"","server":"d5c

95a01.34b7b8","useIOFile":false,"ioFile":"","useIOForPayload":false,"x":140,"y":110,"wires":[["1d812745.55ab49"],[]]},{"id":"686630d5.7b04d","type":"debug","z":"be86bda5.2f414","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":

"false","x":1030,"y":100,"wires":[]},{"id":"1d812745.55ab49","type":"function","z":"be86bda5.2f414","name":"Format Tango I/W/DW/F","func":"//*****************************CONFIGURACIÓN*************************************\nvar tipoVar = \"INT\"; //INT,WORD,

DWORD o FLOAT. WORD --> Array in = Array Out\nvar body_id = \"HMIBMI_1\"; //Descripción Dispositivo.\n//****************************************************************************\n\nvar body_vr = msg.payload; //Array de datos de entrada\nvar body_st =

msg.input.payload.address; //Primera Word a leer\nvar body_n = msg.input.payload.quantity; // Número de Words a Leer. Se utiliza si el tipo de variable es WORD.\n\n//*******************************Date format*************************************\nvar now =

new Date();\nvar dd = now.getUTCDate();\nvar mm = now.getUTCMonth()+1; //January is 0!\nvar yyyy = now.getUTCFullYear();\nvar hh = now.getUTCHours();\nvar mi = now.getUTCMinutes();\nvar ss = now.getUTCSeconds();\n\nif(dd<10){\n dd='0'+dd;\n}

\nif(mm<10){\n mm='0'+mm;\n} \nif(hh<10){\n\thh='0'+hh;\n} \nif(mi<10){\n\tmi='0'+mi;\n} \nif(ss<10){\n\tss='0'+ss;\n} \n\nvar now_formated = dd+'/'+mm+'/'+yyyy+'

'+hh+':'+mi+':'+ss;\n\n//********************************************************************************\nswitch(tipoVar)\n{\n case \"INT\":\n var aux_body_vr = [];\n \n for(var i=0;i<body_vr.length;i+=1){\n var i16 = new Int16Array([body_vr[i]]);\n

aux_body_vr[i]=i16;\n }\n var body='{\"ID\":\"'+body_id+'\",\"TS\":\"'+now_formated+'\",\"ST\":\"'+body_st+'\",\"VR\":['+aux_body_vr+']}';\n break;\n \n case \"WORD\":\n var

body='{\"ID\":\"'+body_id+'\",\"TS\":\"'+now_formated+'\",\"ST\":\"'+body_st+'\",\"N\":\"'+body_n+'\",\"V\":['+body_vr+']}';\n break;\n case \"DWORD\":\n var aux_body_vr = [];\n for(var i=0;i<body_vr.length;i+=2){\n var ui16 = new

Uint16Array([body_vr[i],body_vr[i+1]]);\n var ui32 = new Uint32Array(ui16.buffer, ui16.byteOffset, ui16.byteLength / Uint32Array.BYTES_PER_ELEMENT);\n aux_body_vr[i/2] = ui32;\n }\n var

body='{\"ID\":\"'+body_id+'\",\"TS\":\"'+now_formated+'\",\"ST\":\"'+body_st+'\",\"VR\":['+aux_body_vr+']}';\n break;\n case \"FLOAT\":\n var aux_body_vr = [];\n for(var i=0;i<body_vr.length;i+=2){\n var ui16 = new

Uint16Array([body_vr[i],body_vr[i+1]]);\n var fl32 = new Float32Array(ui16.buffer, ui16.byteOffset, ui16.byteLength / Float32Array.BYTES_PER_ELEMENT);\n aux_body_vr[i/2] = fl32;\n }\n var

body='{\"ID\":\"'+body_id+'\",\"TS\":\"'+now_formated+'\",\"ST\":\"'+body_st+'\",\"VR\":['+aux_body_vr+']}';\n break;\n default:\n var body='Define tipo de datos, WORD, DWORD, FLOAT';\n}\nmsg.payload = body;\n\nreturn

msg;\n","outputs":1,"noerr":0,"x":420,"y":100,"wires":[["e1c23328.687a6"]]},{"id":"e1c23328.687a6","type":"function","z":"be86bda5.2f414","name":"Request Builder","func":"msg.headers = {};\nmsg.headers['Content-Type'] =

'application/json';\nmsg.headers['Authorization'] = 'SharedAccessSignature sr=cnm-ih-na.azure-devices.net%2Furn%3Adev%3Aops%3A000000-EMA-prod-

f5acb509ceea5d696de7acce&sig=LNZE5srU2VKaA%2BIXrrlzuOARAIUdeD3Ob5r94su34%2Fg%3D&se=1617356661';\nreturn msg;\n//Authorization;SharedAccessSignature sr=cnm-ih-na.azure-devices.net%2Furn%3Adev%3Aops%3A000000-EMA-prod-

f5acb509ceea5d696de7acce&sig=LNZE5srU2VKaA%2BIXrrlzuOARAIUdeD3Ob5r94su34%2Fg%3D&se=1617356661","outputs":1,"noerr":0,"x":660,"y":100,"wires":[["7216f91d.390fd8"]]},{"id":"7216f91d.390fd8","type":"http

request","z":"be86bda5.2f414","name":"HTTP Request","method":"POST","ret":"txt","paytoqs":false,"url":"https://cnm-ih-na.azure-devices.net/devices/urn%3Adev%3Aops%3A000000-EMA-prod-f5acb509ceea5d696de7acce/messages/events?api-

version=2016-11-14","tls":"","persist":false,"proxy":"","authType":"","x":850,"y":100,"wires":[["686630d5.7b04d"]]},{"id":"3519a14e.652b6e","type":"comment","z":"be86bda5.2f414","name":"Ejemplo Inyección de Datos en Machine

Advisor","info":"","x":200,"y":40,"wires":[]},{"id":"ad4eff04.75dec","type":"comment","z":"be86bda5.2f414","name":"https://docs.ipdata.co/","info":"https://api.ipdata.co?api-

key=test","x":120,"y":190,"wires":[]},{"id":"a86d2fd2.196ad","type":"debug","z":"be86bda5.2f414","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":630,"y":350,"wires":[]},{"id":"7ee396f8.01a598","type":"

http request","z":"be86bda5.2f414","name":"","method":"GET","ret":"obj","paytoqs":false,"url":"https://api.ipdata.co?api-

key=test","tls":"","persist":false,"proxy":"","authType":"","x":280,"y":240,"wires":[["c4d18847.ad59d8","3cac5f5b.e70e1"]]},{"id":"186a179e.b121a8","type":"inject","z":"be86bda5.2f414","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","o

nce":true,"onceDelay":"1","x":110,"y":240,"wires":[["7ee396f8.01a598"]]},{"id":"c4d18847.ad59d8","type":"function","z":"be86bda5.2f414","name":"From Geo to MA","func":"var msg1 = {};\nmsg1.input = {};\nmsg1.input.payload = {};\nvar lat =

msg.payload.latitude;\nvar lon = msg.payload.longitude;\nmsg1.payload = [lat,lon];\nmsg1.input.payload.address = 10000;\nmsg1.input.payload.quantity = 2;\n\n\nreturn

msg1;\n\n\n","outputs":1,"noerr":0,"x":190,"y":350,"wires":[["82c37724.76ab88"]]},{"id":"82c37724.76ab88","type":"function","z":"be86bda5.2f414","name":"Format Tango

I/W/DW/F","func":"//*****************************CONFIGURACIÓN*************************************\nvar tipoVar = \"WORD\"; //INT,WORD, DWORD o FLOAT. WORD --> Array in = Array Out\nvar body_id = \"HMIBMI_1\"; //Descripción

Dispositivo.\n//****************************************************************************\n\nvar body_vr = msg.payload; //Array de datos de entrada\nvar body_st = msg.input.payload.address; //Primera Word a leer\nvar body_n = msg.input.payload.quantity; //

Número de Words a Leer. Se utiliza si el tipo de variable es WORD.\n\n//*******************************Date format*************************************\nvar now = new Date();\nvar dd = now.getUTCDate();\nvar mm = now.getUTCMonth()+1; //January is 0!\nvar

yyyy = now.getUTCFullYear();\nvar hh = now.getUTCHours();\nvar mi = now.getUTCMinutes();\nvar ss = now.getUTCSeconds();\n\nif(dd<10){\n dd='0'+dd;\n} \nif(mm<10){\n mm='0'+mm;\n} \nif(hh<10){\n\thh='0'+hh;\n} \nif(mi<10){\n\tmi='0'+mi;\n}

\nif(ss<10){\n\tss='0'+ss;\n} \n\nvar now_formated = dd+'/'+mm+'/'+yyyy+' '+hh+':'+mi+':'+ss;\n\n//********************************************************************************\nswitch(tipoVar)\n{\n case \"INT\":\n var aux_body_vr = [];\n \n for(var

i=0;i<body_vr.length;i+=1){\n var i16 = new Int16Array([body_vr[i]]);\n aux_body_vr[i]=i16;\n }\n var body='{\"ID\":\"'+body_id+'\",\"TS\":\"'+now_formated+'\",\"ST\":\"'+body_st+'\",\"VR\":['+aux_body_vr+']}';\n break;\n \n case

\"WORD\":\n var body='{\"ID\":\"'+body_id+'\",\"TS\":\"'+now_formated+'\",\"ST\":\"'+body_st+'\",\"N\":\"'+body_n+'\",\"V\":['+body_vr+']}';\n break;\n case \"DWORD\":\n var aux_body_vr = [];\n for(var i=0;i<body_vr.length;i+=2){\n var

ui16 = new Uint16Array([body_vr[i],body_vr[i+1]]);\n var ui32 = new Uint32Array(ui16.buffer, ui16.byteOffset, ui16.byteLength / Uint32Array.BYTES_PER_ELEMENT);\n aux_body_vr[i/2] = ui32;\n }\n var

body='{\"ID\":\"'+body_id+'\",\"TS\":\"'+now_formated+'\",\"ST\":\"'+body_st+'\",\"VR\":['+aux_body_vr+']}';\n break;\n case \"FLOAT\":\n var aux_body_vr = [];\n for(var i=0;i<body_vr.length;i+=2){\n var ui16 = new

Uint16Array([body_vr[i],body_vr[i+1]]);\n var fl32 = new Float32Array(ui16.buffer, ui16.byteOffset, ui16.byteLength / Float32Array.BYTES_PER_ELEMENT);\n aux_body_vr[i/2] = fl32;\n }\n var

body='{\"ID\":\"'+body_id+'\",\"TS\":\"'+now_formated+'\",\"ST\":\"'+body_st+'\",\"VR\":['+aux_body_vr+']}';\n break;\n default:\n var body='Define tipo de datos, WORD, DWORD, FLOAT';\n}\nmsg.payload = body;\n\nreturn

msg;\n","outputs":1,"noerr":0,"x":420,"y":350,"wires":[["e1c23328.687a6","a86d2fd2.196ad"]]},{"id":"3cac5f5b.e70e1","type":"debug","z":"be86bda5.2f414","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":710,"y":240,"w

ires":[]},{"id":"d5c95a01.34b7b8","type":"modbus-

client","z":"","name":"","clienttype":"tcp","bufferCommands":true,"stateLogEnabled":false,"queueLogEnabled":false,"tcpHost":"192.168.10.51","tcpPort":"502","tcpType":"DEFAULT","serialPort":"/dev/ttyUSB","serialType":"RTU-

BUFFERD","serialBaudrate":"9600","serialDatabits":"8","serialStopbits":"1","serialParity":"none","serialConnectionDelay":"100","unit_id":"1","commandDelay":"1","clientTimeout":"1000","reconnectOnTimeout":false,"reconnectTimeout":"2000","parallelUnitIdsAllo

wed":false}]

6. Importación del Flow de ejemplo (1)Para subir datos a Machine Advisor partiremos de un Flow de ejemplo.

Page 14: La Máquina Digital 2. HMIBMI y Node-Red · 2020-05-27 · La Máquina Digital 2. HMIBMI y Node-Red Webinars únicos para ocasiones únicas. Confidential Property of Schneider Electric

Page 14Confidential Property of Schneider Electric |

Se copia y se pega el Flow

Tras ello aparece el

siguiente Flow en el

navegador.

6. Importación del Flow de ejemplo (2)Tras la importación aparece el flow.

Page 15: La Máquina Digital 2. HMIBMI y Node-Red · 2020-05-27 · La Máquina Digital 2. HMIBMI y Node-Red Webinars únicos para ocasiones únicas. Confidential Property of Schneider Electric

Page 15Confidential Property of Schneider Electric |

En mi subscripciones

Y se selecciona el equipo del que se va

se a ser “purchaser”

7. Creación de Maquina en Machine Advisor (1)Para subir datos a Machine Advisor se debe ser el “purchaser” del equipo.

Page 16: La Máquina Digital 2. HMIBMI y Node-Red · 2020-05-27 · La Máquina Digital 2. HMIBMI y Node-Red Webinars únicos para ocasiones únicas. Confidential Property of Schneider Electric

Page 16Confidential Property of Schneider Electric |

En fleet se registra una

máquina

Se introduce el nombre, tipo,

cliente, localización y se pulsa

finish

7. Creación de Maquina en Machine Advisor (2)Link a Machine Advisor: https://machine-advisor.schneider-electric.com/

Page 17: La Máquina Digital 2. HMIBMI y Node-Red · 2020-05-27 · La Máquina Digital 2. HMIBMI y Node-Red Webinars únicos para ocasiones únicas. Confidential Property of Schneider Electric

Page 17Confidential Property of Schneider Electric |

En monitor configuration se

pulsa sobre connect your

machine

Aparecerán los datos que se

necesitan para realizar la

conexión la HMIBMI

7. Creación de Maquina en Machine Advisor (3)Link a Machine Advisor: https://machine-advisor.schneider-electric.com/

Page 18: La Máquina Digital 2. HMIBMI y Node-Red · 2020-05-27 · La Máquina Digital 2. HMIBMI y Node-Red Webinars únicos para ocasiones únicas. Confidential Property of Schneider Electric

Page 18Confidential Property of Schneider Electric |

8. Configuración del Flow (1)Cómo funciona el Flow.

Modbus Read,

get MW from the

M2xx.

Return an array

of words.

p.e:

[12,54,45678,0]

Converts the array

of words to int,

dword, float and

create the Tango

formatted json

Create the

structure for the

HTTP Request

The HTTP

Request.

Return the

response

Payload to

debug console to

check the

response.

If “” then is Ok.

Page 19: La Máquina Digital 2. HMIBMI y Node-Red · 2020-05-27 · La Máquina Digital 2. HMIBMI y Node-Red Webinars únicos para ocasiones únicas. Confidential Property of Schneider Electric

Page 19Confidential Property of Schneider Electric |

En este ejemplo se leen 4 MWs

declaradas en el M251

8. Configuración del Flow (2)Configurar direcciones del controlador a leer.

Page 20: La Máquina Digital 2. HMIBMI y Node-Red · 2020-05-27 · La Máquina Digital 2. HMIBMI y Node-Red Webinars únicos para ocasiones únicas. Confidential Property of Schneider Electric

Page 20Confidential Property of Schneider Electric |

En la función de formato se

indica el tipo de las variables a

leer y el nombre de dispositivo

que aparecerá en Machine

Advisor

En Request Builder se copia el

token de Machine Advisor.

Quitando la parte de Autorization

Authorization;SharedAccessSignature sr=cnm-ih-na.azure-

devices.net%2Furn%3Adev%3Aops%....

8. Configuración del Flow (3)Configuración de formato y request builder

Page 21: La Máquina Digital 2. HMIBMI y Node-Red · 2020-05-27 · La Máquina Digital 2. HMIBMI y Node-Red Webinars únicos para ocasiones únicas. Confidential Property of Schneider Electric

Page 21Confidential Property of Schneider Electric |

Se copia y pega la información

del servidor de Machine Advisor

Si en la Ventana de debug se

visualiza “” el envío ha sido

correcto.

8. Configuración del Flow (3)Configuración de HTTP server y visualización de salida en debug

Page 22: La Máquina Digital 2. HMIBMI y Node-Red · 2020-05-27 · La Máquina Digital 2. HMIBMI y Node-Red Webinars únicos para ocasiones únicas. Confidential Property of Schneider Electric

Page 22Confidential Property of Schneider Electric |

9. Visualización de datos en Machine Advisor (1)Desde Machine Advisor se pueden ver las variables.

Page 23: La Máquina Digital 2. HMIBMI y Node-Red · 2020-05-27 · La Máquina Digital 2. HMIBMI y Node-Red Webinars únicos para ocasiones únicas. Confidential Property of Schneider Electric

Page 23Confidential Property of Schneider Electric |

9. Visualización de datos en Machine Advisor (2)Desde Machine Advisor se pueden ver las variables.

Page 24: La Máquina Digital 2. HMIBMI y Node-Red · 2020-05-27 · La Máquina Digital 2. HMIBMI y Node-Red Webinars únicos para ocasiones únicas. Confidential Property of Schneider Electric

Page 24Confidential Property of Schneider Electric |

Sigue conectado con nosotros y disfruta de la Información más actualizada en el Portal de Partners

https://www.se.com/es/es/partners/

Page 25: La Máquina Digital 2. HMIBMI y Node-Red · 2020-05-27 · La Máquina Digital 2. HMIBMI y Node-Red Webinars únicos para ocasiones únicas. Confidential Property of Schneider Electric