ScadaBR com Arduino via Modbus TCP/IP 

No tutorial anterior aprendemos a dar o primeiros passos com SCADABR. Dando sequencia, neste tutorial demonstraremos os procedimentos necessários para a comunicação do Arduino com o ScadaBR utilizando uma outra categoria do protocolo modbus: o modbus TCP/IP.

[toc]

kit robotica educacional com Arduino ESP ou Microbit


Mãos à obra – Estabelecendo a comunicação entre uma placa Arduino e o ScadaBR

Componentes necessários

 

Montando o projeto

Hardware utilizado.
Figura 1 – Hardware utilizado.

Programando

 

#include <SPI.h>
#include <Ethernet.h>
#include <Modbus.h>
#include <ModbusIP.h>

const int LED_COIL = 0;

ModbusIP mb;

void setup() 
{
   byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }
   byte ip[] = { 192, 168, 25, 16 }; 
   mb.config(mac,ip);  
   pinMode(9, OUTPUT);
   mb.addCoil(LED_COIL); 

}
 
void loop() 
{
   mb.task();
   digitalWrite(9, mb.Coil(LED_COIL));

}

Configurando o Scadabr

Neste momento, vamos apresentar os procedimentos iniciais que devem ser feitos no ScadaBR para que seja possível realizar a interação entre mesmo e a nossa placa Arduino. Primeiramente, para cumprirmos o objetivo apresentado, devemos fazer com que o ScadaBR identifique o elemento com o qual irá se comunicar. Isto deve ser feito através da criação de um elemento chamado Data source, que por sua vez, será a ponte entre a placa Arduino que estamos utilizando e o ScadaBR.

Data source é a estrutura que permite a comunicação entre o Arduino e o ScadaBR

Acessando o painel de criação dos Data sources no SCADABR
Figura 2 – Acessando o painel de criação dos Data sources.

Em seguida, na criação do Data point, devemos dizer qual tipo de comunicação existirá entre os 2 elementos. Como dito anteriormente utilizaremos o protocolo Modbus através da comunicação serial, portanto basta na lista de seleção encontrar a opção Modbus IP e clicar no ícone à direita da lista em questão.

Criando o Data Source do tipo Modbus IP.
Figura 3 – Criando o Data Source do tipo Modbus IP.

 

Em seguida, o ScadaBR irá nos direcionará para uma página, na qual, devemos definir os parâmetros do Data source em questão (lembre-se de que ele é a ponte entre o Arduino UNO e o ScadaBR). Em um primeiro momento, devemos apenas nomear o nosso Data source e também definir o tempo em que os dados serão atualizados (esta informação é muito importante, ou seja, torna-se fundamental que o leitor tenha conhecimento da aplicação que está desenvolvendo para que a escolha deste parâmetro resulte em um funcionamento eficaz do projeto).

 

Figura 4 - Definindo as configurações iniciais do Data Source.
Figura 4 – Definindo as configurações iniciais do Data Source.

 

Além destas configurações, devemos também especificar mais alguns parâmetros relativos à comunicação que será estabelecida estabelecida, como por exemplo: o endeceço IP previamente configurado no código do Arduino UNO e o tipo de transporte (sugerimos a opção “TCP com manter-vivo” em um primeiro momento. Não há necessidade de alterarmos o campo Porta.

Figura 5 - Configurando a porta para comunicação e o IP do Arduino.
Figura 5 – Configurando a porta para comunicação e o IP do Arduino.

Após a criação e configuração do Data source, devemos criar uma pequena estrutura denominada Data point. Os Data points são os elementos que irão conter os valores relacionados com as entradas e saídas da nossa placa Arduino. Para realizar este procedimento, vamos até a parte inferior da tela e em seguida clicamos no ícone localizado à direita da tabela referente aos Data points.

 

Figura 6 – Tabela dos Data points.

 

Após clicarmos no ícone citado, o ScadaBR nos dará uma janela com algumas opções para serem definidas. Primeiramente, devemos nomear o Data point (neste tutorial, chamamos o mesmo de LED). Em seguida, devemos garantir que campo Faixa do registro esteja com a opção Status do Coil selecionada.  Para salvar as configurações feitas, basta clicar no ícone existente na extremidade superior direita da janela.

Como este é um tutorial introdutório, nós não iremos abordar o funcionamento dos outros campos.

Figura 7 – Criando um novo Data point.

A figura a seguir mostra como a tabela onde estão organizados os Data points ficará após a criação realizada anteriormente. Para habilitar o data point desejado basta clicar no círculo vermelho presente no campo Status do Data point criado.

 

Figura 8 – Data point criado.

 

Por fim, devemos ir ao topo da página, salvar as configurações realizadas (procedimento idêntico ao realizado no passo anterior) e habilitar o Data source, clicando novamente no círculo vermelho existente ao lado do ícone de utilizado para salvar.

 

Figura 9 – Salvando as configurações do Data source.

 

Neste momento o leitor deve retornar a watch list (primeiro ícone da esquerda na barra de ferramentas) e no lado esquerdo da interface apresentada, clicar na seta para visualizar o estado do data point criado.

Figura 10 – Lista de Data points criados.

Após realizarmos o procedimento citado anteriormente, o nosso Data point aparecerá criado no lado direito da interface apresentada em nossa watchlist.

Figura 11 – Valor inicial do Data point.

.

 

Para acionarmos o led basta posicionarmos o mouse sobre o ícone localizado à esquerda do nome do Data point e alterar o valor do mesmo (repare que quando o valor do mesmo for 0 (zero), o led estará apagado, ao passo que, quando alterarmos para 1(um) o led será acionado).

Figura 12 – Manipulando o Data point.

Veja o resultado do acionamento do led no ScadaBR.

Figura 13 – Valor final do Data point .

 


Entendendo a fundo

Software

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 da comunicação entre o mesmo e o ScadaBR.

– Incluindo as bibliotecas que serão utilizadas

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 TCP/IP (desenvolvidas pelo  André Sarmento e estão disponíveis aqui). Além disso, devemos declarar também as bibliotecas responsáveis pelo funcionamento do protocolo de comunicação SPI e pela conectividade da nossa placa Arduino com a rede local.

#include <SPI.h>
#include <Ethernet.h>
#include <Modbus.h>
#include <ModbusIP.h>

– Definindo as estruturas do protocolo Modbus

Posteriormente, devemos determinar a estrutura que será responsável pelo acionamento do led. Neste tutorial, iremos abordar apenas uma entre as demais estruturas existente no protocolo MODBUS: os Coils. Estes elementos atuam no armazenamento de valores que podem ser utilizados no acionamento on/off de dispositivos.

Para definirmos o Coil que será utilizado no acionamento do led basta declararmos uma variável do tipo const int e em seguida atribuir um número à mesma de acordo com a quantidade de Coils em uso no projeto (como nesta aplicação estamos utilizando somente um Coil, atribuímos o numero 0 (zero) à variável declarada).

const int LED_COIL = 0;

– Criando o objeto mb

Antes de prosseguir para a função setup(), deve-se criar um objeto chamado mb para que possamos fazer o controla das estruturas existentes no protocolo Modbus.

ModbusIP mb;

– Definindo as configurações iniciais

Na função Setup() existem algumas linhas de código referentes às definições iniciais do programa. Primeiramente, devemos definir alguns parâmetros relacionados ao protocolo de comunicação utilizado, de modo que, este procedimento é realizado através da definição dos endereços MAC e IP da nossa placa Arduino UNO (na prática, o endereço MAC pode ser qualquer um, desde que seja único na rede, enquanto o endereço IP deve ser um endereço válido em sua rede local). Em seguida, para configurarmos o nosso protocolo Modbus, utilizamos a função config() em conjunto com os valores determinados anteriormente.

Em seguida, utilizamos a função pinMode() para definir o modo de operação do pino digital 9 como uma saída digital e por fim, adicionamos o Coil que será responsável por conter os valores utilizados no acionamento do led.

void setup() {
  
 byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED } 
 byte ip[] = { 192, 168, 25, 16 }; 
 mb.config(mac,ip); 
 pinMode(9, OUTPUT); 
 mb.addCoil(LED_COIL);

}

– Realizando o acionamento do led

Dentro da função loop(), utilizamos a função task() 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, temos também a função necessária para realizar a escrita do dado referente ao acionamento do led na instância Coil.

void loop() {
 
mb.task();
  
digitalWrite(9, mb.Coil(LED_COIL));

}

 


Considerações finais

Neste tutorial, demonstramos como você fazer para estabelecer uma comunicação entre a sua placa Arduino e o ScadaBR através de uma rede local, esperamos que você continue nos acompanhando e sinta-se à vontade para nos dar sugestões, críticas ou elogios. Lembre-se de deixar suas dúvidas nos comentários abaixo.

Privacy Preference Center