Desenvolvimento de sistemas supervisórios – Parte I

Este artigo corresponde à primeira parte de um conteúdo voltado para o desenvolvimento de sistemas supervisórios no ScadaBR. Estes sistemas servem para permitir que os operadores tenham o controle sobre determinados elementos de um processo, tanto através do acionamento dos mesmos como através do monitoramento.

Neste material, o leitor poderá aprender os procedimentos básicos para a elaboração de telas interativas, nas quais, serão apresentados os dados provenientes das variáveis de entrada do Arduino UNO como também os elementos responsáveis pelo acionamento das saídas digitais do mesmo.

 

PRODUTOS UTILIZADOS NO PROJETO:

 

 

MONTAGEM FÍSICA (HARDWARE):

 

Figura 1 – Hardware utilizado

 

DESENVOLVIMENTO DO CÓDIGO PARA O ARDUINO:

 

Neste ponto, serão demonstrados todos os passos para o desenvolvimento do código que deve ser inserido no Arduino UNO para que seja possível a realização das leituras das entradas digitais e analógicas do mesmo e também dos acionamentos das saídas digitais, através do ScadaBR.

 

O primeiro passo para o estabelecimento da comunicação entre os dois elementos consiste na inclusão das bibliotecas adequadas para a utilização do protocolo Modbus Serial no código do Arduino UNO. As bibliotecas utilizadas neste artigo foram desenvolvidas pelo André Sarmento e estão disponíveis aqui.

 

#include < Modbus.h >;
 
#include < ModbusSerial.h >;

 

Posteriormente deve-se determinar os offsets para cada conjunto de instâncias que for utilizado na programação. Ao todo existem quatro tipos de instâncias no protocolo Modbus, estas são:

 

  • Input Status  – Armazenamento de valores provenientes da leitura de variáveis booleanas. Neste artigo, este tipo de instância será responsável por conter a informação relativa ao estado do botão.

 

  • Input Registers – Armazenamento de valores provenientes da leitura de qualquer tipo de variável. Neste artigo, este tipo de instância será responsável por conter o valor fornecido pelo sensor de temperatura.

 

  • Coils – Armazenamento de valores que serão utilizados no acionamento on/off de dispositivos. Neste artigo, este tipo de instância será responsável por acionar o relé.

 

  • Holding Registers – Armazenamento de valores que provenientes de qualquer tipo de variáveis, tanto para leitura quanto para escrita, neste artigo, este tipo de instância será utilizada no acionamento do led por PWM.

 

Repare que os offsets são todos iguais a zero, pois, neste momento, utiliza-se instâncias diferentes (note que, caso fossem utilizados, por exemplo, dois Holding Registers, os offsets seriam 0 para um deles e 1 para o outro.

 

const int RELE_COIL = 0;
 
const int BOTAO_ISTS = 0;
 
const int SENSOR_IREG = 0;
 
const int LED_HREG = 0

 

Em seguida, declara-se algumas variáveis para facilitar na identificação dos pinos utilizados.

 

const int RELE = 8;
 
const int BOTAO = 9;
 
const int LED = 10;

 

Antes de prosseguir para a função setup(), deve-se criar o objeto do tipo ModbusSerial.

 

ModbusSerial mb;

 

Na função Setup(), pode-se perceber que existem três blocos de código separados, de modo que, o primeiro diz respeito à configuração dos parâmetros de comunicação do protocolo (deve-se ficar atento à taxa de transmissão escolhida, aqui, 9600 baud/s) e também à identificação do dispositivo que está sendo utilizado (como apenas um Arduino está sendo utilizado, este valor é 1).

O segundo bloco de código é responsável pela determinação dos modos de operação dos pinos utilizados (repare que não é necessário declarar os pinos de entrada analógica).

Por último, deve-se realizar a criação das instâncias utilizadas, conforme dito anteriormente.

 


void setup() {
 
mb.config(&Serial, 9600, SERIAL_8N1);
 
mb.setSlaveId(1);
 
 
 
pinMode(RELE, OUTPUT);
 
pinMode(LED, OUTPUT);
 
pinMode(BOTAO, INPUT);
  
 
 
mb.addCoil(RELE_COIL);
 
mb.addHreg(LED_HREG);
 
mb.addIsts(BOTAO_ISTS);
 
mb.addIreg(SENSOR_IREG);

}

 

Já dentro da função loop(), encontra-se a função task(), utilizada para gerenciar a comunicação e a troca de dados entre os dispositivos que estão conectados através do protocolo Modbus.

Além da função citada, estão presentes também as funções necessárias para realizar a escrita de dados nas instâncias Coil e Holding Register e as funções responsáveis pela leitura das instâncias Input Status e Input Register.

 

void loop() {

mb.task();
  

digitalWrite(RELE, mb.Coil(RELE_COIL));
 
analogWrite(LED, mb.Hreg(LED_HREG);
 
mb.Ists(BOTAO_ISTS, digitalRead(BOTAO));
 
mb.Ireg(SENSOR_IREG, analogRead(SENSOR));
}

 

DESENVOLVIMENTO DA ESTRUTURA DE CONTROLE NO SCADABR:

 

Assim como nos artigos anteriores, o primeiro passo para prosseguir com o desenvolvimento de uma aplicação no ScadaBR consiste na criação de um Data source, ou seja, na definição do elemento responsável por fornecer os dados do processo para o ScadaBR.

 

Figura 2 – Criação do Data Source

 

Após a determinação do Data source deve-se criar os Data points correspondentes aos elementos de hardware que serão utilizados. Inicialmente, cria-se um novo Data point para interagir com a instância do tipo Coil denominada RELE_COIL e em seguida deve-se definir seus campos da seguinte forma:

 

  • No campo Faixa do registro deve-se selecionar a opção Status do coil
  • O campo Tipo de dados modbus estará automaticamente definido como Binário
  • Deve-se atribuir o valor 0 ao campo Offset, devido ao fato de o Coil RELE_COIL ter sido a primeira instância deste tipo a ser adicionada no código (lembre-se que a ordem começa a ser contada a partir do 0 e não do 1)
  • Lembre-se de deixar a caixa de seleção marcada para que o Data point possa ser alterado por meio do ScadaBR

 

Figura 3 – Criação do Data point para acionamento do relé

 

O segundo Data point a ser criado servirá para interagir com a instância do tipo Holding register denominada LED_HREG. Seus campos devem ser definidos da seguinte forma:

 

  • No campo Faixa do registro deve-se selecionar a opção Registrador holding
  • O campo Tipo de dados modbus deve ser definido como Inteiro de 2 bytes sem sinal
  • Deve-se atribuir o valor 0 ao campo Offset, devido ao fato de o Holding register LED_HREG ter sido a primeira instância deste tipo a ser adicionada no código (lembre-se que a ordem começa a ser contada a partir do 0 e não do 1)
  • Lembre-se de deixar a caixa de seleção marcada para que o Data point possa ser alterado por meio do ScadaBR

 

Figura 4 – Criação do Data point para o acionamento do led

 

O terceiro Data point a ser criado será responsável por armazenar as informações provenientes da instância do tipo Input Status denominada BOTAO_ISTS. Em seguida deve-se definir seus campos da seguinte forma:

 

  • No campo Faixa do registro deve-se selecionar a opção Status de entrada
  • O campo Tipo de dados modbus estará automaticamente definido como Binário
  • Deve-se atribuir o valor 0 ao campo Offset, devido ao fato de o Input Status BOTAO_ISTS ter sido a primeira instância deste tipo a ser adicionada no código (lembre-se que a ordem começa a ser contada a partir do 0 e não do 1)
  • Lembre-se de deixar a caixa de seleção desmarcada para que o Data point só possa ser alterado manualmente

 

Figura 5 – Criação do Data point para a leitura do botão

 

Finalmente, cria-se o último Data point que estará relacionado com a instância do tipo Input register denominada SENSOR_IREG e em seguida define-se seus campos da seguinte forma:

 

  • No campo Faixa do registro deve-se selecionar a opção Registrador de entrada
  • O campo Tipo de dados modbus deve ser definido como Inteiro de 2 bytes sem sinal
  • Deve-se atribuir o valor 0 ao campo Offset, devido ao fato de o Input register SENSOR_IREG ter sido a primeira instância deste tipo a ser adicionada no código (lembre-se que a ordem começa a ser contada a partir do 0 e não do 1)
  • Lembre-se de deixar a caixa de seleção desmarcada para que o Data point só possa ser alterado manualmente
  • Neste caso deve-se utilizar o multiplicador para expressar o valor de temperatura já convertido

 

Figura 6 – Criação do Data point para a leitura da temperatura

 

CRIAÇÃO DA TELA DE SUPERVISÃO:

 

Antes de iniciar com o processo de criação da tela para o controle e monitoramento da aplicação, deve-se acessar o ambiente de desenvolvimento adequado. Para isto, basta clicar no ícone correspondente, denominado Representação Gráfica e localizado na barra de ferramentas do ScadaBR.

 

Figura 7 – Ambiente de criação de telas

 

Primeiramente, deve-se determinar o nome do supervisório e em seguida definir a imagem de fundo do mesmo, de modo que, este procedimento pode ser realizado através do menu existente.

 

Figura 8 – Propriedades da tela

 

CRIAÇÃO DOS ELEMENTOS GRÁFICOS:

 

O primeiro elemento gráfico que será inserido na tela de supervisão será o título. Note que, para incluir não só um título, como qualquer elemento textual na tela, é necessário que o leitor acesse a lista de componentes, escolha a opção HTML e clique no botão ao lado da lista de seleção para adicionar o componente.

 

Figura 9 – Componente HTML

 

Para utilizar este componente, basta clicar sobre o ícone que foi adicionado na tela e uma janela para a edição do componente em questão será aberta. Neste momento, deve-se ressaltar para o leitor, que este componente possibilita a criação de uma infinidade de aplicações através da utilização de códigos em HTML. Sendo assim, escreve-se o título fazendo o uso do código necessário para aumentar o tamanho da fonte do mesmo, além de colocá-lo em negrito.

 

Figura 10 – Código HTML para o título

 

Em seguida deve-se produzir os elementos gráficos que serão utilizados para manipular as informações referentes aos estados dos Data points criados, isto é, para manipular os valores armazenados pelos mesmos.

 

O primeiro Data point a ser desenvolvido graficamente, será o responsável pelo acionamento do relé, de modo que, para representar o mesmo, deve-se primeiramente criar um texto a partir do componente HTML (da mesma maneira realizada anteriormente) para identificar o Data point, com a palavra “RELÉ:” e em seguida criar um botão, selecionando o componente Botão (escrita).

 

Figura 11 – Componente Botão (escrita)

 

O próximo passo consiste em definir os parâmetros do botão adicionado. Para realizar este procedimento é necessário clicar nos ícones que são apresentados ao posicionar o mouse sobre o componente.  Primeiramente deve-se determinar qual Data point será modificado quando houver um clique no botão (note que, o Data point em questão deve ser do tipo binário) e em seguida define-se os textos que aparecerão de acordo com o estado em que a variável armazenada no Data point se encontra, além das dimensões do botão.

 

Figura 12 – Propriedades do Botão (escrita)

 

O resultado obtido está apresentado na figura abaixo:

 

Figura 13 – Representação gráfica final

 

O segundo Data point a ser desenvolvido graficamente será o de acionamento do led. Ao contrário do exemplo anterior, neste caso, além de criar um texto de identificação através do componente HTML deve-se adicionar uma espécie de display, para que o valor numérico do Data point possa ser modificado pelo operador na utilização do PWM. Sendo assim, abre-se a lista de componentes e seleciona-se a opção Script para o servidor. 

 

Figura 14 – Componente Script para o servidor

 

Em seguida, deve-se determinar o Data point que estará associado a este componente e também elaborar o script adequado para que mesmo apresente o valor do Data point (basicamente, a sentença “return value” é suficiente para que o valor do Data point seja mostrado, no entanto, utilizou-se algumas porções de código para aumentar a fonte da representação e colocar a mesma em negrito).

 

OBS: É imprescindível que as duas caixas de seleção estejam marcadas para que o leitor tenha a possibilidade de alterar o valor do Data point.

 

Figura 15 – Propriedades do valor utilizado no PWM

 

O resultado deste passo pode ser visto na figura abaixo:

 

Figura 16 – Resultado final

 

O terceiro Data point a ser desenvolvido graficamente será o de leitura do botão. Assim como dito anteriormente, deve-se utilizar um componente HTML para fazer um texto de identificação do Data point em questão e além disso, adiciona-se novamente um componente do tipo Script para o servidor, no entanto, desta vez pode-se perceber o emprego das estruturas condicionais if/else para que quando o estado do botão for 0, apareça a palavra Desligado e quando o estado do botão dor 1, apareça Ligado (lembre-se, a variável armazenada no Data point em questão é do tipo binário).

 

Figura 17 – Propriedades dos estados do botão

 

O resultado desta etapa pode ser visto na figura abaixo:

 

Figura 18 – Resultado final

 

Por fim, o último Data point a ser desenvolvido graficamente será o de leitura da temperatura, de modo que, o processo a ser seguido neste ponto é idêntico ao realizado no item anterior, apenas com uma pequena diferença no script utilizado para retornar o valor da temperatura.

 

Figura 19 – Propriedades do Script para a temperatura

 

O resultado deste último passo é o seguinte:

 

Figura 20 – Resultado final

 

Confira o resultado final:

 

Figura 21 – Supervisório pronto

 

Este foi mais um conteúdo que preparamos com bastante cuidado para você. Esperamos que tenha gostado desta publicação e lembre-se de deixar suas dúvidas, críticas e sugestões nos comentários abaixo.

Categorias
Novidades
Sem Comentários

Enviar Resposta

*

*

Sobre nós

Hoje a Usinainfo é um dos maiores ecommerces de Ferramentas, Peças para Eletrônica, Componentes Eletrônicos, Sensores e Arduino do Brasil, contando com uma grande diversidade de produtos na linha de eletrônica.

Sugestões

Artigos Relacionados