DAS5306: Informática Industrial II
Trabalhos para 2010/1
Trabalhos entregues após a data estipulada perdem
10% da nota máxima
por dia de atraso, inclusive sábados e domingos.
Trabalhos entregues no dia correto mas depois do horário de
aula também
perdem 10% da nota máxima.
Apresentações individuais podem ser solicitadas.
Uma sugestão para quem só tem Windows em casa
é usar o MinGW.
T1 - Trabalho de sincronização de relógios
Fazer um programa em C para o Linux que atue como cliente
para o programa servidor t2servidor.c
o
qual aceita
os seguintes comandos via UDP:
'h' faz o servidor devolver uma estrutura contendo a hora no
computador do servidor.
'p' faz o servidor colocar na tela o tempo entre comandos 'p'
recebidos do cliente, o servidor espera receber uma
seqüência de
10 comandos 'p' igualmente espaçados.
O objetivo do programa cliente é, inicialmente usar o comando 'h'
para sincronizar o seu relógio com o relógio do servidor.
Em seguida,
o cliente deve gerar 10 comandos 'p' com o período de
10 milisegundos.
Repetir com o período de 10 segundos.
Usar o exemplo em exemplo
de
tarefa periódica sobre como implementar uma
tarefa periódica no Unix.
O estudo do programa t2servidor.c é essencial para a
realização
do trabalho.
T2 - Simulador de sistema contínuo
Implementar a simulação em tempo real de um sistema
físico qualquer,
proposto pelos alunos. O sistema
precisa ter pelo menos duas variáveis
físicas sensoriadas e dois
atuadores
através dos quais elas podem ser afetadas.
Pode ser multivariável.
Usar como base os programas
Aquecedor2006_2.java e Aquecedor2008_1.java
os quais usam a biblioteca
cp.jar
O aquecedor 2006/2 possui instrumentação embutida e
aceita os seguintes comandos:
"sta0"
lê valor de Ta
"st-0"
lê valor de T
"sti0"
lê
valor de Ti
"sno0" lê valor de No
"sh-0"
lê valor de H
"ani123.4" define valor de Ni como 123.4
"aq-567.8" define valor de Q como 567.8
O aquecedor 2008/1 possui instrumentação embutida e
aceita os
seguintes comandos:
"sta0"
lê valor de Ta
"st-0"
lê valor de T
"sti0"
lê
valor de Ti
"sno0"
lê valor de No
"sh-0"
lê valor de H
"ani123.4" define valor de Ni como 123.4
"aq-567.8" define valor de Q como 567.8
Blocos disponíveis:
public Atraso(int iterações)
public ComparadorUmaEntrada (double inferior, double superior)
-1 <inferior
0 entre
+1 > superior
public ControladorPI(double inicial, double ganProp, double ganInteg)
public Derivador(double gan)
public Diferenca()
public Diferenca( double offset)
public DiferencaComGanho(double geMais, double geMenos)
public DisplayConsole(String s)
public DisplayMensagem( javax.swing.JTextArea am, String s)
public Divisor( double ganhoNumerador, double ganhoDenumerador)
public GanhoProporcional(double ganho)
public GeradorConstante(double valor)
public GeradorDegrau(long atraso, double valor)
public GeradorParametro(String nome, double minimo, double inicial,
double maximo, java.awt.Container c)
public GeradorPulso(long atraso, long duracao, double valor)
public GeradorRampa(long atraso, double inclinacao)
public GeradorRuido( long atraso, long duracao, double amplitude)
public GeradorSenoide( long atraso, double amplitude, double frequencia)
public GeradorTrem(long atraso, long duracao, double valor)
public Histerese(double histerese)
public Integrador(double inicial, double ganho)
public PrimeiraOrdem(double Yinicial, double numerador, double
denominador)
public Produtorio(double v1, double v2, double v3, double v4)
public Saturacao(double min, double max)
public Somador()
public Somatorio( double g1, double g2, double g3, double g4)
public ZonaMortaHorizontal(double zm)
public ZonaMortaVertical(double zm)
Exemplo de bloco:
Derivador.java
Para compilar:
javac -cp cp.jar Aquecedor2006_2.java
Para executar:
java -classpath .:cp.jar Aquecedor2006_2 12345
O propósito dos comandos via UDP é acessar a
instrumentação da
planta simulada. Mostrar através de comandos UDP que a
simulação
feita
responde corretamente. Para isto, usar um programa cliente UDP
auxiliar qualquer.
T3 - Trabalho do controlador de sistemas contínuos
Implementar o controle e a supervisão do sistema criado no T2.
A planta do T2 deve possuir instrumentação embutida e
aceitar comandos para
acesso aos sensores e atuadores.
Implementar um programa em C no Linux, usando a biblioteca de
pthreads.
O programa CONTROLADOR deve incluir as seguintes funcionalidades de
controle e
supervisão:
- Laço de controle como tarefa periódica;
- Detecção de valores fora do intervalo de valores
válidos, geração de alarme;
- Informações na tela sobre a situação
corrente;
- Entrada através do teclado dos valores de referência
para a planta;
- Armazenagem periódica dos valores lidos em arquivo, juntamente
com um carimbo de tempo.
Avaliação composta por:
- Código fonte;
- Texto explicando qual a função de
cada thread, quais variáveis compartilhadas cada uma acessa;
- Apresentação individual do trabalho.
Outros requisitos:
- Usar mutex para proteger as variáveis
compartilhadas;
- Usar variáveis condição para
liberar thread de alarme;
- Tarefas periódicas implementadas com
clock_nanosleep
e não com sleep fixo;
- Período do controlador menor que 100ms,
compatível com a planta em questão;
- Atualização da tela pode ser com
sleep simples de 1 segundo;
- Usar buffer duplo para a gravação de
dados em arquivos, a escrita no disco é feita
por thread própria.
Alguns aspectos para a composição da nota do trabalho
do controlador:
- Fez no Linux, em C, usando a biblioteca das pthreads ?
- Foi usado um mutex para cada estrutura compartilhada ?
- A aplicação possui alarme disparado via variável
condição ?
- A aplicação apresenta valores dos sensores na tela ?
- A aplicação possui laços de controle ?
- A aplicação acessa teclado durante a
execução, afeta valor de referência ?
- A aplicação grava leituras em arquivo utilizando buffer
duplo e thread própria ?
- As tarefas de controle são realmente periódicas ?
- Existe algum warning na compilação ?
- Elegância do design da solução e legibilidade do
código.