DAS5306: Informática Industrial II

Trabalhos para 2007/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 simulador de sistema a eventos discretos

Especificar e implementar um simulador a eventos discretos para uma planta
hipotética, no estilo da planta fornecida como exemplo.

Exemplo:

Considere o problema da Linha de Produção de Cervejas, como descrito no
capítulo 3 da apostila do Prof. Cury sobre "Teoria de Controle Supervisório
de Sistemas a Eventos Discretos", página 20.

http://www.das.ufsc.br/~cury/cursos/apostila.pdf

Os seguintes arquivos estão disponíveis:

envasilhamento4.pdf    Arquivo descrevendo a máquina de estados da planta

motor4.c    Exemplo do programa controlador a ser feito

motor4.h    Descrição das rotinas disponíveis no simulador da planta

envasilhamento4.c    Simulador da planta

envasilhamento4.h    Descrição das rotinas disponíveis no simulador da planta

controlador4.c    Controlador da planta


T2 - Trabalho do controlador de sistema a eventos discretos

O objetivo deste trabalho é implementar um controlador para maximizar a
produção da planta, cujo simulador foi construído no trabalho anterior.

Escrever um novo controlador4.c que seja automático (o fornecido é manual) e que
maximize a produtividade da planta construída no trabalho anterior.

T3 - Trabalho do controlador de sistema contínuo, monothread

Implementar o controle do sistema descrito aqui.
 
Simulador é usado para simular uma unidade de caldeira e é chamado com:
      java -jar aquecedor2006_2.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
 

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

Implementar um programa em C no Linux.

O programa CONTROLADOR deve incluir o controle em malha fechada
da temperatura da água e do nível da água.

A comunicação entre o CONTROLADOR e o simulador da caldeira será através
de sockets UDP/IP.
    
A tarefa de controle deve ser uma tarefa periódica com período de 100mS, implementada com
precisão e não com sleep fixo (ver apostila na página da disciplina).

Gerar um histograma com os valores utilizados como parâmetro do sleep.

T4 - Trabalho do controlador de sistema contínuo, multithread

Implementar um novo controlador para a mesma planta do trabalho anterior. 

Implementar um programa em C no Linux usando a biblioteca de pthreads que inclua
as seguintes funcionalidades:

- Laços de controle como tarefa periódica para temperatura e nível;
- Alarme associado com valores das variáveis amostradas;
- Armazenagem em arquivo de leitura periódicas dos sensores (arquivo de histórico),
através da técnica de buffer duplo;
- Informações periódicas na tela;
- Leitura de comandos e/ou valores a partir do teclado que alteram os valores de referência.

O programa em si deve ficar no arquivo "controle.c" e deve ser composto por várias threads que
colaboram entre si através de variáveis compartilhadas.

A planta será simulada por um outro programa, cujo código executável será
fornecido. A comunicação entre o controle e o simulador será através
de sockets UDP/IP.

Avaliação composta por:
    - Código fonte;
    - Texto explicando qual a função de cada thread e quais variáveis compartilhadas cada uma acessa;
    - Apresentação 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 precisão e não com sleep fixo (ver apostila na página da disciplina);
    - Período do controlador de temperatura deve ser 150ms;
    - Período do controlador de nível deve ser 200ms;
    - Atualização da tela pode ser com sleep simples de 1 segundo;
    - Usar buffer duplo para a gravação de dados em arquivos, feita por thread própria.


T5 - Trabalho do simulador em tempo real, multithread

Reprojetar o simulador dos trabalhos 1 e 2 para que o mesmo opere com duas threads e
em tempo real.

Para isto, após a definição dos estados e das transições, deve ser criada uma thread que ficará
o tempo todo esperando o tempo passar e chamando tick( ). Cada tick( ) deve corresponder a
um intervalo fixo de tempo (100ms), e esta tarefa deve ser implementada como uma tarefa
periódica como feito no trabalho 3.

A thread inicial deve executar o controlador da planta como antes, mas agora ela não chama a
função tick( ), pois a mesma será chamada automaticamente em função da passagem do tempo.

No módulo motor.c existem variáveis compartilhadas entre as duas threads que precisam ser
protegidas. Trata-se basicamente da fila de eventos da simulação.

Criar um monitor "fila de eventos" com duas rotinas de acesso: "insere evento" e "retira evento",
fazer toda a sincronização necessária dentro deste módulo, sendo que essas rotinas podem ser
chamadas dos outros módulos. Toda a sincronização deverá estar dentro do módulo "fila de eventos".

Em função da mudança do simulador para tempo real, poderá ser necessário fazer pequenas
correções no controlador.