DAS 5315 - Sistemas Distribuídos para
Automação Industrial
Trabalho
1º Semestre 2014
Professor: Joni da Silva Fraga
Doutorando: Luciano Barreto
DAS5315 - Sistemas Distribuídos
1
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
Lê sensores dos
silos
Recebe
abastecimento
Controlador
Silo 01
Obj_S1
Silo 02
Obj_S2
Silo 03
Obj_S3
Silo 03
Obj_S4
Silo 4
Obj_S5
Decide em qual silo armazenar
DAS5315 - Sistemas Distribuídos
3
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-orientacaoobjetos/collections-framework/#16-11-mapas-java-util-map
DAS5315 - Sistemas Distribuídos
14
Dicas
Utilizar diferentes Threads para Diferentes Operações
– Controlador
– Silos
• Thread que lê os sensores
• Thread que recebe os
abastecimentos
• Thread que Adiciona Silos
• ...
• Thread que recebe
abastecimento
• Thread que recebe o alarme
• ...
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.html
http://www.javacodegeeks.com/2011/09/java-concurrency-tutorial-semaphores.html
http://wmagician.wordpress.com/2008/01/02/padrao-singleton-em-java/
DAS5315 - Sistemas Distribuídos
15
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 txt
http://www.devmedia.com.br/criando-e-gravando-dados-em-txt-com-java/23060
http://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
• Netbeans
http://dicaetuto.blogspot.com.br/2011/03/criando-um-arquivo-jar-nonetbenas-9x.html
• Eclipse
http://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 registrados
private 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
Download

silo - Departamento de Automação e Sistemas