Para a comunicação do Arduino com o software Elipse E3 ou Elipse SCADA, é necessário que o hardware tenha características de um PLC ou RTU, ou seja, ele precisa ter um protocolo de comunicação programado a fim de transmitir as informações adquiridas pelos dispositivos de campo (sensores, relés, etc.) ao sistema supervisório.
Um dos protocolos de comunicação mais conhecido e utilizado é o Modicon Modbus, que será utilizado como exemplo no artigo.
1) Configurando o Arduino IDE
- Baixe o software Arduino IDE, disponível no site oficial, aba Download.
- Configure o IDE para que ele trabalhe com a placa (board) e a porta (port) específicas do seu equipamento. No exemplo, temos um Arduino UNO Rev3 comunicando via COM3.
Figura 1: Escolhendo a placa e a porta no IDE.
2) Configurando o protocolo Modbus Slave no Arduino
Após as configurações físicas, é necessário configurar o hardware como uma unidade escrava para a rede Modbus. Para tal, é preciso uma biblioteca com as configurações do protocolo.
Dentre as várias bibliotecas Modbus Slave disponíveis na internet, utilizaremos neste artigo a arduino-modbus-slave, que pode ser encontrada neste site (ou no arquivo em anexo dentro da pasta Arduino > ModbusSlave.zip).
- Importe a biblioteca ModbusSlave para a IDE Arduino através do menu Sketch > Include Library > Add .ZIP Library…
Figura 2: Inserindo uma biblioteca na IDE.
- Após a importação, abra o arquivo ModbusSlave_0.ino também em anexo. Este arquivo foi inspirado no código utilizado neste forum, podendo ser modificado conforme a necessidade.
- Verifique o ID Slave (regBank.setId(1)) e a distribuição e parametrização dos pinos. NOTA: mantenha o BaudRate em 9600bps
- Com as modificações devidamente realizadas, compile o código e, caso tudo esteja correto, faça o upload para o Arduino.
3) Configurando o driver Modicon Modbus Master (ASC/RTU/TCP)
Após o Arduino ter sido configurado como um escravo da rede, é preciso então configurar o driver mestre para a comunicação.
- Baixe o driver Modicon Modbus Master (ASC/RTU/TCP) no site da Elipse Software.
- Adicione o driver à aplicação (E3 ou Elipse SCADA), acesse suas configurações (IOKit) na aba Modbus e parametrize-as:
Figura 3: Configuração do protocolo Modbus.
- Na aba Setup, configure a propriedade PhysicalLayer como Serial
- Configure a aba Serial conforme abaixo. NOTA: se a porta COM1 tiver sido utilizada na configuração do Gerenciador de Dispositivos do Windows e na IDE, o driver deve ser configurado da mesma forma.
Figura 4: Configuração da aba Serial
- Por último, configure as Operations. Para parametrizá-las, é necessário verificar alguns detalhes:
a) Saídas Digitais: A leitura de status será feita através da função Read Coil Status (0x) e a escrita através da função Force Single Coil (0x). A parametrização da Operation será a seguinte:
Figura 5: Configuração para Saídas Digitais
b) Entradas Digitais: A leitura de status será feita através da função Read Input Status (1x). Esta opção não realiza a escrita. A parametrização da Operation será a seguinte:
Figura 6: Configuração para Entradas Digitais
c) Entradas Analógicas: A leitura de variáveis analógicas será feita através da função Read Input Registers (3x). Esta opção não realiza a escrita. A parametrização da Operation será a seguinte:
Figura 7: Configuração para Entradas Analógicas
d) Saídas Analógicas: A leitura de variáveis analógicas será feita através da função Read Holding Registers (4x) e escrita através da função Preset Single Register (4x). A parametrização da Operation será a seguinte:
Figura 8: Configuração para Saídas Analógicas
4) Configurando os tags de comunicação do driver
Para a configuração dos tags, siga as informações contidas no manual do driver ou no artigo Comunicação com Arduino.
A configuração dos parâmetros dos tags de comunicação é a seguinte
N1: Endereço do equipamento escravo (Arduino)
N2: Código da operação (ver capítulo anterior)
N3: Parâmetro adicional, não utilizado (deixar em 0)
N4: Endereço do registro do Arduino a ser lido/escrito
Exemplo de configuração de uma Saída Digital:
No código Arduino foram configuradas quatro saídas digitais. Veja abaixo o código com a configuração da função Modbus e dos pinos de saída (arquivo ModbusSlave_0.ino):
regBank.add(8);
regBank.add(9);
regBank.add(12);
regBank.add(13);
.
.
.
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
pinMode(12,OUTPUT);
pinMode(13,OUTPUT);
Nele, podemos identificar que os endereços 8, 9, 12 e 13 funcionam como saídas. A configuração do tag será a seguinte:
N1: 1 (ID Slave do Arduino)
N2: 1 (Operation para saídas digitais – ver acima)
N3: 0 (não utilizado)
N4: 8 ou 9 ou 12 ou 13 (endereço configurado no código)
Figura 9: Arduino controlando um LED através da saída digital 8
No anexo deste artigo estão as seguintes pastas:
- Arduino: contém o arquivo ModbusSlave.zip (biblioteca) e a pasta ModbusSlave_0 com o arquivo ModbusSlave_o.ino (código para o Arduino)
- ArduinoModbus_E3: contém uma aplicação em E3
- ArduinoModbus_SCADA: contém uma aplicação em Elipse SCADA
NOTAS:
- A biblioteca arduino-modbus-slave é licenciada segundo a GNU LGPL.
- Os valores das variáveis de entradas analógicas ou digitais ficam flutuando caso não haja algo plugado a estes pinos. Para contornar esta situação, deve-se aterrar os pinos de entrada que não forem utilizados.
Boa dia. Estou montando uma unidade REMOTA caseira com Arduino e gostaria de controlar 4 entradas digitais, 2 entradas analógicas, 4 saídas digitais e uma saída pwm. Estou aprendendo Elipse na escola e pesquisando esse assunto no site me parece possível. Poderiam explicar a manipulação das analógicas no driver? Agradeço.
Olá Vagner,
Para leitura/escrita de dados do tipo analógico(Word), configure os parâmetros N’s da Tag, conforme consta na documentação do Driver Modicon Modbus em: Configuração >> Configurando Tags >> Configurando um Tag de Comunicação >> Configuração Numérica.
Thank you so much, this example help me!!!
Bom dia! Preciso comunicar um IED com o Elipse. Preciso realizar as medições no SEL 735 e vizualizar no Elipse Power. Como realizar essa parametrização para que isso seja possível?
Boa noite! Gostaria de saber se é possível alterar o BaudRate? No artigo tem essa informação “Verifique o ID Slave (regBank.setId(1)) e a distribuição e parametrização dos pinos. NOTA: mantenha o BaudRate em 9600bps”.
Já alterei o baudRate na biblioteca e no firmware do microcontrolador do arduino e não obtive sucesso.
Boa Noite.
Preciso fazer esta mesma troca de dados entre o arduino+wifi ESP8266 com o elipse E3 free. Trabalho de TCC. Alguém teria algum exemplo que eu possa estudar?
Obrigado.
Andre Galao
Olá, tudo bem? Conseguiu?