DAS5306: Informática Industrial II
Trabalhos para 2009/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 do controlador de sistemas a eventos discretos
Fazer um programa na linguagem C para Linux que:
1) Leia de um arquivo a descrição de uma máquina
de estados, em termos de:
estado origem, estado destino, evento
Este arquivo foi criado através do programa t1cliente2009.c
o qual deverá ser
estudado para entendimento de como a informação foi
colocada no arquivo.
2) Receba através de sockets pelo protocolo UDP mensagens
contendo o
número do evento que aconteceu, e responda para o remetente
também
através de mensagem UDP o novo estado da máquina. O
estado inicial
da máquina é o estado zero.
Por exemplo, sendo o arquivo:
0 1 1
0 2 2
0 3 1
1 0 1
1 1 2
2 2 0
2 3 2
3 0 0
3 1 1
3 2 2
Partindo do estado zero, ao receber a mensagem (evento)
2
deverá responder com o novo estado
2
Ao receber agora a mensagem (evento)
2
deverá responder com o novo estado
3
E assim por diante.
Olhar os exemplos
udpcliente2008
e udpservidor2008
como base para trabalhar com UDP e testar a implementação
feita.
O estudo do programa t1cliente.c é essencial para a
realização do trabalho.
T2 - Trabalho com relógios
Fazer um programa em C para o Linux que simule em tempo real
um sistema físico qualquer, proposto pelos alunos. O sistema pode
ser continuo ou discreto, mas 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.
O programa feito deverá funcionar como um servidor de rede,
podendo receber comandos via UDP.
O propósito dos comandos via UDP é acessar a
instrumentação da
planta simulada. Inspiração pode ser encontrada no
trabalho T3
do semestre passado. Entretanto, não é necessária
uma interface
gráfica para o simulador, basta mostrar na tela em
alfanumérico o
estado da planta, e responder aos comandos via UDP.
Usar na recepção de mensagens UDP uma chamada não
bloqueante.
Para que a simulação avançe em tempo real, usar a
rotina abaixo
como exemplo de tarefa periódica
sobre como implementar uma
tarefa periódica no Unix.
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 as threads 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.