Desenvolvimento

1. Sensor para a medição

A escolha do sensor adequado é de extrema importância em qualquer projeto, pois ele desempenha um papel fundamental na coleta de dados precisos e confiáveis, no caso desse projeto em específico, a seleção correta do sensor é crucial para garantir a medição precisa em um meio líquido, como a precisão e confiabilidade, a faixa de medição que é trabalhado, combatibilidade ambiental, ou seja, é importante considerar sua capacidade de resistir a condições adversas, como temperatura, umidade, vibração, exposição a produtos químicos, entre outros, a integração desse sensor a algum dispositivo, pois é necessário garantir a comunicação para a coleta de dados, assim como o custo-benefício.

Para realizar a medição do nível dos tanques, a primeira ideia foi um simples sensor de nível boia, porém por realizar movimentos, é sujeito a falhas, além do que as inconstâncias do mar o deixariam extremamente imprecisos, logo, foi decidido a utilização de uma sonda de nível por pressão hidrostática. Seu funcionamento ocorre a partir da gravidade específica e a força da gravidade atuando sobre determinado líquido, assim gerando uma força peso que aumenta proporcionalmente na medida da altura da coluna d’água, ou seja, não é calculado o volume, e sim os metros de coluna d’água (MCA). Para decidir qual especificidade de sensor utilizar, apenas analisar pela faixa de precisão e MCA máximo, a grande maioria tem a variação do sinal analógico de 4 a 20mA, o ideal é escolher o sensor com o limite de coluna d’água menor possível de acordo com o tanque a ser medido, logo foi escolhido o de 1 MCA, sabendo que não irá superar esse valor. 

                     Sensor de pressão hidrostática

2. Coleta dos dados analógicos

Para a escolha do controlador lógico, é necessário alguns requisitos, como ser resistente a maresia, já que estará em alto mar, ser capaz de realizar comunicação serial para ser controlado via computador, o protocolo de comunicação a ser usado será o Modbus, pois este além de ser gratuito, a sua utilização é simples e eficiente, seu funcionamento é através do modelo de comunicação mestre/escravo, onde um dispositivo considerado “mestre” controla outros dispositivos chamados de “escravos”, podendo haver apenas um mestre, com um grande número de escravos.

 Os dispositivos escravos monitoram constantemente a rede para qualquer solicitação que possa receber, quando a mensagem é iniciada pelo mestre, todos os dispositivos na rede Modbus codificam o campo de endereço para determinar o escravo receptor da mensagem, como mostrado na imagem, o pedido do mestre e a resposta do escravo sempre tem a mesma estrutura, podendo configurar os bytes de cada categoria, que será demonstrado na realização do programa. 

Tendo em vista os pontos citados, foi planejado o escravo a ser usado, pensando à primeira vista em um C.L.P. (controlador lógico programável), porém além do alto custo, a variedade de utilizações de um C.L.P., quantidade de portas existentes, além das suas grandes capacidades por meio da programação Ladder não seriam utilizadas, realizando um mal uso do equipamento, pois o objetivo é captar sinais analógicos. Por conta disso, foi buscado outros modelos para uma correta aplicação e encontrado o módulo WP3082ADAM da WELLPRO, como mostra na imagem a seguir, ele tem disponível 8 entradas analógicas, pinos de alimentação e de comunicação, seu esquema de ligação está disponível no datasheet dependendo de como é o dispositivo a ser conectado. 

3. Montagem e teste do circuito

No datasheet é apresentado dois tipos de diagrama, um para sensor de 3 cabos, outro para 2 cabos, o sensor de pressão hidrostática escolhido tem 2 cabos, então a imagem ao lado representa o esquema de ligação, onde foi ligado o positivo e negativo da fonte no módulo, o cabo negativo do sensor em uma das entradas analógicas, o cabo positivo do sensor também no positivo da fonte, após isso, para ser possível realizar os testes, foi usado o software WELLPRO Debugging, no qual pode ser baixado através do site mostrado no datasheet.

Ao abrir o software WELLPRO Debugging, é pedido para selecionar qual o modelo do módulo escravo a ser testado, selecionando o WP3082ADAM, sendo visível acessar dois campos, o Function Testing e o Parameter Setting. A tecla "Function Testing" serve para realizar testes de função no módulo escravo. Ao pressioná-la, é viável verificar se o módulo está funcionando corretamente e se está recebendo os sinais esperados do sensor. Ela geralmente é usada durante a configuração inicial ou para diagnosticar problemas de comunicação, na entrada analógica 1 está mostrando 4mA, ou seja, está em pleno funcionamento com a corrente mínima do sensor, demonstrando que não há pressão aplicada no mesmo.

A tecla "Parameter Setting" é utilizada para configurar os parâmetros do módulo escravo, como a faixa de entrada do sinal de 4 a 20mA. Ao pressionar essa tecla, é possível acessar o menu de configuração do módulo e ajustar os parâmetros conforme necessário, nesse caso não foi necessário ajustes. Em ambos os casos está mostrando a aba de comunicação, onde o Baud rate é 9600 bts, sem paridade, 8 data bits e 1 stop bit, essa configuração Modbus será usada por padrão.

A imagem ao lado mostra o circuito montado do projeto, sendo eles a fonte, o módulo WP3082DAM e o sensor de pressão hidrostática. Como apresenta o esquemático, o positivo da fonte é ligado na entrada positiva de alimentação do módulo, juntamente com o positivo do sensor, o negativo da fonte é ligado a alimentação negativa do módulo, o negativo do sensor é conectado a uma das entradas analógicas, nesse caso a AI_1, e por fim, um jumper entre o negativo da entrada analógica com o negativo da fonte.

Sobre os componentes, o sensor foi o único item comprado, o módulo foi cedido temporariamente para o projeto e a fonte foi de fabricação própria para os testes, essa fonte já foi projetada antes de iniciar a disciplina, pois o intuito era ter uma fonte de bancada para projetos futuros.

4. Programação para cálculo do volume

Como foi dito anteriormente, o sensor de pressão hidrostática varia o sinal de acordo com a pressão por metro coluna d'água, para saber a variável de interesse, o volume, é necessário alguns ajustes para o tratamento do sinal. O primeiro passo foi criar um programa para cálculo de um volume simples e linear, tanto para analisar os processos necessários a serem feitos, quanto para se familiarizar com o JavaScript.

Na imagem abaixo mostra o programa em JavaScript, enquanto a direita um complemento em html para poder ser testado no navegador, a val_i é o valor inicial do sensor sem pressão externa, além da atmosférica, esse valor equivale a 819, e a val_f foi um valor teste para o volume final do tanque. Em percent_value é calculado o valor através de uma razão entre a diferença do valor medido com a inicial, pela diferença do valor final pelo inicial, multiplicando por 100 para ter o valor em porcentagem.

Após isso, foi iniciado testes para calcular a porcentagem do volume em tanques assimétricos, pois é algo comum em embarcações como também explicado, para isso, o primeiro método pensado foi coletando vários pontos onde a porcentagem é conhecida, e realizar aproximações lineares. Para esse método, ele precisa ser medido enquanto enchido apenas uma única vez, a bomba irá encher e é possível verificar quantos litros estão sendo liberados, antes de acontecer isso, com conhecimento do volume total do tanque, é calculado quantos litros devem ter a cada 20%.

Para exemplificar, supondo que em 40% tenha 100 litros, logo é anotado o valor medido no sensor e assim é repetido o processo, com os valores anotados, o código passa a ser semelhante ao primeiro, porém, o máximo e mínimo será entre cada valor, como mostra o código ao lado. Cada escala entre valores terá uma adição de 20% do tanque, se passar dos 40% por exemplo, será somado 40 mais o valor calculado de maneira linear.

O "x" é a variável que pode ser modificada para alterar o volume total do tanque, para ser apenas um único programa para mais parâmetros, se a intenção é medir apenas a porcentagem, basta colocar um valor de 100 na variável "litros", algo que acabou não sendo necessário.

Esta seria a programação final, porém, com o intuito de aumentar a precisão, foi pensado em criar um programa que realiza uma regressão polinomial em tempo real de acordo com as constantes determinadas e o valor atual do sensor. A regressão polinomial é um método estatístico que ajusta curvas polinomiais aos dados, permitindo modelar relações não-lineares entre variáveis. É uma extensão da regressão linear, sendo útil quando uma linha reta não é suficiente para descrever os dados.

Na imagem abaixo é demonstrado matematicamente esse método, onde pode ser descrito como uma matriz com o somatório dos valores elevados a determinado número, dependendo da sua posição, multiplicado pelas variáveis que irão resultar a função esperada, esse produto se igualando com o produto do somatório entre as constantes da primeira matriz com a somatória das constantes y. Para descrever a função, é a imagem da direita, onde o primeiro termo tem grau 1, que é somado ao segundo termo de grau 2, e assim sucessivamente.


Para atribuir esse método ao programa, basta saber quais são os valores a serem manipulados, nesse caso, terá 6 valores imutáveis, se referindo as porcentagens a cada 20%, sendo elas 0, 20, 40, 60, 80 e 100, as outras são baseadas no sinal do tanque ao estar preenchido por determinado volume, como explicado anteriormente. Na equação, os valores dos sinais são o "x", as porcentagens o "y", a matriz criada foi para resultar em uma função de 4ª ordem, realizando os testes, é um ótimo nível de precisão. 

Para garantir a confiabilidade do sistema, foi desenvolvido em JavaScript com adição de HTML para ser possível visualizar no navegador, podendo ser editável os valores dos níveis do sinal, o sinal e o volume total. Os resultados obtidos são o volume atual medido, tanto em porcentagem quanto em litros e a função polinomial que resultou no valor esperado, isso sendo comparado a uma regressão polinomial feita no Excel.


Excluindo a parte em HTML, deixando adaptado para o JavaScript específicamente para o software que será dito no próximo tópico, o programa final para cálculo de volumes é o seguinte:

5. Sistema supervisório

Para o sistema supervisório será utilizado um sistema SCADA, mais específicamente o software ScadaBR, suas principais funções na automação industrial são:

- Geração de gráficos e relatórios com o histórico do processo; 

- Detecção de alarmes e registro de eventos em sistemas automatizados; 

- Controle de processos incluindo envio remoto de parâmetros e set-points, acionamento e comando de equipamentos;

 - Uso de linguagens de script para desenvolvimento de lógicas de automação ("receitas"). 

Para realizar o procedimento, o primeiro passo é criar os data sources e datapoints iniciais para o tratamento de dados, data source é o local onde os dados são recebidos, cada data source é configurado para um protocolo de comunicação específico, já o data point é a coleção de valores históricos associados, um exemplo é o próprio sensor, ou até um valor virtual ou um script. O objetivo é realizar uma medição do volume de 10 tanques, mas apenas um deles será uma simulação real com um tanque, utilizando uma bombona de 20 litros, os outros são valores virtuais simulados, as imagens a seguir são do data source e data point da simulação de um tanque real.


Existe várias alterações possíveis, mas para não exceder, os requisitos mais importantes para uma comunicação Modbus eficiente é a codificação dos dados serem as mesmas do dispositivo conectado, sendo ela o Baud rate, que é a taxa de transferência desses dados, sendo escolhido o mesmo valor do módulo escravo, 9600 bts, o endereço dos dados, sendo eles 8 data bits, 1 stop bit para demonstrar o bit de parada, sem paridade, não há necessidade de verificação da chegada desses dados, certificando de estar utilizando a porta COM correta. Para o datapoint, o offset se resume ao número de dispositivos conectados no protocolo Modbus em questão, mantendo o valor 0 por ter apenas 1, outros termos importantes é a faixa de registro e o tipo de dados Modbus.

Na faixa de registros, existe o coil status, Input status, Holding register e Input register que são usados no protocolo Modbus, amplamente utilizado em sistemas de automação e controle. De maneira resumida, Coil status refere-se ao estado ligado/desligado de dispositivos de saída, enquanto o Input status representa o estado de dispositivos de entrada. Os Holding registers são usados para armazenar temporariamente dados numéricos, como configurações e parâmetros, enquanto os Input registers armazenam dados de entrada, como leituras de sensores. Visivelmente foi utilizado o Input Register.  No tipo de dados, existe uma gama de variações, para o sensor, foi escolhido o inteiro de 2 bytes sem sinal, pois o módulo escravo têm a capacidade de trabalhar nessa faixa de 16bits, o termo sem sinal se refere a não trabalhar com a faixa negativa.

Sobre os data sources virtuais, eles serão muito utilizados tanto para realizar simulações, quanto para o uso das constantes, pois com ele, torna essas constantes editáveis com facilidade, sua configuração é simples, basta ajustar o período de atualização e modificar o tipo de dado, foi usado o browniano para se aproximar o máximo de variações reais, mas existe outros tipos de alteração.

As opções de "Tipo de alteração" no Data Point Virtual do ScadaBr permitem simular diferentes padrões de alteração de valores. O modo "Browniano" gera alterações aleatórias, porém suaves e contínuas. O modo "Incremental" incrementa ou decrementa o valor em intervalos regulares. O modo "Sem atualização" mantém o valor constante. O modo "Aleatório" gera alterações aleatórias em cada atualização. O modo "Atrator" simula uma convergência em direção a um valor alvo ao longo do tempo. Cada opção oferece flexibilidade para criar cenários de teste ou demonstrações em que os valores podem ser alterados de maneira específica, possibilitando diferentes comportamentos e simulações. 


Para os níveis é ainda mais simples, pois é do tipo sem alteração, onde é colocado um valor de início que poderá ser modificado a qualquer momento,  o data point "litros" serve para o operador colocar o volume máximo do tanque, nesse caso o tanque 1, como indicado no nome do data source.


Para inserir o programa de medição do volume, é utilizado o data source meta, onde nele existe um campo de script, no tipo de dado é o resultado que irá gerar, nesse caso numérico, no contexto do script é adicionado os data points que o script depende para calcular o resultado final, para 1 tanque, é necessário as 6 constantes de dimensionamento da porcentagem referente do tanque e o valor do sensor, nesse caso está escrito média móvel, algo que será explicado posteriormente.

Os data points do script são reconhecidos pelo nome dado a variável, com a inclusão do .value para reconhecer que aquele dado será utilizado como um valor aplicável, existe um campo de teste do código antes de salvar e realizar o teste prático, que é o círculo verde com um "v", após pressioná-lo, mostrará o valor resultante do código, nesse caso, quantos por cento está o nível do tanque.

Para o cálculo do volume em litros é ainda mais simples, nesse passo que entra a constante indicadora do volume total de cada tanque, a partir dela e do script anterior, é calculado em quantos litros está o tanque no momento. O cálculo é simples, é pego a razão da porcentagem por 100, o produto disso com o volume total do tanque resultará no valor esperado.

Existe uma aba do ScadaBr onde tem a visualização de todos os data points criados, chamado de Watch List, nele é possível obervar e organizar os dados gerados, assim como fazer algumas modificações, os resultados dos dados gerados são mostrados a seguir: 

6. Inckscape

Inkscape é um software de edição de gráficos vetoriais de código aberto amplamente utilizado. Ele oferece uma ampla gama de recursos e ferramentas para criar e editar imagens vetoriais, incluindo desenhos, ícones, logotipos e ilustrações. Com o Inkscape, os usuários podem criar e manipular objetos vetoriais, aplicar preenchimentos, gradientes e efeitos, além de trabalhar com camadas e importar/exportar diferentes formatos de arquivo. É uma ferramenta para designers, artistas e qualquer pessoa que deseje criar gráficos de qualidade profissional de forma gratuita e acessível. 

Para exportar existe vários meios, o usado foi .svg, no qual é o ideal para o caso, pois por ser vetorizado, não existe perda de qualidade, o tamanho da tela foi baseado no IHM que será utilizado no projeto final. No caso do ScadaBR, foi usado para as representações gráficas, onde um operador tem a possibilidade de modificar as variáveis configuráveis e supervisionar os dados apresentados de uma maneira de simples interpretação e modificação do mesmo, para demonstrar, foi feito uma tela para as configurações dos níveis de cada tanque, sendo necessário sua modificação apenas uma única vez, e mais abaixo a tela da planta da embarcação, que como foi dito anteriormente, 10 tanques a serem medidos.

Na imagem abaixo é demonstrado como fica editado no ScadaBR, através do ícone de representação gráfica, onde basta dar upload na imagem que é adicionado, todos os data points podem aparecer na tela e nisso é apenas deslocar dentro da imagem. No caso da foto, o mouse está em uma das constantes, onde a partir disso, se torna modificável. Mais detalhes sobre a representação gráfica serão citados.

7. Média Móvel

Explicando de maneira resumida, a média móvel é um indicador amplamente utilizado na análise técnica para suavizar dados ao longo do tempo e identificar tendências. Existem três tipos principais de médias móveis: a Média Móvel Simples (SMA), a Média Móvel Ponderada (WMA) e a Média Móvel Exponencial (EMA). Uma de suas utilizações é na bolsa de valores, justamente para avaliar tendências, mas para o projeto, sua principal função é para corrigir a variação natural do sensor e o balanço do mar.

Por mais que o sensor seja um equipamento de precisão, existe micro variações, podendo inclusive ser influenciado pela alimentação da fonte, caso seja ruidosa, mas esses casos são praticamente desprezíveis. O fator determinante para necessitar da média móvel é por conta das oscilações do mar, sem a média móvel ao observar o visor, a comutação de valores seria alta, causando dúvida do real valor medido. Para simular valores de teste, foi usado o software octave e relizado um código tanto para as médias citadas, como uma mistura de média ponderada com média móvel nos valores, sendo os pontos de testes do vetor "x" criados por uma IA para simular um sinal variável semelhante ao browniano, foi notado que para o projeto, uma média móvel simples seria o suficiente.

Para colocar a média móvel no ScadaBR, é um pouco mais simples por conta de existir biblioteca interna relacionado a ela. Colocando o contexto do script como o valor simulado ou do sensor, junto com o condicional .past(MINUTE), é pego os valores de um minuto anterior a ele, juntamente com o .average para se tornar uma média, ou seja, é feito uma média móvel do valor atual com o de um minuto anterior a cada segundo.

8. Sistema de alerta

A transmissão e análise dos dados foram concluídas, porém para ter um sistema supervisório completo, é necessário avisos de inconsistências, alarmes são essenciais para garantir a continuidade das operações e a segurança do sistema, permitindo que os operadores tomem medidas rápidas e eficazes para mitigar os problemas identificados. No caso do projeto em si, um dos alarmes necessários é para o aviso do tanque em reserva.

Para a indicação da reserva, foi utilizado o data point que resulta a porcentagem total do tanque, quando esse valor for menor ou igual a 15%, a variável será "true", logo a reserva é acionada, se não, se mantém em "false". Em tanques convencionais, o valor de indicação da reserva é entre 10 a 20%, foi escolhido um valor mediano a isso.

Além da sinalização para alertar a falta de combustível, foi feito um sistema para detectar um provável vazamento no tanque, para isso, novamente o tipo de dado é em binário, pois necessita apenas de dois estágios. Com a derivada do volume em relação ao tempo, é conhecido o coeficiente angular da função, dependendo da inclinação, ou seja, uma grande perda de volume por um curto período de tempo, isso indica que há chances de uma ruptura.

Para calcular isso, existe uma função do ScadaBR .ago(MINUTE), onde a variável atual é comparada com a mesma variável a um minuto atrás, a subtração do tempo anterior com o tempo atual nada mais é do que a condição explicada, a diferença do volume em um tempo de 1 minuto, no caso da fórmula, foi suposto um valor de 10 a ser comparado, se for maior ou igual essa taxa de variação, o valor será "true".

Para ter uma visualização rápida de apenas um objeto tanto para saber se qualquer tanque está na reserva, ou tendo algum tipo de vazamento, foi criado outro data point para isso. Com esse intuito, é utilizado todos os data points de reserva e todos de vazamento, um total de 20, a ideia foi criar uma imagem de aviso, como por exemplo uma placa com símbolo de exclamação, onde ao estar tudo no estado ideal, sem tanque na reserva ou vazamento, a placa ficará de uma cor, para reserva em outro, para o vazamento outro, tendo 3 estágios possíveis.

Pensando nisso, o programa criado foi novamente um laço if, onde na primeira condição, quando qualquer data point da reserva e qualquer do vazamento estiverem em "true", o valor de "a" será igual a 2, o segundo é para caso qualquer um do vazamento seja "true", também será igual a 2. Essas duas condições são para certificar que mesmo com um tanque na reserva, o grau de importância de certo vazamento é maior, sendo atribuído a "a" o valor 2, logo após, a condição para "a" igual a 1 é quando qualquer data point de reserva esteja acionado, caso nenhuma dessas afirmações sejam validadas, o resultado é atribído a 0.

Na imagem da direita é apresentado o programa em um data point meta, no qual é adicionado as 20 variáveis citadas com a mesma nomenclatura do código. Na imagem abaixo é mostrado como adicionar imagens no ScadaBR para servirem de sinalização para determinado data point.

O primeiro passo foi criar uma imagem, nesse caso também foi feito utilizando o software Inckscape, as imagens foram exportadas no formato PNG para apenas aparecer a imagem, excluindo o fundo. Após exportar essas imagens, foi criado uma pasta chamada "Alerta" dentro dos arquivos de programa do ScadaBr, mais especificamente em "graphics", tendo que colocar na ordem para seguir sequentemente de acordo com os valores resultantes, de 0 a 2.

Foi adicionado um bloco de notas chamado "info", pois em todas as imagens acionáveis isso é necessário, para o software compreender sua função na pasta, assim como sua dimensão. A seleção desse GIF analógico não aparece no mesmo momento, aparecendo de maneira mais veloz ao limpar o cache das informações referente ao ScadaBR, ou reiniciando o Tomcat.

8. Complemento HTML

Para complementar a representação gráfica e tornar o sistema aplicável para um operador que tenha acesso apenas a representação, foi feito uma implementação com componentes HTML, sendo elas "teclas" que ao serem acionadas, podem fazer determinada ação. A primeira aplicação foi uma tecla disponível em todas as telas, onde ao acioná-la, é redirecionado para a tela principal, para isso foi encontrado uma imagem com formato semelhante a seta, foi criado uma pasta específica e colocado na mesma pasta de reconhecimento de imagem do ScadaBR, acessando a info para configurá-lo.

Na tela principal o intuito foi criar um menu de seleção de todas as telas e adicionais, criando um retângulo com a legenda de determinado ícone do menu, e por fim, uma zona invisível também acionada ao clicar, ficando sobreposta ao símbolo de alerta para detecção de reserva ou vazamento, para ter um rápido acesso na representação gráfica de alertas. As imagens a seguir apresentam o código de cada uma delas.

Download de arquivos de projeto:

Códigos

Datasheets e dados técnicos

Pesquisa & referências