O que é o Protocolo MQTT?

O MQTT é um padrão de protocolo de mensagens para a Internet das Coisas (IoT).

Ele foi projetado para o transporte de mensagens de publicação/assinatura extremamente leve, ideal para conectar dispositivos utilizando código reduzido e largura de banda de rede mínima.

O protocolo MQTT hoje é usado em uma ampla variedade de indústrias, como automotiva, manufatura, telecomunicações, petróleo e gás, etc.

MQTT

O que significa a sigla MQTT?

MQTT (Message Queuing Telemetry Transport), é um protocolo de transporte de mensagens em fila para atividades de telemetria.

Podemos dizer que o protocolo MQTT serve para transportar mensagens de forma confiável e compatível para a comunicação entre máquinas (M2M) e de acordo com os conceitos do IoT (Internet of Things), onde é necessário utilizar pacotes pequenos e leves de dados em bandas estreitas de comunicação.

Por que utilizar o protocolo MQTT?

Este protocolo é leve e eficiente. Os equipamentos clientes MQTT são pequenos e simples, requerem recursos mínimos e podem ser usados ​​em microcontroladores pequenos.

Os cabeçalhos das mensagens MQTT são pequenos para otimizar a largura de banda da rede.

Visão geral do protocolo MQTT

O Comitê Técnico OASIS MQTT produz um padrão o protocolo compatível com MQTT V3.1, juntamente com requisitos para aprimoramentos, exemplos de uso documentados, práticas recomendadas e orientação para uso de tópicos MQTT com mecanismos de descoberta e registro de dispositivos na rede.

O padrão suporta mensagens bidirecionais para lidar uniformemente com sinais e comandos, entrega de mensagens determinísticas, níveis básicos de QoS, cenários “sempre/às vezes” conectado, acoplamento fraco e escalabilidade para suportar um grande número de dispositivos. Entre os pontos de melhoria estão: a priorização de mensagens, mensagens expiradas por tempo, carga de dados transportados e “time out” de registro de assinatura de dispositivos na rede.Arquitetura do MQTT

Como um protocolo de conectividade M2M/Internet of Things (IoT), o MQTT foi projetado para suportar o transporte de mensagens de locais/dispositivos remotos envolvendo pequenas áreas de código (por exemplo, microcontroladores de 8 bits e 256 KB de RAM), baixo consumo de energia, baixa largura de banda, alto custo conexões, alta latência, disponibilidade variável e garantias de entrega negociadas.

Por exemplo, o MQTT está sendo usado em sensores que se comunicam com um corretor por meio de links de satélite, SCADA, em conexões discadas ocasionais com provedores de saúde (dispositivos médicos) e em uma variedade de cenários de automação residencial e pequenos dispositivos.

O protocolo MQTT também é ideal para aplicativos móveis devido ao seu tamanho reduzido, pacotes de dados minimizados e distribuição eficiente de informações para um ou vários receptores (assinantes).

Estrutura do protocolo MQTTT

MQTT é um protocolo baseado em dados binários onde os elementos de controle são bytes binários e não strings de texto. O MQTT usa um formato de reconhecimento de comandos. Isso significa que cada comando tem uma confirmação associada.

MQTT estrutura do protocolo

Nomes de tópicos, ID de cliente, nomes de usuário e senhas são codificados como strings UTF-8.

A carga útil, excluindo as informações do protocolo MQTT, como ID do cliente, etc., são dados binários e o conteúdo e o formato são específicos do aplicativo.

O pacote MQTT ou formato de mensagem consiste em um cabeçalho fixo de 2 bytes (sempre presente) + cabeçalho variável (nem sempre presente) + carga útil (nem sempre presente).MQTT estrutura do protocolo

Os formatos de pacote possíveis são:

1 – Cabeçalho Fixo (Campo de Controle + Comprimento): Exemplo CONNACK

2 – Cabeçalho Fixo (Campo de Controle + Comprimento) + Cabeçalho Variável: Exemplo PUBACK

3 – Cabeçalho Fixo (campo de controle + Comprimento) + Cabeçalho Variável + Carga útil: Exemplo CONNECT

O campo de cabeçalho fixo consiste no campo de controle e no campo de comprimento de pacote de comprimento variável.

O tamanho mínimo do campo de comprimento do pacote é de 1 byte, que é para mensagens com um comprimento total inferior a 127 bytes (não incluindo os campos de controle e comprimento).

O tamanho máximo do pacote é 256 MB. Pacotes pequenos com menos de 127 bytes têm um campo de comprimento de pacote de 1 byte.

Pacotes maiores que 127 e menores que 16383 usarão 2 bytes. etc.

Nota: 7 bits são usados, ​​com o 8º bit sendo um bit de continuação.

O tamanho mínimo do pacote é de apenas 2 bytes com um campo de controle de um byte e um campo de comprimento de pacote de um byte. Por exemplo, a mensagem de desconexão é de apenas 2 bytes.

MQTT estrutura do protocolo

Campo de controle do protocolo MQTT

O campo de controle de 8 bits é o primeiro byte do cabeçalho fixo de 2 bytes. Ele é dividido em dois campos de 4 bits e contém todos os comandos e respostas do protocolo.

Os primeiros 4 bits mais significativos são o campo de tipo de comando ou mensagem e os outros 4 bits são usados ​​como flags de controle.

MQTT estrutura do protocolo

A tabela abaixo é extraída da especificação MQTT 3.1.1 e mostra uma amostra de comandos MQTT e seus códigos associados.

Como eles são a parte mais significativa de um campo de bytes de 8 bits, também apresentamos seus valores de bytes em decimal, como apareceriam no pacote de dados.

MQTT estrutura do protocolo

Flags de controle

Embora existam 16 flags possíveis, muito poucos são realmente usados.

A mensagem de publicação faz o um bom uso desses flags, conforme mostrado na tabela abaixo:

MQTT estrutura do protocolo

O duplicate flag é usado ao republicar uma mensagem com QOS 1 ou 2. Os flags de QOS são usados ​​ao publicar e indicam o nível 0, 1 ou 2. O flag Retain message também é usado na publicação.

Comprimento restante (Remaining Length)

Este é de comprimento variável entre 1 e 4 bytes. Cada byte usa 7 bits para o comprimento com o MSB usado como um sinalizador de continuação. O comprimento restante é o número de bytes após o campo de comprimento, inclui cabeçalho de comprimento variável e carga útil conforme ilustrado abaixo:

MQTT estrutura do protocolo

A figura a seguir ilustra o campo de comprimento para um tamanho de pacote de 64 e 321 bytes. O tamanho restante do pacote de 64 bytes requer apenas 1 byte.

MQTT estrutura do protocolo

O comprimento do pacote de 321 bytes requer um campo de comprimento restante de 2 bytes.

MQTT estrutura do protocolo

A tabela a seguir foi retirada da especificação e mostra os tamanhos dos pacotes e o campo de comprimento do pacote.

MQTT estrutura do protocolo

Cabeçalho de Comprimento Variável

Conforme mencionado anteriormente, o campo de cabeçalho de comprimento variável nem sempre está presente em uma mensagem MQTT. Certos tipos de mensagens ou comandos MQTT requerem o uso deste campo para transportar informações de controle adicionais.

O campo de cabeçalho de comprimento variável é semelhante, mas não o mesmo para todos os tipos de mensagem.

Exemplo de mensagem de conexão e desconexão do MQTT

Como ilustração, veremos agora os detalhes do pacote para uma mensagem de conexão.

Abaixo está um exemplo real de conexão e desconexão de cliente mostrando os valores reais de byte para os dados enviados e recebidos.

  • O código de controle CONNECT = 0x10
  • O código de controle CONNACK = 0x20

Pacote MQTT = controle + comprimento + nome do protocolo + nível de protocolo + flags de conexão + manter ativo + carga útil

MQTT estrutura do protocolo

Notas:

  • Observe os códigos de controle de conexão (0x10) e confirmação de conexão (0x20).
  • Observe o comprimento total de hex17 ou 23 bytes, não incluindo os campos de controle e comprimento. O campo de comprimento é de apenas 1 byte.
  • Você também deve poder ver o ID do cliente (python_test) no pacote enviado.
  • Ao olhar para os bytes de pacote reais, o Python imprime os valores hexadecimais, a menos que possa corresponder a um caractere ASCII. No exemplo acima, o campo keep alive é x00x3C, mas é exibido como x00<. Onde ASCII < = 0x3C

MQTT estrutura do protocolo

Tabelas de comandos Control Packet do protocolo MQTT

Control Packet

Variable Header

Payload

CONNECT Required Required
CONNACK None None
PUBLISH Required Optional
PUBACK Required None
PUBREC Required None
PUBREL Required None
PUBCOMP Required None
SUBSCRIBE Required Required
SUBACK Required Required
UNSUBSCRIBE Required Required
UNSUBACK Required Required
PINGREQ None None
PINGRESP None None
DISCONNECT None None

Análise de rede Wireshark

Para ilustrar uma questão sobre o protocolo TCP, foi criada esta captura de tela tirada do wireshark.

MQTT estrutura do protocolo

A figura apresenta um cliente MQTT conectando e publicando (QOS 1). Você pode ver claramente os pacotes ACK que têm um comprimento total de pacote de 58 bytes.

Sabemos que os pacotes ACK são de 2 bytes. Portanto, o pacote TCP sem MQTT tem cerca de 56 bytes.

O que também é interessante notar, é que cada comando ou resposta MQTT receberá um TCP ACK e talvez também um MQTT ACK.

Se você observar a captura de tela, perceberá que a conexão MQTT recebe uma resposta TCP ACK e uma resposta MQTT Connect ACK.

A resposta MQTT Connect ACK obtém uma resposta TCP ACK.

Especificação MQTT V3.1 Protocol Specification

Fontes de consulta e créditos

https://mqtt.org/

http://www.steves-internet-guide.com/mqtt-protocol-messages-overview/

https://www.oasis-open.org/

Produtos para IoT

Quando iniciei minha jornada na automação industrial há 28 anos, alguns modelos de CLP ainda utilizavam memórias EPROM. Ou seja, era necessário escrever o programa, compilar, gravar a EPROM, inserir a EPROM no soquete e testar a alteração. Eu costumava ter meia dúzia de EPROMs no apagador para ir alterando o programa, gravando e testando.

De lá para cá muita coisa mudou e o CLP passou a ser um produto de prateleira, uma “commodity”. Qualidade não é mais uma opção, todos têm ou estão fora do mercado. Nesses 28 anos desenvolvendo sistemas de controle e automação, grandes marcas se consagraram e novas marcas estão surgindo, é necessário critério para escolher.

Hoje quem manda é o mercado, o consumidor, e ele está cada dia mais criterioso. Reuni neste artigo alguns aspectos que considero importantes de serem considerados na hora de escolher o CLP para o próximo projeto, e quem sabe para os próximos anos.

10 fatores determinantes na escolha do CLP

  1. Suporte técnico
  2. Custo-benefício
  3. Custo da ferramenta de programação
  4. Desempenho do processador
  5. Relógio de tempo real
  6. Capacidade de simulação do programa sem necessidade de conectar ao CLP
  7. Portas de comunicação
  8. Protocolos de comunicação
  9. Capacidade de programação remota
  10. Facilidade de manutenção

Como a Alfacomp e a Haiwell abordam os 10 fatores

CLP - 10 fatores decisivos na escollha

1 – Suporte técnico

Pense no CLP que você está utilizando hoje, certamente é um produto de qualidade. A pergunta é: quando surge uma dúvida, você tem para quem ligar? Quando você liga, o suporte técnico ajuda você a pensar e solucionar o problema?

Pensando nisso, a Alfacomp disponibiliza os seguintes canais de comunicação:

Documentação:

Manual de hardware e software contendo a descrição técnica completa da linha de CLPs da Haiwell.

Treinamento on-line:

  • O curso de automação industrial utilizando o CLP Haiwell não tem custo. São aulas semanais divulgadas em nosso website. Para acompanhar, basta baixar os arquivos em PDF disponibilizados na página do curso
  • https://alfacomp.net/2020/12/14/curso-de-automacao-com-clp-haiwell-2/
  • Esperamos estar colaborando para o crescimento pessoal dos interessados. Em caso de dúvida, não deixe de nos contatar.

2 – Custo-benefício

A linha de CLPs Haiwell é composta de 4 famílias de CPUs e uma extensa gama de módulos de expansão, cobrindo desde aplicações de simples inter-travamentos até a composição de redes de CPUs de alto desempenho em sistemas distribuídos de controle.

3 – Custo da ferramenta de programação

A ferramenta HaiwellHappy é gratuita e sempre será, este é um compromisso da Haiwell e da Alfacomp.

Ferramenta HaiwellHappy

4 – Desempenho do processador

Os CLPs Haiwell são dotados de processadores ARM de última geração. ARM é um acrônimo de Advanced RISC Machine, ou seja Máquina Avançad
a RISC, sendo RISC uma arquitetura baseada em um conjunto de instruções reduzidas e de alta velocidade de processamento. Os processadores ARM são relativamente recentes na história da tecnologia digital e são utilizados, entre outras aplicações, nos Smartphones e Tablets de última geração.

Porque os CLPs Haiwell foram desenvolvidos recentemente, utilizam processadores de última geração, resultando em equipamentos de alto desempenho e baixo consumo. Um exemplo desse desempenho é a capacidade de ler até 8 Encoders e controlar até 8 motores de passo com velocidades de I/O de 200 mil pulsos por segundo.

Por serem CLPs de alto desempenho, os CLPs Haiwell são ideais para tarefas de movimentação e posicionamento de precisão, como por exemplo no controle CNC.

5 – Relógio de tempo real

Todos os CLPs Haiwell são dotados de relógio de tempo real. Isto significa que existe dentro de cada CLP um circuito eletrônico alimentado por bateria de lítio e baseado na precisão de uma base de tempo com a precisão garantida por um oscilador a cristal. Dessa forma, mesmo que falte energia, o CLP estará contando o tempos em Horas, Minutos, Segundos, Dias, Meses e Anos, capacidade necessária em muitos processos de automação.

6 – Capacidade de simulação do programa sem necessidade de conectar ao CLP

Imagine poder aprender a programar um CLP antes mesmo de ter adquirido o primeiro exemplar. Pois bem, isso é possível com o CLPs Haiwell pois a ferramenta de programação HaiwellHappy permite simular 100% do funcionamento do programa sem precisar conectar o CLP ao PC.

7 – Portas de comunicação

Consideramos fundamental que o CLP possua portas de comunicação em quantidade suficiente e por um custo baixo. Igualmente importante é que o CLP possa utilizar os protocolos MODBUS e TCP/IP por serem os mais difundidos do mercado.

Os CLPs Haiwell são dotados de três portas de comunicação independentes básicas:

  • RS232 – protocolo MODBUS mestre e escravo
  • RS485 – protocolo MODBUS mestre e escravo
  • Ethernet (opcional) – Diversos protocolos, incluindo MODBUS TCP

Além das portas básicas, é possível adicionar até 3 portas RS232 ou RS485 independentes utilizando módulos de expansão.

8 – Protocolos de comunicação

Comunicar utilizando os protocolos comuns de mercado, utilizando protocolos de alto desempenho e utilizando procolos configuráveis são características nem sempre encontradas nos CLPs de mercado. Veja as opções de comunicação disponíveis no Haiwell:

  • MODBUS (RTU e ASCII)
  • MODBUS TCP
  • Protocolo de alto desempenho “Haiwell High Speed Protocol”
  • Protocolo configurável “Free Communication Protocol”

9 – Capacidade de programação remota

Uma facilidade de alguns CLPs dotados de porta Ethernet é a capacidade de programação remota. Este recurso se mostra como vantagem competitiva importante pois permite alterações de sistemas de automação remotos, minimizando custos com deslocamento. Outra vantagem da programação remota é a facilidade de construir e comissionar sistemas distribuídos de controle em plantas industriais de grande porte. A Haiwell permite a construção de redes de controle distribuído de alto desempenho e baixo custo.

10 – Facilidade de manutenção

O último fator de decisão na hora de escolher o CLP, mas não menos importante, é a facilidade de manutenção em campo. A substituição rápida de módulos somente é possível se os conectores forem do tipo extraível (de engate rápido), nem todos os CLPs possuem essa facilidade.

Kit de treinamento – Conector extraível instalado OBS: Dois parafusos liberam cada barra de conexão dos CLPs Haiwell.

Considerações finais

O CLP deve ser avaliado sempre pelo conjunto de fatores que determinam sua escolha. Seja criteriosos pois você vai investir o seu tempo no aprendizado e treinamento necessário para utilizá-lo. Faça valer a pena esta escolha pois ela vai impactar não apenas o próximo projeto mas, provavelmente, os projetos dos próximos anos.

Leia também

TDS-100H Medidor ultrassônico de vazão portátil

Medidor de vazão ultrassônico – o que é? O medidor de vazão ultrassônico mede a velocidade de um fluido com ultrassom para calcular a vazão do líquido. Ele calcula a diferença no tempo de trânsito medido entre os pulsos de ultrassom que se propagam na direção e contra a direção do fluxo ou medindo a […]

MQTT

O que é o Protocolo MQTT? O MQTT é um padrão de protocolo de mensagens para a Internet das Coisas (IoT). Ele foi projetado para o transporte de mensagens de publicação/assinatura extremamente leve, ideal para conectar dispositivos utilizando código reduzido e largura de banda de rede mínima. O protocolo MQTT hoje é usado em uma […]

CLP - Controlador lógico programável

Quando iniciei minha jornada na automação industrial há 28 anos, alguns modelos de CLP ainda utilizavam memórias EPROM. Ou seja, era necessário escrever o programa, compilar, gravar a EPROM, inserir a EPROM no soquete e testar a alteração. Eu costumava ter meia dúzia de EPROMs no apagador para ir alterando o programa, gravando e testando. […]

Cálculo de rádio enlace

Uma abordagem prática voltada para sistemas de automação, telemetria e SCADA O cálculo de rádio enlace avalia a viabilidade de comunicação entre dois pontos. Se você já teve que interligar equipamentos seriais que comunicam via RS232 ou RS485 em distâncias ou situações em que cabos seriais eram inviáveis, este artigo é para você. Utilizar rádio […]

CLP - Controlador lógico programável

CLP – Controlador lógico programável O Controlador Lógico Programável é um computador robusto projetado para o controle de processos industriais e, portanto, utilizado em automação industrial, em inglês: PLC – Programmable Logic Controller. Esses controladores podem automatizar processos específicos, máquinas, ou linhas de produção. O CLP monitora o estado dos dispositivos de entrada, toma decisões […]

Este artigo é o quinto da série “Tudo sobre telemetria do abastecimento municipal de água“. Se você deseja elaborar e implantar um sistema de telemetria para os reservatórios e elevatórias de água e esgoto, ETAs e ETEs, estações reguladoras de pressão e pontos de macromedição, encontrará nessa série de artigos, todo o conhecimento necessário para projetar, construir e […]

Tutorial – Treinamento básico no Haiwell Cloud SCADA Este Tutorial serve como apoio ao Módulo de Treinamento para execução e programação do Haiwell Cloud SCADA. Com ele, você acompanhará o conteúdo do curso. No Treinamento é apresentado um estudo de caso que simula uma aplicação real, um sistema de supervisão e controle. A sequência de aprendizado […]