Controlando relés com um Arduino e o ScadaBR
Nos tutoriais anteriores nós demonstramos os procedimentos necessários para realizar a comunicação entre uma placa Arduino e o ScadaBR através do protocolo Modbus nas versões Serial e TCP/IP. Neste tutorial, vamos dar sequência ao desenvolvimento de projetos de automação, no entanto, ao contrário dos conteúdos anteriores, nós iremos ensinar como realizar o acionamento de múltiplas saídas digitais do Arduino por meio do ScadaBR.
[toc]
Série Arduino com ScadaBR
Este tutorial faz parte de uma série de tutoriais voltados para o ensino da utilização das placas Arduino em conjunto com o ScadaBR para o desenvolvimento de aplicações de automação. Atualmente, esta série conta com os seguintes tutoriais:
Mãos à obra – Controlando relés com o ScadaBR
Componentes necessários
Montando o projeto
Programando
#include <SPI.h> #include <Ethernet.h> #include <Modbus.h> #include <ModbusIP.h> const int RELE1_COIL = 0; const int RELE2_COIL = 1; const int RELE3_COIL = 2; const int RELE4_COIL = 3; ModbusIP mb; void setup() { byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED } byte ip[] = { 192, 168, 25, 16 }; mb.config(mac,ip); pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); mb.addCoil(RELE1_COIL); mb.addCoil(RELE2_COIL); mb.addCoil(RELE3_COIL); mb.addCoil(RELE4_COIL); } void loop() { mb.task(); digitalWrite(2, mb.Coil(RELE1_COIL)); digitalWrite(3, mb.Coil(RELE2_COIL)); digitalWrite(4, mb.Coil(RELE3_COIL)); digitalWrite(5, mb.Coil(RELE4_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
Em seguida, na criação do Data source, devemos dizer qual tipo de comunicação existirá entre os 2 elementos. Neste tutorial, vamos utilizar o protocolo Modbus IP, portanto basta encontrarmos a opção Modbus IP na lista de Data Sources e clicar no ícone à direita da lista em questão.
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).
Além destas configurações, devemos também especificar mais alguns parâmetros relativos à comunicação que será 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.
Após a criação e configuração do Data source, devemos criar pequenas estruturas denominadas 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.
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 RELÉ 1). 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.
Em seguida, devemos fazer os mesmos procedimentos para o relé 2, de modo que, desta vez, devemos associar o Offset do Data Point em questão com o valor atribuído no código do Arduino (neste caso, o número 1).
Em relação aos outros dois relés devemos fazer a mesma coisa, porém, para o relé 3, o campo offset será preenchido com 2 e no caso do relé 4, o campo offset deverá ser preenchido com 3.
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.
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.
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.
Após realizarmos o procedimento citado anteriormente, os nossos Data points aparecerão criados no lado direito da interface apresentada em nossa watch list.
Para acionarmos o relé, 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 relé estará apagado, ao passo que, quando alterarmos para 1(um) o relé será acionado).
Veja o resultado do acionamento do relé no ScadaBR.
.
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 as estruturas que serão responsáveis pelo acionamento dos relés. Assim como nos tutoriais anteriores, nós 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 os Coils que serão utilizados no acionamento dos relés basta declararmos quatro variáveis do tipo const int e em seguida atribuir um número à cada uma delas de acordo com a quantidade de Coils em uso no projeto (sempre começando com 0).
const int RELE1_COIL = 0; const int RELE2_COIL = 1; const int RELE3_COIL = 2; const int RELE4_COIL = 3;
– 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 os modos de operação dos pinos digitais 2,3,4,5 como saídas digitais e por fim, adicionamos os Coils que serão responsáveis por conter os valores utilizados no acionamento dos relés, através da função addCoil() .
void setup() { byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED } byte ip[] = { 192, 168, 25, 16 }; mb.config(mac,ip); pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); mb.addCoil(RELE1_COIL); mb.addCoil(RELE2_COIL); mb.addCoil(RELE3_COIL); mb.addCoil(RELE4_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 as funções necessárias para realizar a escrita dos dados referentes ao acionamento dos relés em suas respectivas instâncias Coil.
void loop() { mb.task(); digitalWrite(2, mb.Coil(RELE1_COIL)); digitalWrite(3, mb.Coil(RELE2_COIL)); digitalWrite(4, mb.Coil(RELE3_COIL)); digitalWrite(5, mb.Coil(RELE4_COIL)); }
Considerações finais
Neste tutorial, demonstramos como você fazer para acionar um conjunto de relés com Arduino e o ScadaBR, esperamos que você continue nos acompanhando e sinta-se à vontade para nos dar sugestões. Além disso, lembre-se de deixar suas dúvidas nos comentários abaixo.
porque devemos configurar “TCP MANTER VIVO” com esta configuração nota-se que ficou com um atraso no acionamento já com a configuração TCP a resposta ficou bem mais rápida , não entendi .
Muito bom o tutorial! Gostaria de aproveitar para trocar uma idéia sobre o http publisher do ScadaBr: estou utilizando o http publisher para enviar um comando para um servidor que faz um switch para o mosquitto. Quando crio o publisher e testo, ou configuro para envio periódico está funcionando bem. Mas como devo fazer para enviar comandos de botão, por exemplo, on/off, através do publisher http…