Índice
AlternarRequirements Overview
Este capítulo implementa principalmente um processo: O EG8200 recolhe dados do Siemens S7-200 Smart, reúne-os no formato JSON e comunica-os à plataforma de aplicação através de MQTT; ao mesmo tempo, pode receber comandos de controlo emitidos pela plataforma de aplicação para realizar a comutação remota. Para implementar este processo, é necessário preparar antecipadamente os seguintes materiais:
-
A porta IP e a tabela de pontos do PLC a recolher, por exemplo:
|
PLC |
S7-200 Smart |
||
|
IP |
192.168.0.24/102 |
||
|
Tabela de pontos (DB1) |
|||
|
endereço |
tipo de dados |
Atributos |
nome |
|
V0.0 |
Booleano |
somente leitura |
Estado de arranque e paragem do motor n.º 1 |
|
V0.1 |
Booleano |
somente leitura |
Estado de arranque e paragem do motor n.º 2 |
|
V0.2 |
Booleano |
somente leitura |
Estado de arranque e paragem do motor n.º 3 |
|
V0.3 |
Booleano |
somente leitura |
Estado de arranque e paragem do motor n.º 4 |
|
V0.4 |
Booleano |
Ler e escrever |
Controlo de arranque e paragem do motor n.º 1 |
|
V0.5 |
Booleano |
Ler e escrever |
Controlo de arranque e paragem do motor n.º 2 |
|
V0.6 |
Booleano |
Ler e escrever |
Controlo de arranque e paragem do motor n.º 3 |
|
V0.7 |
Booleano |
Ler e escrever |
Controlo de arranque e paragem do motor n.º 4 |
|
VD100 |
Sem sinal16 |
somente leitura |
Tensão (V) |
|
VD200 |
Sem sinal16 |
somente leitura |
Corrente (A) |
- 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
Ao efetuar um processo, a lógica básica é para efetuar o processo com base na tendência dos dados. Após análise, pode concluir-se que esta procura se divide principalmente em duas partes: ligação ascendente de dados e ligação descendente de dados. Entre elas, as principais tarefas da ligação ascendente de dados incluem:
-
- Ler os dados do PLC através do protocolo S7, e os dados obtidos são armazenados na memória (
S7 Node) - Formatar dados de acordo com o formato JSON (
Function Node) - Estabelecer uma ligação MQTT e publicar no tópico especificado (
MQTT Publish Node)
- Ler os dados do PLC através do protocolo S7, e os dados obtidos são armazenados na memória (
As principais tarefas da ligação descendente de dados incluem:
-
- Subscrever tópicos MQTT e receber dados enviados pela plataforma (
MQTT Subscribe Node) - Analisar os dados JSON recebidos e armazená-los na memória (
Function Node) - Escrever no PLC no formato requerido por S7 (
S7 Node)
- Subscrever tópicos MQTT e receber dados enviados pela plataforma (

Requirements Realization
1. Recolher dados PLC
-
- Arrastar um
S7 Read Nodee umDebug Nodeda biblioteca de nós.Debug Nodeé utilizado para visualizar os dados PLC lidos para facilitar a localização do problema.
- Arrastar um

-
- Fazer duplo clique
S7 Read Nodee preencher os parâmetros de configuração correspondentes de acordo com a síntese dos requisitos, como mostra a figura seguinte:
- Fazer duplo clique
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,
Se as definições estiverem corretas, será impresso um registo na janela de depuração, mostrando o conteúdo dos dados lidos.

-
- Por vezes, existem muitos pontos de dados PLC, e é complicado introduzi-los manualmente um a um. Os nós suportam a importação e exportação de pontos de dados:

2. Formatação de dados
De acordo com a orientação no passo 2, pode ver os dados PLC lidos na janela de depuração da seguinte forma:

Porque a plataforma de aplicação estipulou que os dados devem ser comunicados em formato JSON. Em seguida, utilize 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 })/*duas casas decimais*/jsonArray.push({ "flag": "current", " value": msg.payload.current / 100 })/*duas casas decimais*/let data = {}data.sensorDatas = jsonArraymsg.payload = JSON.stringify(data)return msg
Copie o código acima e cole-o no nó da função. Pode ver o efeito após a implementação:

Pode ver-se que os dados PLC lidos foram convertidos no formato JSON final de acordo com os requisitos e que os dados foram calculados até um certo ponto (duas casas decimais). 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.

3. Comunicar dados através de MQTT
Arrastar para um 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. Pode ver-se que, depois de os dados serem comunicados com êxito, a plataforma da aplicação apresenta um ecrã verde para indicar que o dispositivo está online e que os dados estão normais:

Neste ponto, a comunicação de dados foi concluída e pode ser realizada em alguns passos simples: recolher dados PLC e comunicá-los num formato JSON personalizado.
4. Receber dados via MQTT
Arrastar para um MQTT Subscribe Node. Nota: MQTT Publish Node e MQTT Subscribe Nodepodem partilhar uma ligação MQTT. Se for utilizada a mesma ligação mas um tópico diferente, arraste o nó e selecione a ligação configurada. If you choose to add a new MQTT-broker node, it means creating a new MQTT connection.

Selecionar um nó de depuração e clicar no botão de controlo na plataforma. Pode ver as instruções emitidas na janela de depuração:

5. Data analysis
De acordo com o documento de ajuda do 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:

Por conseguinte, ao analisar os dados, os dados enviados pela plataforma de aplicação têm de ser convertidos em a message carrying two variables carga útil e variável passed to S7 Write Node. O código do nó de função é o seguinte:
let cmdDate = msg.payloadmsg.variable = cmdDate.sensorDatas[0].flagmsg.payload = cmdDate.sensorDatas[0].switcher == 1 ? true : falsereturn msg
Copie o código acima, cole-o no nó de função e defina o nó de depuração para emitir a mensagem original. Pode ver o conteúdo impresso da seguinte forma:

Pode ver-se que os dados foram convertidos para o formato requerido pelo nó de dados de escrita S7.

6. Write to PLC
Arrastar umS7 Write Node, connect Function Compute Node, operate the switch on the application platform, and see the demonstration effect:

Resumir
Este capítulo introduz um processo relativamente complexo, com o objetivo de descrever as capacidades do gateway. Por conseguinte, não optimiza a segurança, a estabilidade, a flexibilidade, etc. do programa. Ao compreender este processo, creio que já está familiarizado com a programação visual da porta de entrada. De seguida, aprenda em profundidade a utilização das funções de cada nó. Ao dominá-las, terá mais opções e possibilidades para criar processos mais complexos!
Código fonte
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": "Data Formatting", "func": "let jsonArray = []nnjsonArray.push({"flag"": ""em1Status""