You are on page 1of 20

Comunicao de Dados em Srie ou Serial - Notas de Aula1

de
Manoel Gomes de Andrade
Licena: Creative Commons - Atribuio-NoComercial 4.0 Internacional.
disponvel em: https://pt.scribd.com/doc/285381331/Relatorio-Modbus-PAA.

A comunicao de dados seriais assncrona (sem linha de Clock) aquela pela qual os bits de um
dado (ex.: dado ou byte = 8 bits) so disponibilizados no terminal TxD (do microcontrolador)
sequncialmente ou em srie, por um intervalo de tempo equivalente a 1/ ("baud rate") . O termo
"baud rate" comumente traduzido por "Taxa de Transmisso". Um valor conservador para "baud
rate" 9600 bps ("bits per seconds"), nesse caso o tempo de cada bit na figura abaixo seria de
4
1/9600=1,04166 . 10 s , aproximadamente 100 us (microsegundos).

https://wcscnet.com/wp-content/uploads/2014/11/Figure11.gif
Na Figura acima podemos notar o uso dos termos MARCA e ESPAO ("Mark" e "Space") para os
nveis lgicos '1' e 0', respectivamente e 3 (trs) Campos distintos :
"Start Bit" : responsvel por "acordar/despertar" o dispositivo receptor alertando-o que uma
transmisso est a caminho;
"Data Bits" : So os 8 (oito) bits do dado sendo transmitido. A transimisso comea pelo bit 0 (o bit
menos significativo). Podendo ser 7 (sete) o nmero de bits mas, em desuso ;
["Parity Bit"] ; Esse campo no est representado na figura. Seria mais uma seo com pontilhados
e o nmero 8 inscrito nela. Serviria para verificao da integridade dos bits anteriormente
transmitidos (bits 0 a 7). Pode-se convencionar Paridade Par ou mpar ("Even" ou "Odd"). Se o
convencionado fosse Paridade Par e o nmero de bits iguais a '1' no campo "Data bits" fosse 4
(par) o bit de paridade transmitido seria de nvel lgico '1', pois quatro um nmero par. A
verificao da integridade consiste em contar o nmero de bits recebidos iguais a um ( se um
nmero para ou mpar) e comparar com o "Parity Bits" computado pelo transimissor. Essa tcnica
no cem por cento eficaz mas, agrega confiabilidade s comunicaes de dados. Para maiores
explicaes consulte outras referncias [Parity].
"Stop Bit(s)": O bit de parada, isto , um bit de separao entre um dado transmitido e outro. Pode
1 e-mail: andrade.manoel@gmail.com

ser entendido como um tempo que dado ao receptor para armazenar a informao recm recebida.
Pode se no total de 1 1,5 ou 2 "Stop Bits" (1,5 : [1/(baud rate)] * 1,5 ) .

A Figura abaixo demonstra como dois "Data Bits" so transmitidos sequencialmente

http://i.stack.imgur.com/FYkfN.png
Um Microcontrolador que contenha uma U(S)ART ["Universal (Syncrhonous) Asynchronous
Receiver Transmitter"], ou um hardware especfico que seja capaz de emitir um "Start Bit", os oito
bits de "Data Bits", um "Stop Bit" para cada Dado, o faz em nveis lgicos '0' e '1' ou em nveis
digitais TTL/CMOS, conforme a tecnologia empregada.
Para a comunicao serial assncrona com um Computador Pessoal (originalmente denominado PC)
via interface RS-232 necessrio a utilizao de "Line Drivers" e "Line Receivers" ou Circuitos
Integrados (C.I.) capazes de converter o sinal digital em tenses especificadas pelo pelo padro RS232. O padro RS-232 foi originalmente criado para comicao com Teleimpressoras e Modens.
Oportunamente, vale dizer que esse padro serve somente para comunicaes ponto-a-ponto ("peerto-peer") no admitindo assim, nenhuma configurao de conexo em redes.
Um Circuito Integrado (C.I.) clssico que contm "Line Drivers" e "Line Receivers" para RS-232
o componente MAX-232 da empresa Maxim. Na Figura abaixo um circuito tpico usando esse C.I.
apresenta em seu lado esquerdo o conector "COM DB9" de um PC, o "MAX232" ao centro e do
lado direito onde se l "TTL CMOS" o Microcontrolador

http://www.aquaphoenix.com/hardware/ledlamp/reference/max232_diagram.gif

O papel do do MAX232 o de converter os sinais MARCA para uma tenso negativa (-V) e
ESPAO para uma tenso positiva (+V). Observe na Figura abaixo que o ESPAO de "Start Bit"
foi convertido para uma tenso +V (no especificada mas, entre +3V e +15V) e que o "b0" (bit zero
do "Data Bits") de nvel lgico '1' foi convertido para MARCA para uma tenso -V (entre -3V e
-15V). Para deixar clara a utilizao do MAX232, o Microcontrolador tem seu pino TxD conectado
ao pino 11 do MAX232 (entrada digital TTL/CMOS) e no pino 14 esses nveis lgicos so
convertidos para as tenses positiva e negativa do padro RS-232, na outra extremidade de um cabo
fica o conector DB-9 o qual conectado em um PC. Por outro lado, o pino 12 do MAX232 tras o
sinal serial recebido e convertido para os nvies digitais TTL/CMOS.

http://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Rs232_oscilloscope_trace.svg/722pxRs232_oscilloscope_trace.svg.png
Nos Microcomputadores Arduino pode-se usar a Classe "Serial" e seus mtodos (funes membro
da Classe) para inicializar, verificar, receber e transmitir "Data Bits[Begin]
1

Serial.begin(speed, config);

Inicializar USART

Serial.begin(speed);

Inicializar USART com SERIAL_8N1

Serial.available();

L o quantidade de bytes recebidos

int Serial.read();

L o prximo byte do buffer o -1 se buffer vazio

Serial.write(val);

Envia um byte ("val") pela interface serial

Serial.write(str);

Envia uma "string" ("str") pela interface serial

Serial.write(buf, len);

Envia a quantidade ("len") bytes contidos em um vetor ("buf")

Serial.flush();

Espera at que a quantidade de bytes no buffer sejam transmitidos

Serial.print(val);

"val" pode ser um nmero decimal, um caracter ou uma "string"

10

Serial.print(val, format);

"format" por indicar a base do parmetro "val" por: BIN, OCT,


HEX ou DEC; ou no. casas decimais de "val".

As Taxas de Transmisso disponveis nos Microcomputadores Arduino especificadas pelo


parmetro "speed" so (em bps): 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400,
57600 e 115200 [Begin].

O parmetro opcional "config" pode definir por meio de constantes definidas no arquivo
"HardwareSerial.h" pode ser um dos seguintes valores pr definidos:
1

#define SERIAL_8N1 0x06E

8 bits, No Parity, 1 Stop Bit

#define SERIAL_8E1 0x26

8 bits, Even Parity, 1 Stop Bit

#define SERIAL_8O1 0x36

8 bits, Odd Parity, 1 Stop Bit

A seguir demonstrado um exemplo extraido das referncias [Exemplo Serial] do


Microcomputador Arduino. Nesse programa a interface serial programada para operar segundo a
taxa de transmisso de 9600 bps com 8 bits de dados, sem o uso do bit de paridade ("No Parity") e
um "Stop Bit".
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

int incomingByte = 0; // varivel para byte que chega pela serial


void setup() {
Serial.begin(9600);// inicializa porta serial
//com baud rate 9600 bps default:SERIAL_8N1

}
void loop() {
// transmitir dados somente aps receber dados
if (Serial.available() > 0) {
// l byte que chegou
incomingByte = Serial.read();
// Mostra o que recebeu
Serial.print("I received: ");
Serial.println(incomingByte, DEC);
}
}

A forma de se testar esse programa pelo uso do "serial monitor" identificvel pelo smbolo a lente
de aumento. Abaixo esto os "prints" dos valores transmitidos e dos recebidos.

b) valores digitados para transmisso:


123[Enter]

c) valores recebidos anexado a uma "string" e


convertidos para decimal

Outro exemplo mostrado a seguir no qual o valor da tenso no terminal central de um


potencimetro de 10K lida pela funo "analogReg(0)" . O zero entre parnteses significa
que o conector A0 est sendo usado.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

int analogValue = 0;

// variable to hold the analog value

void setup() {
// open the serial port at 9600 bps:
Serial.begin(9600);
}
void loop() {
// read the analog input on pin 0:
analogValue = analogRead(0);
// print it out in many formats:
Serial.println(analogValue);
// print as an ASCII-encoded decimal
Serial.println(analogValue, DEC); // print as an ASCII-encoded decimal
Serial.println(analogValue, HEX); // print as an ASCII-encoded hexadecimal
Serial.println(analogValue, OCT); // print as an ASCII-encoded octal
Serial.println(analogValue, BIN); // print as an ASCII-encoded binary
// delay 1000 milliseconds before the next reading:
delay(1000);
}

O esquema eletrnico relativo a programa dado abaixo:

As conexes implementados no padro RS-232 servem apenas para comunicao ponto-a-ponto e


apresentam baixa imunidade a interferncia eletromagntica (rudo).
A forma de se aumentar ou a imunidade devido interferencias ou ruidos pelo emprego de
amplificadores operacionais.
Considere que pela variao do campo magntico uma corrente seja induzida nas linhas da rede de
comunicao. Essa corrente ao ser submetida impedncia da linha (componentes R, L e C :
resistiva, indutiva e capacitiva) produz um rudo de tenso que adicionado ao sinal (informao)
que trafegava pela rede.
Na Figura abaixo ilustrado este fenmeno. Note que o dispositivo transimissor ("Sender") deseja
enviar um pulso de nvel lgico '1'. O transmissor usa um "Line Driver" diferencial o que possibilita
o envio do sinal com polaridade negativa e positiva. A linha que conduz o sinal com polaridade
negativa ser chamada de LB e a outra de LA. O rudo ("Noise") induzido igualmente nas duas
linhas. Na outra extremidade, no receptor ("Receiver"), h um "Line Receiver" com entradas
diferenciais, isto , amplificador operacional. Considerando o sinal eltrico na linha B como sendo
-VS, o da linha A +V S e a tenso de rudo V N , as equaes abaixo demonstram a ao de
cancelamento do rudo VN e a consequente restaurao do sinal fazendo VR = 2.VS.

V R=(V S+ VN )(V S + V N )
V R=V S + V N + V SV N
V R =2 V S

http://upload.wikimedia.org/wikipedia/commons/thumb/e/e7/DiffSignaling.png/435pxDiffSignaling.png

Topologias de Redes
Redes de computadores
podem ser implementadas em diversas topologias ou
configuraes[Topologias de Rede], tais como: Anel , Estrela , Malha, rvore ou Barramento
("Bus" ou "Multi-point") . Uma das topologias mais comuns [Topologia RS485] para a
implementao de uma rede RS-485 do tipo Barramento. Esse tipo de rede requer "Line Drivers"
e "Line Receivers" apropropriados, tais como os da linha MAX485, cujas principais caractersticas
so: possibilidade de operao at 2,5 Mbps ("Mega bits per second") e conexo de at 32
receptores na rede.

http://pt.wikipedia.org/wiki/Topologia_de_rede#/media/File:BusNetwork.svg

A topologia "Bus", Barramento ou Multiponto empregada nas redes RS-485.

http://www.lammertbies.nl/picture/rs485_network_topology.png
Na Figura acima, cada tem com a denominao "Node" corresponde a um Ponto ou N da rede.
Como exemplo poderia-se considerar que o elemento "Node 1" fosse o Mestre ("Master") e todos os
demais "Nodes" fossem Escravos ("Slaves"). Nesse exemplo o dispositivo Mestre deseja realizar
uma comunicao com um dos Ns, assim ele deve tramitir um pacote ("packet") de dados ou um
telegrama ("telegram") endereado ao N com o qual deseja-se comunicar-se. Dessa forma apenas o
"Line Driver" do Mestre (o tringulo com a letra "S" nele inscrito) estaria apto ou habilitado
("enable") a transmitir; todos os outros "Line Drives" estariam desabilitados ("disable"). Por
conseguinte, todos os "Line Receivers" dos Escravos estariam habilitados a receber dados exceto o
do Mestre. Numa segunda etapa o Escravo endereado enviaria um telegrama ao Mestre com a
informao requisitada.

Mais especificamente, pelo emprego do C.I MAX485 as entradas de controle para


habilitar/desabilitar a transmisso so chamadas de DE ("Driver Output Enable") e para
habilitar/desabilitar a recepo, /RE ("Receiver Output Enable") . Uma opo usada na prtica a
de se deixar todos os dispositiovs (Mestre e Escravos) habilitados a receber dados (/DE = '0') e
controlar os DE individualmente, estando apenas um habilitado por vez.

Para concluir as explicao a respeito do enlace fsico, considere o grfico abaixo no qual so

representados os sinais u+ (VA) e u- (VB) . A indentificao do nvel lgico depende de um


comparador de tenso alm do amplificador diferial.
Para o padro RS-485
VR = '1' : VA - VB < - 0.2V
VR = '0' : VA - VB > +0.2V
Mas para se aplicar essas regras deve-se estabelecer como os nveis '0' e '1' so convertidos para a
tenso VS.
bit '0' : VA = -VS/2 e VB = +VS/2
assim: VA - VB =
bit '1' : VA = +VS/2 e VB = -VS/2

http://www.chipkin.com/articles/wp-content/uploads/2007/04/rs-485_waveform.png

Protocolo Modbus
O protocolo Modbus foi desenvolvido pela empresa Modicom em 1979 para uso particular mas
posteriormente tornou-se um protocolo aberto e passou a ser usado amplamente em equipamentos
que se comunicam em rede, principalmente para Redes Industriais de Computadores.
O protocolo Modbus opera sob uma rede de topologia de barramento onde h apenas um
equipamento que atua como Mestre ("Master") e os demais como Escravos ("Slaves"). Todas a
comunicaes se originam no Mestre, cabendo aos Escravos decodificar ("compreeder") os
comandos nelas embutidas e responder ou realizar algum trabalho, quando for o caso.
O uso do termo "protocolo" implica no uso de regras e/ou procedimentos, tais quais os que so
aplicados em cerimoniais (ex.: colao de grau, tribunal do juri, etc.) onde h uma ordem
cronolgica para o desenvolvimento das aes (abertura; composio da mesa; discursos; etc.) ou
mesmo no que acontece quando se atende ao telefone em uma empresa em que o funcionrio diz
seu nome, departamento, faz uma saudao e se coloca a disposio. nesse sentido que usado o
termo "protocolo" no que diz respeito a uma rede de computadores industriais. A ttulo de
ilustrao, considere a Figura a seguir na qual o "Client" faz um pedido ao "Server". O "Server"
realiza alguma operao interna e fornece a informao ao "Client". Que fique claro, o dispositivo
que inicia a comunicao ("Client") o Mestre !

"- O Cliente tem toda a razo, dizem os bons comerciantes..."

O meio fsico no qual o protocolo Modbus deve ser implementado a rede RS-485 para a topologia
de barramento. Pode-se usar uma rede Ethernet, cuja topologia em rvore, para a implementao
de Modbus/TCP. Excepcionalmente, pode-se implementar uma rede ponto-a-ponto com apenas um
Mestre e um Escravo. Neste caso uma rede RS-232 o bastante (ou USB no caso de um
Computador Pessoal e um Arduino ). Na Figura abaixo pode-se verificar as diversidade de
topologias que se aplicam ao protocolo Modbus.

O protocolo Modbus pode operar em dois modos: 1- ASCII ("American Standard Code for
Information Interchange"); 2- RTU ("Remote Terminal Unit").
No modo ASCII os bytes so codificados usando-se sua respectiva tabela. Ex: 04h : 30h 34h
Assim cada byte convertido em dois bytes (caracteres ASCII). Torna a comunicao um tanto

quanto lenta. No modo RTU os bytes no sofrem modificao.


Estrutura do Protocolo Modbus/RTU
Modelo de Dados
Trata-se de uma abstrao ou de uma forma de se pensar nos dados ou informao. Uma maneira
simples de se explicar uma abstrao de dados pode ser feita se nos reportar-nos aos "malotes"
usados nas empresas. O "malote" fisicamente pode ser uma bolsa feita de tecido resistente como
lona. Nela so colocados documentos, dinheiro e outros objetos. O "malote" vai da matriz para a
filial transportando levando documentos e objetos e retorna com tantos outros ou mesmo vazio. O
importante que esse meio ou canal nunca seja interrompido.

O protocolo Modbus tem seus "malotes", um para cada finalidade. Quando se deseja acessar tal
finalidade usa-se o "malote" tal, tanto para enviar quanto para receber. Mais especificamente o
protocolo Modbus usa o modelo de dados baseado em tabelas que do acesso a "Discrete Inputs",
"Coils", "Input Registers" e "Holding Registers", respecitivamente: Entradas Digitais,
Bobinas/contatores/reles, Registradores de Entradas e Registradores de Manuteno ou de uso
gearal. Note na Figura abaixo o tipo do objeto ("Object type") e o tipo de ao que se pode realizar
com ele ("Type of").

As comunicaes acontecem pela troca de Telegramas ("Telegrans"). Os intervalos de Pausa


("Pause") ou Silncia ("Silent") devem ser equivalentes ao tempo de 3,5 caracteres, ou o tempo que
se levaria para transmitir 3 bytes e meio a uma dada taxa de comunicao ("baud rate").

A biblioteca Modbus ("SimpleModbusSlaveV10") para Arduino "simple-modbus " pode ser obtida
on-line [1]. Esse pacote oferece duas bibliotecas para que se possa implementar o Protocolo
Modicom Modbus RTU com Microcomputadores Arduino podendo ele desempenhar o papel de
Mestre ("Master") ou de Escravo ("Slave") em uma rede. Essas bibliotecas so
SimpleModbusMaster e SimpleModbusSlaver, respectivamente.
Na biblioteca SimpleModbusSlaveV10 so implementadas as funes 3 e 15
"SimpleModbus is a collection of Arduino libraries that enables you to communicate serially using the
Modicon Modbus RTU protocol. Both SimpleModbusMaster & SimpleModbusSlave implements function 3
and 16 in addition SimpleModbusMaster implements function 1, 2, 4 and 15. Broadcasting is supported on
both libraries for function 16 and 15 on the master. Both libraries share the exact same API. There are only
two required functions modbus_update() and modbus_configure(). Both libraries have been tested
extensively on commercial equipment like LS Industrial PLC's, Schneider equipment, Ascon equipment,
Siemens PLC's, Selco alarm panels and various commercial panel meters and indicators. In addition to this
SimpleModbusSlave has also been tested on LS InfoU SCADA system, Mango M2M SCADA, FreeSCADA
2, Modbus Poll, the free QModbus slave tester and the very handy modbus slave tester, Mtester "

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

#define

LED 9

// registers of your slave


enum
{
ADC_VAL,
// The first register starts at address 0
PWM_VAL,
HOLDING_REGS_SIZE // leave this one
};
// function 3 and 16 register array
unsigned int holdingRegs[HOLDING_REGS_SIZE];
void setup()
{
modbus_configure(&Serial,\\ ponteiro para Classe Serial
9600, \\
baud rate
SERIAL_8N2,\\ 8 bit sem paridade 2 stop bit
1, \\ Endereo do Escravo: slaveID
2, \\ Pino para: PinTxEnablePin
HOLDING_REGS_SIZE,\\ quantidade registros
holdingRegs \\ endereo do buffer reg.
);

modbus_update_comms(9600, SERIAL_8N2, 1);


pinMode(LED, OUTPUT);
}
void loop()
{
modbus_update();
// update data to be read by the master to adjust the PWM
holdingRegs[ADC_VAL] = analogRead(A0);
// constrain adc value from the arduino master to 255
analogWrite(LED, holdingRegs[PWM_VAL]>>2);
}

Supervisrio Control And Data Acquisition - SCADA


Para a implementao dos testes utilizando o protocolo Modbus ser usado o Programa ScadaBr
[ScadaBr] por se tratar de uma implementao publicada sob licena OpenSource.
Logo aps sua instalao (requer Java Runtime Environment JRE 6 ) e ser lanado por meio de um
"Web Browser" surge a tela de login.
Observe o endereo, o nome do usurio e a senha .
http://localhost:8080/ScadaBR/login.htm
User id: admin
Password: admin

Logo aps o login surge a tela inicial a partir da qual, pelo icone "Data Sources" pode-se escolher
qual o protocolo de comunicao que ser usado

A escolha pelo "Modbus serial", que deve ser adicionado clicando-se no icone destacado na
Figura abaixo.

Nesta etapa uma conjuto e configuraes importantes so feitas.

Dentre elas destacam-se:

Esta seo moutrou o "Resultado: 1023" relativo leitura do holding register ao qual est associado
o pontencimentro cuja leitura fora feita pela funo ...
Nesta seo so mostradas duas caixas. Na caixa da esquerda o Scadabr informa ter encontrado o
"n 1" e na da direita mostrado o valor "03ff", isto , o valor 1023 lido do potencimetro/trim-pot.

Deve-se dar um Nome, tal como Arduino; deve-se clicar no "disquete" para salvar as configuraes.
Os prximos passos devem ser no sentido de se adiciona "data points" . Para isso dev-se clicar no
bloco tipo "lego".

Todos os "data points" inseridos sero do tipo "holding register" visto que a biblioteca xxxx s
implementa um subconjunto do protocolo modbus.
Nas figuras a seguir so mostradas as inseres dos "data points" ADC_VAL e PWM_VAL (esses
so os mesmos nomes que aparecem nas linhas nn e nn do programa exemplo. Isso no
obrigatrio mas sim o nmero do ndice que os identificam). Note que no "data point" ADC_VAL
foi desmarcada a opo "configurvel" por se tratar de uma entrada ou um "data point" de entrada e
que para PWM_VAL foi marcado com "configurvel" pois por meio do ScadaBr pode-se enviar um
valor para configurar o a largura de pulso do PWM do Microcontrolador no Arduino.

Ao final do processo de insereo de "data points" deve-se habilit-los clicando-se no icone do


"cilindro"

Assim a cor do "lego" indicador de "Status" muda para "verde".


A fim de se verificar a comunicao entre ScadaBr e Arduino pode-se clicar no icone do "olho" cujo
funo "Watch data point" ( assistir ou inspecionar o "data point") e pode-se interagir, via
protocolo modbus, lendo o valor de ADC_VAL e escrevendo em PWM_VAL. Deve-se lembrar que
ADC_VAL reflete a leitura analgica e um pontencimetro e que PWM_VAL varia a intensidade do
brilho em um Led. O pequeno smbolo da "chave de boca" prximo a PWM_VAL indica que o
usurio do ScadaBr pode alterar seu valor.

Os prximos passos devem ser dados no sentido de se definir a interface grfica do supervisrio
(lembre-se "scada" = "supervisory control and data analys" / controle supervisrio e analise de
dados).

Referncias
[1] https://code.google.com/p/simple-modbus/
[Parity] http://en.wikipedia.org/wiki/Parity_bit
[Begin] http://www.arduino.cc/en/Serial/Begin
[] http://en.wikipedia.org/wiki/Serial_port
http://en.wikipedia.org/wiki/Asynchronous_serial_communication
http://en.wikipedia.org/wiki/RS-232
[] RS-485 LINE DRIVER] http://cds.linear.com/image/3111.png
[Topologia RS485] http://www.lammertbies.nl/comm/info/RS-485.html
[Topologia de Rede] http://pt.wikipedia.org/wiki/Topologia_de_rede
[] http://www.siongboon.com/projects/2006-03-06_serial_communication/
[ScadaBr] http://www.scadabr.com.br/

You might also like