No artigo anterior, demonstrou-se como o leitor deve proceder para estabelecer a comunicação entre o ScadaBR e o Arduino utilizando o protocolo Modbus RTU Serial e além disso também foi possível apresentar, mesmo que de maneira breve, como realizar um simples acionamento de uma das saídas digitais do Arduino UNO através do ScadaBR.
O objetivo deste conteúdo consiste em apresentar os conceitos e passos necessários para que o leitor consiga acionar várias saídas digitais ao mesmo tempo e também como o mesmo deve proceder para utilizar PWM no acionamento das saídas citadas (isto é válido apenas para as saídas digitais que possuem a capacidade de trabalhar com PWM).
Produtos Utilizados no Projeto
- 1Arduino UNO + Cabo USB AB;
- 1 Led verde 5mm difuso;
- 1 Led vermelho 5mm difuso;
- 1 Led azul 5mm difuso;
- 3 Resistor 330 Ω 1/4 W;
- 1 Protoboard.
Montagem Física do Projeto
O teste é bem simples, para isso basta replicar o projeto conforme imagem abaixo. Se tiver dificuldades, utilize o campo de perguntas ao final do post.
Desenvolvimento do Código para 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 de acionamentos das saídas digitais do mesmo, através do ScadaBR. Antes de iniciar este tópico torna-se imprescindível dizer ao leitor, que acesse nosso segundo artigo caso tenha alguma dúvida em relação aos conceitos básicos do código utilizado.
O desenvolvimento do código começa pela inclusão da biblioteca SimpleModbusSlave.h através da sentença include e prossegue-se por meio do uso de diretivas define para que as palavras LED, LED2 e LEDPWM possam ser associadas no código aos pinos 9, 10 e 11 respectivamente.
[crayon-673f20443921f624800704/]
Posteriormente, deve-se declarar os Registradores Holding que serão utilizados para conter os dados relevantes para o acionamento dos dispositivos conectados nas saídas citadas anteriormente.
Neste ponto, modifica-se o código apresentado no artigo anterior para incluir mais dois Registradores Holding além do já existente (ESTADO_LED). Estes são os registradores ESTADO_LED2 e ESTADO_LEDPWM.
[crayon-673f204439224653650435/]
Na sequência, deve-se manipular a função setup() para definir as configurações iniciais do código a ser inserido no Arduino UNO. Além de definir os parâmetros das funções modbus_configure() e modbus_update_comms() da mesma maneira realizada anteriormente, deve-se declarar o modo de operação (para atuar como saídas digitais) dos pinos 9, 10 e 11 do Arduino UNO através da função pinMode().
[crayon-673f204439225451265850/]
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.
Por último, temos a função digitalWrite(), responsável por acionar os leds conectados nas nos pinos de saída digital 9 e 10 (LED e LED2) e também a função analogWrite(), que por sua vez terá o papel de acionar o led conectado no pino 11 utilizando PWM (LEDPWM) (observe que os valores utilizados para definir os estados dos leds estão contidos nos Registradores Holding ESTADO_LED, ESTADO_LED2 e ESTADO_LEDPWM, que por sua vez serão preenchidos dentro do ScadaBR).
[crayon-673f204439226254566762/]
Desenvolvimento da Estrutura de Controle no SCADABR
Neste momento, realiza-se uma alteração no Data source criado no artigo anterior, que por sua vez consiste na adição de mais dois Data points responsáveis por tratar os valores utilizados pelos Registradores Holding adicionados no código (ESTADO_LED2 e ESTADO_LEDPWM).
Primeiramente, cria-se um novo Data point para interagir com o Registrador Holding ESTADO_LED2 e em seguida deve-se definir seus campos da seguinte forma:
- No campo Faixa do registro deve-se selecionar a opção Registrador Holding
- No campo Tipo de dados modbusdeve-se selecionar a opção como Binário (note que este Data point irá trabalhar apenas com os níveis lógicos alto (1) e baixo(0) para acionar o led).
- Deve-se atribuir o valor 1 ao campo Offset, devido ao fato que o Registrador Holding ESTADO_LED2 ter sido o segundo registrador a ser adicionado no código (lembre-se que a ordem começa a ser contada a partir do 0 e não do 1).
Em seguida, deve-se criar mais um Data point, no entanto, este estará relacionado com o Registrador Holding ESTADO_LEDPWM. A configuração deste elemento é feita da seguinte forma:
- No campo Faixa do registro deve-se selecionar a opção Registrador Holding
- No campo Tipo de dados modbusdeve-se selecionar a opção como Inteiro de 2 bytes sem sinal (note que este Data point irá trabalhar com valores na faixa de 0 a 1023, provenientes da leitura do potenciômetro).
- Deve-se atribuir o valor 2 ao campo Offset, devido ao fato que o Registrador Holding ESTADO_LEDPWM ter sido o terceiro registrador a ser adicionado no código (lembre-se que a ordem começa a ser contada a partir do 0 e não do 1).
A figura a seguir mostra como os Data points estão organizados os após a criação realizada anteriormente. Neste momento, deve-se habilitar o Data point clicando no ícone adequado, conforme apresentado na figura abaixo.
Neste momento o leitor deve acessar a Watch list e clicar na seta para visualizar o estado do Data point criado. Observe que ao clicar no ícone localizado à esquerda do Data Point é possível alterar o estado do mesmo, neste caso, pode-se colocar a saída digital em nível alto ou nível baixo.
Para finalizar este conteúdo pode-se realizar algumas alterações na maneira como os dados são apresentados na Watch list. Para modificar, por exemplo, a apresentação do Data Point LED, deve-se clicar no ícone correspondente aos detalhes do Data Point
Em seguida, o leitor deve acessar a parte referente às propriedades de renderização de texto, definir o campo Tipo como Binário e determinar o que deve ser escrito (e a cor) na Watch list quando os valores o Data point forem 0 ou 1.
Depois de realizar este procedimento, pode-se repeti-lo para o Data point LED2. O resultado obtido através deste passo pode ser visto na figura abaixo.
Este foi mais um conteúdo que preparamos com bastante cuidado para você. Esperamos que tenha gostado deste artigo e lembre-se de deixar suas dúvidas, críticas e sugestões nos comentários abaixo.
Autor: Daniel Madeira
Engenheiro Eletricista – UFES (Universidade Federal do Espírito Santo)
Técnico em eletrotécnica – IFES (Instituto Federal do Espírito Santo)