Índice
ToggleRequisitos
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:
-
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) |
- Parámetros relacionados con la comunicación MQTT y requisitos de formato de datos JSON, como:
url:1883.dtuip.com:1883
clientID:820000003058164F
nombre de usuario:19381903226
password:ZHZK19381903226
Subscribe:820000003058164F/ Publish:820000003058164F
Formato JSON:{ "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": "corriente", "value":10.2 } ]}
Análisis de la demanda
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:
-
- Lee los datos del PLC a través del protocolo S7, y los datos obtenidos se almacenan en la memoria (
Nodo S7) - Formatear los datos según el formato JSON (
Nodo de función) - Establecer una conexión MQTT y publicar en el tema especificado (
Nodo de publicación MQTT)
- Lee los datos del PLC a través del protocolo S7, y los datos obtenidos se almacenan en la memoria (
Las principales tareas del enlace descendente de datos son:
-
- Suscribirse a temas MQTT y recibir datos enviados por la plataforma (
Nodo de suscripción MQTT) - Analiza los datos JSON recibidos y los almacena en memoria (
Nodo de función) - Escribir en el PLC en el formato requerido por S7 (
Nodo S7)
- Suscribirse a temas MQTT y recibir datos enviados por la plataforma (

Realización de requisitos
1. Recopilar datos del PLC
-
- Arrastre un
Nodo de lectura S7y unNodo de depuraciónde la biblioteca de nodos.Nodo de depuraciónse utiliza para ver los datos PLC leídos para facilitar la localización de problemas.
- Arrastre un

-
- Haga doble clic en
Nodo de lectura S7y rellene los parámetros de ajuste correspondientes según el resumen de requisitos, como se muestra en la figura siguiente:
- Haga doble clic en
IP: PLC Puerto IP: 102 (puerto 102 por defecto de comunicación del protocolo S7) Modo: TASP (S7-200 Smart selecciona TASP, otros modelos seleccionan Rack/Slot) TSAP local: 1002 (valor fijo) TSAP remoto: 0301 (valor fijo) Periodo de recogida: 1000ms (por defecto 1000ms, personalizable) Tiempo de espera: 2000ms (por defecto 2000ms, personalizable) Configuración del punto de datos (la relación correspondiente se puede encontrar según el documento de ayuda) 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.

-
- 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:

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:

Porque la plataforma de aplicación ha estipulado que los datos deben comunicarse en formato JSON. A continuación, utilice Nodo de funciónCódigo JavaScript para formatear los datos. El código es el siguiente:
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:

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). Esto es sólo la punta del iceberg de los nodos de función. Dado que admite programación JavaScript, aquí se puede implementar casi cualquier función que se te ocurra.

3. Informe de datos a través de MQTT
Arrastre un Nodo de publicación MQTT , Configúrelo de acuerdo con las instrucciones, rellene la información relacionada con la conexión MQTT y el tema de publicación MQTT (consulte el resumen de requisitos para obtener más información) y podrá implementar la generación de informes de datos. 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:

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 Nodo de suscripción MQTT. Nota: Nodo de publicación MQTT y Nodo de suscripción MQTTpueden 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. Si elige añadir un nuevo nodo MQTT-broker, significa crear una nueva conexión 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:

5. 5. Análisis de datos
Según el documento de ayuda del Nodo de escritura S7. Puede saber que para escribir datos en el PLC, los datos que hay que pasar llevan dos parámetros, como se indica a continuación:

Por lo tanto, al analizar los datos, los datos enviados por la plataforma de aplicación deben convertirse en un mensaje con dos variables carga útil y variable pasado a Nodo de escritura S7. 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:

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

6. Escriba a PLC
Arrastre unNodo de escritura S7, Conectar Función Nodo de cálculo, Accione el interruptor en la plataforma de aplicación y compruebe el efecto de la demostración:

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
Todos los procesos admiten la importación y exportación en formato JSON, lo que facilita compartir con otros los procesos completados. El archivo JSON de proceso de este capítulo es el siguiente. Después de copiar, seleccione importar y pegar en la esquina superior derecha de la barra de menú. Lo mismo ocurre con la exportación.
[{"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""
- iot-es



