Enviando/Recebendo
dados usando topologia tipo anel sobre RS-232 Além disso, em muitos casos uma pequena
rede de dispositivos usando a RS-232 poderia resolver, e
bem, um caso bem específico. Porém os problemas surgem
quando desejamos conectar mais de um dispositivo em rede
usando a RS-232, que em teoria, não foi desenvolvida
para isso. A experiência a ser apresentada nesse artigo
visa ajudar os que pretendem evoluir no assunto,
servindo de base para seus estudos.
A inspiração: IEEE 802.5 Token Ring O Token Ring é formado por dispositivos
ou estações (geralmente computadores ou similares)
conectados em formato de "anel" conforme a figura
abaixo.O princípio usado nesse tipo de rede é que um
"token" fica circulando entre os anéis e qualquer
dispositivo que esteja com esse token terá o direito de
transmitir os dados. Sempre que uma estação deseja
transmitir um frame de dados, ela inverte um único bit
do token de 3 bytes que o transforma instantaneamente em
um pacote de dados normal.Como há apenas um token, só
pode haver uma única transmissão por vez. Como o token gira no anel, é garantido que cada dispositivo receba o token em um tempo especificado. Portanto, há também um limite máximo de espera para receber o token. Também há um limite máximo de 250 dispositivos nesse tipo de rede.Para distinguir os pacotes de dados normais do token (pacote de controle), uma sequência especial é atribuída ao pacote token. Quando qualquer dispositivo obtém o token, ele primeiro envia os dados que deseja enviar e, em seguida, recircula o token.
Sobre o exemplo que será apresentado No exemplo apresentado nesse artigo foi
inserido apenas a parte da circulação dos dados, já que
a ideia era simplificar o tipo de dispositivo, três
microcontroladores e um microprocessador das décadas de
1970/1980, ao invés de utilizar computadores, permitindo
assim que tais elementos pudessem ser utilizados nesse
exemplo. Então o que
posso dizer é que o que temos são dispositivos RS-232
conectados entre si, formando um anel, mas sem que isso
interfira nas conexões, já que a norma RS-232 prevê a
conexão de apenas dois dispositivos entre si por porta
(sem adicionais), conforme demonstrado na figura abaixo.
No exemplo, o que eu fiz foi conectar 4
dispositivos RS-232 usando a topologia "Ring"
(anel), de maneira que o primeiro elemento está
conectado ao segundo e este por sua vez ao terceiro, que
se conecta ao quarto e este por fim se conecta ao
primeiro, fechando o anel. Veja a figura abaixo para
entender melhor o que foi dito. Perceba que nessa rede, o ponto TX
(envio) de todos os dispositivos está conectado ao ponto
RX (recepção) do próximo dispositivo em relação a cada
um. E assim, por exemplo, para que o ponto 1 envie uma
mensagem para o ponto 4, o pacote precisará passar pelos
pontos 2 e 3, nessa ordem. E qualquer resposta entre
qualquer ponto também segue a mesma regra. Note que pela
figura a comunicação se dá sempre em sentido
anti-horário. A mensagem sempre "gira" no anel de um
dispositivo a outro até chegar ao seu destino, e a
resposta do dispositivo que recebeu para o dispositivo
que enviou caminha da mesma forma. Não há como, por
exemplo, o dispositivo nr 4 se comunicar com o
dispositivo nr 3 sem que a mensagem vinda do nr 4 passe
pelo nr 1 e nr 2 até chegar ao nr 3. Porém nesse caso a
resposta do dispositivo nr 3 encontra na sua sequencia o
dispositivo nr 4. Mas veja que se pegarmos como exemplo
o envio do nr 1 para o nr 3, a mensagem passaria pelo nr
2 e a resposta pelo nr 4.
O protocolo O protocolo criado é bem simples, mas
facilita bastante o uso e entendimento, em relação a
qualquer outro protocolo (lembrando que isso é apenas um exercício ("brincadeiras
e experiências"), que visa auxiliar qualquer um que
queira ampliar seus horizontes!. O formato do protocolo
está abaixo: <HEADER><NR
DOS DISPOSITIVOS><QUANTIDADE DE BYTES DA
MSG><BYTES DA MSG> Com:
Também ainda sobre o protocolo,
como não há um token "girando" constantemente que possa
ser utilizado pelo dispositivo que precisa enviar algo,
cada dispositivo tem implementado um "alerta" interno
que o impede de receber qualquer coisa caso o mesmo
esteja em "estado de envio" e também de enviar em caso
de estar em "estado de recepção". E para evitar que os
dados sejam perdidos é só ativar o reenvio da mensagem
sempre que o ACK de confirmação não chegar dentro de um
tempo predeterminado. Isso funciona bem para
dispositivos que trabalham com ativação pela mão
"humana" e, até certo ponto, para dispositivos
automáticos desde que não muito rápidos. Um outro detalhe que acredito
foi percebido, é que nesse pequeno protocolo só é
possível ter 15 dispositivos máximos, já que o mesmo
byte carrega o nr do sender e o nr do
receiver (quem envia e quem recebe). Esse pequeno
problema pode ser facilmente resolvido adicionando mais
um byte, então teríamos um byte para o nr do sender
e um byte para o receiver. Isso aumentaria para
até 255 dispositivos na rede. O número de bytes na mensagem
foi limitado a 14 para facilitar o uso dos LCD's
presentes na experiência e também devido ao fato de um
ou outro dispositivo presente na "rede" não possuir
grande área de memória RAM para troca de dados, como é o
caso do PIC utilizado que possui apenas 256 bytes de RAM
para a versão 16F648A (e 224 bytes caso a versão fosse o
PIC16F628A). Isso pode ser contornado inserindo nos
"bytes da mensagem" um segundo protocolo que permita
transferir pacotes numerados! Teria-se então um
protocolo encapsulado por outro, ou uma transmissão de
dados em camadas (mais ou menos como acontece com o
TCP/IP).
A experiência Para realizar essa experiência
eu utilizei 4 "dispositivos" bastante distintos e
diferentes entre si, que são:
Para o primeiro da lista a
programação foi feita em Assembly Z80 e para os demais,
Linguagem C (cada qual com as suas particularidades). O PIC assume o dispositivo nr 1,
o Arduino nr 2, o STM32 nr 3 e o microprocessador Z80 o
nr 4. O Z80 é um microprocessador e não possuí USART's,
TIMER's e outros recursos internos. Por isso a parte do
reenvio não está presente aqui, mas não foi necessária.
Para implementar isso na rede, seria necessário o uso de
um timer externo conectado ao Z80 (não perca os próximos
capítulos dessa nova saga!!!). Para o hardware dessa
experiência usei os seguintes itens:
Mais abaixo, em Downloads,
eu deixo o pacote com os programas desenvolvidos
para cada um dos elementos presentes nos meus testes para estudos, alterações
e outros que deseje realizar. Essa experiência pode parecer para alguns
uma "perda total de tempo". Porém eu sempre costumo
dizer que você não perde tempo ao se propor um
desafio no intuíto de aumentar seus conhecimentos,
você só tem a ganhar! E a saga dessa "rede"
ainda não chegou ao fim! Pretendo continuar
desenvolvendo a mesma até chegar em algo mais próximo de
"alguma coisa utilizável" ou algo do tipo (escovar
bits é sempre muito bom!!!). Espero que cada um
que tenha lido esse artigo e/ou visto o vídeo se
entusiasme e esteja agora se propondo um "desafio"
similar ou maior!!! Bons "desafios" e montagens!!! Até a
próxima!!! ;)
Downloads: - Pacote
com arquivo Arduino (compilador Arduino-cli ou
Arduino IDE); Este projeto foi publicado em Maio de 2023 no site do Arne (http://www.arnerobotics.com.br) e divulgado no Youtube através do seu canal em https://www.youtube.com/c/arnesake. Especificações: - Cérebro - Arduino Uno, PIC16F648A, STM32F103C8T6 e Z80
|
Copyright deste conteúdo reservado para Márcio José Soares e protegido pela Lei de Direitos Autorais LEI N° 9.610, de 19 de Fevereiro de 1998. É estritamente proibida a reprodução total ou parcial do conteúdo desta página em outros pontos da internet, livros ou outros tipos de publicações comerciais ou não, sem a prévia autorização por escrito do autor. |