manual técnico - serial link - conheça o arduino...

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

Upload: dangdung

Post on 10-Mar-2018

241 views

Category:

Documents


0 download

TRANSCRIPT

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árioManual Técnico......................................................................................................................................................1

Introdução.........................................................................................................................................................3Arduino Supervisório MODBUS...................................................................................................................3Conversor RS485........................................................................................................................................3

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

Código do Exemplo 1.................................................................................................................................21Exemplo 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

Arduino 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

Conversor 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ó daRede, 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)

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

Conversor RS485

N/ATX

RX5VENGND

Arduino UNO

D3D0 (RX)

D1 (TX)

A B

Serial Link Comunicações & Serviços

Diagrama de Conexões (Cont.)

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

Arduino Supervisório MODBUS

+ -

BA

Conectar aqui o ATMega328

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

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 eD1, 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:

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

+ -

Portas Auxiliares

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) 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 RS4857) Jumper de Pull-Down – Ligado no Resistor 470R que vai para o terra (GND)

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

1

234

5

6

7

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:

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

Conector FTDi

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 UNO

Arduino 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 oRS485 é 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:

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

34

1

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

6

5

7

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

2

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 UNO2. Conectamos os fios trançados entre o Módulo Avulso e o Integrado de RS4853. Ligamos alimentação no Arduino Supervisório4. 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.inoint 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.inoint enablePin = 3; // endereco do pino ENchar endereco = 'A'; // definir aqui o endereco do Arduino no BUS

String inputString = ""; // string q recebe os dadosboolean 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, formandouma 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.inoint 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.inoint enablePin = 3; // endereco do pino ENchar endereco = 'A'; // definir aqui o endereco do Arduino no BUS

String inputString = ""; // string q recebe os dadosboolean 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.inoint enablePin = 3; // endereco do pino ENchar endereco = 'B'; // definir aqui o endereco do Arduino no BUS

String inputString = ""; // string q recebe os dadosboolean 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.inoint enablePin = 3; // endereco do pino ENchar endereco = 'C'; // definir aqui o endereco do Arduino no BUS

String inputString = ""; // string q recebe os dadosboolean 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