Buscar

Gabarito1Lista_Exercicios_1sem2020

Prévia do material em texto

1a. Lista de Exercícios
FEMEC42082 - Redes Industriais
 1. Monte um programa em português estruturado que siga o protocolo TDMA (adote 5
estações dividindo o tempo de 100ms – cada estação tem 15ms para enviar uma
mensagem e 5ms de guarda total).
 1. //Inicia variáveis
 2. int i, n= NúmeroDaEstacaoNaLista, t=5;
 3. float tempo, t1, espera=15, guarda=5;
 4. bool me, mr;
 5. char msg;
 6. // Programa Principal
 7. inicio
 8. enquanto (true) faça
 9. inicio (1º enquanto)
 10. tempo:= agora();
 11. t1:= tempo;
 12. enquanto (tempo-t1<espera*n) faça
 13. inicio (2º enquanto)
 14. mr:= checaMsgRecebida();
 15. se (mr) então
 16. inicio (1º se)
 17. msg:= recebeMsg();
 18. processa(msg);
 19. fim (1º se)
 20. tempo:= agora();
 21. fim (2º enquanto)
 22. me = checaMsgEnviar();
 23. se (me) então
 24. inicio (2º se)
 25. delay(guarda/2);
 26. enviaMsg();
 27. delay(guarda/2);
 28. fim (2º se)
 29. senão delay(espera+guarda);
 30. enquanto (tempo-t1<espera*(t-n)) faça
 31. inicio (3º enquanto)
 32. mr:= checaMsgRecebida();
 33. se (mr) então
 34. inicio (se)
 35. msg:= recebeMsg();
 36. processa(msg);
 37. fim (se)
 38. tempo:= agora();
 39. fim (3º enquanto)
 40. fim (1º enquanto)
2. Monte um programa do tipo MESTRE ENVIADOR / ESCRAVO RECEBEDOR
emArduino para atender um sistema de controle de avanço de um cilindro pneumático
(saída 6 do ESCRAVO) em função de um botão acionado no MESTRE (entrada 3). O
cilindrodeverá ficar acionado por 5s e então retornar. 
Referência: https://www.arduino.cc/en/Tutorial/LibraryExamples/MasterWriter
Figura 1: Montagem da rede I2C entre Arduinos Uno
Código do Arduino Mestre ENVIADOR:
#include <Wire.h>
void setup()
{
Wire.begin(); // join i2c bus (address optional for master)
pinMode(3,INPUT); // Identifica entrada a digital 3
}
void loop()
{
 int botao = digitalRead(3);// lê a entrada 3 e a armazena na variável botão do tipo int
 Wire.beginTransmission (4); // inicia transmissão para o escravo #4
 Wire.write(botao); // envia um inteiro 
 Wire.endTransmission(); // encerra transmissão
 delay(500);
}
Código Arduino Escravo RECEBEDOR
#include <Wire.h>
long temp, aux; // variáveis globais
void setup()
{
 Wire.begin (4); // inicia i2c bus com endereço #4
 Wire.onReceive(receiveEvent); // registra evento de mensagem enviada pelo mestre
 temp = millis();// inicia variável tempo
 aux = 5000;// inicia variável aux como 5000 ms
 pinMode(6, OUTPUT); /// identifica saída digital 6
}
void loop()
{
 delay(100); // programação principal “vazio”
}
// função que executa quando qualquer dado é recebido pelo mestre
// esta função é registrada como um ecento(ver setup())
void receiveEvent(int howMany)
{
 while(1 < Wire.available()) // 
 {
 int c = Wire.read(); // recebe inteiro como dado
 }
 if c = 1 
{
temp = millis();// inicia contagem de tempo
digitalWrite(6, HIGH); // Aciona o cilindro
}
 if (millis() - temp >= aux) // se passaram 5 s
{
digitalWrite(6, LOW); // recua o cilindro
}
}
3. Monte um programa em português estruturado para um estação com protocolo Token
Passing. Não esquecer de implementar o cálculo do time-out de retorno do token na
estação, de forma a criar novo token e reestruturar a sequência de estações
Figura 2: Fluxograma do Protocolo Token Passing
Cada estação precisa saber:
1) Seu índice na sequência das estações
2) Próximo índice (para enviar TOKEN)
3) Número total de estações = N
4) Tempo de retenção de TOKEN = Rt
5) Tempo de envio de TOKEN = Et
Timeout (máximo) = N.(Rt + Et)
PARA CASA: Fazer o programa em português estruturado desse fluxograma (0,5 ponto)
4. Dada as estações abaixo: 
Seja uma Rede do tipo Token passing, com tempo de envio do token: 50us e tempo fixo
para envio de mensagem por estação: 200us. Qual (is) estação (ões) enviara (ao) as
mensagens no prazo nesse caso? (Adote que apenas estas estações estão ativas)
Justifique a resposta.
Caso o Dead Line se refere ao término do envio da mensagem, para o pior caso cada 
estação teria que esperar 5 x (Tempo envio de TOKEN + Tempo de envio de Mensagem) 
= 5 x (50 + 200) = 1.250 us.
Caso o Dead Line se refere ao início do início da mensagem, para o pior caso cada 
estação teria que esperar 5 x (Tempo envio de TOKEN) + 4 x (Tempo de envio de 
Mensagem) = 5 x 50 + 4 x 200 = 1.050 us.
Para ambos os casos, nenhuma estação enviaria a mensagem no prazo.
5. Refaça o exercício anterior para rede do tipo CSMA/DCR com slot-time de 50us e com 
quatro de tamanho fixo de 4 slot-times.
 a) Caso sejam um total de 20 estações calcule o tempo de época;
T época = 31 x 50 + 20 x 200 = 1550 + 4000 = 5550 us
 b) Recalcule o item a, para 33 estações. Avalie o impacto no tempo de época.
T época = 63 x 50 + 33 x 200 = 3150 + 6600 = 9750 us
 c) Caso sejam um total de 20 estações calcule o tempo máximo de espera para a 
estação 13, no pior caso possível
T max = T época (20) + 15 x 50 + 13 x 200 = 5550 + 750 + 2150 = 8450 us
 d) Avalie qual protocolo é o mais eficiente para essa época específica.
Para 20 estações no protocolo Token Passing, no caso do tempo de término de 
mensagem ser o Dead Line, tem-se:
T max envio token passing = 20 x (50 + 200) = 5000 us < T época!
PARA CASA: Avalie quais das estações da figura enviarão mensagens no prazo para 
esse caso específico (0,5 Ponto).

Continue navegando