DAS5306: Informática Industrial II

Trabalhos para 2012/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

Um sistema de coleta de dados é composto por um computador central e quatro instrumentos de campo.
Os instrumentos estão ligados ao computador através de uma rede local UDP/IP. Os atrasos na rede
variam de instrumento para instrumento.

Cada instrumento opera de forma autônoma, fazendo uma medição a cada segundo cheio, conforme o
seu relógio local. As medições são armazenadas temporariamente no próprio instrumento, formando um
histórico (log) local.

O simulador fornecido recebe como parâmetro o número da porta base. Cada instrumento i escuta
a porta "porta base + i".

O computador deve periodicamente acessar cada instrumento e ler cada um dos logs locais. O computador
deve entao consolidar todas as medições em um hiostórico global.

O relógio do computador está sincronizado com a UTC, mas não existe sincronização entre os relógios
dos instrumentos e a UTC.

Cada instrumento opera no modelo cliente/servidor, aceitando os seguintes comandos:

"p" - Retorna a hora local no instrumento (segundos e nanosegundos).

"a" - Apaga o último log lido pelo computador, retorna "a".

"l" - Lê o último log disponibilizado, retorna o log no formato

25453=25427.572428

25454=25428.571429

25455=25429.570430

25456=25430.569431

onde o primeiro valor (int) é o segundo local na hora do instrumento

e o segundo valor (double) é a medida obtida por aquele instrumento.



OBJETIVO:

Escrever o programa em C sobre Linux para rodar no computador central o qual deve, para cada instrumento:

- determinar o atraso na rede

- determinar a diferença entre os relógios

- esperar 10 segundos

- determinar a nova diferença entre os relógios

- calcular o drift-rate

- obter o log

- corrigir os tempos de medição para a hora padrão



Programas relacionados:

cliente2011.c

servidor2001.c

t1cliente2011.c

t1servidor2011



T2 – Simulação concorrente de um sistema a eventos discretos

Descreva um sistema dinâmico onde agentes ativos (atores) interagem através de elementos passivos, através de regras bem definidas.

As variáveis de estado do sistema devem ser discretas e a evolução do sistema acontece em tempo real.

A simulação será construida como um programa concorrente em C usando a biblioteca das pthreads. Os agentes serão representados por threads, a descrição do ambiente onde ocorre a interação entre eles deve ser feita através de variáveis globais compartilhadas. A evolução do agente no tempo deve ser em tempo real, conforme a dinâmica do sistema simulado. Para isto, o agente deve regular sua evolução com o relógio real do computador.

Exemplos de sistemas que podem ser simulados: tráfego urbano, tráfego aéreo, tráfego ferroviário, manufatura, bolsa de valores, sistemas militares, etc.

Cada grupo deve descrever sua proposta e obter aprovação para ela antes de implementar.

Cada grupo deve implementar uma simulação diferente.

A simulação será realizada por um programa único composto por muitas threads. O uso de comunicação via UDP é opcional, não será cobrado. Mas pode ser usado caso o grupo julgue conveniente para a simulação em questão.

Trem.c



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 um programa em C no Linux, usando a biblioteca de pthreads.

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

- 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;
- Informações na tela sobre a situação corrente;
- Entrada através do teclado dos valores de referência para nível e temperatura;
- Entrada através do teclado dos valores limites para o intervalo de temperaturas válidas;
- Armazenagem periódica dos valores lidos de temperatura e armazenagem desses dados
em arquivo.


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 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 precisão e não com sleep fixo (ver apostila na página da disciplina);
- Período do controlador de temperatura deve ser 100ms;
- 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, 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 do controlador, 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.