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.