A comunicação rs232 era muito utilizada para comunicação entre computadores e periféricos e é a forma mais popular de comunicação entre um CLP (controlador lógico programável) e um dispositivo externo. Neste artigo, vamos desvendar cada parte desta comunicação a fim de mostrar o quão simples ela pode ser quando realmente temos o entendimento de como ela é estruturada.

rs232 é um método assíncrono de comunicação e para entender melhor o que isto significa, imagine um túnel que interliga dois dispositivos. Por este túnel, deve ser enviada uma mensagem do emissor para o receptor e para facilitar o nosso exemplo, imagine que esta mensagem seja composta por 10 palavras que formam uma frase. Para o receptor “entender” a mensagem enviada pelo emissor é necessário que a frase esteja com as palavras ordenadas onde a primeira palavra enviada deve ser a primeira recebida de forma a compor uma frase, correto? Depende… na comunicação entre hardwares, ela se dá de forma síncrona quando as palavras possuírem uma ordem bem definida devendo seguir esta ordem para serem interpretadas. Já na comunicação assíncrona, cada palavra recebe uma identificação e tanto faz a ordem de cada uma enviada pelo emissor porque o receptor conhece a regra e devido a identificação de cada palavra, consegue organizar a ordem delas a fim de compor a frase. É este tipo de comunicação que se dá a comunicação rs232.

O rs232 utiliza o sistema binário (1 e 0) para transmitir dados em formato ASCII (American Standard Code for Information Interchange) e este código é capaz de traduzir um código legível pelos humanos (letras e números) em códigos legível pelos computadores (1 e 0). A maioria dos CLPs de mercado possuem porta serial que são utilizadas para transmitir/receber dados em forma de tensão (+/-15 volts), onde a tensão positiva é chamada de MARK e a tensão negativa é chamada de SPACE.

Existem 2 tipos de dispositivos rs232. O primeiro é chamado de dispositivo DTE (Data Terminal Equipment) e um exemplo típico deste dispositivo é o computador. O outro tipo é o DCE (Data Communications Equipment)  e um exemplo típico é o antigo modem. O CLP pode tanto ser tratado como DTE, quanto DCE, dependendo do fabricante.

A porta serial opera ligando alguns pinos enquanto desliga outros e cada um destes pinos possuem uma finalidade específica. A porta serial por sua vez possui 2 tipos (9 pinos ou 25 pinos). Abaixo podemos ver um figura com os 2 tipos.

rs232 db9 db25 rs232 db9 db25rs232 db9 db25 Desvendando a Comunicação RS232

[sc name=”automacao”]

Na tabela abaixo, podemos ver a finalidade de cada pino nos 2 diferentes conectores na comunicação RS232:

9 Pinos 25 Pinos Finalidade
1 1 Terra ou GND do Chassi do Dispositivo
2 3 Recepção de Dados (RD)
3 2 Transmissão de Dados (TD)
4 20 Terminal de Dados Pronto (Ready) (DTR)
5 7 Terra ou GND do Sinal
6 6 Conjunto de Dados Pronto (Ready) (DSR)
7 4 Requisição para Enviar (RTS)
8 5 Limpar para Enviar (CTS)
9 22 Indicador de Campainha (RI) *somente para modens

Entendendo a Finalidade de Cada Pino

  • Terra ou GND do Chassi do Dispositivo – Este pino deve ser ligado internamente ao chassi ou carcaça do dispositivo
  • Recepção de Dados (RD) – Este é o pino onde os dados do dispositivo externo entram no CLP por exemplo.
  • Transmissão de Dados (TD) – Utilizando o exemplo acima, este é o pino onde os dados da porta serial do CLP deixa esta porta rumo ao dispositivo externo.
  • Terminal de Dados Pronto (Ready) (DTR) – Este é o pino de controle master para os dispositivos externos. e quando ele está ligado (1), o dispositivo externo não pode transmitir ou receber dados.
  • Terra ou GND do Sinal – Como o próprio nome diz este pino é onde dever ser ligado o fio de aterramento
  • Conjunto de Dados Pronto (Ready) (DSR) – Tipicamente, os dispositivos externos possuem este pino permanentemente desligado “0” sendo que um CLP basicamente utiliza este pino para determinar se o dispositivo externo está ligado e pronto para comunicação.
  • Requisição para Enviar (RTS) – Este é basicamente um pino para negociação. Quando o CLP precisa enviar dados para um dispositivo externo, ele seta este pino em “0” e diz “Estou querendo enviar dados para você, ok? O dispositivo externo então diz Ok para o CLP enviar os dados setando o pino CTS (limpar para enviar) em “0”. O CLP então envia os dados.
  • Limpar para Enviar (CTS) – Este é o outro lado da negociação e como observado acima, o dispositivo seta este pino em “0” quando ele estiver pronto para receber os dados.
  • Indicador de Campainha (RI) *somente para modens – Este pino é utilizado apenas quando o CLP está conectado em um modem.

O que Acontece Quando o seu CLP e o Dispositivo Externo são ambos DTE ou DCEs?

Na comunicação RS232, quando os dispositivos são do mesmo tipo e o cabo a ser ligado for comum, eles simplesmente não conseguem comunicar entre si. A Figura abaixo mostra quando estes dois dispositivos não conseguem se comunicar.

Veja na Figura que o pino de recepção de dados (pino 2) do primeiro dispositivo está conectado ao pino de recepção de dados do segundo dispositivo e o pino de transmissão do primeiro dispositivo (pino 3)  também está conectado ao mesmo pino do segundo dispositivo. Isto é o mesmo que querer falar através do telefone com os pinos invertidos (a fala conectada a outra fala e a audição conectada a outra audição). É óbvio que isto não funciona.

A solução então para este caso é inverter os cabos de forma com que o pino 2 do primeiro dispositivo seja ligado no pino 3 do segundo e o pino 3 do primeiro no pino 2 do segundo.

rs232 dte rs232 dters232 dte Desvendando a Comunicação RS232

Um Exemplo Prático do RS232 em Ação

rs232 exemplo rs232 exemplors232 exemplo Desvendando a Comunicação RS232Para resumir tudo, aqui está uma sessão típica de comunicação rs232: Ambos os dispositivos estão ligados e o CLP é um dispositivo DTE, sendo que o dispositivo externo é um DCE.

O dispositivo externo liga o DST que que diz ao CLP que ele está lá e ligado. O CLP liga o RTS que seria o mesmo que fazer a pergunta ao dispositivo externo: “Sei que você está aí. Está pronto para receber algum dado?” O dispositivo externo responde então ligando o CTS que diz: “Ok, estou pronto. Manda ver!”. O CLP então manda os dados pelo terminal TD e o dispositivo recebe estes dados pelo terminal RD. Alguns dados são trocados e após algum tempo o dispositivo externo não consegue processar os dados tão ráPIDo quanto precisaria. Então ele desliga o CTS como se estivesse dizendo: “Espera um pouco, você está falando muito ráPIDo” e o CLP imediatamente pausa o envio de dados. O dispositivo externo então processa o que falta e novamente liga o CTS, fazendo com que o CLP volte a enviar dados. Enfim, o CLP termina de enviar os dados e liga o terminal RTS, que é o mesmo que dizer: “Terminei”. O dispositivo externo então “descansa”.

Como Funciona o Software na Comunicação RS232

Agora que entendemos como funciona o hardware na RS232, vamos entender como funciona o software. Para tanto, vamos olhar cada parte do quebra cabeças e definir alguns termos. Vamos lá:

ASCII: human-readable to computer-readable translation code ou traduzindo leitura humana para leitura máquina. No padrão ASCII cada letra/número é traduzido em 0’s e 1’s. Como cada letra ou numero é composta por 7 bits no ASCII, podemos obter 128 combinações ou caracteres (2^7 = 128). Abaixo, podemos ver a representação humana onde tipicamente referimos aos caracteres utilizando a terminologia hexadecimal. “0” é 30h, “5” é 35h, “E” é 45h, etc, onde o h significa simplesmente hexadecimal.

Bits mais significantes
Bits menos significantes 0 1 2 3 4 5 6 7
0 SPACE 0 @ P ` p
1 XON ! 1 A Q a q
2 STX 2 B R b r
3 ETX XOFF # 3 C S c s
4 $ 4 D T d t
5 NAK % 5 E U e u
6 ACK & 6 F V f v
7 7 G W g w
8 ( 8 H X h x
9 ) 9 I Y i y
A LF * : J Z j z
B + ; K [ k {
C , < L \ l |
D CR = M ] m }
E . > N ^ n ~
F / ? O _ o

 

Start Bit – Em rs-232 a primeira coisa que temos que enviar é o start bit. O start bit foi inventado na primeira guerra mundial por Kleinschmidt, é um bit de sincronização adicionado justamente antes de cada caractere que nós enviamos. Ele é considerado um espaço (SPACE) ou voltagem negativa ou 0.

Stop Bit – A última coisa que enviamos é chamado de stop bit. Este bit nos diz que o último caractere foi enviado e devemos pensar nisso como um ponto final do caractere. É chamado de MARK, ou tensão positiva, ou 1. Os Start e Stop bit são comummente chamados de framing bits devido ao fato de cercarem o caractere que está sendo enviado.

Parity Bit – Como a maioria dos CLPs e dispositivos externos são orientados por byte ( 8 bits = 1 byte) parece natural tratar dados como bytes. Embora o ASCII seja um código com 7 bits, raramente ele é transmitido desta forma e tipicamente o bit 8 é utilizado como um bit de paridade ou em outras palavras checagem de erro. Este método de checagem de erro recebeu este nome baseando-se na ideia de paridade na matemática. Em temos simples, paridade significa que todos os caracteres terão um número par de 1’s ou número impar de 1’s. Exemplos comuns de formas de paridade são None (Nenhum), Even (Par) e Odd (Ímpar). Considere os exemplos abaixo:

Envio do “E” (45h ou 1000101b (binario))

  • Em paridade None ou nenhum, o bit de paridade é sempre 0. Então o byte enviado é 10001010;
  • Em paridade Odd ou ímpar, nós temos que ter um número ímpar de 1’s no total do caractere. Veja neste exemplo que temos 3 números 1 impares e portanto o bit de paridade será 1. Então o byte enviado é 10001011;
  • Em paridade Even ou Par, nós temos que ter um número par de 1’s no total do caractere. Com já vimos que temos 3 números 1 impares, o bit de paridade neste caso será 0 por não ser par. Então o byte enviado é 10001010;

Durante a transmissão na RS232, o emissor calcula o bit de paridade e envia ele. O receptor por sua vez calcula a paridade para os 7 bits do caractere recebido e compara o resultado calculado com o bit 8 recebido. Se o valor calculado for igual ao real, é sinal de que nenhum erro ocorreu e a transmissão segue normalmente. Veja que é estranho que o método da paridade seja tão popular e o motivo é que ele é efetivo somente em partes. Explicando melhor, a paridade pode encontrar somente erros que afetam números ímpares de bit e se erros ocorrerem em números pares de bits (2, 4 ou 6), o método não é eficaz. Tipicamente, os erros são causados por ruídos que raramente afetam somente 1 bit e para tratar isto, podem ser utilizados blocos de checagem em redundância;

Baud Rate – Pense no baud rate como referencia ao número de bits por segundo que está sendo transmitido. Então 1200 significa 1200 bits enviados por segundo e 9600 significa que podem ser enviados 9600 bits a cada segundo. As velocidades comuns que podem ser configuradas no RS232 são: 1200, 2400, 4800, 9600, 19200 e 38400;

Formato de Dados (RS232 Data Format) – (baud rate-data bits-parity-stop bits). Este é o formado de dado típico na comunicação RS232. Por exemplo: 9600-8-N-1 significa um baud rate de 9600, 8 data bits, paridade None e stop bit “1”.

A Figura abaixo mostra como o dado deixa a porta serial para o caractere “E” (45h 1000101b) e paridade Even (par):

rs232 mensagem rs232 mensagemrs232 mensagem Desvendando a Comunicação RS232

Outra ferramenta importante que é utilizada em alguns casos chama-se sofware negociador (software handshaking) responsável pelo controle do fluxo. Da mesma forma que ele existe no hardware (RTS), o software negociador é utilizado para garantir que ambos os dispositivos estão prontos para enviar/receber dados. O controlador de fluxo mais popular é chamado XON/XOFF e é muito simples de entender. Simplesmente coloque o receptor para enviar o caractere XOFF quando ele precisar que o transmissor pare de mandar dados. Quando o receptor estiver pronto novamente, basta ele mandar ao transmissor o caractere XON. Comumente, XOFF é chamado de caractere de parada de comunicação e XON de caractare de liberação.

A última coisa que precisamos saber sobre os delimitadores é: Um delimitador é simplesmente adicionado ao final da mensagem a fim de dizer ao receptor para processar o dado recebido. Os mais comuns são o CR ou o par CR e LF. O CR (carriage return) é como as antigas máquinas de escrever. Quando você chega no final da linha que está sendo escrita, um sinal toca e então você deve puxar a alavanca da máquina para posicionar na linha de baixo e continuar escrevendo. Em outras palavras, você retorna ao início e isto é o que o delimitador CR faz na tela de um computador. Um CLP/dispositivo recebe este caractere e sabe que tem que colocar este dado em um buffer (onde o dado é armazenado temporariamente antes de ser processado).

Às vezes, um par STX e ETX é utilizado para transmissão/recepção na rs232, onde STX significa “start of text” ou inicio do texto e ETX “end of text” ou fim do texto. O STX é enviado antes do dado e fala para o dispositivo externo que o dado está vindo. Após todos os dados serem enviados, um caractere ETX é enviado.

Finalmente, preciso falar dos caracteres ACK/NAK. Este par raramente é utilizado mas pode ser útil e funciona da seguinte forma: o transmissor envia o dado e se o receptor recebe o dado sem erro, ele envia de volta um caractere ACK. Por outro lado, caso houver um erro, o caractere que retorna é o NAK e o transmissor reenvia o dado.

Por fim, a comunicação rs232 possui bastante informação para ser absorvida, mas com alguma prática você verá que não é tão difícil entender a mesma. Pratique e sinta-se a vontade de perguntar. Estaremos aqui para lhe ajudar. Até a próxima.