Dados Gerais
Integração S7 Siemens via MQTT 3
O que é o Broker 3
Estrutura do MQTT 4
Payload 4
Tópicos (topic) 4
Tópicos com Payload Simples 4
Tópicos com Payload em JSON 6
Formato do Payload JSON 6
Detalhamento dos campos do pacote JSON 7
Criando uma Integração 9
Obtendo o ID da máquina e o key-token 9
Exemplo de Integração Siemens S7 11
Introdução
O SIoT é uma plataforma para integrar sinais de diversos equipamentos na nuvem para monitorar, gerenciar e distribuir essas informações.
No momento da criação deste documento a comunicação via MQTT (https://mqtt.org/) foi o modelo que pode ser aplicado no Siemens S7 1200, tendo a vantagem de gerar pacotes pequenos, o que é muito vantajoso quando a comunicação se faz através de CHIPs M2M de banda estreita (narrow band).
Este pacote deverá conter informações sobre os dados que se quer integrar, sendo este um valor de relevância do equipamento, a exemplo um percentual, uma temperatura ou um valor de voltagem e também as informações que indicam qual sensor e a qual máquina ele pertence.
Para cada máquina cadastrada no SIoT é gerado um TOKEN. A função desse TOKEN na comunicação MQTT é ser usado como senha o qual utilizaremos junto com o ID da máquina para fazer a autenticação do equipamento no Broker MQTT da Konztec. É mais uma camada de segurança para impedir que fontes não autorizadas enviem dados se passando pelo sensor/máquina, aumentando a segurança do processo. Para cada sinal monitorado pelo equipamento poderá ser utilizado um tópico (topic) específico ou um tópico geral onde vários sensores de uma máquina poderão ser enviados de uma só vez no formato JSON.
O que é o Broker
Para utilizarmos a comunicação MQTT temos que nos conectar a um broker que irá fazer o processo de controlar as publicações e subscrições (publish/subscribe) dos clientes.
Cada mensagem deve conter um tópico (topic) que o broker irá usar para encaminhar para os clientes inscritos (no tópico). O Broker entrega essas mensagens para a plataforma SIoT que faz a validação, gravação e organização dessas mensagens conforme o tópico e seu conteúdo (payload).
Normalmente cada mensagem tem um payload que contém os dados a serem transmitidos no formato de bytes. Como formato de bytes estamos dizendo que um número, a exemplo, o número 10 será transmitido como um string “10” (sem aspas) no payload e não num formato binário INT, o mesmo vale para números fracionados, datas e outros valores.
O Broker disponibilizado pela Konztec para comunicação é fica no endereço (siot-broker-mqtt.konztec.com.br) e tem uma porta para comunicação MQTT e outra para comunicação MQTTS.
Estrutura do MQTT
Para integração via MQTT com o SIoT temos duas estruturas que demandam atenção para seus formatos, pois esses formatos definem como o SIoT irá fazer a correspondência correta entre os dados enviados e as máquinas e sensores cadastrados no sistema.
Payload
De maneira muito simplificada podemos dizer que no payload vai a informação que se quer enviar para o SIoT. Conforme explicado anteriormente, no payload colocamos os dados, no formato de bytes, que seria equivalente a uma sequência string. O SIoT aceita dois modelos de payload, o Payload Simples e o Payload JSON.
Tópicos (topic)
Como já informado anteriormente, a identificação de mensagens MQTT se dá através de tópicos (topics). Os tópicos formam uma hierarquia onde cada nível é separado por uma barra (“/”).
Com isso temos dois modelos de tópicos, um que o SIoT entende que o payload contém apenas uma informação do sensor (Payload Simples) e outro modelo para enviar um conjunto de informações no formato JSON (Payload JASON).
Tópicos com Payload Simples
Para enviar dados da maneira mais simples use o seguinte modelo:
/siot/{maquina_id}/{sensor_id}/{signal_id}
onde:
- /siot: é a raiz que criamos para indicar que o valor payload a ser enviado conterá apenas o dado daquele sinal.
- maquina_id: corresponde ao ID da máquina no SIoT que se está monitorando. Na Figura 1 no primeiro campo o ID é o agv_demo.
- sensor_id: corresponde ao ID do sensor vinculado à máquina no SIoT que se está monitorando. Na Figura 1 corresponde aos sensores (Produção, Perdas, etc…) vinculados àquela máquina. O ID é identificado no cadastro do sensor, conforme Figura 2 no primeiro campo pode ser identificado como bateria_nivel.
- signal_id: corresponde ao ID sinal do do sensor vinculado à máquina no SIoT que se está monitorando. Neste exemplo, olhando a Figura 2 logo identificamos seu ID como nivel.
Figura 1 - Edição de máquinas no SIoT
Figura 2 - Edição de sensores.
Então, considerando o modelo simples e utilizando-se dos dados presentes nas Figura 1 e Figura 2 temos o seguinte tópico formado:
/siot/agv_demo/bateria_nivel/nivel
Obs: As chaves não devem ser utilizadas, colocamos elas apenas para destacar que os símbolos são variáveis.
Se optarmos por enviar, a exemplo, o percentual da carga da bateria, e que o mesmo estivesse em 10% o valor enviado em payload poderia ser:
topic:
/siot/agv_demo/bateria_nivel/nivel
payload:
10
Obs: Note que o valor vai numa sequência de caracteres, sem aspas, sem símbolo do valor, no caso o percentual.
Tópicos com Payload em JSON
Para enviar dados no formato JSON o tópico deve ser formatado desta maneira:
/siot/s/{maquina_id}
Formato do Payload JSON
Abaixo segue o modelo do Payload JSON, nele notamos as variáveis entre colchetes que devem ser substituídas pelos valores a serem integrados:
{
"idMachine": "{maquina_id}",
"date": "{date_dispositivo}",
"sensors": [
{
"sensorId": "{sensor_id}",
"status": "{status_sensor}",
"signals": [
{
"signal": "{signal_id}",
"value": "{value}"
}
]
}
]
}
Obs: As chaves em vermelho não devem ser utilizadas, colocamos elas apenas para destacar que os símbolos são as variáveis e devem ser substituídos pelo valor a ser integrado.
Detalhamento dos campos do pacote JSON
Segue abaixo tabela com o detalhamento dos campos do pacote JSON:
Exemplo:
topic:
/siot/s/iot_2
payload:
{
"idMachine": "iot_2",
"date": "2020-03-20T12:05:20.000Z",
"sensors": [
{
"sensorId": "battery",
"status": "active",
"signals": [
{
"signal": "percentual",
"value": 75
},
{
"signal": "tension",
"value": 25.5,
"unity": "V"
}
]
},
{
"sensorId": "temperature",
"status": "lostconnection",
"signals": [
{
"signal": "atual",
"value": 23
}
]
}
]
}
Criando uma Integração
Como pré-requisito para efetuar uma integração é necessário que você tenha credenciais para acessar o sistema SIoT. Para isso é necessário entrar com um usuário e senha com acesso aos cadastros da empresa que deseja cadastrar as máquinas e sensores.
Para conseguir este acesso consulte o responsável pelo SIoT na empresa onde trabalha.
Após o login você terá acesso aos cadastros necessários para iniciar o processo de cadastro de uma nova máquina/sensor.
Obtendo o ID da máquina e o key-token
Para poder conectar no Broker Konztec é necessário você ter o ID da máquina e o KEY-TOKEN. O ID da máquina pode ser obtido conforme já explicado no capítulo anterior conforme Figura 1. O ID da máquina será utilizado para fazer como nome do usuário no broker. O key-token será utilizado como senha.
Para acessar o key-token da máquina acesse o menu da lateral esquerda conforme Figura 3.
Figura 3 - Menu lateral de Cadastros do SIoT
Acesse a opção Máquinas, e você terá acesso a lista de máquinas conforme a Figura 4.
Figura 4 - Tela de consulta de máquinas do SIoT
Observe o botão verde no lado direito, clique nele e irá aparecer um menu com as seguintes opções, conforme Figura 5.
Figura 5 - Menu das opçõe do cadastro de máquinas.
Selecione a opção Integração e você terá acesso ao key-token (conforme Figura 6) que é necessário para utilizar como senha na autenticação no Broker Konztec.
Figura 6 - Tela com as informações para integração da máquina do SIoT
Obs: Se o key-token estiver oculto, é só clicar no ícone ao lado esquerdo que o mesmo será mostrado e você poderá se utilizar das funções de copiar e colar do seu sistema.
Exemplo de Integração Siemens S7
Neste exemplo prático vamos utilizar um Siemens S7 1200 com as bibliotecas (LMQTT_Client) e (QDN) atualizado na versão 16 do TIA.
Primeiramente será necessário o download e instalação da biblioteca “LMQTT_Client” (Figura 7) que por sua vez poderá ser realizada diretamente do site da Siemens. Uma vez finalizada, dentro do projeto deverá ser inserida a função para a linha de código conforme Figura 8.
Figura 7 - Biblioteca LMQTT_Client
Figura 8 - Chamada da função no programa
Nesta função deverá ser realizada a tarefa em modo Publisher, onde o controlador irá transmitir as mensagens informando os status de cada informação ao Broker.
Para isto, as funções do bloco LMQTT a serem utilizadas serão:
- Enable: Responsável por habilitar a comunicação MQTT;
- PublishData: Flag de disparo do telegrama MQTT;
- tcpConnParam: Área de dados de configuração da comunicação TCP;
- mqttParam: Área de dados de configuração do protocolo MQTT;
- tcpEstablished: Flag de resposta que informa que a comunicação TCP está ativa;
- mqttEstablished: Flag de resposta que informa que o protocolo MQTT está estabelecido e ativo;
Dentro destes parâmetros deverão ser respeitadas algumas configurações e informações para que os dados sejam trocados e a comunicação seja estabelecida com o servidor broker. Configurações estas, mostradas abaixo (Figura 9) e detalhadas a seguir.
Figura 9 - Parâmetros DataBlock da comunicação MQTT
Dentro da estrutura do datablock da função MQTT temos uma divisão em subgrupos, onde cada qual possui a sua particularidade sendo elas:
tcpParam:
- useQdn: deve ser colocado em true para habilitar a conexão através do endereço URL do broker;
- qdnAdressBroker: deve ser inserido o endereço URL do broker com a terminação ”.” no final;
- mqttPort: Porta de acesso da comunicação MQTT com broker;
mqttParam:
- Password: deve ser colocado em true para habilitar a utilização de senha de acesso do usuário MQTT com o servidor broker. O Broker Konztec utiliza o usuário e senha, portanto deve ser true;
- userName: deve ser colocado em true para habilitar a utilização de nome de usuário MQTT com o servidor broker. O Broker Konztec utiliza o usuário e senha, portanto deve ser true;
- clientIdentifier: Nome de identificação do servidor MQTT;
- userName: nome de usuário MQTT com o servidor broker. No caso do SIoT é o ID da máquina, o primeiro campo da Figura 1;
- password: senha de acesso da comunicação MQTT com o servidor broker. No caso do SIoT deve-se preencher com o key-token do cadastro da máquina monitorada, o segundo campo da Figura 6;
mqttDataPublish:
- publishTopic: área de acesso utilizada no software para identificar qual o tópico de destino da informação de status;
- publishMessageData: área de acesso utilizada no software para escrever os status e valores da informação na mensagem;
Uma vez com todos os parâmetros preenchidos e com a conexão estabelecida, as flags tcpEstablished e mqttEstablished ficarão com seus valores lógicos em true. Deste modo, o sistema estará pronto para começar a transmitir as mensagens ao broker.
Todas as informações devem ser enviadas em formato de strings, por sua vez informando os seus respectivos tópicos e mensagens. Para cada máquina e sensor, deverá ser criado um tópico e por sua vez cada tópico com o seu status ou informação discriminado na área da mensagem (payload). Abaixo segue um breve exemplo do código desenvolvido com as áreas de montagem e envio das mensagens ao broker. (conforme Figura 10 e Figura 11)
Figura 10 - Montagem da mensagem MQTT para o broker
Figura 11 - Envio de mensagem MQTT