DAS5306: Informática Industrial II
Trabalhos para 2010/2
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 novot1servidor.c
o
qual aceita
os seguintes comandos via UDP:
( versão antiga: t1servidor.c
)
'h' faz o servidor devolver um string contendo a hora no
computador do servidor (segundos e microsegundos)..
'p' faz o servidor colocar na tela o tempo entre este comando 'p'
e o último comando 'p' recebido.
O objetivo do programa cliente é, inicialmente usar o comando 'h'
para determinar o atraso médio na rede de
comunicação e o drift
rate entre os relógios do servidor e do cliente. Em seguida,
o cliente deve gerar um comando 'p' e, depois de exatamente 20 segundos
pelo relógio do servidor, gerar um novo comando 'p'.
Usar o exemplo em exemplo.c
sobre como implementar um sleep de
precisão no Linux.
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.
A simulação ocorre no domínio do tempo. Os alunos
deverão entregar um
desenho mostrando os aspectos físicos da planta, assim como a
descrição
da sua dinâmica no domínio do tempo.
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, como aqueles fornecidos como exemplo.
T3 - Trabalho do controlador de sistemas contínuos
(preliminar)
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.