Baixe o app para aproveitar ainda mais
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).
Compartilhar