SUGESTÕES DE TRABALHOS

Podem ser feitos no Linux ou no Windows 10 com WSL2.


Dicas para WSL2 (Linux sobre Windows10)

VÍDEO: Usando Ubuntu sobre WSL2-Windows10 para fazer trabalhos

Instalar notepad++ no Windows
Criar um diretorio de trabalho no Windows
Baixar simulador da caldeira e exemplos em C para o diretório de trabalho no Windows

----------

Abrir uma janela PowerShell no Windows
Mudar para o diretório de trabalho no Windows
Executa o simulador normalmente com java (liberar acesso dele à internet)
Edita os programas no Windows usando notepad++

----------

Instala WSL2 no Windows, ver como no site da Microsoft e youtube
Escolhe e instala uma distribuição Linux no WSL2, ver site Microsoft
* Usei o Ubuntu mais recente disponibilizado pela Microsoft

----------

Dispara execução do Linux via WSL2
Instalar gcc no Linux
* sudo apt install gcc no Ubuntu
Descobrir o IP da máquina windows (nameserver) com
* cat /etc/resolv.conf

----------

Muda no Linux para o diretório /mnt/c/Users/Romulo/Desktop/....
* No caso coloquei meu diretório de trabalho no Desktop Windows

Compila programas em C com gcc no Linux
Executa os programas compilados pelo gcc no Linux

----------

Temos então:

- Todos os arquivos de trabalho ficam no diretório de trabalho no Windows
- O simulador roda no Windows via PowerShell

- O gcc roda no Linux
- Os programas compilados com o gcc rodam no Linux

- Existe comunicação udp/ip entre Windows e Linux
- Tanto Windows como Linux acessam os mesmos arquivos no mesmo diretório (do Windows)

- Caso necessário, pode-se abrir várias janelas PowerShell simultâneas
- Caso necessário, no PowerShell ao executar "wsl" temos um terminal no Linux rodando bash


Exemplos com códigos auxiliares

udpcliente2008.c

udpservidor2008.c

Exemplo tarefa periódica

VÍDEO: 18.x1 Sistemas Operacionais de Tempo Real (parte extra 1) - Tarefa Periódica com C no Linux


Exemplo simples com pthreads:   pthread-ex1.c   pthread-ex2.c   pthread-ex3.c
 
VÍDEO: 11.x1 Sincronização e Comunicação entre Tarefas (parte extra 1) - Threads no Linux com C e Pthreads

VÍDEO: 11.x2 Sincronização e Comunicação entre Tarefas (parte extra 2) - Mutex com C e Pthreads



Sugestão ST1 - Trabalho do controlador de sistemas contínuos sequencial e tempo real

VÍDEO: Descrição do Trabalho 1 (1 de 3): Descrição da caldeira e sua instrumentação

VÍDEO: Descrição do Trabalho 1 (2 de 3): Simulador da caldeira

VÍDEO: Descrição do Trabalho 1 (3 de 3): Comunicação com o Simulador da Caldeira


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 o programa CONTROLADOR, o qual deve incluir as seguintes funcionalidades de controle:

- Laço de controle como tarefa periódica para a temperatura;
- Uso do tanque auxiliar e da saída de água;
- Informações na tela sobre a situação corrente.

Outros requisitos:
- Não usar threads;
- Período do controlador de temperatura deve ser 30ms exato, ver exemplo;
- Atualização da tela pode ser aproximadamente a cada 1 segundo.

 

Medições de tempo real

Partindo do programa controlador desenvolvido, meça o tempo de resposta do controle de temperatura.

O tempo de resposta inicia no momento t de acordar. Após concluir o controlador, antes de calcular o novo t de acordar, obtenha a hora atual t1. Com "t1 - t" temos o tempo de resposta do controlador em questão. Cuidado com a divisão de segundos e nanosegundos. Para maior precisão, NÃO converta para float ou double, mas mantenha em long+long (segundos e nanosegundos) até fazer a subtração.

Armazene esta informação em um array e depois de algum tempo grave em arquivo.

Apresente um histograma destas medições. Identifique o pior caso, isto é, o maior tempo de resposta observado (high water mark).

Até que período seria possível levar o controlador nestas condições de execução ?

Usar as funções clock_nanosleep e clock_gettime.

Adicionalmente:

- Número de amostras >= 10000.

- Usar como unidade microsegundo nos gráficos.

- Fazer a coleta dos dados em máquina real e não em máquina virtual.

- Gerar relatório em PDF com texto descrevendo as observações e os gráficos.


 

Sugestão ST2 - Trabalho do controlador de sistemas contínuos concorrente

VÍDEO: Descrição do Trabalho 2: Controlador da caldeira com várias threads

VÍDEO: 13.5. Mecanismos de Sincronização Variáveis Compartilhadas (parte 5 de 5) - Exemplo Buffer Duplo


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 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 (pode considerar estratégias separadas e não multivariável);

- Uso do tanque auxiliar e da saída de água;

- Informações na tela sobre a situação corrente;

- Verificação da temperatura a cada 10ms para disparo de tarefa de alarme caso esteja acima de 30 graus.

- 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, através de buffer duplo (produtor/consumidor).


Outros requisitos:
- Usar mutex para proteger as variáveis compartilhadas;
- Tarefas periódicas implementadas com precisão e não com sleep fixo;
- Período do controlador de temperatura deve ser 50ms;
- Período do controlador de nível deve ser 70ms;
- Atualização da tela pode ser com sleep simples de 1 segundo.


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 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 ?
- As tarefas de controle são realmente periódicas ?
- Existe uma tarefa para o alarme ?



Sugestão ST3 – Programação Concorrente

VÍDEO: Descrição do Trabalho 3: Simulação como um Programa Concorrente

Implemente uma simulação usando programação concorrente, onde os elementos ativos (pessoas, carros, máquinas, etc) são representados por threads, e os elementos passivos usados por 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.



Sugestão ST4 - Trabalho do controlador de sistemas contínuos no FreeRTOS

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

Para iniciar o desenvolvimento do sistema utilize o tutorial criado por Alan Kunz Cechinel,
disponível no repositório: https://github.com/alankc/FreeRTOS_Posix_Socket

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 usando FreeRTOS Posix 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 (pode considerar estratégias separadas e não multivariável);

- Uso do tanque auxiliar e da saída de água;

- Informações na tela sobre a situação corrente;

- Verificação da temperatura a cada 10ms para disparo de tarefa de alarme caso esteja acima de 30 graus.
Essa funcionalidade deve ser implementada utilizando notificações do freeRTOS (Documentação: https://www.freertos.org/RTOS-task-notifications.html)

- Valores de referência para nível e temperatura devem ser configurados no próprio código;

- Armazenagem periódica dos dez últimos valores lidos de temperatura. Apresentar a média destes valores na tela e conjunto com os demais dados.

- Medir o tempo em segundos para o sistema sair do estágio inicial e chegar a 5% do valor de referência para temperatura. Começar a apresentar este dado na tela apenas quando a caldeira alcançar 5% do valor de referência pela primeira vez. (Pode utilizar: xTaskGetTickCount())

Outros requisitos:
- Usar mutex para proteger as variáveis compartilhadas;
- Tarefas periódicas devem ser implementadas utilizando a função vTaskDelayUntil;
- Período do controlador de temperatura deve ser 50ms;
- Período do controlador de nível deve ser 70ms;
- Atualização da tela com período de 1 segundo.

Alguns aspectos para a composição da nota do trabalho do controlador:
- Fez no Linux, em C, usando o freeRTOS Posix ?
- Foi usado um mutex para cada estrutura compartilhada ?
- 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 apresenta média dos últimos dez valores de temperatura lidos?
- A aplicação mede o tempo para chegar a 5% do valor de referência e mostra na tela apenas no momento adequado?
- Existe uma tarefa para o alarme ?
- Implementou o alarme utilizando notificação no freeRTOS?