DAS5306: Informática Industrial II

Trabalhos para 2013/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 de sincronização de relógios

Um sistema de defesa é composto por um Computador Central ligado a uma estação de radar remota e uma bateria de mísseis terra-ar. Os equipamentos estão ligados ao Computador Central através de uma rede UDP/IP. Existem atrasos de rede significativos entre o Computador Central e o Radar, e também entre o Computador Central e a Bateria.

Cada equipamento opera de forma autônoma, mas comandados pelo Computador Central. A comunicação é no modo cliente-servidor, com os seguintes comandos sendo aceitos:

RADAR:

"h":

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

"p":

Retorna a posição do alvo, formato: "segundos nanosegundos x y"

BATERIA:

"h":

Retorna a hora local na Bateria, formato: "segundos nanosegundos"

"f x y":

Indica alvo (x,y) do tiro, retorna "Atirou em x y"

O espaço é bidimensional, sempre existe um alvo único. O alvo move-se com velocidade e direção constante.

O Computador Central deve obter a posição do alvo 2 vezes, com intervalo de alguns segundos entre elas, calcular sua direção e velocidade, projetar sua posição atual e comandar o tiro. Pode-se considerar o disparo do tiro imediato, porém existem problemas:

- Existe atraso de rede entre o Computador Central e o Radar

- Existe atraso de rede entre o Computador Central e a Bateria

-O relógio do Radar *não* está sincronizado com o relógio do Computador Central

O comando "p" retorna a posição que o alvo estava no instante indicado pelo relógio do Radar. É necessário converter esta hora para o relógio do Computador Central. 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

Uma vez convertida a hora do Radar para o relógio do Computador Central, é possível fazer o cálculo de tiro. A hora local deve ser obtida via

clock_gettime(CLOCK_MONOTONIC ,&t);

Será fornecido um simulador para o Radar e a Bateria, o objetivo do trabalho é desenvolver o Computador Central em C para o Linux. O simulador informa o erro do tiro. Cuidado com overflow na representação dos dados.

Programas relacionados:

cliente2013.c

t1servidor2013

Outras versões do servidor, caso a anterior apresente problemas:

servidor32

servidor32-static

servidor64

servidor64-static



T2 – Programação Concorrente

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 e a biblioteca das pthreads no Linux 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

Detalhes técnicos do programa:

- Deverá ser composto por 5 threads

- Quatro threads fica constantemente solicitando ao gerente dos sensores mais uma mensagem de posição, a comunicação com o
gerente de sensores é feita via UDP/IP. Basta mandar qualquer string para o gerente de sensores que ele retorna com mais uma
mensagem de possicionamento.

- Uma thread executa um laço onde lê do tecla uma placa de veículo, pesquisa as estruturas de dados, e lista na tela os últimos 10 locais por onde aquele veículo passou.

- Deverá ser usado mutex para controlar o acesso das várias threads às estruturas de dados.

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

Gerente dos sensores:

servidor32

servidor32-static

t2servidor2013-64

t2servidor2013-64-static





T3 – Controlador de um sistema contínuo

Tanque de gás natural

Descrição:

O problema consiste em controlar a temperatura e pressão de um tanque contendo gás natual. O gás natural em questão se comporta como um gás ideal: considere que este preenche todo o volume do tanque (mesmo com pouquíssima quantidade de gás), a temperatura do gás é uniforme em todo o tanque, a pressão interna é uniforme, não há perda de energia para o meio externo ou em interações entre as moléculas do gás.



O objetivo consiste em manter a pressão interna e a temperatura em certo valor de referência.

Um atuador age de forma a controlar a entrada de gás do tanque de forma a normalizar sua pressão e temperatura interna. Outro atuador pode ser usado no controle de temperatura da refrigeração do tanque. Este atuador de refrigeração pode ser tratado como uma simples perturbação se o implementador preferir.

Perturbações do sistema consistem em fluxo de saída de gás, temperatura externa e temperatura interna do gás. Dados monitorados são a temperatura atual, pressão atual, fluxo de saída e fluxo de entrada.

A pressão exerce ainda influência sobre a temperatura do gás. Esta influência acontece automaticamente.

Lista-se abaixo variáveis e constantes importantes:

Atuadores:

Ni = fluxo de entrada de gás com temperatura controlada

Re = fluxo de fluido refrigerante

Referências:

P = valor de referência para pressão = 1300 kPa

T = valor de referência = 30 ºC

Perturbações:

Ta = temperatura ambiente (pode variar de 0 a 100 ºC; é setado inicialmente é 30º C)

Ti = temperatura interna (pode variar de 0 a 100 ºC; é setado inicialmente é 50 ºC)

No = fluxo de saída de gás (pode variar de 0 a 1000 m³/s; é setado inicialmente em 100 m³/s)

Sensores medem:

Ta, Ti, T, P, No.

Constantes:

r = raio da base do tanque = 1,4 m

B = base do tanque = pi*r² ~= 6,16 m²

V = volume do tanque ~= 48,52 m³ (H*B)

R = constante de Clayperon = 8,3145 J/(mol.K)

s = calor específico do gás natural a volume constante = 64,81 J/(mol.K)

Variáveis internas:

Tp = perturbação de temperatura devido a pressão (varia dependendo de P)

Lei do Gás Ideal:

p = nRT/V

Equações da planta:

Variação de temperatura: dT/dt = (Ni - No)*Ta/(P*pi*r²) - Re - Tp

Variação de pressão: dP/dt = nR*qT/(V*spV)

Fluxo de calor interno: qi = Ni*s*(Ti-T)

Fluxo de calor externo: qe = (T-Ta)/R

Influência dos fluxos: qT = qi + qe



Um simulador é usado para simular o tanque de gás e é chamado com: java -jar Tanque2013_1.jar <número-porta-escutada>

A porta default é 4545 (se nenhuma for escolhida).

Comandos enviados ao simulador e efeitos que estes causam:

Sensores:

- "sta0" - lê valor de Ta

- "st-0" - lê valor de T

- "sti0" - lê valor de Ti

- "sno0" - lê valor de No

- "sp-0" - lê valor de P

Atuadores:

- "re-40" - define Re em 40

- "ani400" - define Ni em 400

Diretivas:

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

Deve-se 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 pressão;

- Alarme associado com valores das variáveis amostradas;

- Armazenagem em arquivo de leitura periódicas dos sensores;

- 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 em um arquivo denominado "controle.c" e deve ser composto por várias threads que colaboram entre si através de variáveis compartilhadas (como visto em sala).

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

Avaliação composta por:

- Código fonte;

- Texto explicativo sobre cada 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 150ms;

- Período do controlador de pressão 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;

- Dados são gravados efetivamente no disco a cada 3 segundos, pode ser sleep simples.

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?

- Foram utilizados os períodos corretos para controle e gravação de arquivos?

- Elegância do design da solução e legibilidade do código.