Estabelecendo comunicação via protocolo Modbus com ScadaBR

dados por e-mail com ScadaBR

Qual é o objetivo deste artigo?

Este artigo corresponde ao início de uma série de materiais que visam auxiliar no desenvolvimento de projetos de automação utilizando o Arduino UNO juntamente com o ScadaBR. Neste conteúdo serão apresentados alguns conceitos introdutórios para que o leitor entenda o que estamos propondo de maneira bastante didática fazendo desta publicação um ponto de partida para aplicações cada vez mais elaboradas.

Para aqueles que nunca ouviram falar. o ScadaBR consiste em um sistema supervisório completo que por sua vez é disponibilizado em licença Open Source. Além disso, possui suporte para uma vasta gama de protocolos de comunicação, sendo portanto, compatível com um grande número de hardwares dos mais diversos fabricantes, característica essencial para ser utilizado, por exemplo, no campo de controle e automação industrial. Para maiores informações, clique aqui.

Primeiro passo: Definição do hardware que será utilizado

O hardware que será utilizado para demonstrar os conceitos iniciais propostos no início deste artigo será composto por um Arduino UNO, um led (e o respectivo resistor para o acionamento do mesmo, com um valor de resistência de 280Ω) e um potenciômetro de 4.7kΩ. De maneira mais direta, o objetivo do projeto desenvolvido neste artigo consiste em produzir um sistema onde o usuário pode definir o valor do PWM a ser utilizado no acionamento do led existente através do potenciômetro, para por exemplo, controlar a intensidade luminosa do mesmo.

 

Figura 1 – Hardware utilizado.

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.

Num 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 ScadaBR através do protocolo Modbus. Esta pode ser encontrada aqui (baixar o arquivo SimpleModbusSlaveV10.zip).

O código a ser utilizado foi derivado diretamente do exemplo disponível que vem junto com a biblioteca em questão. Portanto, caso o leitor queira, pode apenas modificar o exemplo citado.

Em seguida realizou-se o uso da diretiva #define para associarmos a palavra LED ao pino 9 do Arduino UNO.

Posteriormente pode-se observar um bloco chamado enum, neste estarão escritos os registradores que conterão as informações utilizadas na leitura ou no acionamento de dispositivos. São denominados no ScadaBR como Registradores Holding. Para declará-los basta escrever seus nomes seguidamente. Neste artigo, por exemplo, o Registrador Holding utilizado para conter o valor proveniente do potenciômetro chama-se VALOR_POT, enquanto o responsável por armazenar o valor que será utilizado no acionamento do led via PWM é denominado VALOR_PWM. É 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.

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 ScadaBR.

Em seguida temos a função modbus_update_comms() que também é responsável pela comunicação via Modbus, enquanto a função pinMode() determina o modo de operação (como saída) do pino onde está conectado o led.

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 da tensão aplicada à porta de entrada analógica A0 e posteriormente o valor encontrado é convertido em um número inteiro contido no intervalo entre 0 e 1023 utilizando a função analogRead() de forma que este é armazenado no Registrador Holding identificado como VALOR_POT. Por último, temos a função analogWrite(), responsável por acionar o led utilizando PWM (observe que o valor utilizado na largura do pulso está contido no Registrador Holding VALOR_PWM, que por sua vez será preenchido dentro do ScadaBR).

Terceiro passo: Criação do Data Source e seu(s) respectivo(s) Data Point(s) para aquisição de dados

Neste momento iremos abordar os primeiros passos para realizar a interação do Arduino UNO com o SCADABR. Primeiramente é necessário fazer com que o SCADABR identifique o elemento com o qual irá interagir, chamado dentro do programa de Data source, de modo que para a criação deste é necessário clicar no ícone correspondente presente na barra de ferramentas conforme a figura a seguir.

Figura 2 – Barra de ferramentas

Em seguida deve-se estabelecer 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 Serial.

Figura 3 – Criação de um Data source

Posteriormente algumas informações devem ser fornecidas para o SCADABR tanto para identificação do dispositivo escravo quanto para que a funcionalidade seja efetiva. Num primeiro momento o leitor deve nomear o dispositivo escravo, bem como definir o tempo em que os dados serão atualizados (esta informação é muito importante, sendo portanto, 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 – Definição de características básicas

Além destas configurações básicas, deve-se especificar mais alguns parâmetros relativos à comunicação estabelecida, como por exemplo: a porta COM utilizada (neste artigo utilizamos a porta COM11), e a taxa de transmissão utilizada (9600 bps). Neste momento, o leitor deve recordar que ao escrever o código para o Arduino UNO, existiam duas funções dentro da função setup() em que um dos parâmetros era a sigla SERIAL_8N1. Esta significa que estão sendo utilizados 8 bits para dados e um bit de parada na transmissão da informação entre os elementos, portanto, estas informações devem estar identificadas nos campos data bits e stop bits. Observe que existe uma vasta gama de campos que podem ser modificados, no entanto, para este artigo foi necessário alterar somente os já citados.

Figura 5 – Definição de características pertinentes à comunicação

Para conferir se o Arduino UNO foi encontrado, basta pesquisar a existência de um nó conforme a figura abaixo.

Figura 6 – Pesquisa de nós

O próximo passo é inserir no SCADABR os registradores holding que foram declarados no código do Arduino UNO. Para realizar este procedimento deve-se criar os chamados data points, clicando no ícone encontrado na extremidade superior direita da figura abaixo.

Figura 7 – Criação de data points

Após o procedimento realizado anteriormente, uma nova janela é aberta para que seja possível determinar as propriedades do data point criado. Primeiramente é necessário nomeá-lo (aqui foi utilizado o nome POT) e em seguida definir 3 campos fundamentais: o primeiro é o Faixa do registro onde a opção a ser selecionada deve ser registrador holding, em seguida Tipo de dados modbus determinado como Inteiro de 2 bytes sem sinal e, por último, Offset (este campo, diz ao SCADABR qual dos registradores holding será escrito ou lido, de maneira que o número a ser utilizado vai de acordo com a sequência escrita no código do Arduino UNO, ou seja, como será lido o registrador VALOR_POT e este foi o primeiro a ser escrito na tabela, usa-se o valor 0 no Offset). Observe que ao efetuar a leitura, o SCADABR apresentará um valor que varia de 0 a 1023 conforme esperado, no entanto caso o leitor queira um valor entre 0 e 5V basta utilizar o valor adequado no campo Multiplicador.

Figura 8- Definição das propriedades dos data points

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 ícone conforme a figura citada.

Figura 9 – Data point criado

O próximo passo é criar o data point responsável pelo acionamento do led via PWM. Este procedimento é idêntico ao anterior, exceto por uma diferença no campo Offset que desta vez é preenchido com o valor 1 (já que este refere-se ao segundo registrador da tabela escrita no código do Arduino UNO) e a opção configurável deve ser marcada.

Figura 10 – Data points operacionais

Neste momento o leitor deve retornar a watch list (primeiro ícone da esquerda na barra de ferramentas) e clicar nas setas para visualizar o estado dos data points criados.

Figura 11 – Watch list

Repare que nos valores das medições, o data point referente ao PWM mostra o valor 0, enquanto o data point que diz respeito ao valor lido através do potenciômetro possui um conteúdo de fato condizente com a posição do mesmo. Isto acontece porque em nenhum momento o registrador holding responsável por conter o valor a ser utilizado no PWM é atualizado.

Figura 12 – Aquisição de dados

Quarto passo: Criação do(s) Point Link(s) 

Existem algumas maneiras de relacionar o valor a ser utilizado no PWM de acordo com a posição do potenciômetro, de forma que neste artigo esta correspondência será realizada dentro do SCADABR. Para isto é necessário clicar no item point links localizado na barra de ferramentas e adicionar um novo point link, onde o data point de origem é o POT e o de destino é o chamado PWM. O próximo passo é escrever o script que será responsável por proporcionar o valor desejado ao data point PWM, conforme a figura (o valor 51 é a constante de proporcionalidade para converter um valor de 0 a 5V em outro no intervalo entre 0 e 255) e posteriormente salvar (não esqueça de mudar o campo evento para atualização, pois caso este procedimento não seja feito, o valor só irá atualizar quando houver alguma modificação no data point de origem). Neste momento, o leitor pode retornar a watch list e conferir os valores adquiridos por meio do potenciômetro, bem como o responsável por acionar o led.

Figura 13 – Retornando um valor criado no SCADABR para ser utilizado no PWM

A figura 17 exibe o resultado do projeto desenvolvido neste artigo, onde é possível ver a relação entre a posição do potenciômetro e o PWM gerado (gráfico) além da exibição dos valores referentes aos data points no SCADABR.

Figura 14 – Resultado

Esperamos que você tenha gostado deste conteúdo, sinta-se à vontade para sugestões, críticas ou elogios. Deixe seu comentário abaixo.