Escolar Documentos
Profissional Documentos
Cultura Documentos
Redes de Computadores
4ºano, 2ºsemestre - 2005/ 06
PROTOCOLO DE COMUNICAÇÃO
SÉRIE RS-232
Realizado por:
Amândio Pereira………...010503121
Carlos Daniel…………….050503245
Redes de Computadores
Índice:
Objectivos.............................................................pág 3
Introdução.............................................................pág 3
Descrição………………........................................pág 4
Funções implementadas.......................................pág 6
Ensaio…………………..........................................pág 7
Análise……………….............................................pág 8
Anexos
2
Redes de Computadores
OBJECTIVOS
INTRODUÇÃO
A camada física é constituída com um cabo c/ 3 condutores (Tx, Rx e Gnd), e as portas séries
dos computadores. As tensões de trabalho são -12 e 12, respectivamente 1 e 0.
A segunda camada são os Device Drivers da porta série (/dev/ttyS0 e /dev/ttyS1) que são
responsáveis pela leitura e escrita de sinais em tensão na porta série, estabelecendo a ligação
com a Aplicação Lógica.
A terceira camada interliga uma aplicação de software com os device drivers. Foi sobre esta
camada que o trabalho incidiu, logo será explicada mais à frente em detalhe.
A quarta camada será uma aplicação de software que faz uso do protocolo para comunicar.
Não será muito abordada pois neste caso apenas foi criada para testar o protocolo.
3
Redes de Computadores
DESCRIÇÃO
Neste ponto pretende-se explicar o funcionamento da aplicação lógica que está situada na
terceira camada, já referida atrás.
Esta aplicação suporta dois tipos de tramas. As tramas de informação e as tramas de controlo:
As tramas de controlo tem por função dar inicio e concluir a ligação e controlo de erros.
As tramas de informação têm por missão a transmissão de dados.
A seguinte figura (fig.2) representa a sequência de uma ligação correcta e sem erros.
Usando a técnica de encapsulamento de dados numa trama (framing) o receptor irá interpretar
a informação enviada pelo emissor como uma sequência correcta de caracteres ordenados
segundo uma lógica que tanto o emissor e o receptor entendem.
4
Redes de Computadores
A trama é iniciada por dois ou mais caracteres SYN seguido de um SOH. Apesar de poder
receber mais de dois SYN’s, a trama será vista sempre como tendo apenas dois.
Os caracteres iniciais SYN, SYN e SOH fazem parte do cabeçalho e servem para informar o
receptor que se iniciou uma nova trama. O quarto octeto (C) é um campo de controlo.
O quinto (L) indica o número de caracteres de dados enviados no caso das tramas de
informação e será zero no caso das tramas de controlo visto não serem enviados dados.
O sexto octeto da trama de controlo é o BCC que serve para detectar erros através do Ou
exclusivo (XOR) entre C e L. No caso das tramas de informação existe um segundo BCC no
final da trama que faz o XOR entre todos os caracteres de dados como protecção.
Caso o BCC recebido seja diferente do calculado pelo receptor este rejeita a trama e pede ao
emissor o reenvio da mesma.
Existe também um outro mecanismo de protecção que é o recurso à numeração das tramas
alternando o seu valor entre zero e um, de forma a que não ocorram situações em que as
tramas sejam omitidas ou repetidas. Isto é feito no octeto C.
Campo de controlo……......Descrição
SET…………………………..Inicio da ligação
DISC……...…………………. Fim da ligação
UA…………………………….Confirmação de um SET ou um DISC
RR…………………………….Confirmação de uma trama de informação
REJ………………...…………Pedido de reenvio de uma trama de informação
5
Redes de Computadores
FUNÇÕES IMPLEMENTADAS
Função header_checker - responsável pela detecção de uma sequência SYN, SYN (, SYN),
SOH, para além de também ler os campos C, L e BCC.
Função llopen – estabelece a ligação lógica e define os parâmetros da comunicação, como
seja o baudrate, o número de stop bits, bits de paridade, tipo de comunicação (assíncrona e
não canónica)
Função llread – gere as tramas de dados que chegam à porta série, através do controlo e
detecção de erros nas tramas ou sequenciamento incorrecto das mesmas
Função llwrite – responsável por enviar os dados correctamente para a porta série e pelo
controlo do fluxo de dados
Função llclose – fecha a ligação lógica estabelecida anteriormente e repõe as configurações
iniciais da porta série.
● A função llopen foi dividida em dois, de modo a garantir que esta responde quer como
emissor quer como receptor, ficando assim com duas funções responsáveis por cada uma das
situações (llopen_t e llopen_r).
Enquanto a função llopen_t envia a trama de controlo SET e fica a espera de receber a
resposta durante 3s, após o qual retransmite a mesma trama, tentando a retransmissão mais
quatro vezes. Se a comunicação for bem sucedida (envio e recepção das tramas SET e UA), a
função retorna com o identificador da ligação lógica.
A função llopen_r espera receber uma trama de controlo do tipo SET do transmissor, que, em
caso afirmativo faz a verificação do cabeçalho através da função header_checker, e se tudo
tiver bem, responde com um UA, dando-se início a transmissão. Caso não receba nenhuma
trama SET, a função espera durante um certo tempo, após o qual retorna um valor negativo
● A função llread começa por invocar a função header_checker que é responsável por verificar
se o que recebeu corresponde ao inicio de uma trama (SYN-SYN-SOH), que em caso
afirmativo verifica se a sequencia do cabeçalho esta correcta. Caso esta não esteja correcta,
isto é, se não satisfizer a definição do campo de controlo necessário, pede para reenviar, num
total de cinco tentativas, ao fim das quais retorna um valor negativo, indicativo de erro.
Se a sequência do cabeçalho for a correcta, vão-se recebendo os dados que podem chegar em
parcelas inferiores ao total especificado no campo L. Se não se conseguir ler o número de
dados esperados então a trama é rejeitada e é lida uma nova.
Após a recepção de todo o campo de dados é verificado se o BCC está correcto e, nesse caso,
o bloco dos dados da trama recebida é copiado para o buffer pretendido e é confirmada a
recepção da trama. Terminando isto, a função llread retorna com o número de caracteres
recebidos. Se o BCC estiver errado é pedido o reenvio da mesma trama através do envio de
uma trama de rejeição.
6
Redes de Computadores
No caso de os dados serem correctos, verifica se já se enviou todos os dados, que em caso
afirmativo retorna o numero de bytes escritos, em caso negativo recomeça todo o processo de
construção de tramas.
● A função llclose, tal como a função llopen, também segue caminhos distintos conforme seja
chamada no emissor (llclose_t) ou no receptor (llclose_r). No caso de ser chamada no emissor,
esta envia uma trama DISC, para avisar o receptor que não tem mais nada a enviar, fazendo
isto num total de 3 vezes. Caso a função llclose_r receba a trama DISC, simplesmente envia
outra trama DISC para o emissor, que responde com uma trama UA, terminando assim a
comunicação lógica.
APLICAÇÃO
Para testar-mos o protocolo desenvolvido criamos duas aplicações, uma para a transmissão e
outra para a recepção, que fazem uso das funções desenvolvidas anteriormente (llopen, llread,
llwrite e llclose).
O receptor – Este começa por criar o ficheiro para onde vão ser guardados os bytes recebidos.
Posteriormente chama a função llopen para estabelecer a ligação lógica e chama a função
llread que vai ler os bytes para o buffer, até receber uma trama DISC, após a qual chama a
função llclose para terminar a ligação lógica.
ENSAIO/ TESTE
Para testar o protocolo foi transferido um ficheiro “PDF” entre dois computadores, com sucesso.
Também se desligou o cabo a meio da ligação, voltando a ligar dentro dos limites de tempo,
tendo a transferência prosseguido normalmente e com sucesso.
7
Redes de Computadores
ANÁLISE
Com este protocolo de ligação lógica RS232, foram atingidos os objectivos que eram
propostos, isto é, fazer uma comunicação entre dois DTE’s sem erros e á prova de falhas no
nível físico (cabo).
Porém existe sempre a possibilidade de erros não serem detectados, pois pode acontecer num
determinado octeto de dados um bit estar errado, e o XOR resultar igual, ou seja, o XOR pode
não ser afectado com a mudança de um determinado bit, num determinado octeto.
Uma outra limitação do protocolo é o tamanho máximo do campo de dados que é de 255
octetos, uma vez que só dispomos de um carácter de 8 bits para definir o comprimento:
1111 1111 (binário) = 255 (decimal). A solução seria introduzir um segundo carácter para o
comprimento. 1111 1111 1111 1111 (binário) = 65 535 (decimal). Porém o inconveniente seria
o aumento exponencial da probabilidade de erro, pois o BCC de dados passaria a abranger
não 255, mas 65 535 caracteres.
Este tipo de comunicação RS232 não se aconselha para ambientes industriais visto utilizar
transmissão não diferencial (tensões em relação a uma terra comum), logo é mais susceptível
ao ruído. Também apresenta uma baixa capacidade de transmissão (bit rate ≤ 20 Kb/s) e
limitações em relação à distância máxima possível (≤ 15 mts).
Outro grande inconveniente é que só pode interligar dois terminais (comunicação ponto a
ponto).
Para ultrapassar estes obstáculos poderíamos utilizar o protocolo RS422 (bit rate ≤ 10 Mb/s e
distância máxima do cabo ≤1.5 kms) ou o RS485, já que usam a transmissão diferencial, maior
resistência ao ruído e possibilidade de interligação entre vários terminais em simultâneo.