Buscar

[Tutorial de inicio rápido] Cree un segundo proceso a través de la interfaz de programación de la puerta de enlace periférica de la serie EG

Requirements Overview

Este capítulo implementa principalmente un proceso: EG8200 recopila datos de Siemens S7-200 Smart, los ensambla en formato JSON y los comunica a la plataforma de aplicaciones a través de MQTT; al mismo tiempo, puede recibir comandos de control emitidos por la plataforma de aplicaciones para realizar la conmutación remota. Para llevar a cabo este proceso, es necesario preparar con antelación los siguientes materiales:

 

  1. El puerto IP y la tabla de puntos del PLC que se va a recoger, por ejemplo:

PLC

S7-200 Smart

IP

192.168.0.24/102

Tabla de puntos (DB1)

dirección

tipo de datos

Atributos

nombre

V0.0

Booleano

sólo lectura

Estado de arranque y parada del motor nº 1

V0.1

Booleano

sólo lectura

Estado de arranque y parada del motor nº 2

V0.2

Booleano

sólo lectura

Nº 3 estado de arranque y parada del motor

V0.3

Booleano

sólo lectura

Nº 4 estado de arranque y parada del motor

V0.4

Booleano

Leer y escribir

Mando de arranque y parada del motor nº 1

V0.5

Booleano

Leer y escribir

Mando de arranque y parada del motor nº 2

V0.6

Booleano

Leer y escribir

Nº 3 control de arranque y parada del motor

V0.7

Booleano

Leer y escribir

Nº 4 control de arranque y parada del motor

VD100

Sin signo16

sólo lectura

Tensión (V)

VD200

Sin signo16

sólo lectura

Corriente (A)

  1. MQTT communication-related parameters and JSON data format requirements, such as:
url:1883.dtuip.com:1883
clientID:820000003058164F
username:19381903226
password:ZHZK19381903226
Subscribe:820000003058164F/ Publish:820000003058164F
JSON format:{ "sensorDatas": [ { "fla g":"em1Status", "switcher":1 }, { "flag" :"em2Status", "switcher":1 }, { "flag":"em3Status", "switcher":1 }, { "flag":"em4Status", "switcher":1 }, { "flag":" em1Control", "switcher":0 }, { "flag":"em2Control", "switcher":0 }, { "flag":"em3Control", "switcher":0 }, { "flag":"em4Control" , "switcher":0 }, { "flag":"voltage", "value":220.0 }, { "flag":"current", "value":10.2 } ]}

Demand Analysis

Al realizar un proceso, la lógica básica es para que el proceso se base en la tendencia de los datos. Tras el análisis, se puede concluir que esta demanda se divide principalmente en dos partes: enlace ascendente de datos y enlace descendente de datos. Entre ellas, las principales tareas del enlace ascendente de datos incluyen:

    1. Lee los datos del PLC a través del protocolo S7, y los datos obtenidos se almacenan en la memoria ( S7 Node)
    2. Formatear los datos según el formato JSON ( Function Node)
    3. Establecer una conexión MQTT y publicar en el tema especificado ( MQTT Publish Node)

Las principales tareas del enlace descendente de datos son:

    1. Suscribirse a temas MQTT y recibir datos enviados por la plataforma ( MQTT Subscribe Node)
    2. Analiza los datos JSON recibidos y los almacena en memoria ( Function Node)
    3. Escribir en el PLC en el formato requerido por S7 ( S7 Node)

análisis de la demanda

Requirements Realization

1. Recopilar datos del PLC

    1. Arrastre un S7 Read Node y un Debug Node de la biblioteca de nodos. Debug Node se utiliza para ver los datos PLC leídos para facilitar la localización de problemas.

Recopilar datos del PLC

    1. Haga doble clic en S7 Read Nodey rellene los parámetros de ajuste correspondientes según el resumen de requisitos, como se muestra en la figura siguiente:
IP: PLC 
IP port: 102 (S7 protocol communication default port 102) 
Mode: TASP (S7-200 Smart selects TASP, other models select Rack/Slot) 
Local TSAP: 1002 (fixed value) 
Remote TSAP: 0301 (fixed value) 
Collection period: 1000ms (default 1000ms, customizable) 
Timeout period: 2000ms (default 2000ms, customizable) 

Data point configuration (the corresponding relationship can be found according to the help document) 
V0.0-->DB1,X0.0V0.1 -->DB1,X0.1V0.2-->DB1,X0.2V0.3-->DB1,X0.3V0.4-->DB1,X0.4V0.5-->DB1,X0.5V0.6 -->DB1, X0.6V0.7-->DB1, 

Si la configuración es correcta, se imprimirá un registro en la ventana de depuración, mostrando el contenido de los datos leídos.

Leer el contenido de los datos

    1. A veces hay muchos puntos de datos del PLC y resulta engorroso introducirlos manualmente uno a uno. Los nodos permiten importar y exportar puntos de datos:

Importación y exportación de nodos

2. Formato de los datos

De acuerdo con la guía del paso 2, puede ver los datos del PLC leídos en la ventana de depuración de la siguiente manera:

Formato de los datos

Porque la plataforma de aplicación ha estipulado que los datos deben comunicarse en formato JSON. A continuación, utilice Function NodeJavaScript code to format the data. The code is as follows:

  let jsonArray = []jsonArray.push({"flag": "em1Status", "switcher": msg.payload.em1Status == true ? 1 : 0 })jsonArray.push({"flag": "em2Status", " switcher": msg.payload.em2Status == true ? 1 : 0 })jsonArray.push({"flag": "em3Status", "switcher": msg.payload.em3Status == true ? 1 : 0 })jsonArray. push({"flag": "em4Status", "switcher": msg.payload.em4Status == true ? 1 : 0 })jsonArray.push({"flag": "em1Control", "switcher": msg.payload. em1Control == true ? 1 : 0 })jsonArray.push({"flag": "em2Control", "switcher": msg.payload.em2Control == true ? 1 : 0 })jsonArray.push({"flag": "em3Control", "switcher": msg.payload.em3Control == true ? 1 : 0 })jsonArray.push({"flag": "em4Control", "switcher": msg.payload.em4Control == true ? 1 : 0 })jsonArray.push({"flag": "voltage", "value": msg.payload.voltage / 100 })/*dos decimales*/jsonArray.push({"flag": "current", " value": msg.payload.current / 100 })/*dos decimales*/let data = {}data.sensorDatas = jsonArraymsg.payload = JSON.stringify(data)return msg 

Copie el código anterior y péguelo en el nodo de la función. Usted puede ver el efecto después de la implementación:

Formato de los datos

Puede verse que los datos PLC leídos se han convertido al formato JSON final de acuerdo con los requisitos, y los datos se han calculado hasta cierto punto (dos decimales). This is just the tip of the iceberg of function nodes. Because it supports JavaScript programming, almost any function you can think of can be implemented here.

Leer el contenido de los datos

3. Informe de datos a través de MQTT

Arrastre un MQTT Publish Node , configure it according to the prompts, fill in the MQTT connection-related information and the MQTT publishing topic (see the requirements overview for details), and you can implement data reporting. Se puede ver que después de que los datos se reportan con éxito, la plataforma de aplicación muestra verde para indicar que el dispositivo está en línea y los datos son normales:

Informe de datos a través de MQTT

En este punto, el informe de datos se ha completado y se puede lograr en unos sencillos pasos: recopilar los datos del PLC e informar de ellos en un formato JSON personalizado.

4. Recibir datos a través de MQTT

Arrastre un MQTT Subscribe Node. Note: MQTT Publish Node y MQTT Subscribe Nodepueden compartir una conexión MQTT. Si se utiliza la misma conexión pero un tema diferente, arrastre el nodo y seleccione la conexión configurada. If you choose to add a new MQTT-broker node, it means creating a new MQTT connection.

Recibir datos a través de MQTT

Seleccione un nodo de depuración y haga clic en el botón de control de la plataforma. Puedes ver las instrucciones emitidas en la ventana de depuración:

Nodo de depuración

5. Data analysis

Según el documento de ayuda del S7 Write Node. You can know that to write data to the PLC, the data that needs to be passed carries two parameters, as follows:

análisis de datos

Por lo tanto, al analizar los datos, los datos enviados por la plataforma de aplicación deben convertirse en a message carrying two variables carga útil y variable passed to S7 Write Node. El código del nodo de función es el siguiente:

  let cmdDate = msg.payloadmsg.variable = cmdDate.sensorDatas[0].flagmsg.payload = cmdDate.sensorDatas[0].switcher == 1 ? true : falsereturn msg 

Copie el código anterior, péguelo en el nodo de función y configure el nodo de depuración para que imprima el mensaje original. Usted puede ver el contenido impreso de la siguiente manera:

Nodo de datos de escritura S7

Puede ver que los datos se han convertido al formato requerido por el nodo de datos de escritura S7.

DTU/Pasarela Edge/Plataforma IoT/Módulo de pasarela

6. Write to PLC

Arrastre unS7 Write Node, connect Function Compute Node, operate the switch on the application platform, and see the demonstration effect:

Escribir a PLC

Resuma

Este capítulo presenta un proceso relativamente complejo, cuyo objetivo es describir las capacidades de la pasarela. Por lo tanto, no optimiza la seguridad, estabilidad, flexibilidad, etc. del programa. Al entender este proceso, creo que ya estás familiarizado con la programación visual de la pasarela. A continuación, aprenda en profundidad el uso de las funciones de cada nodo. ¡Dominarlas te proporcionará más opciones y posibilidades para realizar procesos más complejos!

Código fuente

All processes support import and export in JSON format, making it easy to share completed processes with others. The process JSON file of this chapter is as follows. After copying, select import and paste in the upper right corner of the menu bar. The same goes for exporting.

  [{"id":"c8d138cd30e452fc","type":"s7 in","z":"2ff624305b8cb30b","endpoint":"374f5d9e3d2741c0","mode":"all","variable":"", "diff":false,"name":"Read PLC data","x":180,"y":180,"wires":[["03f0b9014af25c1d"]]},{"id":"4abb25e7e75b3447", "type":"mqtt out","z":"2ff624305b8cb30b","name":"Release data","topic":"820000003058164F","qos":"0","retain":"false", "respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"8d85be060cbc6545","x":520," y":180,"wires":[]},{"id":"63f2816a781192d5","type":"mqtt in","z":"2ff624305b8cb30b","name":"Subscription data","topic ":"820000003058164F/ ","qos":"0","datatype":"auto-detect","broker":"8d85be060cbc6545","nl":false,"rap":true,"rh":0 ,"inputs":0,"x":180,"y":260,"wires":[["1b6776e208355720"]]},{"id":"03f0b9014af25c1d", "type": "function"," z": "2ff624305b8cb30b", "name": "Formato de datos", "func": "let jsonArray = []nnjsonArray.push({"flag"": ""em1Status""