• Nenhum resultado encontrado

PROTOCOLO DE COMUNICAÇÃO SÉRIE RS-232

N/A
N/A
Protected

Academic year: 2021

Share "PROTOCOLO DE COMUNICAÇÃO SÉRIE RS-232"

Copied!
8
0
0

Texto

(1)

PROTOCOLO DE COMUNICAÇÃO

SÉRIE RS-232

Realizado por:

Amândio Pereira………...010503121 Carlos Daniel……….050503245

(2)

Í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

(3)

OBJECTIVOS

O objectivo deste trabalho prático foi o desenvolvimento de um protocolo de comunicação série RS232 entre duas estações (PC’s), recorrendo à linguagem de programação C.

INTRODUÇÃO

A seguinte figura (fig.1) representa o “modelo em camadas” da comunicação que se pretende implementar:

Fig.1 - Modelo em camadas do protocolo

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 ligação entre os dois DCE’s (Data Communications Equipment) é feita recorrendo a interfaces DB9 (9 pinos), embora só se usem 3 pinos:

Pino 2 - Rx Pino 3 - Tx Pino 5 - Gnd O tipo de transmissão é sem handshaking pois só se usam 3 condutores. A ligação entre os dois DCE’s é em Null Modem (cabo cruzado).

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.

(4)

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 tem as seguintes características:

-Fornece um serviço fiável à camada superior.

-Função de framming: a informação é acondicionada em tramas -Estabelecimento (SET) e conclusão (DISC) da ligação.

-Controlo de erros c/ pedido de retransmissão e temporizadores.

Esta aplicação suporta dois tipos de tramas. As tramas de informação e as tramas de controlo:

SYN SYN SOH C L BCC DADOS BCC

SYN SYN SOH C L BCC

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.

Fig.2 - Esquema de transferência de dados

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.

(5)

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

(6)

FUNÇÕES IMPLEMENTADAS

Para implementar o protocolo de comunicação foram criadas 5 funções distintas:

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.

● A função llwrite para realizar a transferência de dados necessita de partir a informação em blocos de 255 bytes, que serão inseridos na trama de dados. Deste modo, cada vez que se forma uma nova trama de dados, é necessário alterar o valor do campo C de forma a respeitar as definições do protocolo.

No caso de o receptor receber incorrectamente a trama de dados, deve enviar uma trama de rejeição, de modo a que o transmissor envie novamente essa trama. Fazendo isto num total de 5 vezes, após as quais a função llwrite retorna com um erro.

(7)

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 transmissor - o programa começa por abrir o ficheiro a transmitir, Posteriormente chama a

função llopen para ser estabelecida a comunicação, após o estabelecimento desta é chamada a função llwrite que fica encarregue de verificar se enviou o ficheiro completo. Finalmente é chamada a função llclose para terminar a ligação lógica.

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.

(8)

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 maneira de aumentar a fiabilidade da transmissão passaria, a nosso entender, por introduzir mais octetos de controlo BCC intercalados de n em n caracteres de dados, por forma a “apertar a malha” de detecção de erros, porém isso traria o inconveniente de aumentar o overhead.

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.

O uso de um tipo de comunicação assíncrona em vez da síncrona traz a desvantagem de um maior overhead devido aos start e stop bit, além de haver o probabilidade de dessincronização, caso haja uma longa sequência de zeros ou uns, porém, em relação à comunicação síncrona, têm a vantagem de ser mais simples e barata e não necessitar de uma linha extra para transmitir o sinal de relógio.

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.

Referências

Documentos relacionados

•   O  material  a  seguir  consiste  de  adaptações  e  extensões  dos  originais  gentilmente  cedidos  pelo 

Podem treinar tropas (fornecidas pelo cliente) ou levá-las para combate. Geralmente, organizam-se de forma ad-hoc, que respondem a solicitações de Estados; 2)

Deste modo, o adequado zoneamento e sua observância são fundamentais para a conciliação da preservação ou conservação de espécies, hábitats e paisagens dentre outras e

• Quando o navegador não tem suporte ao Javascript, para que conteúdo não seja exibido na forma textual, o script deve vir entre as tags de comentário do HTML. <script Language

O enfermeiro, como integrante da equipe multidisciplinar em saúde, possui respaldo ético legal e técnico cientifico para atuar junto ao paciente portador de feridas, da avaliação

- Mitra da Arquidiocese de Porto Alegre – Paróquia São José do Murialdo – Região Partenon; - Sociedade Educação e Caridade – Região Centro..

SONIA REGINA FRAGA DE OLIVEIRA SMED 1º MESÁRIO 48 ESCOLA MUNICIPAL DÉCIO MARTINS COSTA RUA CRISTÓVÃO JACQUES, 488 SANTO AGOSTINHO-SARANDI SONIA REGINA PERACCHI SILVA SMED PRESIDENTE

Pública de Transporte e Circulação S.A., de segunda à sexta-feira, das 8h30min às 17h, no Setor de Atendimento ao Cidadão da Secretaria Municipal dos Transportes / Empresa Pública