ÍNDICE DE CONTEÚDO
A automação proposta neste artigo visa aplicar os conceitos de IoT no controle de nível de um reservatório de água teórico, utilizando o OpenPLC associado ao protocolo Modbus TCP em conjunto a ESP32. O foco não se limita à automatização do reservatório, mas também à integração eficaz desses conceitos. Isso não apenas permite um controle interno preciso, mas também estabelece uma comunicação externa interessante, possibilitando supervisão remota e ajustes à distância. O artigo registra e compartilha uma implementação técnica, oferecendo uma valorosa base teórica respaldada por resultados devidamente verificados.
Introdução Teórica
Reservatórios de Água
Reservatórios de água são encontrados de maneira interna ou externa à estruturas residenciais, comerciais ou industriais, sendo fabricados com uma vasta gama de materiais e tamanhos para gerar compatibilidade ao local de sua instalação e aplicação.
Popularmente, os reservatórios de água são conhecidos e utilizados para armazenamento de um específico volume de água, permitindo a continuidade do fornecimento em possíveis problemas na rede de abastecimento, mas em determinadas necessidades, são empregados de maneiras diversificadas. O volume de água armazenado pode ser utilizado para correção da pressão recebida da rede de abastecimento, em caso de falta de pressão em níveis superiores, através de bombeamento de sua saída, por exemplo: uma instalação onde a água da rede chega de maneira adequada aos pisos inferiores, mas não tem pressão suficiente para atingir os demais andares. O controle de vazão também é uma aplicação do volume de água armazenado internamente, acionando uma bomba em sua saída em determinada rotação, realizando a manipulação de vazão em um controle de fluxo.
O projeto idealiza o controle de nível de um reservatório sem marca, ou capacidade volumétrica (genérico) para aplicações que demandem, especificamente, correção da pressurização da rede ou determinado controle, em malha aberta, de seu fluxo de saída.
OpenPLC
O OpenPLC é um projeto gratuito e de código aberto que possibilita transformar placas de desenvolvimento de determinados microcontroladores em um PLC (Programmable Logic Controller) com organização lógica, programação e comunicação próximas ou iguais aos equipamentos industrialmente comercializados. A vantagem está no fato de ser desenvolvido em código aberto.
A composição do OpenPLC inclui um firmware embarcado em cada respectiva placa de desenvolvimento, um editor para escrita dos códigos, que dispõe das cinco linguagens estabelecidas pela norma IEC 61131-3, e um webserver com uma interface direcionada para o upload de programas e a leitura ou escrita de parâmetros por meio do protocolo Modbus TCP (MELO, 2016).
Modbus TCP
O protocolo Modbus TCP utiliza o TCP/IP (protocolo de rede / transporte) para envio e recebimento de parâmetros durante a interação entre dispositivos compatíveis, associados como mestres e escravos.
A sua Application Data Unit (ADU) é composta pelo Modbus Aplication Protocol (MBAP) Header e o Protocol Data Unit (PDU), sendo demonstrada pela FIGURA 1:
Fonte: MODBUS Messaging on TCP/IP Implementation Guide
As informações de cada bloco do MBAP header são demonstradas na TABELA 1, relacionando o bloco, seu tamanho, descrição e a sua utilização entre os dispositivos mestres e escravos.
Fonte: MODBUS Messaging on TCP/IP Implementation Guide
As informações do bloco PDU seguem o mesmo padrão encontrado no Modbus RTU (Remote Terminal Unit). Nesta aplicação, no que diz respeito às funções utilizadas (Fcode), realizamos a leitura de entradas digitais (0x02) e a escrita em múltiplas saídas digitais (0x0F). Os dados (data) obtidos ou a serem enviados devem ter até 252 bytes.
Para ilustrar um processo de leitura das entradas digitais de um dispositivo, é solicitada a leitura das duas primeiras entradas digitais. Lendo dois bits a partir do endereço inicial, os valores de DI.0 e DI.1 são exibidos na resposta. A estrutura é demonstrada na TABELA 2:
Fonte: IPC2U
Exemplificando um processo de escrita nas saídas digitais de um dispositivo, realiza-se a escrita nas duas primeiras saídas digitais. Escrevendo 0x02, DO.0 torna-se LOW e D0.1 torna-se HIGH. A estrutura é demonstrada na TABELA 3:
Fonte: IPC2U
Um aprofundamento mais detalhado sobre o protocolo Modbus TCP/IP pode ser obtido por meio do seu guia de implementação, que está disponível nas referências deste artigo.
Metodologia
A metodologia empregada no projeto deste artigo é separada e descrita de acordo com sua área específica. Cada área é apresentada em seu tópico correspondente.
Microcontrolador
O microcontrolador escolhido é a placa de desenvolvimento ESP32. Esta placa oferece WiFi integrado, um poder de processamento robusto e é compatível com a Arduino IDE, tornando-a perfeitamente adequada ao projeto. Entretanto, é importante observar que o OpenPLC não oferece suporte nativo para o ESP32, apenas para a ESP8266, sua antecessora. Para utilizar o ESP32, são necessárias modificações no firmware do ESP8266, que são disponibilizadas na página do projeto. Essas modificações incluem a adaptação da biblioteca de WiFi, a adição da função analogWrite() e a alteração dos pinos de entrada digital (%IXN), saída digital (%QXN), entrada analógica (%IWN) e saída analógica (%QWN). A configuração da placa ESP32 e dos pinos atribuídos é ilustrada na FIGURA 2:
Fonte: Autor
Após as modificações necessárias, o firmware, já com o nome e a senha da rede Wi-Fi (Wireless Fidelity) à qual será conectado, é gravado por meio do Arduino IDE.
Eletrônica
A parte eletrônica é composta por uma eletroválvula, uma bomba, três sensores de nível com flutuador, uma lâmpada, uma sirene e um conjunto de relés. A representação e conexão entre os componentes são demonstradas pelo conjunto de blocos na FIGURA 3:
Fonte: Autor
Cada pino específico da placa tem uma variável local atribuída, começando do endereço 100. Define-se a utilização dos endereços: “%IX100.0” até “%IX100.3” e “%QX100.0” até “%QX100.3”.
Controle
A aplicação dos elementos utilizados no controle do reservatório de água é distribuída de acordo com o que é demonstrado na FIGURA 4:
Fonte: Autor
A ativação e desativação do processo são controladas por uma associação em série de dois botões: um botão normalmente aberto e outro normalmente fechado. O primeiro, com trava, inicia e finaliza o controle, enquanto o segundo, com características emergenciais, permite uma parada imediata em condições de risco.
Os sensores monitoram o volume de água do reservatório em três níveis. Um valor HIGH é enviado para a ESP32 quando o flutuador é acionado, e um valor LOW é enviado quando o flutuador é desativado. O estado detectado pelos sensores determina a abertura da válvula, a ativação de cada um dos alarmes e o funcionamento da bomba. A lógica de controle embarcada, escrita em ladder, segue as seguintes condições:
- Considerando o nível do reservatório cheio, sendo este seu setpoint (todos os sensores em HIGH), a VÁLVULA é desenergizada, fechando-a, enquanto a BOMBA é energizada;
- Considerando o nível do reservatório na zona inferior ao sensor alto e superior ao sensor médio (SENSOR_ALTO em LOW, SENSOR_MÉDIO e SENSOR_BAIXO em HIGH), a VÁLVULA é energizada;
- Considerando o nível do reservatório na zona inferior ao sensor médio e superior ao sensor baixo (SENSOR_ALTO, SENSOR_MÉDIO em LOW e SENSOR_BAIXO em HIGH), unicamente nesta condição, o ALM_MÉDIO (visual) é energizado;
- Considerando o nível do reservatório insuficiente para o funcionamento (SENSOR_ALTO, SENSOR_MÉDIO e SENSOR_BAIXO em LOW), unicamente nesta condição, o ALM_BAIXO (sonoro) energizado. Ocorre a desenergização da BOMBA, até o sensor baixo ser novamente acionado, evitando a operação da bomba em vazio;
- A mesma lógica se aplica no processo de enchimento e esvaziamento do reservatório de água.
Utilizando o software OpenPLC Editor, cada elemento do projeto é atribuído a um endereço no PLC e a lógica de controle é escrita em ladder. A interface disponibilizada pelo programa durante este processo é demonstrada na FIGURA 5:
Fonte: Autor
Após compilar o código, um arquivo no formato ST (Structured Text) é gerado. Após a execução do OpenPLC Runtime, esse arquivo gerado é carregado no servidor web, permitindo o início da execução do projeto.
Comunicação
Definindo visualmente o processo de comunicação, o roteador Wi-Fi estabelece a comunicação sem fio entre o computador, que possui o webserver, e a placa ESP32 que, atuando como escrava, recebe instruções e envia os dados do reservatório de água. Esse fluxo é demonstrado pela FIGURA 6:
Fonte: Autor
A opção de monitoramento do webserver, acessada no navegador do computador pela porta 8080, permite o acompanhamento das entradas e saídas da ESP32, que se comunica através da porta 502. A interface de monitoramento do webserver é demonstrada na FIGURA 7:
Fonte: Autor
As entradas serão acionadas na ESP32 de acordo com o comportamento dos sensores em interação com a água no reservatório, permitindo a análise da interação entre as entradas, a lógica de acionamento das saídas e o respectivo protocolo de comunicação.
O Wireshark é um software desenvolvido para o monitoramento do tráfego da rede. A comunicação entre a placa e o computador, através do protocolo Modbus TCP/IP, é capturada por meio dele, permitindo analisar detalhadamente a aplicação do protocolo em cada estado da automação, como mostrado nas áreas destacadas em vermelho na interface do software, conforme ilustrado na FIGURA 8:
Fonte: Autor
A composição da informação do protocolo Modbus TCP segue a estrutura especificada anteriormente, através das tabelas 2 e 3.
Resultados
Os resultados obtidos na automação, de acordo com a lógica de controle estabelecida nas páginas 6 e 7, e os dados da comunicação entre o computador e a ESP32, estão divididos em tópicos. Cada tópico corresponde a uma condição do nível da água no reservatório, e existe um tópico específico para verificar a operação do botão de acionamento. Sendo assim, os tópicos são definidos como: Botão Desativado, Nível Completo, Nível A-B, Nível B-C e Nível Insuficiente.
Botão Desativado
Esta condição ocorre através da ativação ou desativação dos botões associados em série. A interface do webserver nesta condição é demonstrada na FIGURA 9:
Fonte: Autor
A FIGURA 10 e a TABELA 4 demonstram a captura realizada da solicitação de leitura do webserver e a respectiva resposta da ESP32 através do Modbus TCP/IP:
Fonte: Autor
Fonte: Autor
A FIGURA 11 e a TABELA 5 demonstram a captura realizada da solicitação de escrita do webserver e a respectiva resposta da ESP32 através do Modbus TCP/IP:
Fonte: Autor
Fonte: Autor
Nível Completo
Esta condição ocorre com o nível do reservatório completo. A interface do webserver nesta condição é demonstrada na FIGURA 12:
Fonte: Autor
A FIGURA 13 e a TABELA 6 demonstram a captura realizada da solicitação de leitura do webserver e a respectiva resposta da ESP32 através do Modbus TCP/IP:
Fonte: Autor
Fonte: Autor
A FIGURA 14 e a TABELA 7 demonstram a captura realizada da solicitação de escrita do webserver e a respectiva resposta da ESP32 através do Modbus TCP/IP:
Fonte: Autor
Fonte: Autor
Nível A-B
Esta condição ocorre com o nível do reservatório abaixo do sensor superior e acima do sensor médio. A interface do webserver nesta condição é demonstrada na FIGURA 15:
Fonte: Autor
A FIGURA 16 e a TABELA 8 demonstram a captura realizada da solicitação de leitura do webserver e a respectiva resposta da ESP32 através do Modbus TCP/IP:
Fonte: Autor
Fonte: Autor
A FIGURA 17 e a TABELA 9 demonstram a captura realizada da solicitação de escrita do webserver e a respectiva resposta da ESP32 através do Modbus TCP/IP:
Fonte: Autor
Fonte: Autor
Nível B-C
Esta condição ocorre com o nível do reservatório abaixo do sensor médio e acima do sensor baixo. A interface do webserver nesta condição é demonstrada na FIGURA 18:
Fonte: Autor
A FIGURA 19 e a TABELA 10 demonstram a captura realizada da solicitação de leitura do webserver e a respectiva resposta da ESP32 através do Modbus TCP/IP:
Fonte: Autor
Fonte: Autor
A FIGURA 20 e a TABELA 11 demonstram a captura realizada da solicitação de escrita do webserver e a respectiva resposta da ESP32 através do Modbus TCP/IP:
Fonte: Autor
Fonte: Autor
Nível Insuficiente
Esta condição ocorre com o nível do reservatório abaixo do sensor inferior. A interface do webserver nesta condição é demonstrada na FIGURA 21:
Fonte: Autor
A FIGURA 22 e a TABELA 12 demonstram a captura realizada da solicitação de leitura do webserver e a respectiva resposta da ESP32 através do Modbus TCP/IP:
Fonte: Autor
Fonte: Autor
A FIGURA 23 e a TABELA 13 demonstram a captura realizada da solicitação de escrita do webserver e a respectiva resposta da ESP32 através do Modbus TCP/IP:
Fonte: Autor
Fonte: Autor
Conclusão
A automação explorada neste artigo, como um todo, apresenta resultados concretos e igualmente satisfatórios. O processo de obtenção das entradas e manipulação das saídas, de acordo com a lógica de controle determinada, assim como o processo de recepção, transmissão e exibição de informações, está totalmente dentro das expectativas.
Durante a execução do controle, o comportamento lógico atende às condições estabelecidas, resultando na energização e desenergização da válvula, bomba e alarmes, de acordo com o estado do nível de água no reservatório indicado pelos sensores. Isso permite a manutenção do volume do reservatório de água o mais próximo possível de sua capacidade máxima (setpoint), conforme o necessário para manter esse propósito.
Os valores capturados e registrados do protocolo Modbus TCP, tanto nas solicitações quanto nas respostas das operações de leitura e escrita, estão de acordo com as características do protocolo. Ao observar os valores, destaca-se especialmente o “value readed“, encontrado nas respostas das solicitações de leitura, e o “byte value“, encontrado nas solicitações de escrita. Estes representam em hexadecimal o estado dos sensores e a determinação das saídas controladas, respectivamente. Eles estão devidamente alocados nos endereços de memória utilizados e exibidos no monitoramento no webserver.
No futuro, explorar uma análise durante uma aplicação em campo permitirá perceber e corrigir possíveis desafios gerados pelo ambiente durante a comunicação, bem como questões relacionadas à segurança. A aplicação de um software do tipo SCADA (Supervisory Control and Data Acquisition) também é desejável, enriquecendo a automação com uma maior visibilidade do processo.
Referências
Melo, Pablo. Conheça o OpenPLC – O primeiro CLP de Código Aberto Padronizado. Disponível em: https://bit.ly/3wMymL7. Acessado em setembro de 2023.
Modbus. MODBUS Messaging on TCP/IP Implementation Guide. Disponível em: https://bit.ly/3d4X0yF. Acessado em setembro de 2023.
IPC2U. Detailed description of the Modbus TCP protocol with command examples. Disponível em: https://bit.ly/3vIcqiY. Acessado em setembro de 2023.
Top!
Excelente artigo!