DAS5306: Informática Industrial II

Trabalhos para 2014/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.
Sugestão para quem usa Windows normalmente: virtualbox


T1 - Trabalho de sincronização de relógios

Em um sistema de tráfego futurista, todos os veículos possuem a capacidade de comunicar-se com a infraestrutura da via, inclusive informando sua localização e outros dados.

Com uma ordem judicial é possível solicitar ao sistema de tráfego o trajeto feito recentemente por um veículo.

Implemente usando a linguagem C um programa que recebe constantemente a posição dos veículos na cidade e mantem, para cada veículo, o registro dos últimos 10 locais por onde ele passou.

Cada local da cidade é identificado por seu código (número inteiro).

Cada veículo é identificado por sua placa (3 letras e 4 dígitos).

A informação vem acompanhada de uma anotação de tempo (time stamp), no formato long (segundos) e long (nanosegundos).

Formato da mensagem informada pelo sistema: segundos nanosegundos local placa

A comunicação com o gerente de sensores é feita via UDP/IP.

Não podem ser usados arquivos para armazenar os dados.

Comandos que o servidor aceita:

"h":

Retorna a hora local no Servidor, formato: "segundos nanosegundos"

"p":

Retorna a posição de um carro, formato: "segundos nanosegundos local placa"



O programa deve inicialmente determinar o atraso de rede, skew inicial e drift rate do servidor. Depois, converter a hora fornecida pelo servidor para a hora local.

Existe atraso de rede entre os computadores. O relógio do servidor *não* está sincronizado com o relógio do cliente. É necessário converter esta hora para a do cliente. Para isto, é necessário:

- Determinar o atraso de rede

- Determinar a diferença instantânea entre os relógios (skew1)

- Esperar no mínimo 10 segundos

- Determinar a diferença instantânea entre os relógios (skew2)

- Calcular a taxa de afastamento entre os relógios e o a diferença original

A hora local deve ser obtida via

clock_gettime(CLOCK_MONOTONIC ,&t);

Será fornecido um simulador para o servidor. Cuidado com overflow na representação dos dados.

Programas relacionados:

cliente simples



transito-servidor-2014-32

transito-servidor-2014-32-static

transito-servidor-2014-64

transito-servidor-2014-64-static



T2 - 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 em C no Linux, usando a biblioteca de pthreads, o programa CONTROLADOR, o qual 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;
- Informações na tela sobre a situação corrente;
- Entrada através do teclado dos valores de referência para nível e temperatura.

Outros requisitos:
- Usar mutex para proteger as variáveis compartilhadas;
- 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;




T3 – Trabalho da Simulação Concorrente

Implemente uma simulação usando programação concorrente, onde os elementos ativos (pessoas, carros, máquinas, etc) são representados por threads, e as contenções entre eles (elevador, cruzamento, peças, etc) são representados por monitores acessados pelas threads.

A simulação será construida como um programa concorrente em C usando a biblioteca das pthreads. Os elementos ativos são representados por threads, e a descrição do ambiente onde ocorre a interação entre eles deve ser feita através de variáveis globais compartilhadas, cujo acesso é regulado por monitores. A evolução do estado do sistema ocorre conforme a dinâmica do sistema simulado. Sleep pode ser usado para simular ações demoradas.

Exemplos de sistemas que podem ser simulados: tráfego urbano, tráfego aéreo, tráfego ferroviário, manufatura, bolsa de valores, sistemas militares, sistemas ecológicos, 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.