Sunteți pe pagina 1din 27

Serial Link Comunicações & Serviços

Manual Técnico

Arduino Supervisório MODBUS


& Conversor RS485

2015 – Todos os direitos reservados – Página 1 de 27


Serial Link Comunicações & Serviços

Sumário
Manual Técnico......................................................................................................................................................1
Introdução.........................................................................................................................................................3
Arduino Supervisório MODBUS...................................................................................................................3
Conversor RS485........................................................................................................................................3
Características..................................................................................................................................................4
Sobre o RS485 & MODBUS.............................................................................................................................5
Diagrama de Conexões Para Testes de Bancada............................................................................................6
Como Ligar FTDi Basic No Arduino Supervisório.............................................................................................8
Siga a orientação mostrada nas fotos abaixo para conectar seu Arduino FTDi Basic da Serial Link no
Arduino Supervisório MODBUS........................................................................................................................8
Veja também o manual do Arduino FTDi Basic no link abaixo:........................................................................8
http://www.seriallink.com.br/lab/Arduino/Datasheet_FTDiBasic_SerialLink.pdf...............................................8
Identificando Conectores & Jumpers................................................................................................................9
Detalhes Sobre o Arduino Supervisório..........................................................................................................16
Configurando Jumpers....................................................................................................................................18
Exemplo 1 – Teste de Bancada Comunicando 2 Arduinos.............................................................................21
Código do Exemplo 1.................................................................................................................................21
Exemplo 2 – Ligando 4 Arduinos em Rede....................................................................................................23
Código do Exemplo 2.................................................................................................................................24

2015 – Todos os direitos reservados – Página 2 de 27


Serial Link Comunicações & Serviços

Introdução

Neste manual veremos os detalhes técnicos de dois produtos, concebidos para funcionar em conjunto,
formando uma rede MODBUS, via comunicação RS485.

Arduino Supervisório MODBUS

A rduino Supervisório que a gente já conhece, mas nessa versão,


integrado com um circuito de comunicação RS485.

Totalmente configurável por jumpers, o módulo RS485 integrado no Arduino


Supervisório, é muito versátil. Tão versátil que pode ser “destacado”! Isso mesmo!
Você pode cortar o Módulo RS485 fora do Arduino Supervisório e ambos
continuarão funcionando separadamente.

Conversor RS485

C onversor RS485 é um Módulo Avulso que pode ser ligado em um FTDi, um


Arduino UNO, NANO etc.

Na verdade o Conversor RS485 é igual ao Módulo Integrado RS485 do Arduino


Supervisório, com algumas pequenas diferenças. A primeira é dele ser avulso. A segunda
é que seu conector tem uma pinagem diferente do RS485 integrado.

Mas possui todos os jumpers de configuração e a mesma funcionalidade do módulo integrado. Foi pensado
dessa forma para ser um acessório de bancada, onde você pode ligar seu Arduino UNO nesse Conversor
RS485 e ligar os fios no Arduino Supervisório MODBUS, para testar a comunicação MODBUS.

No manual veremos também código de exemplo para você poder efetuar os testes de funcionamento do seu
equipamento.

2015 – Todos os direitos reservados – Página 3 de 27


Serial Link Comunicações & Serviços

Características

Arduino Supervisório MODBUS

• Aceita alimentação 5VDC e 12VDC


• Proteção contra curto-circuito na entrada de 12VDC
• Exclusivo Conector FTDi Serial Link para carregar a programação do Arduino sem precisar tirar o chip
da placa.
• Todas as portas do Arduino UNO disponíveis para conexão via bornes parafusáveis, garantindo
melhor fixação contra vibrações.
• Portas Auxiliares também dispostas em bornes
◦ AREF, RST, GND
• Nesta versão temos também bornes para fixação dos fios da Comunicação RS485
• Possibilidade de cortar o módulo integrado RS485 fora e utilizar o Arduino Supervisório sozinho
• Jumpers de Configuração do Módulo RS485
◦ 7 jumpers, sendo:
▪ 1x Jumper de GND (desativado)
▪ 1x Jumper EN – Decide se envia ou recebe,
▪ 2x na linha da Serial,
▪ 1x de resistor terminador (120R),
▪ 2x resistores de pull-up/down (470R)
• Conector Auxiliar RS485 caso o módulo seja cortado para também poder ser usado separadamente

Conversor RS485

• Apenas alimentação 5VDC


• Acessório indispensável para testes de bancada
• Integra plataformas como PC, Android, Arduino UNO, Raspberry Pi, através da Serial, convertendo
em RS485.
• Oferece integração simples usando apenas 5 fios:
◦ 5V, GND, EN, RX, TX (não necessariamente nessa ordem, vide ordem correta abaixo)
• Possui também os Jumpers de Configuração do Módulo RS485
◦ 7 jumpers, sendo:
▪ 1x Jumper de GND (desativado)
▪ 1x Jumper EN – Decide se envia ou recebe,
▪ 2x na linha da Serial,
▪ 1x de resistor terminador (120R),
▪ 2x resistores de pull-up/down (470R)
• Borne com terminais parafusáveis para ligação dos fios da Comunicação RS485, compatíveis com a
linha Supervisório da Serial Link.

2015 – Todos os direitos reservados – Página 4 de 27


Serial Link Comunicações & Serviços

Sobre o RS485 & MODBUS

RS485

É o código determinado por uma norma de engenharia para definir a comunicação entre equipamentos. Essa
norma RS485 em especial é muito interessante pois determina níveis lógicos de sinal, com tensões que
ultrapassam os 30V positivos e negativos!

Essa característica é muito interessante para comunicação a longas distâncias!

O “Protocolo RS485”, como é conhecida essa norma de engenharia da comunicação, por suas
características, consegue lidar com distâncias de até 2Km!

Isso tudo em apenas dois fios trançados!

MODBUS

O mais interessante da aplicação do Protocolo RS485 é a possibilidade de definir endereços para cada Nó da
Rede, ou seja, para cada Equipamento ligado em série pelos dois fios, formando uma rede de comunicação,
conforme veremos adiante.

Veremos código para implementar essa Rede conhecida por MODBUS e como comunicar com os
equipamentos ligados na rede de forma individual.

2015 – Todos os direitos reservados – Página 5 de 27


Serial Link Comunicações & Serviços

Diagrama de Conexões Para Testes de Bancada

Efetue as conexões fornecidas no diagrama abaixo para poder executar os exemplos desse manual.

Repare que serão necessários adicionalmente dois itens:


• Arduino FTDi Basic (fabricado e vendido pela Serial Link, separadamente)
• Arduino UNO (chines ou original italiano, comprado a parte)

Conversor RS485

N/A
TX
RX
5V
EN
GND

Arduino UNO

D1
(TX)

D3
D0
(RX)

B
A

2015 – Todos os direitos reservados – Página 6 de 27


Serial Link Comunicações & Serviços

Diagrama de Conexões (Cont.)

A
B

+ -

Arduino
Supervisório
MODBUS

Conectar aqui o
ATMega328

Conectar aqui o
FTDI Basic para
carregar a
programação

2015 – Todos os direitos reservados – Página 7 de 27


Serial Link Comunicações & Serviços

Como Ligar FTDi Basic No Arduino Supervisório

Siga a orientação mostrada nas fotos abaixo para conectar seu Arduino FTDi Basic da Serial Link no Arduino
Supervisório MODBUS.

Veja também o manual do Arduino FTDi Basic no link abaixo:


http://www.seriallink.com.br/lab/Arduino/Datasheet_FTDiBasic_SerialLink.pdf

2015 – Todos os direitos reservados – Página 8 de 27


Serial Link Comunicações & Serviços

Identificando Conectores & Jumpers

Arduino Supervisório MODBUS

Tendo em mãos sua placa do Arduino Supervisório com RS485 integrado, vamos verificar onde estão
localizadas as portas, as posições dos bornes e também conectores auxiliares e jumpers.

Portas Digitais

Compatíveis com padrão de pinagem do Arduino UNO. A única diferença está na identificação dos pinos D0 e
D1, que no Arduino Supervisório aparecem como RX e TX, respectivamente.

Portas digitais 0 a 9:

Portas digitais 10 a 13:

2015 – Todos os direitos reservados – Página 9 de 27


Serial Link Comunicações & Serviços

Portas Analógicas

Arduino Supervisório possui 6 portas analógicas, desde A0 até A5, conforme foto:

Alimentação 5VDC & 12VDC

Contando com um Regulador de Tensão, o Arduino Supervisório aceita alimentação 5V (corrente contínua) e
também 12V (corrente contínua)

ATENÇÃO – Não ligue AC (corrente alternada) em nenhum borne de alimentação!

Borne de Alimentação 5VDC

2015 – Todos os direitos reservados – Página 10 de 27


Serial Link Comunicações & Serviços

Borne de Alimentação 12VDC

+
-
Portas Auxiliares

As portas auxiliares do Arduino Supervisório encontram-se no mesmo conector da Alimentação 5VDC,


conforme foto:

Portas
Auxiliares

2015 – Todos os direitos reservados – Página 11 de 27


Serial Link Comunicações & Serviços

Conector RS485

Integrado ao Arduino Supervisório, temos os bornes do Conector RS485, onde devemos ligar os fios
trançados da Rede MODBUS.

2015 – Todos os direitos reservados – Página 12 de 27


Serial Link Comunicações & Serviços

Jumpers de Configuração RS485

Ligamos todos os equipamentos da Rede MODBUS em série, através de dois fios trançados para evitar
interferência magnética externa.

Como muitos Arduinos Supervisório podem ser ligados na mesma Rede, muitos jumpers de configuração de
fazem necessários para ajustar cada Arduino da Rede com uma configuração diferente.

Na rede RS485 temos algumas características interessantes, vejamos a imagem da Rede MODBUS abaixo:

Repare que os equipamentos da ponta precisam ativar o resistor terminador de 120 ohms. E que também um
deles precisa ativar os resistores de pull-up/down. Já os outros equipamentos da Rede RS485 não precisam,
então todos esses detalhes são configurados através do sete (07) jumpers disponíveis na plataforma
MODBUS da Serial Link.

2015 – Todos os direitos reservados – Página 13 de 27


Serial Link Comunicações & Serviços

Veja abaixo na foto onde estão localizados os Jumpers e também a numeração deles que utilizaremos
adiante nesse manual.

1
2 6
3 5
4

1) Jumper do GND – Sem uso, apenas um pino extra de GND. (Não conectado)
2) Jumper do EN – Chaveia entre Transmissão/Recepção (ENABLE)
3) Jumper do RX – Jumper da linha Serial RX (desligar quando for subir programação no Arduino)
4) Jumper do TX – Jumper da linha Serial TX (desligar quando for subir programação no Arduino)
5) Jumper de Pull-Up – Ligado no Resistor 470R que vai para o positivo (VCC)
6) Jumper do Terminador – Ligado no Resistor 120R terminador da Rede RS485
7) Jumper de Pull-Down – Ligado no Resistor 470R que vai para o terra (GND)

2015 – Todos os direitos reservados – Página 14 de 27


Serial Link Comunicações & Serviços

Conector FTDi

Por se tratar de um Arduino Supervisório REV2.1 Red Dragon, temos nessa placa também o Conector FTDi,
para carregar códigos do Arduino sem precisar retirar o chip ATMega da placa!

O Arduino FTDi Basic da Serial Link foi desenvolvido para esse fim e deve ser conectado nesse conector da
foto abaixo:

Conector
FTDi

2015 – Todos os direitos reservados – Página 15 de 27


Serial Link Comunicações & Serviços

Detalhes Sobre o Arduino Supervisório

O Arduino Supervisório é bem simples de ser utilizado, pois ele funciona como um Arduino UNO qualquer.

Veja tabela comparativa abaixo:

Característica Arduino Arduino


UNO Supervisório
Conversor USB/Serial integrado SIM NÃO
Saídas digitais D0~D13 SIM SIM
Saídas Analógicas A0~A5 SIM SIM
Alimentação 5V/GND SIM SIM
Alimentação 12V/GND SIM (VIN) SIM
Portas Auxiliares RST e AREF SIM SIM
Regulador de Tensão 3V3 SIM NÃO

Como podemos ver, as únicas diferenças são entre o Conversor USB/Serial e o Regulador de Tensão 3,3V.

No caso do Conversor USB/Serial, o Arduino UNO possui um ATMega16u2 integrado na placa para essa
tarefa; bem como componentes auxiliares e o conector USB, tudo integrado na placa.

Já o Arduino Supervisório não possui o Conversor USB/Serial integrado, pois como ele é voltado para ser
utilizado em máquinas que possuem vibrações, o circuito é bem minimalista e robusto; portanto esse circuito
(que serve apenas na bancada) foi separado no Arduino FTDi Basic, que é um outro produto Serial Link
vendido separadamente:

http://seriallink.com.br/web/index.php?r=produtos/placaarduinoftdibasic

Dessa forma o cliente precisa comprar apenas um Arduino FTDi Basic para gravar quantos Arduinos
Supervisório quiser!

Além de ser mais econômico, basta deixar o Arduino FTDi Basic já conectado no cabo USB para atualizar o
código da máquina, sem precisar desmontar nada! Basta apenas chegar perto com um Notebook e “espetar”
o FTDi Basic no conector FTDi do Arduino Supervisório!

2015 – Todos os direitos reservados – Página 16 de 27


Serial Link Comunicações & Serviços

Módulo Integrado RS485

A novidade dessa versão de Arduino Supervisório é o Módulo RS485 integrado, que traz uma característica
muito interessante para a plataforma Supervisório:

• A possibilidade de ligar vários Arduinos em Rede!

Dessa forma é possível integrar várias máquinas, reduzindo o custo, sem se preocupar com distâncias, pois o
RS485 é conhecido pela sua confiabilidade de conexão em cabos trançados de até 2Km!

Vamos ver os exemplos.

2015 – Todos os direitos reservados – Página 17 de 27


Serial Link Comunicações & Serviços

Configurando Jumpers

A princípio, 7 parece um número muito grande de jumpers para configurar, mas não é tão complicado assim!
Um deles ainda não tem uso e serve como um pino auxiliar de GND. Ele é o primeiro Jumper, conforme foto:

Dois deles são os da linha da Serial, que ligam os circuitos do RX e TX (e que devem ser desligados ao
carregar programas pelo FTDi) conforme foto abaixo:

3
4

2015 – Todos os direitos reservados – Página 18 de 27


Serial Link Comunicações & Serviços

O jumper principal da Rede MODBUS é o que ativa o resistor de 120 ohms. Esse resistor é chamado de
terminador e só precisa ser ativado “nos Arduinos das pontas”, ou seja, no primeiro Arduino e no último da
Rede.

Outros dois jumpers importantes na Comunicação RS485 são os de pull-up/down da Rede. Eles são
responsáveis por criar um divisor resistivo na alimentação positiva (pull-up) e negativa (pull-down).

Estes jumpers precisam ser ativados em apenas 1 dos Arduinos da Rede toda. Ou seja, basta ativar esses
jumpers em qualquer um dos Arduinos da rede e desligar em todos os outros. Costuma-se ativar esses
jumpers de elevação no primeiro ou no último Arduino (sempre nos Arduinos das pontas).

2015 – Todos os direitos reservados – Página 19 de 27


Serial Link Comunicações & Serviços

Por último e não menos importante temos o Jumper do ENABLE, que funciona como uma chave para decidir
se o módulo está transmitindo ou recebendo. Veremos isso na parte do código, mas basta colocar esse pino
em estado lógico para transmitir e em estado baixo para receber. Esse jumper fica normalmente conectado e
não precisa mexer.

A placa do Arduino Supervisório MODBUS acompanha todas as capinhas dos jumpers.

2015 – Todos os direitos reservados – Página 20 de 27


Serial Link Comunicações & Serviços

Exemplo 1 – Teste de Bancada Comunicando 2 Arduinos

Para esse exemplo, vamos conectar os fios conforme mostrado mais acima neste manual, no diagrama de
teste de bancada.

O que vamos fazer é bem simples:

1. Ligamos o Módulo Avulso RS485 no Arduino UNO


2. Conectamos os fios trançados entre o Módulo Avulso e o Integrado de RS485
3. Ligamos alimentação no Arduino Supervisório
4. Ligamos o Arduino UNO na USB do computador.
5. Pronto!

É simples assim! Se você quiser, pode adicionar alguns LEDs em série com resistores nas portas do Arduino
Supervisório para ver eles acendendo conforme os comandos enviados pelo Arduino UNO.

Código do Exemplo 1

Cod1Transmissor.ino
int enablePin = 3; // endereco do pino EN

void setup()
{
Serial.begin(9600);
pinMode(enablePin, OUTPUT);
delay(10);
digitalWrite(enablePin, HIGH); // para enviar
//colocar esse pino em HIGH
// para receber
//colocar esse pino em LOW

void loop()
{
// Acionando 4 LEDs que ficam no Receptor
for (int i = 0; i < 4; i++)
{
switch(i)
{
// acionando Arduino (A) do BUS
// pulsando 1 led por segundo
// sequencialmente
case 0: Serial.println("A1000"); break;
case 1: Serial.println("A0100"); break;
case 2: Serial.println("A0010"); break;
case 3: Serial.println("A0001"); break;
}
delay(1000);
}
}

2015 – Todos os direitos reservados – Página 21 de 27


Serial Link Comunicações & Serviços

Cod1Receptor.ino
int enablePin = 3; // endereco do pino EN
char endereco = 'A'; // definir aqui o endereco do Arduino no BUS

String inputString = ""; // string q recebe os dados


boolean stringComplete = false; // terminou de receber string?

void setup()
{
Serial.begin(9600);
pinMode(enablePin, OUTPUT);
delay(10);
digitalWrite(enablePin, LOW); // para enviar
//colocar esse pino em HIGH
// para receber
//colocar esse pino em LOW

// Ativando as portas dos LEDs de verificacao


// LEDs nas portas digitas 4, 5, 6, 7, 8
for (int i = 4; i < 8; i++)
{
pinMode(i, OUTPUT);
}

void loop()
{
if (stringComplete)
{
// verificando se comando eh pra mim
if (inputString.charAt(0) == endereco)
{
for (int i = 1; i < 5; i++)
{
if (inputString.charAt(i) == '1')
digitalWrite(3 + i, 1);
else
digitalWrite(3 + i, 0);
}
}
// limpa string
inputString = "";
stringComplete = false;
}
}

void serialEvent()
{
while (Serial.available())
{
char inChar = (char)Serial.read();
inputString += inChar;
if (inChar == '\n') stringComplete = true;
}
}

2015 – Todos os direitos reservados – Página 22 de 27


Serial Link Comunicações & Serviços

Exemplo 2 – Ligando 4 Arduinos em Rede

Neste outro exemplo veremos como comunicar o Arduino Uno com 3 outros Arduinos Supervisórios, formando
uma Rede com 4 Arduinos no total!

Se você adicionalmente quiser montar os LEDs conforme a foto abaixo, o código de teste forma um efeito
bem interessante!

2015 – Todos os direitos reservados – Página 23 de 27


Serial Link Comunicações & Serviços

Código do Exemplo 2

Cod2Transmissor.ino
int enablePin = 3; // endereco do pino EN

void setup()
{
Serial.begin(9600);
pinMode(enablePin, OUTPUT);
delay(10);
digitalWrite(enablePin, HIGH); // para enviar
//colocar esse pino em HIGH
// para receber
//colocar esse pino em LOW

void loop()
{
// Acionando 4 LEDs que ficam no Receptor
for (int i = 0; i < 4; i++)
{
// acionando Arduino (A) do BUS
switch(i)
{
// pulsando 1 led por segundo
// sequencialmente
case 0: Serial.println("A1000"); break;
case 1: Serial.println("A0100"); break;
case 2: Serial.println("A0010"); break;
case 3: Serial.println("A0001"); break;
}
// acionando Arduino (B) do BUS
switch(i)
{
// pulsando 1 led por segundo
// sequencialmente
case 0: Serial.println("B1000"); break;
case 1: Serial.println("B0100"); break;
case 2: Serial.println("B0010"); break;
case 3: Serial.println("B0001"); break;
}
// acionando Arduino (C) do BUS
switch(i)
{
// pulsando 1 led por segundo
// sequencialmente
case 0: Serial.println("C1000"); break;
case 1: Serial.println("C0100"); break;
case 2: Serial.println("C0010"); break;
case 3: Serial.println("C0001"); break;
}
delay(1000);
}
}

2015 – Todos os direitos reservados – Página 24 de 27


Serial Link Comunicações & Serviços

Cod2ReceptorA.ino
int enablePin = 3; // endereco do pino EN
char endereco = 'A'; // definir aqui o endereco do Arduino no BUS

String inputString = ""; // string q recebe os dados


boolean stringComplete = false; // terminou de receber string?

void setup()
{
Serial.begin(9600);
pinMode(enablePin, OUTPUT);
delay(10);
digitalWrite(enablePin, LOW); // para enviar
//colocar esse pino em HIGH
// para receber
//colocar esse pino em LOW

// Ativando as portas dos LEDs de verificacao


// LEDs nas portas digitas 4, 5, 6, 7, 8
for (int i = 4; i < 8; i++)
{
pinMode(i, OUTPUT);
}

void loop()
{
if (stringComplete)
{
// verificando se comando eh pra mim
if (inputString.charAt(0) == endereco)
{
for (int i = 1; i < 5; i++)
{
if (inputString.charAt(i) == '1')
digitalWrite(3 + i, 1);
else
digitalWrite(3 + i, 0);
}
}
// limpa string
inputString = "";
stringComplete = false;
}
}

void serialEvent()
{
while (Serial.available())
{
char inChar = (char)Serial.read();
inputString += inChar;
if (inChar == '\n') stringComplete = true;
}
}

2015 – Todos os direitos reservados – Página 25 de 27


Serial Link Comunicações & Serviços

Cod2ReceptorB.ino
int enablePin = 3; // endereco do pino EN
char endereco = 'B'; // definir aqui o endereco do Arduino no BUS

String inputString = ""; // string q recebe os dados


boolean stringComplete = false; // terminou de receber string?

void setup()
{
Serial.begin(9600);
pinMode(enablePin, OUTPUT);
delay(10);
digitalWrite(enablePin, LOW); // para enviar
//colocar esse pino em HIGH
// para receber
//colocar esse pino em LOW

// Ativando as portas dos LEDs de verificacao


// LEDs nas portas digitas 4, 5, 6, 7, 8
for (int i = 4; i < 8; i++)
{
pinMode(i, OUTPUT);
}

void loop()
{
if (stringComplete)
{
// verificando se comando eh pra mim
if (inputString.charAt(0) == endereco)
{
for (int i = 1; i < 5; i++)
{
if (inputString.charAt(i) == '1')
digitalWrite(3 + i, 1);
else
digitalWrite(3 + i, 0);
}
}
// limpa string
inputString = "";
stringComplete = false;
}
}

void serialEvent()
{
while (Serial.available())
{
char inChar = (char)Serial.read();
inputString += inChar;
if (inChar == '\n') stringComplete = true;
}
}

2015 – Todos os direitos reservados – Página 26 de 27


Serial Link Comunicações & Serviços

Cod2ReceptorC.ino
int enablePin = 3; // endereco do pino EN
char endereco = 'C'; // definir aqui o endereco do Arduino no BUS

String inputString = ""; // string q recebe os dados


boolean stringComplete = false; // terminou de receber string?

void setup()
{
Serial.begin(9600);
pinMode(enablePin, OUTPUT);
delay(10);
digitalWrite(enablePin, LOW); // para enviar
//colocar esse pino em HIGH
// para receber
//colocar esse pino em LOW

// Ativando as portas dos LEDs de verificacao


// LEDs nas portas digitas 4, 5, 6, 7, 8
for (int i = 4; i < 8; i++)
{
pinMode(i, OUTPUT);
}

void loop()
{
if (stringComplete)
{
// verificando se comando eh pra mim
if (inputString.charAt(0) == endereco)
{
for (int i = 1; i < 5; i++)
{
if (inputString.charAt(i) == '1')
digitalWrite(3 + i, 1);
else
digitalWrite(3 + i, 0);
}
}
// limpa string
inputString = "";
stringComplete = false;
}
}

void serialEvent()
{
while (Serial.available())
{
char inChar = (char)Serial.read();
inputString += inChar;
if (inChar == '\n') stringComplete = true;
}
}

2015 – Todos os direitos reservados – Página 27 de 27

S-ar putea să vă placă și