Resumo dos requisitos
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) |
-
Parâmetros relacionados com a comunicação MQTT e requisitos de formato de dados JSON, tais como:
url:1883.dtuip.com:1883clientID:820000003058164Fusername:19381903226password:ZHZK19381903226Subscribe:820000003058164F/ Publish:820000003058164FJSON format:{ "sensorDatas": [ { "flag": "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 } ]}
análise da procura
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节点
) -
Formatar dados de acordo com o formato JSON (
函数节点
) -
Estabelecer uma ligação MQTT e publicar no tópico especificado (
MQTT发布节点
)
As principais tarefas da ligação descendente de dados incluem:
-
Subscrever tópicos MQTT e receber dados enviados pela plataforma (
MQTT订阅节点
) -
Analisar os dados JSON recebidos e armazená-los na memória (
函数节点
) -
Escrever no PLC no formato requerido por S7 (
S7节点
)
Realização de requisitos
1. Recolher dados PLC
-
Arrastar um
S7读数据节点
e um调试节点
da biblioteca de nós .调试节点
é utilizado para visualizar os dados PLC lidos para facilitar a localização do problema.
-
Fazer duplo clique
S7读数据节点
e preencher os parâmetros de configuração correspondentes de acordo com a síntese dos requisitos, como mostra a figura seguinte:
IP: Porta IP do PLC: 102 (porta padrão de comunicação do protocolo S7 102) Modo: TASP (S7-200 Smart seleciona TASP, outros modelos selecionam Rack/Slot) TSAP local: 1002 (valor fixo) TSAP remoto: 0301 (valor fixo) ) Período de recolha: 1000ms (predefinição 1000ms, personalizável) Período de timeout: 2000ms (predefinição 2000ms, personalizável) Configuração do ponto de dados (a relação correspondente pode ser encontrada de acordo com o documento de ajuda) 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 函数节点
Código Javascript para formatar os dados. O código é o seguinte:
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).Esta é apenas a ponta do icebergue dos nós de função. Como suporta a programação em linguagem Javascript, quase todas as funções que possa imaginar podem ser implementadas aqui.
3. Comunicar dados através de MQTT
Arrastar para um MQTT发布节点
Configure-o de acordo com os prompts, preencha as informações relacionadas com a ligação MQTT e o tópico de publicação MQTT (consulte a síntese de requisitos para obter detalhes) e pode implementar o relatório de dados. 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订阅节点
. Nota: MQTT发布节点
e MQTT订阅节点
podem 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.Se optar por adicionar um novo nó mqtt-broker, isso significa criar uma nova ligação MQTT.
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.Dados análise
De acordo com o documento de ajuda do S7写数据
Para escrever dados no PLC, os dados que precisam de ser passados têm dois parâmetros, como se segue:
Por conseguinte, ao analisar os dados, os dados enviados pela plataforma de aplicação têm de ser convertidos em uma mensagem com duas variáveis, carga útil
e variável
, e passou para S7写数据节点
. 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.Escrever para PLC
Arrastar um S7写数据
nó, ligar 函数计算
nó, acionar o interrutor na plataforma de aplicação e ver o efeito de demonstração:
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
Todos os processos suportam a importação e exportação em formato json, facilitando a partilha de processos concluídos com outros.O ficheiro json do processo deste capítulo é o seguinte. Depois de copiar, selecione importar e colar no canto superior direito da barra de menus. O mesmo se aplica à exportação.
[{"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""