Automação – Utilizando Arduino, ScadaBR, Modbus RTU RS485

Estou precisando de ajuda em algumas coisinhas bem bobas (eu nunca fiz nada parecido, não tenho conhecimento nessa área, sou nova com tudo) a respeito de uma automação que estou fazendo no meu estágio.

Eu preciso fazer a automação da leitura de dados de um MMG (Multimedidor de Grandezas, modelo Power Meter 710 da Schneider - como o a figura, com manual do fabricante em: https://www.schneider-electric.com.br/pt/download/document/63230-50...). As ferramentas foram definidas pelo meu chefe, e eu usarei um Arduino (tentei o Leonardo, mas tive problemas com a identificação das portas dele, então agora estou com o UNO), ScadaBR, Modbus RTU com camada física RS485 (o medidor suporta isso). Assim, eu pegarei os dados do Medidor (com fios para RS485) com um Arduino uno usado um módulo RS485, e o ScadaBR vai me mostrar o dados do Arduino, para que eu gere relatórios e veja os gráficos no ScadaBR.

Eu fiz alguns testes inicialmente para ver como funcionava uma leitura de dados do Arduino pelo ScadaBR, como esse: https://www.embarcados.com.br/supervisorio-com-scadabr/ (este então é o úico conhecimento que eu tenho sobre o assunto, fiz esse exemplo para começar).

Minhas dúvidas:

- Qual biblioteca para o Arduino utilizar? Eu preciso das funções 0x03, 0x04, 0x06, 0x10, 0x11 e 0x2B (pois são as funções suportadas pelo medidor POWER METER 710). Até agora estou com idéia de usar a biblioteca ModbusMaster (e suas versões – disponíveis aqui: http://4-20ma.io/ModbusMaster/modules.html ) . Ela tem o que eu preciso. Mas será que tem outra mais simples? Até pq eu não encontrei nenhuma que suporte as funções 0x11 e 0x2B ( essas funções são especiais, ou preciso que atenda elas também?)

- Eu preciso acessar pelo menos 32 registros do medidor (pode ser mais que isso), o que significaria 64bytes. Mas e o ring buffer do Arduino? Como faço pra ele aceitar um numero grande no ring buffer? Quem define isso é a biblioteca? Além da limitação de algumas funções sobre isso, pois pelo que eu li a função 4 por exemplo, consegue ler múltiplos registros de no máximo 54bytes = 29 registros. Essa função também consegue ler registros entre 30001 e 3999 (isso é definido pela biblioteca?) É isso mesmo? Pois segundo meu manual, meus registros estão a partir de 4000 até 4200, olhem a figura aí pra vcs entenderem o que eu estou falando.

- Sobre o offset do ScadaBR, do protocolo Modbus RTU: quando eu for fazer a leitura de dados pelo Arduino, devo considerar que meu registro precisa ser ajustado no offset, ou essa lista de registro do manual do meu medidor já está supondo isso? Por exemplo, o registro do manual é 4076. Como fica ele no ScadaBR? (pq o Modbus RTU tem esse offset né?)

 

Exibições: 4503

Responder esta

Respostas a este tópico

Minha IDE é a 1.8.4

OK, já conseguiu instalar a Biblioteca ModBus ? 

Analisando o código do exemplo :  Basic.pde

http://4-20ma.io/ModbusMaster/examples_2_basic_2_basic_8pde-example...

Configuração da porta serial - 19200 bps - porta 0 do Arduino 


Uma dúvida, o seu Panel Meter será o escravo (Slave) ? Ou mestre (Master) ? 

// use Serial (port 0); initialize Modbus communication baud rate
Serial.begin(19200);
// communicate with Modbus slave ID 2 over Serial (port 0)
node.begin(2, Serial);

O Meter é um slave, e o Arduino o Mestre.

Na verdade serão três Power Meter, terei três escravos para um Mestre

OK, então poderá começar testando com esse exemplo Basic.pde.

Nesse exemplo o Arduino é Mestre e o Panel Meter escravo. 

Envie o link do seu modulo RS485, para a gente verificar como fazer as conexões.

Ou você já sabe e já fez as conexões ? 

 

No meu caso, ele ficaria como Receptor né? Nessa imagem aqui ele está como Transmissor. Daí só mudaria esse fio laranja né?

Envie os links do seu módulo, por favor

Interface RS-485 => Arduino (não testei ! ) 

Essa conexão half-duplex é específica para o exemplo abaixo. 

Pode receber ou enviar dados, mas somente numa direção de cada vez. 

Vou analisar no caso do uso da Biblioteca MOdBus (aguarde) 

DI (data in) - conecte no pino D11 do Arduino
RO (receive out) - conecte no pino D10 do Arduino
DE (data enable) and RE (receive enable) conectados juntos ao pino D03 do Arduino


Vcc = + 5V e Gnd terra 


A and B :  Par de fios da RS485 

Veja esses tutoriais 


https://arduino-info.wikispaces.com/RS485-Modules

https://arduino-info.wikispaces.com/SoftwareSerialRS485Example

Sim sim, esse medidor não permite full duplex, tem que ser half duplex mesmo. Essa pinagem é para Tx ou Rx?

Ok, ficarei no aguardo. Muito obrigada mais um vez

Essas conexões são somente para referência. 

Veja o outro topico

Analisando o outro exemplo :  RS485_HalfDuplex/RS485_HalfDuplex.ino

OBS - o Link do GitHub parece ser mais recente !

https://github.com/4-20ma/ModbusMaster

https://github.com/4-20ma/ModbusMaster/blob/master/examples/RS485_H...

We're using a MAX485-compatible RS485 Transceiver.
Rx/Tx is hooked up to the hardware serial port at 'Serial'.
The Data Enable and Receiver Enable pins are hooked up as follows:

#define MAX485_DE 3 (conecte o pino D03 do Arduino no DE da RS-485)
#define MAX485_RE_NEG 2 (conecte o pino D02 do Arduino no RE da RS-485)


DI ( DATA IN ) - Serial 0 Arduino - pino 1 TX
RO (receive OUT) - Serial 0 Arduino - pino 0 RX

https://www.arduino.cc/en/Reference/Serial


// Modbus communication runs at 115200 baud - configure a console da IDE para 115200 bps
Serial.begin(115200);

Estou com uma dúvida, o exemplo informa que é usada a mesma serial 0 do Arduino que também esta conectada na interface USB Serial do mesmo. (Aguarde ) 

 

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço