Qual é o objetivo deste artigo?
Este artigo corresponde ao terceiro material da série sobre o desenvolvimento de projetos de automação utilizando o Arduino UNO juntamente com o Elipse SCADA. Neste conteúdo será apresentada uma maneira bem simples de monitorar as variáveis de um determinado processo com Elipse SCADA em tempo real, bem como mostrar como deve-se fazer para gerenciar os alarmes que eventualmente possam existir. Ao final deste artigo o leitor conseguirá criar a aplicação exibida na figura 1.

Primeiro passo: Definição do hardware que será utilizado
O hardware que será utilizado para demonstrar os conceitos propostos no início deste artigo será composto por um Arduino UNO, um sensor de temperatura TMP36 e quatro leds, juntamente com os seus respectivos resistores de acionamento. O objetivo do projeto desenvolvido neste artigo consiste em monitorar o comportamento da temperatura e acionar alarmes caso os valores correntes extrapolem os limites estabelecidos (existem quatro limites definidos: temperatura muito alta, temperatura alta, temperatura baixa, temperatura muito baixa) e consequentemente, acender os leds de acordo com o nível de desvio dos limites em questão (1 led para alta/baixa, 2 leds para muito alta/muito baixa).
Segundo passo: Elaboração do código que será inserido no Arduino UNO
No decorrer desta seção serão explicados todos os passos utilizados para o desenvolvimento do projeto proposto, isto é, o código será comentado de modo que todo conhecimento aplicado seja facilmente compreendido.
Em um primeiro momento deve-se incluir as bibliotecas necessárias para que o código a ser inserido no Arduino UNO funcione adequadamente. Neste artigo utilizaremos somente a biblioteca desejada para estabelecer a comunicação entre o Arduino UNO e o Elipse SCADA através do protocolo Modbus, que pode ser encontrada aqui (baixar o arquivo SimpleModbusSlaveV10.zip).
#include <SimpleModbusSlave.h>
Em seguida, realizou-se o uso da diretiva #define para associarmos as palavras que definem os componentes em questão aos seus respectivos pinos do Arduino UNO. O hardware utilizado possui quatro leds, cada um responsável por explicitar a ocorrência de um tipo de alarme entre os citados anteriormente.
#define LED_HIHI 12 #define LED_HIGH 11 #define LED_LOW 10 #define LED_LOLO 9
Posteriormente, pode-se observar um bloco chamado enum, neste estarão escritos os registradores que conterão as informações utilizadas na leitura de informações e acionamento de dispositivos. Estes são denominados Registradores Holding e para declará-los, basta escrever seus nomes seguidamente no código.
É importante ressaltar que após as declarações dos respectivos Registradores Holding, deve-se escrever HOLDING_REGS_SIZE (informação utilizada pela biblioteca para identificar a quantidade de Registradores Holding que estão sendo utilizados) e em seguida, cria-se a variável holdingRegs para a manipulação dos registradores em questão.
enum
{
TEMP_TMP36,
L_HIHI,
L_HIGH,
L_LOW,
L_LOLO,
HOLDING_REGS_SIZE
};
unsigned int holdingRegs[HOLDING_REGS_SIZE];
Na função setup(), utiliza-se primeiramente, a função modbus_configure() para determinar os parâmetros necessários para estabelecer a conexão via comunicação serial utilizando o protocolo Modbus. Os parâmetros mais importantes para este artigo são o segundo, o terceiro e o quarto que dizem respeito à taxa de transmissão de dados, o formato do pacote utilizado no protocolo Modbus e a identificação do escravo, respectivamente. Note que estes três argumentos citados devem estar em conformidade com as configurações do Elipse SCADA.
Em seguida, temos a função modbus_update_comms(), que também é responsável pela comunicação via Modbus, além da definição dos modos de operação dos pinos responsáveis pelo acionamento dos leds.
void setup()
{
modbus_configure(&Serial, 9600, SERIAL_8N1, 1, 2, HOLDING_REGS_SIZE, holdingRegs);
modbus_update_comms(9600, SERIAL_8N1, 1);
pinMode(LED_HIHI,output);
pinMode(LED_HIGH,output);
pinMode(LED_LOW,output);
pinMode(LED_LOLO,output);
}
O conteúdo da função loop() começa com a função modbus_update() utilizada para a atualização dos valores dos registradores citados anteriormente. Em seguida, realiza-se a leitura das informações presentes na porta de entrada analógica A0 e posteriormente realiza-se o envio de sinais de nível alto ou baixo, conforme o valor de estado dos leds (que serão determinados dentro da programação do Elipse SCADA).
void loop()
{
modbus_update();
holdingRegs[TEMP_TMP36] = analogRead(A0);
digitalWrite(LED_HIHI, holdingRegs[L_HIHI]);
digitalWrite(LED_HIGH, holdingRegs[L_HIGH]);
digitalWrite(LED_LOW, holdingRegs[L_LOW]);
digitalWrite(LED_LOLO, holdingRegs[L_LOLO]);
}
Terceiro passo: Escolha do driver e criação da(s) Tag(s) necessárias
Primeiramente, deve-se selecionar o driver apropriado para a aplicação que está sendo realizada. O driver em questão é o dado pelo arquivo Modbus.dll (caso o leitor tenha dúvidas sobre como proceder para adicionar este elemento corretamente, basta ver o passo a passo apresentado no primeiro artigo da série).
Da mesma forma que o driver foi inserido, recomenda-se novamente a leitura do primeiro artigo para conferir o procedimento para criação das tags a serem inseridas. Nesta publicação foram criadas 5 tags do tipo PLC, sendo uma para cada Registrador Holding existente no código.
Observe que de fato, uma dessas tags irá conter o valor do Registrador Holding responsável por obter a informação proveniente do sensor de temperatura. Entretanto, este valor precisa ser tratado para mostrar corretamente resultado em termos de temperatura. Para isso, deve-se criar uma tag do tipo expressão para então, por meio de uma expressão matemática, fazer com que esta armazene o valor corrigido proveniente da tag diretamente ligada ao Registrador Holding.
Após a realização do procedimento anterior, deve-se abrir a aba Alarmes para definir os limites que, caso sejam ultrapassados, farão com que os alarmes sejam acionados. Os limites estabelecidos são:
- LoLo – Acionado quando a temperatura ficar abaixo de -20 °C;
- Low – Acionado quando a temperatura ficar abaixo de 0 °C;
- High – Acionado quando a temperatura ficar superior a 80 °C;
- Hihi – Acionado quando a temperatura ficar superior a 100 °C.
Quarto passo: Criação dos elementos gráficos
Neste passo, serão criados os elementos necessários para que o operador possa interagir com o sistema existente.
Primeiramente, deve-se criar os 4 objetos do tipo text e definir as respectivas zonas para informar ao usuário o estado dos leds, ou seja, Ligado e Desligado. Lembre-se que o procedimento para a elaboração dos mesmos foi realizado no segundo artigo desta série, portanto, estas etapas serão omitidas neste momento.
Para que os elementos citados anteriormente funcionem da maneira prevista, deve-se construir um pequeno script visando o efeito desejado. Sendo assim, basta que o leitor clique no ícone Organizer (mostrado no primeiro artigo desta série), selecione o elemento Tela1 e crie um novo script na aba Scripts do tipo WhileRunning com o código descrito na figura a seguir, onde o alarme atuante no momento (currentAlarm) da tag temperatura_correta é comparado com vários valores (0 a 4) para que seja possível detectar qual é o nível de alarme ao qual a tag está sujeita. Segue a lista das comparações:
- tag.currentAlarm = 0 (nenhum alarme atuante);
- tag.currentAlarm = 1 (Alarme muito baixo – LOLO);
- tag.currentAlarm = 2 (Alarme baixo – LOW);
- tag.currentAlarm = 3 (Alarme alto – HIGH);
- tag.currentAlarm = 4 (Alarme muito alto – HIHI).
Em seguida, deve-se criar o elemento Graph, este permitirá que um gráfico de tendências possa exibir o comportamento de uma determinada tag em tempo real. O procedimento para a criação do mesmo é idêntica ao realizado para o text, bastando clicar no ícone correspondente e arrastar o mouse conforme o tamanho desejado.
Existem muitas propriedades que podem ser alteradas pelo usuário para personalizar a estética do gráfico de tendências, no entanto, o ponto mais importante está na aba Penas, onde o leitor incluirá qual ou quais tags serão apresentadas no gráfico. Para realizar este procedimento, basta clicar no ícone destacado na figura abaixo e na aba Y axis selecionar a tag desejada.
Por último, deve-se criar um objeto do tipo Alarm, este elemento será o responsável por informar na tela a ocorrência de todos os alarmes que forem ativados conforme algum dos limites estabelecidos nas propriedades das tags seja extrapolado. Basicamente, as propriedades deste bloco definem como e quais informações serão mostradas quando um alarme é ativado, de modo que o leitor tem a liberdade para “formatar” as informações da maneira que for conveniente. Entretanto, neste momento é importante marcar a opção Histórico no campo Tipo de Alarme, pois assim, todos os alarmes irão aparecer no bloco em questão, caso contrário, somente o último alarme será explicitado.
Finalmente, pode-se conferir o resultado do desenvolvimento realizado neste artigo na figura a seguir.

Esperamos que você tenha gostado deste conteúdo, sinta-se à vontade para nos dar sugestões, críticas ou elogios. Na próxima parte, abordaremos outros conceitos visando a progressão do aprendizado referente à manipulação desta ferramenta. Deixe seu comentário abaixo.














BOAS, EU TINHA SEGUIDO UM OUTRO TUTORIAL PARA LER UMA ENTRADA ANALÓGIA E ACIONAMENTOS DE ALGUMAS SAÍDAS, DEU TUDO CERTO, PORÉM QUANDO TENTEI LER 2 OU MAIS ENTRADAS ANALÓGICAS NÃO DEU CERTO, A SEGUNDA ENTRADA ESPELHA O RESULTADO DA PRIMEIRA, PODERIA ME AJUDAR? WBERGANTIN@GMAIL.COM
Rapaz, eu segui todos os passos, mas ainda sim da o problema de comunicação do driver, coloquei todas as programações no arduino e todo o resto no elipse, e mesmo assim ainda estou tendo esse problema, se você puder me ajudar de qualquer forma, eu preciso apresentar um trabalho que inclui isso nessa terça. Muito obrigado
O resultado é o mesmo se utilizar o LM35 ao invés do TMP36?
Praticamente!
Olá, qual versão do software você esta utilizando? É a versão DEMO ou completa?
É a versão demo meu amigo!