DAS5306: Informática Industrial II

Trabalhos para 2009/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 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 t1cliente.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 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.

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.

 

T3 - Trabalho do controlador de sistemas contínuos

Implementar o controle e a supervisão do sistema descrito aqui.

Simulador é usado para simular uma unidade de caldeira e é chamado com:
     java -jar aquecedor2008_1.jar  <número-porta-escutada>

A caldeira 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
"ana123.4"    define valor de Na como 123.4
"anf123.4"    define valor de Nf como 123.4

Cuidado com a formatação dos valores em ponto flutuante.

Implementar dois programas em C no Linux, usando a biblioteca de pthreads.

O programa CONTROLADOR deve incluir as seguintes funcionalidades de controle:

- Laço de controle como tarefa periódica para a temperatura;
- Laço de controle como tarefa periódica para o nível;
- Detecção de temperatura fora do intervalo de valores válidos, geração de alarme;
- Recepção através da rede de comunicação dos valores de referência para nível e temperatura;
- Envio através da rede dos vários valores sensoriados.

O programa SUPERVISOR deve incluir as seguintes funcionalidades de supervisão:

- Informações na tela sobre a situação corrente;
- Entrada através do teclado dos valores de referência para nível e temperatura;
- Armazenagem periódica dos valores lidos de temperatura e armazenagem desses dados
 em arquivo, juntamente com um carimbo de tempo.

Somente o CONTROLADOR acessa a instrumentação da Caldeira.

O protocolo de comunicação entre CONTROLADOR e SUPERVISOR deve ser criado
pelos alunos. Sugere-se que o CONTROLADOR seja um servisor e o SUPERVISOR um
cliente, e que o protocolo siga o mesmo estilo daquele usado entre o CONTROLADOR e
a Caldeira. 

 
Avaliação composta por:
    - Código fonte;
    - Texto explicando qual a função de cada thread, quais variáveis compartilhadas cada uma acessa e qual
o protocolo usado entre CONTROLADOR e SUPERVISOR;
    - 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 de temperatura deve ser 90ms;
    - Período do controlador de nível deve ser 70ms;
    - 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 para temperatura e nível ?
- 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.