das 5315 - sistemas distribuídos para automação industrial trabalho 1º semestre 2014 das5315 -...
TRANSCRIPT
DAS 5315 - Sistemas Distribuídos para Automação Industrial
Trabalho1º Semestre 2014
DAS5315 - Sistemas Distribuídos 1
Professor: Joni da Silva FragaDoutorando: Luciano Barreto
Objetivos
• Aplicar os conceitos aprendidos na disciplina– Threads– Concorrência– Objetos remotos– Comunicação entre processos
• Implementação de uma aplicação utilizando mecanismos de invocação remota de métodos
DAS5315 - Sistemas Distribuídos 2
Descrição• Controle de Silos de Armazenamento e Escoamento
• Um controlador deve distribuir os abastecimentos entre os 5 silos• Esse controlador recebe informações de recebimento de grãos e faz a leitura de
sensores de quantidade nos silos para tomar a decisão de qual silo abastecer
DAS5315 - Sistemas Distribuídos 3
Silo 01Obj_S1
Silo 02Obj_S2
Silo 4Obj_S5
Controlador
Recebe abastecimento
Lê sensores dos silos
Decide em qual silo armazenar
Silo 03Obj_S4
Silo 03Obj_S3
Especificações
• Silos• Os silos tem uma capacidade limitada• Há uma vazão dos grãos dos silos• O abastecimento do silo deve levar em conta a sua
capacidade de armazenamento• Valor Máximo Abast = Capacidade do Silo – Utilização
• Caso a quantidade de abastecimento não caiba em um silo a mesma deve ser distribuída nos demais• O valor em espera pode ser armazenada em uma variável de
estocagem
DAS5315 - Sistemas Distribuídos 4
Especificações• Controlador• Recebe informações de abastecimento
• Deve distribuir o abastecimento entre os silos, de forma que o silo com menor quantidade de grãos receba esse abastecimento (total ou parcial)
• O controlador pode receber quantidades variáveis de abastecimento, dessa forma pode ocorrer de uma certa quantidade de grãos ficar em espera pois nenhum silo comporta• Aguardando escoamento
DAS5315 - Sistemas Distribuídos 5
Especificações
• Os sensores dos silos podem falhar, caso isso ocorra o controlador deve desativar esse silo da lista– Avisar o controlador do problema e exibir uma mensagem
• O valor que está neste silo quando ocorreu a falha no sensor é descartado
DAS5315 - Sistemas Distribuídos 6
Implementação
• Os silos são implementados em processos sendo executados em diferentes locais como objetos remotos• Esses processos devem oferecer um método remoto chamado:• Ler_Sensor() que irá retornar a quantidade atual armazenada no silo• Abastece_Silo() que envia uma quantidade para o abastecimento
• Os silos tem uma capacidade inteira de 50 unidades
• A variável que controla a quantidade atual do silo deve ser decrementada randomicamente em tempo e em quantidade simulando o escoamento
• Tempo variando entre 1 e 3 segundos com saída entre 5 e 50 quilos
DAS5315 - Sistemas Distribuídos 7
Implementação
• As leituras dos sensores devem manter um contador para saber qual a quantidade dos silos no momento das leituras– O controlador pode manter esses contadores atualizados a
cada 2 segundos
• ** Informar manualmente em qualquer um dos processos (exceto do controlador) o valor -1 na variável utilizada pelo sensor para simular defeito
DAS5315 - Sistemas Distribuídos 8
Implementação
• O controlador recebe as quantidades de abastecimento– O sistema deverá receber a leitura pelo teclado, podendo ser
informada diversas vezes.
• As quantidades recebidas são esporádicas (somente quando informadas manualmente), mas o processo de leitura/abastecimento deve ser automático
DAS5315 - Sistemas Distribuídos 9
Implementação
• A interação só será iniciada quando todos os processos tiverem registrado seus objetos remotos– Inicia-se todos os silos, depois o controlador é iniciado– Verificar utilizando a leitura das IOR
• Todos os silos começam com quantidade atual = 0
DAS5315 - Sistemas Distribuídos 10
Implementação
• Os abastecimentos e as leituras dos sensores devem ser armazenadas em um log– Um arquivo .txt deverá ser utilizado para isso. Sempre que
houverem leituras pelo controlador e abastecimentos pelos silos o evento deverá ser armazenado no log com a data e hora atual• Os LOGs devem ser individuais de cada processo, utilizando
estampas de tempo (14:00:00 – Leitura Silo 1 – 20; 14:00:01 – Abastecimento Silo 1 – Valor – 30)
• Mostrar na tela do controlador quando um sensor está com problema
DAS5315 - Sistemas Distribuídos 11
Implementação
• Os valores dos sensores, abastecimentos e leituras devem ser mostrados no dispositivo de saída padrão (tela)
• Utilizar threads para leituras e escritas tanto nos sensores quanto no controlador
• Lembrar que objetos podem ser concorrentes– Usar métodos que levem em conta a sincronização
DAS5315 - Sistemas Distribuídos 12
Ferramentas
• Linguagem de programação Java.– Core Java, Vol. I (Fundamentals). Cay S.
Horstmann, Gary Cornell.– Core Java, Vol. II (Advanced Features). Cay S.
Horstmann, Gary Cornell.
• CORBA– Java Programming With Corba. Andreas Vogel,
Keith Duddy.
DAS5315 - Sistemas Distribuídos 13
Dicas
• Utilizar estruturas de dados do Java tais como – ArrayList para métodos que a sincronia não importa– Vector para métodos que a sincronia é importante
• Thread-safe
– TreeSet/TreeMap já armazena ordenado• Bom quando se precisa saber qual o maior ou menor valor, por
exemplo
http://www.caelum.com.br/apostila-java-orientacao-objetos/collections-framework/#16-11-mapas-java-util-map
DAS5315 - Sistemas Distribuídos 14
Dicas
DAS5315 - Sistemas Distribuídos 15
Utilizar diferentes Threads para Diferentes Operações
Threads em Java são classes que implementam Runnable ou estendem Thread
Lembrar de utilizar semáforos, singleton, etc....
http://www.dsc.ufcg.edu.br/~jacques/cursos/map/html/threads/sincronizacao.htmlhttp://www.javacodegeeks.com/2011/09/java-concurrency-tutorial-semaphores.htmlhttp://wmagician.wordpress.com/2008/01/02/padrao-singleton-em-java/
Dicas
• Interface gráfica não é obrigatório, mas é bem vinda– NetBeans ou IntelliJ IDEA ajudam a desenvolver interfaces
gráficas– Interfaces SCADA são interessantes
• Modo texto é aceitável– Se feita de forma que se entenda o processo
• Log em txthttp://www.devmedia.com.br/criando-e-gravando-dados-em-txt-com-java/23060http://mballem.wordpress.com/2011/03/21/manipulando-arquivo-txt-com-java/
DAS5315 - Sistemas Distribuídos 16
Dicas
• Utilizar computadores diferentes não é obrigatório– Mas utilizar diferentes processos é
• Não utilizar uma mesma classe Main para tudo
• Fazer somente um código para o Silo– Utilizar a identificação do silo através de argumento
java –jar silo.jar [1..N]
public static void main (String[] args){String id_Silo = args[0];....}
DAS5315 - Sistemas Distribuídos 17
Dicas
• Tentem apresentar fora da ferramenta que usaram para desenvolver (fica mais rápido e da menos confusão com os projetos)
– Gerando pacotes jar • Netbeanshttp://dicaetuto.blogspot.com.br/2011/03/criando-um-arquivo-jar-no-
netbenas-9x.html
• Eclipsehttp://maguscode.blogspot.com.br/2010/08/gerar-jar-no-eclipse-e-executar.html
• Para executar um jar use– java –jar pacote.jar [argumentos]
DAS5315 - Sistemas Distribuídos 18
Dicas
• Verificar se todos os objetos já foram registradosprivate static boolean isSynchronized(NamingContext nc) throws Exception {
BindingListHolder bl = new BindingListHolder();BindingIteratorHolder bi = new BindingIteratorHolder();nc.list(99, bl, bi);Binding[] bindings = bl.value;return bindings.length == 5;
}.....
org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");NamingContext nc = NamingContextHelper.narrow(objRef);...while (!isSynchronized(nc));...}....
DAS5315 - Sistemas Distribuídos 19
Avaliação
• Grupo de 2 alunos• Enviar o nome da dupla e a data de apresentação o quanto
antes• Os dois devem saber o que foi feito, um explica como
funciona o controlador e outro o silo• Entrega até 18/07/2014• Enviar código fonte em uma pasta com o nome da dupla
• Mandar e-mail para marcar dia e horário• Apresentação será no LTIC
• Dúvidas: [email protected]• www.das.ufsc.br/~lucianobarreto/
DAS5315 - Sistemas Distribuídos 20