desenvolvimento de uma plataforma aberta e escalável para ... · 2.9 relação entre a pressão...

71
Desenvolvimento de uma plataforma aberta e escalável para aquisição de dados no túnel aerodinâmico de baixa velocidade Filipe Jorge Miranda Roque Dissertação para obtenção do Grau de Mestre em Engenharia Aeroespacial Júri Presidente: Prof. Catedrático João Manuel Lage de Miranda Lemos Orientador: Prof. Associado João Manuel Melo de Sousa Co-Orientador: Prof. Auxiliar Bertinho Manuel D’ Andrade da Costa Vogal: Prof. Auxiliar Agostinho Rui Alves da Fonseca Outubro 2012

Upload: duongthuy

Post on 29-Nov-2018

216 views

Category:

Documents


0 download

TRANSCRIPT

Desenvolvimento de uma plataforma aberta e escalável para

aquisição de dados no túnel aerodinâmico de baixa velocidade

Filipe Jorge Miranda Roque

Dissertação para obtenção do Grau de Mestre em

Engenharia Aeroespacial

JúriPresidente: Prof. Catedrático João Manuel Lage de Miranda Lemos

Orientador: Prof. Associado João Manuel Melo de Sousa

Co-Orientador: Prof. Auxiliar Bertinho Manuel D’ Andrade da Costa

Vogal: Prof. Auxiliar Agostinho Rui Alves da Fonseca

Outubro 2012

Resumo

A avaria do computador do túnel de vento do Departamento de Mecânica do IST, proporcionou uma

oportunidade de desenvolver uma plataforma aberta e escalável de aquisição de dados para o túnel de

vento.

Esta plataforma foi pensada para aproveitar o equipamento existente na medida do possível, o que

obrigou ao estudo dos componentes do sistema existente, com destaque especial para a engenharia

inversa das placas ISA necessárias para obtenção dos ângulos do balança.

A inclusão de outros equipamentos já existentes no túnel, mas não no sistema original, foi também

estudada. Da mesma forma, foram feitas sugestões de melhoria e de aquisição de novos equipamentos,

sendo algumas destas soluções implementadas.

O programa do sistema de aquisição de dados original, WW6, foi colocado a funcionar em ambiente

Windows. Foi escrito um módulo de Linux para utilização das placas ISA, neste ambiente.

Foi realizada uma visita ao túnel vento existente na Academia da Força Aérea para familiarização e

comparação de sistemas.

Foi efectuado um levantamento de requisitos para o programa de computador da plataforma de

aquisição de dados e implementado sob o nome de AeroIST, com recurso à plataforma Qt, em ambiente

Linux. O programa é escalável a novas variáveis através de extensões.

Foram realizados ensaios experimentais no túnel de vento com uma asa, a dois números de Rey-

nolds, para validação do programa desenvolvido por comparação com o programa original, WW6.

Palavras-chave: túnel de vento, aquisição de dados, desenvolvimento de programa.

i

Abstract

A computer malfunction in the Department of Mechanical Engineering’s wind tunnel, provided an

opportunity to develop an open and scalable data acquisition platform for the wind tunnel.

This platform is designed to take advantage of existing equipment as much as possible, forcing the

study of the existing system’s components, with particular emphasis on reverse engineering of ISA cards

needed to obtain the angles of the scale.

The inclusion of other equipment existing in the tunnel, but not in the original system was also studied.

Likewise, suggestions were made for improvement and acquisition of new equipment, with some of these

solutions being implemented.

The original data acquisition program, WW6, was set to work in a Windows environment. A Linux

module was written to make use of ISA cards in this operating system.

A visit was made to the existing wind tunnel at the Air Force Academy for familiarization and compa-

rison of systems.

A list of requirements was compiled for the data acquisition program and implemented under the

name AeroIST, using the Qt platform, in a Linux environment. The program is scalable to new variables

through plugins.

Experimental tests were conducted in the wind tunnel with a wing, at two Reynolds numbers, for

validation of the program by comparison with the original program, WW6.

Keywords: wind tunnel, data acquisition, software development.

iii

Tabela de Conteúdos

Resumo i

Abstract iii

Índice vi

Lista de Figuras vii

Lista de Tabelas ix

Lista de Símbolos xi

Glossário xiv

1 Introdução 1

1.1 Motivação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

1.2 Objectivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

1.3 Estrutura da Tese . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

2 Componentes do sistema de aquisição de dados 5

2.1 Forças e momentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

2.2 Ângulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

2.3 Velocidade do motor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

2.4 Temperatura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

2.5 Micromanómetro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

2.6 Programa WW6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

2.7 Computador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

2.8 Sensor de pressões . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

2.9 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

v

3 Desenvolvimento do programa da plataforma de aquisição de dados 21

3.1 Caso típico de utilização . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

3.2 Requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

3.3 Conceitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

3.4 Ambiente de desenvolvimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

3.5 Arquitectura do programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

3.6 Worker Thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

3.7 Modelos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

3.8 Extensões . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

3.9 Interface gráfica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

3.10 Gráficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

3.11 Ficheiros XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

3.12 Protocolo de comunicação com o Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

3.13 Módulo para núcleo Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

3.14 Instruções para compilação e instalação . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

4 Avaliação de resultados 33

5 Conclusões 39

Bibliografia 41

A Matrizes de calibração 43

B Diagrama das placas ISA 47

C Interface dos Módulos do AeroIST 49

D Schema do ficheiro XML 53

vi

Lista de Figuras

1.1 Diagrama do túnel de vento com motor e sistema de aquisição de dados. . . . . . . . . . 1

1.2 Balança de forças e momentos instalada na secção de teste do túnel de vento. . . . . . . 2

2.1 Esquema das ligações nos vários componentes da balança. . . . . . . . . . . . . . . . . 6

2.2 Sistema de eixos da balança, com ângulos. . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2.3 Multímetro Prema 5001. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

2.4 Placas ISA para obtenção dos ângulos. Note-se os fios soldados manualmente. . . . . . 10

2.5 Mostradores e botões dos ângulos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.6 Esquema eléctrico das ligações ao Arduino para controlo de um motor. . . . . . . . . . . 12

2.7 Ligações eléctricas para ligação à unidade SIMOREG. . . . . . . . . . . . . . . . . . . . . 13

2.8 Micromanómetro FC012. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

2.9 Relação entre a pressão dinâmica na secção de teste e a velocidade angular do motor,

para uma determinada temperatura. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

2.10 Equipamento selector de pressões. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

2.11 Interface do programa WW6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

2.12 Esquema das ligações nos vários componentes da balança, na configuração final. . . . . 19

3.1 Arquitectura geral do programa AeroIST. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

3.2 Fluxo do processo de medição e controlo. . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

3.3 Interface gráfica do programa AeroIST. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

3.4 Interface gráfica do programa AeroIST com destaque para a representação gráfica. . . . 30

4.1 Coeficiente de Sustentação para um número de Reynolds moderado. . . . . . . . . . . . 35

4.2 Coeficiente de Resistência para um número de Reynolds moderado. . . . . . . . . . . . . 36

4.3 Coeficiente de Sustentação para um número de Reynolds baixo. . . . . . . . . . . . . . . 37

4.4 Coeficiente de Resistência para um número de Reynolds baixo. . . . . . . . . . . . . . . 38

vii

Lista de Tabelas

1.1 Limites da balança. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

2.1 Parâmetros necessários alterar na unidade SIMOREG. . . . . . . . . . . . . . . . . . . . 13

3.1 Comandos implementados no Arduino. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

4.1 Resultados para os vários tempos de integração do multímetro. . . . . . . . . . . . . . . . 33

A.1 Matriz de calibração para um modelo no chão da secção de teste. . . . . . . . . . . . . . 44

A.2 Matriz de calibração para um modelo no meio da secção de teste. . . . . . . . . . . . . . 45

ix

Lista de Símbolos

α Ângulo de rotação em torno de um eixo horizontal

β Ângulo de rotação em torno do eixo vertical

A Matriz de coeficientes lineares

ai,j Coeficientes lineares

B Matriz de coeficientes quadráticos

bi,j,l Coeficientes quadráticos

F Força ou momento final

F 2 Matriz de coeficientes das forças cruzados

fc Factor de conversão para os ângulos

g Aceleração gravítica

PN Peso nominal

R Força ou momento após conversão de unidades

S Sensibilidade das células de carga

T Temperatura

t Tempo

Vcc Tensão de excitação das células de carga

Vdvm Tensão lida no multímetro

x Valor fornecido pelo codificador absoluto

x0 Referência que será considerada o zero do ângulo

xi

Glossário

+F1 Caixa com equipamentos de interligação do computador aos sensores.

ADC Conversor analógico-digital.

AeroIST programa informático desenvolvido neste projecto.

AFA Academia da Força Aérea.

AG661 Codificador angular absoluto da Stegmann.

ASCII American Standard Code for Information Interchange.

CSV Comma-separated values.

DEM Departamento de Engenharia Mecânica.

EIA-232 também conhecido por TIA/EIA-232 ou RS-232.

EIA-485 também conhecido por TIA/EIA-485 ou RS-485.

GPIB Especificação IEEE 488, conhecido por General Purpose Interface Bus.

GUI Graphical user interface.

HBM-Z6 Células de carga instaladas na balança.

IDC Insulation-displacement connector.

ISA Industry Standard Architecture.

IST Instituto Superior Técnico.

LabView Laboratory Virtual Instrumentation Engineering Workbench.

LASEF Laboratory of Simulation in Energy and Fluids.

Linux Sistema operativo de código aberto.

MS-DOS Micro Soft Disk Operating System.

MVC Model–view–controller.

xiii

NI National Intruments.

Optomux Protoco série, desenvolvido pela Opto 22.

PCI Peripheral Component Interconnect.

POSIX Portable Operating System Interface.

Qt Infra-estrutura multi-plataforma para desenvolvimento de aplicações gráficas.

SIMOREG Unidade de controlo do motor do túnel de vento.

SPA3 Conversor série-paralelo entre codificadores e PC.

SSI Synchronous Serial Interface.

USS Universal Serial Interface Protocol.

WW6 programa informático da Schenck para medição.

WWINST programa informático da Schenck para configuração.

XML Extensible Markup Language.

XSD XML Schema Definition.

xiv

CAPÍTULO 1

Introdução

1.1 Motivação

O Departamento de Engenharia Mecânica (DEM) do Instituto Superior Técnico (IST) possui um túnel

de vento de baixa velocidade, do tipo sopro em sistema aberto, com a capacidade para realizar ensaios

aerodinâmicos até velocidades de 10 m s−1 e dimensões da secção da área de teste de 1,35 m× 0,80 m

[1] ( Fig. 1.1 ).

A instrumentação deste túnel de vento é feita por uma balança externa (Fig. 1.2) instalada na secção

de teste que foi desenvolvida para o túnel de vento pela empresa alemã Schenck e instalada no início

da década de 1990.

Comandodo motor

Motor Ventiladorcentrífugo

Favo deabelha

Redes Balança deforças

Armário +F1

Computador

Figura 1.1: Diagrama do túnel de vento com motor e sistema de aquisição de dados.

Este sistema de instrumentação tem a capacidade de medir as forças e momentos nos três eixos de

referência e dois ângulos, α e β, que constituem a atitude do modelo em ensaio. A aquisição de dados

é baseada num computador pessoal com o sistema operativo MS-DOS e programa proprietário WW6,

também desenvolvido pela Schenck [2].

O controlo da atitude é feito de forma manual pelo operador do ensaio. Os limites da balança, de

acordo com o manual, estão listado na Tabela 1.1.

1

Tabela 1.1: Limites da balança.

Resistência 30 N

Força Lateral ±20 N

Sustentação 50 - 20 N

Momento Rolamento ±5 N m

Momento Picada ±5 N m

Momento Guinada ±5 N m

Ângulo β ±180◦

Ângulo α ±30◦

Figura 1.2: Balança de forças e momentos instalada na secção de teste do túnel de vento.

Após alguns anos de ensaios no túnel de vento, este sistema deixou de estar operacional por causa

de uma avaria no computador de suporte ao sistema de aquisição de dados. Com a venda da unidade

de negócios dos túneis de vento da Schenck à empresa Horiba em 2005, o distanciamento temporal

desde a aquisição da balança pelo IST, assim como a rápida evolução da tecnologia dos computadores,

barramentos de comunicações de dados e sistemas operativos, colocaram-se vários problemas na

substituição do equipamento e programa do sistema de aquisição de dados para comunicar com a

balança.

A substituição completa do sistema de aquisição de dados implica a aquisição de uma balança nova

e um novo sistema de aquisição de dados que constitui uma hipótese incomportável pelos elevados

custos desta solução.

A ausência de um sistema de aquisição de dados remete a utilidade do túnel de vento para um

estudo aerodinâmico essencialmente qualitativo, como por exemplo a observação visual do escoamento

em torno de um modelo por meio de fumo ou através de velocimetria por imagem de partículas.

Dentro deste cenário de restrições orçamentais a opção de substituição do equipamento e pro-

grama do sistema de aquisição de dados foi tomada com a finalidade de tentar aproveitar o máximo do

investimento que foi realizado com a instalação da balança no início da década de 1990.

2

Para tal, foi necessário aplicar engenharia inversa e estudar o sistema já implementado, os seus

componentes e ligações, com recurso ao manual da balança e fontes do código do programa WW6.

Foram contactados vários fabricantes para se obter manuais de alguns equipamentos antigos que tam-

bém foram estudados.

No entanto, a substituição do sistema antigo por um novo equivalente é também insuficiente. Com o

sistema de ensaios actual, o operador tem de controlar manualmente a velocidade do ar no túnel assim

como a orientação do modelo nos seus dois ângulos, o que inviabiliza, por exemplo, que seja obtida

automaticamente a curva de sustentação de um perfil alar. Assim, foi tomada a opção de integrar as

tarefas manuais na plataforma de aquisição e controlo da balança, quando possível, permitindo a sua

automatização.

Adicionalmente, foi também tomada a opção de fazer este projecto em ambiente de código aberto,

nomeadamente em sistema operativo Linux, pela sua versatilidade, que permite ser melhor adequado

aos recursos computacionais existentes.

Para se obter um modelo de comparação, foi realizada uma visita ao laboratório de aeronáutica

da Academia da Força Aérea (AFA). Este laboratório estava equipado com uma balança da Schenck

semelhante à instalada no DEM, que entretanto foi desactivada e substituída por uma nova, o modelo

Aero Comp 2000 da Horiba. O sistema recente é na sua essência bastante semelhante ao seu prede-

cessor mas possui, como é de esperar, algumas novidades como uma taxa de amostragem das forças

mais elevada e em paralelo, uma interface gráfica de mais fácil utilização para o operador, o controlo

dos ângulos de atitude do modelo por computador e a interacção da balança com o programa LabView.

1.2 Objectivos

O objectivo principal deste trabalho consiste no desenvolvimento de um sistema de aquisição de

dados, com a intenção de aproveitar o equipamento existente. Este objectivo pode ser dividido em

várias fases:

• Revisão do sistema de aquisição de dados instalado pela Schenck, estudando os componentes

existentes, o manual, os diagramas disponíveis assim como o programa usado.

• Actualizar o sistema de aquisição de dados, integrando o equipamento actual com um sistema

operativo moderno.

• Ampliar o sistema de aquisição de dados através de novos sensores e actuadores.

1.3 Estrutura da Tese

Nesta tese optou-se por utilizar nomes, símbolos e terminologia existentes no manual da balança

de forças fornecido pela Schenck [2]. Desta forma, pretende-se usar uma única notação para não

causar dificuldades na consulta deste documento e na sua comparação com a informação existente

nos manuais da Schenck. Convém também salientar que, no decorrer do texto, quando se referir forças

está-se a referir também momentos, a menos que o contrário seja indicado.

3

No capítulo 2 será apresentada uma descrição do sistema de aquisição de dados encontrado, os

seus componentes, esquemas de ligações e também outros equipamentos possíveis de incorporar no

sistema final.

No capítulo 3 são apresentados os requisitos elaborados para o programa a construir e detalhes da

sua implementação como algoritmos, estruturas de dados, formatos de ficheiros e protocolos usados.

No capítulo 4 são comparados lado a lado os programas em ensaios experimentais e analizados os

resultados.

O capítulo 5 finaliza com algumas conclusões e sugestões para futuro trabalho.

4

CAPÍTULO 2

Componentes do sistema de aquisição de dados

O túnel de vento do DEM e o sistema de aquisição de dados são compostos por elementos com

características, protocolos e ligações diversas, que se pretendem descrever neste capítulo. Em primeiro

lugar faz-se uma apresentação dos componentes com base na sua posição física no sistema e depois

procede-se à descrição dos vários subsistemas que compõem o sistema final, fazendo a análise de

como são constituídos e adicionalmente de como poderão ser melhorados.

Na Fig. 1.1 foi apresentado o sistema organizado em 3 unidades: a balança de forças, a caixa +F1

e o computador. Cada um destes possui vários componentes no seu interior que interagem com outros

componentes noutra unidade. Estas ligações são representadas em diagrama na Fig. 2.1. A balança

de forças possui os sensores de carga e de ângulos assim como os motores para controlar os ângulos.

A caixa +F1 possui um multímetro para conversão analógico-digital e dois conversores série-paralelo

para transmitir ao computador as cargas e a atitude do modelo, assim como mostradores dos ângulos

e os botões para controlo dos mesmos. Por fim, o computador tem uma placa GPIB para aquisição das

cargas, um par de placas para aquisição dos ângulos e o programa WW6 para aquisição e gestão dos

dados.

O sistema de eixos da balança tem o plano XY na horizontal e o eixo Z alinhado com o suporte e é

positivo no sentido descendente, conforme se pode ver na Fig. 2.2. O ângulo α gira em torno do eixo

Y sendo positivo pela regra da mão direita e o ângulo β gira em torno do eixo Z mas é negativo pela

mesma regra. O eixo X é positivo no sentido oposto ao escoamento, quando os referidos ângulos são

nulos.

A caixa +F1 possui dois orifícios para ventilação, mas a renovação de ar no seu interior é feita ape-

nas com recurso aos gradientes térmicos. Esta renovação achou-se insuficiente, pelo que foi adicionado

um ventilador de 120 mm para auxiliar na ventilação do equipamento no seu interior.

5

A100 +F1 PC

Encoders absolutosStegmann AG661

MotoresHDSH11

ConversoresSérie-Paralelo

MultimetroPrema 5001

Placa GPIB-PCINational Instruments

Placas Paralelo-ISA

Células de cargaHBM-Z6

Botões de controlodos motores

GPIB

Displays Ângulos

SSI SoftwareWW6

Sistema OperativoMS-DOS

Figura 2.1: Esquema das ligações nos vários componentes da balança.

Figura 2.2: Sistema de eixos da balança, com ângulos.

6

2.1 Forças e momentos

As forças e momentos exercidos no modelo são obtidos pelas células de carga HBM-Z6. Estas são

excitadas com uma tensão DC de 12 V e possuem um sensibilidade de 2 mV/V. Os valores de tensão

são lidos pelo multímetro digital Prema 5001 (Fig. 2.3) de forma sequencial, que envia os valores para

o computador através do protocolo GPIB, em formato ASCII.

Figura 2.3: Multímetro Prema 5001.

Na conversão de analógico para digital, o multímetro usa integrações para obter o valor médio. Os

tempos de integração disponíveis são um dos seguintes intervalos de tempo: 50 ms, 100 ms, 500 ms,

1 s, 5 s e 10 s [3]. Serão estes valores a restrição temporal que ditará a taxa de amostragem do sistema.

No entanto, medições efectuadas revelam que para todos estes intervalos existe um acréscimo aproxi-

madamente de 150 ms, cuja ordem de grandeza é consistente com os valores de atraso especificados

no manual, especialmente para a troca de canais, necessária devido acoplamento das células de carga.

Assim, para o melhor caso possível, que corresponde a um tempo de integração de 50 ms, a taxa de

amostragem é de 5 Hz. No entanto um tempo de integração mais baixo permite uma maior influência

do ruído nos valores obtidos. O programa WW6 da Schenck usa o tempo de integração de 1 s. No

entanto, devido ao processamento necessário para se obterem as forças, é obrigatório a aquisição dos

seis canais, pelo que a taxa de amostragem global do sistema será menor.

O multímetro é de 6 1/2 dígitos e possui gamas de medição de 0,2 V, 2 V, 20 V, 200 V e 1000 V.

A gama de medição usada será a mais baixa, uma vez que as células de carga debitam tensões na

ordem dos mV, o que dá uma resolução do multímetro de 0,1 µV, conforme detalhado no manual [3].

Para se obter o valor correcto das forças é necessário fazer uma conversão a partir dos valores de

tensão obtidos para unidades de força, que é feito a partir da equação:

R =PN × g × Vdvm

S × Vcc(2.1)

em que PN é um peso nominal, g é a aceleração gravítica da Terra, Vdvm é a tensão lida, S é a

sensibilidade das células de carga tipicamente expressa em mV/V, Vcc é a tensão de excitação da

célula e R é a força que se procura. Os pesos nominais foram estabelecidas no momento de calibração

da balança pelo fabricante. Estes pesos encontram-se nos ficheiros de configuração do programa WW6

e são:

7

PN,1 50 kg

PN,2 100 kg

PN,3 100 kg

PN,4 100 kg

PN,5 100 kg

PN,6 100 kg

O operador dos ensaios no túnel de vento pode desejar redefinir a referência da balança, tendo em

conta os modelos que forem ensaiados, pelo que será subtraído aos valores obtidos após a conversão

de unidades os valores definidos pelo operador como a referência.

Os sinais obtidos a partir de cada uma das células de carga e as forças e momentos nos três eixos

não são independentes. Existe até forte relações entre estes, motivo pelo qual existem duas matrizes

de correcção fornecidas pelo fabricante que é necessário aplicar para se obter as forças finais. Para

melhor perceber estas matrizes de correcção, tem de se explicar a maneira como foram obtidas.

Um modelo de 2a ordem foi assumido entre as forças Ri [4], calculadas pela conversão de unidades

(2.1), e as forças finais Fi, calculadas após a interacção entre forças,

Ri =

6∑j=1

ai,jFj +

6∑j=1

6∑l=j

bi,j,lFjFl (2.2)

onde os índices j, l = 1, 2, 3, 4, 5, 6 tomam o significado de Fx,Fy,Fz,Mx,My,Mz respectivamente. Note-

se que na equação o segundo somatório toma o seu primeiro valor em l = j não havendo assim o

aparecimento de índices bi,Fy,Fze bi,Fz,Fx

por exemplo, dando origem a 21 coeficientes quadráticos

para uma força Ri.

Esta equação colocada sob a forma de matriz fica

R = AF +BF 2 (2.3)

em que R = [R1 . . . R6]T , F = [F1 . . . F6]T , a matriz A é composta pelos 6× 6 coeficientes lineares ai,j

e a matriz B tem 6 linhas e 21 colunas, dando os 126 coeficientes quadráticos bi,j,l. A matriz F 2 não é

o quadrado da matriz F mas sim F 2 = [F 21 . . . F1F6 F

22 . . . F2F6 . . . F

26 ]T , no sentido de seguir a notação

já existente.

Durante a calibração foram aplicadas diversas forças e momentos nos vários eixos da balança, uma

de cada vez, e medido o resultado no multímetro. Os coeficientes das matrizes foram estimados usando

o método dos mínimos quadrados.

Foram calibradas duas configurações na altura da montagem da balança no IST: uma configuração

para testes no piso da secção de trabalho do túnel e outra para testes no centro da secção de teste do

túnel (Fig. 1.2). Cada configuração corresponde a um ficheiro fornecido pelo fabricante com ambas as

matrizes A e B. Estes ficheiros encontram-se no anexo A.

A resolução da equação 2.3 em ordem às forças finais F não é trivial pelo que o método de Newton

é utilizado. Este método iterativo para encontrar os zeros de uma função requer a sua derivada, neste

caso a matriz Jacobiana, e uma estimativa inicial do valor que anula a função [5]:

Fk+1 = Fk − J(Fk)−1G(Fk). (2.4)

8

É necessário reescrever a equação 2.3 sob a formaG(F ) = 0→ G(F ) = −R+AF+BF 2. A primeira

estimativa para o método de Newton é calculada invertendo a matriz quadrada A da equação 2.3 e

multiplicando pelas forças R, F0 = A−1R. Dado que os termos quadráticos são de menor importância

que os termos lineares, a primeira estimativa está perto da solução, sendo assim quase garantida a

convergência do método.

No computador existe uma placa NI PCI-GPIB da National Intruments (NI) para interacção com o

multímetro. Esta placa funciona sem problemas, mas tendo em conta o problema descrito mais à frente

com o barramento ISA, é previsível que o barramento PCI venha a cair em desuso. Assim salienta-se

que existem no mercado outro tipo de soluções para interface com o GPIB, como GPIB-Ethernet ou

GPIB-USB, caso este factor venha alguma vez a ser um problema. A alteração do interface não deve

afectar o programa desenvolvido.

Outro ponto de melhoria deste sistema é a substituição completa do multímetro por um dispositivo

capaz de leituras em simultâneo dos 6 canais provenientes das células de carga. Na AFA é utilizado o

sistema de aquisição de dados MGCplus da HBM em conjunto com várias placas ML30B.

2.2 Ângulos

O modelo instalado na balança pode variar sobre dois eixos de rotação como se pode observar na

Fig. 2.2. Os sensores utilizados para medir estas variações angulares são os codificadores absolutos

AG661 da Stegmann. Os codificadores têm engrenagens para desmultiplicação, com 4096 passos por

rotação e 4096 rotações obtendo assim uma resolução final de 16777216 passos, ou seja 24 bits. O

erro especificado pelo fabricante é de 10−3 rad [6].

O codificador AG661 transmite a informação a um conversor série-paralelo SPA3 da Stegmann, que

actua como dominante sobre o codificador, utilizando o protocolo SSI [7]. Este protocolo especifica

que o conversor é quem fornece o relógio para a comunicação, que é configurável dentro do conversor.

A configuração existente estabelece que a frequência do relógio em 125 kHz [8]. Assim, o tempo de

transmissão de 24 bits é de

∆t =24

125000= 192µs. (2.5)

A este tempo tem de se somar o tempo de espera (monoflop time, tm), que corresponde ao sinal

para que o codificador volte a enviar novos valores, que é entre 15 e 25 µs. Assim, para o pior caso

possível, o tempo total de envio de uma amostra do codificador para o conversor é de 217 µs, que

equivale a 4608 amostras/s. Note-se que esta frequência é muito superior à frequência de amostragem

das forças.

Para o ângulo β a conversão para unidades angulares é feita de forma linear de acordo com

β = fc(x − x0) em que β é o valor do ângulo a obter, fc = 2,11× 10−3 é o factor de conversão, x

é o valor obtido do sensor e x0 = 80751 é o zero em relação ao qual o ângulo é medido.

O valor do ângulo α é, por sua vez, obtido com recurso a α = tan−1(fc(x−x0)), com fc = 9,007× 10−7

e x0 = 730303, em que o uso do inverso da tangente se deve ao facto de se medir o ângulo indirecta-

9

mente.

Para comunicar com os conversores série-paralelo SPA3, o computador possui duas placas de bar-

ramento ISA (Fig. 2.4) para medição dos ângulos aerodinâmicos. Os esforços efectuados não permi-

tiram encontrar nenhuma informação sobre estas placas. Adicionalmente, as placas contêm conexões

eléctricas feitas manualmente que, em conjunto com a sua especificidade, poderá significar que estas

foram feitas propositadamente para este túnel de vento (e semelhantes) e não são um produto pré-

existente no mercado. A ausência de informação acerca deste par de placas, da sua função e maneira

de trabalhar, implicou que fosse necessário fazer engenharia inversa com o levantamento do seu es-

quema de ligações eléctricas e análise das especificações dos seus componentes, para perceber o seu

objectivo e modo de funcionamento. O esquema obtido encontra-se no Anexo B.

Figura 2.4: Placas ISA para obtenção dos ângulos. Note-se os fios soldados manualmente.

Cada placa possui codificado directamente num circuito integrado um endereço base: 230 hexa-

decimal para o ângulo β e 240 hexadecimal para o ângulo α. O esquema electrónico das placas ISA

permite perceber que cada uma das placas possui um conector IDC de 60 pinos e baseiam-se num par

de circuitos integrados 8255, que possui 3 grupos (A,B e C) de 8 pinos mais um grupo para configura-

ção [9]. Estes grupos de pinos podem ser definidos como entradas ou saídas consoante o desejado, o

que para este caso significa que 2 grupos estão definidos como saída e 4 grupos estão como entrada.

Estas entradas correspondem à saída dos conversores SPA3 e as saídas são para escrever os valores

nos mostradores de ângulos da caixa +F1 visíveis na Fig. 2.5.

Como as placas utilizam o barramento ISA e não existe nenhum controlador fornecido por um fa-

bricante, ou semelhante, a comunicação com estas placas requer permissões para acesso directo ao

barramento. Mas nos sistemas operativos modernos, ao contrário do MS-DOS, isto é função do núcleo

(kernel) do sistema e é proibido ao utilizador. Este facto trouxe problemas ao programa WW6 referidos

em 2.6, mas também é necessário resolvê-lo no sistema operativo Linux. Para tal, foi desenvolvido um

módulo para o núcleo para se poder aceder às informações necessárias que expõe o dispositivo como

um ficheiro, segundo a filosofia Unix.

Se é difícil arranjar informação sobre estas placas, é ainda mais difícil arranjar uma para substituição

na eventualidade de uma avaria, pelo que é importante estudar quais as alternativas existentes. Adi-

cionalmente, são estas placas que condicionam o desenvolvimento da plataforma aberta de aquisição

de dados ao ser necessário um barramento ISA. Numa primeira abordagem pode-se tentar substituir

10

Figura 2.5: Mostradores e botões dos ângulos.

directamente a função da placa, que é aquisição de sinais de forma paralela, por uma equivalente.

No entanto, a substituição não seria trivial e algum trabalho seria necessário, devido à complexidade

das ligações entre as placas, os conversores SPA3 e os mostradores do ângulos. Uma solução mais

interessante que permite melhorar o desempenho do sistema de aquisição consiste em substituir a

ideia. Existem no mercado algumas placas que lêem directamente o protocolo SSI dos codificadores

absolutos, o que dispensa o conversor série-paralelo e a placa de entradas digitais paralelas.

A desvantagem desta solução, para além de ser necessário efectuar alterações à caixa +F1, é a

perda dos mostradores com os valores dos ângulos, que são escritos pelas placas ISA. No entanto

este não é um problema grave, dado que estes mostradores só funcionam quando o computador e o

programa está activo com apenas 1 casa decimal, o que significa que o operador pode simplesmente

obter os mesmos valores no computador e com maior resolução.

Depois de analizados alguns modelos do mercado para a conversão SSI-USB foi seleccionado o

conversor Dual Encoder USB Converter da BEI Industrial Sensors. Este é um conversor duplo, com um

relógio de 100 KHz, número de bits entre 8 e 32, de simples utilização, alimentado por USB, mas que

requer alimentação externa para os codificadores e que funciona do ponto de vista de programação

como uma porta série, bastando enviar um comando do género “$0R2<cr>” para obter uma resposta

“*0R204095,0<cr>” correspondente ao valor 4095 [10].

A variação angular de um modelo instalado na balança é efectuada através de dois motores Hi-T

Drive Servo Actuator da Harmonic Drive Systems, alimentados por 24 V DC e controlados de forma

manual pelos 4 botões na caixa +F1 (Fig. 2.5). Este botões estão ligados de forma a que quando

pressionados fecham o circuito, invertendo ou não a polaridade nos motores, fazendo assim o ângulo

aumentar ou diminuir.

Para se proceder ao controlo automático da atitude do modelo, procurou-se soluções que minimi-

zassem as alterações dos componentes e ligações já existentes. Uma solução possível seria o uso de

solenóides directamente sobres os botões da Fig 2.5, que até poderia ser desmontável. Outra hipótese

é adicionar relés em paralelo aos botões controlados por computador que fechem o circuito sem uso

11

dos botões. Esta foi a solução adoptada, que tem a vantagem de permitir o controlo pelos botões em

simultâneo.

Para a automatização do controlo recorreu-se à plataforma livre Arduino, baseada no micro-controlador

ATmega168, usando os seus pinos digitais para controlar os vários relés. Na Fig. 2.6 apresenta-se o

esquema de ligações utilizado para o ângulo α. O Arduino controla os pinos P1 e P2 que controlam

os relés R1 e R2 fechando o circuito. O ângulo β possui dois relés de segurança que limitam o ângulo

a βlim = ±165◦ que também são accionados pelos botões. Note-se que este limite verificado empiri-

camente é inferior ao especificado na Tabela 1.1. Para ter em conta este facto, é necessário apenas

aumentar o número de relés para o ângulo β na solução realizada.

Figura 2.6: Esquema eléctrico das ligações ao Arduino para controlo de um motor.

Quando se adquiriu o conversor de SSI-USB verificou-se que este sofria de interferências que cau-

savam o sistema operativo a detectar que havia sido removido e inserido novamente, quando os relés

entravam em funcionamento, em especial para o ângulo β, cujo motor tem maior potência. Os relés es-

colhidos foram os modelos clássicos com recurso a uma bobine que quando accionada cria um campo

magnético e uma força nos contactos fechando o circuito, podendo causar um arco eléctrico. Para

solução deste problema foi adicionado em paralelo aos contactos dos relés um condensador e uma

resistência para supressão do arco eléctrico. Adicionalmente foi substituído o cabo USB que ligava o

conversor ao computador assim como afastado o conversor dos relés problemáticos. Este problema po-

deria ser resolvido também com a substituição dos relés por modelos de estado sólido que não sofrem

desta desvantagem.

2.3 Velocidade do motor

Para produzir vento, o túnel tem um motor DC Thrige-Titan Lak 160 LA com uma potência nominal

de 21,5 kW e velocidade angular nominal de 2280 rpm controlado por uma unidade SIMOREG DC-

Master 6RA70 da Siemens, ambos instalados no início do túnel de vento (Fig 1.1). O controlo do túnel

12

é feito manualmente usando um potenciómetro que regula a velocidade de referência do motor, onde

estão incluídos dois botões para parar e começar o controlo. A indicação da velocidade é feita por

um mostrador junto à unidade SIMOREG em rpm, que obtém desta a velocidade em percentagem da

velocidade nominal do motor.

A unidade SIMOREG possui uma interface série que se pode ligar a um computador, usando o

protocolo USS da Siemens. Deste modo, passa a ser possível controlar automaticamente a velocidade

do motor através do computador. Tal como para o mostrador, a velocidade obtida é em percentagem

da velocidade nominal do motor.

O protocolo USS é baseado no protocolo EIA-485, mas para comunicações ponto a ponto pode

ser usado o protocolo EIA-232. No entanto, os pinos que a unidade da Siemens usa são diferentes

daqueles usados pelo protocolo EIA-232 pelo que foi necessário construir um interface de acordo com

o esquemático em Fig. 2.7 [11]. Adicionalmente, o protocolo EIA-232 permite ligações com distâncias

relativamente grandes, o que facilita ligar o computador à unidade de controlo que se encontra longe

do computador. O protocolo na sua versão mais simples consiste no envio e recepção de 2 palavras de

16 bits.

Figura 2.7: Ligações eléctricas para ligação à unidade SIMOREG.

Para alternar entre o controlo manual e o controlo automático é necessário proceder à alteração

de dois parâmetros na unidade SIMOREG que se apresentam na Tabela 2.1. Para ter permissões de

alteração, é primeiro necessário alterar o parâmetro P51 para o valor de 40. O parâmetro P644 (Source

for main setpoint) é responsável por especificar qual é a fonte da velocidade de referência, que para o

valor de K2002 significa que a velocidade de referência será a segunda palavra da mensagem recebida.

O parâmetro P654 (Source for control word 1, bit 0) em conjunto com o valor do terminal 37 controla o

estado do dispositivo, que para o valor de B2100 é o bit 0 da primeira palavra recebida do computador.

O estado do terminal 37 é ditado pelos botões de parar e começar manuais. Estes botões estão assim

activos quer o modo seja manual ou automático.

Tabela 2.1: Parâmetros necessários alterar na unidade SIMOREG.

Modo Parâmetro P644 Parâmetro P654

Manual 206 1

Automático K2002 B2100

13

2.4 Temperatura

Um termómetro analógico está instalado ao fundo do túnel de vento, que não é possível ligar-se ao

sistema de aquisição de dados, pelo que se procurou algumas formas de incluir esta variável. Quando

se adquiriu o Arduino, foi também adquirido o sensor de temperatura, de muito baixo custo, LM35 que

tem um saída de tensão dependente apenas da temperatura e de forma linear com uma sensibilidade

de 10 mV ◦C−1 [12]. Para os 10 bits de resolução do conversor analógico-digital (ADC) do Arduino a

resolução é

∆T1 =5

210100 = 0,4882 ◦C (2.6)

Durante o desenvolvimento do trabalho foi descoberto no Laboratory of Simulation in Energy and

Fluids (LASEF) o sensor de temperatura AP9512TBLK da APC que se decidiu incluir neste projecto.

Não existe informação detalhada sobre este sensor, pelo que foi novamente necessário alguma enge-

nharia inversa. Este sensor tem como principio de funcionamento o mesmo sensor LM35 atrás referido,

mas possui adicionalmente um amplificador com um ganho de 14,74, fornecendo uma melhor reso-

lução. A ligação deste sensor é feita por um conector Mini-DIN de 6 pinos, à entrada analógica do

Arduino. Tendo em conta o ADC, o intervalo deste sensor é de 0 ◦C a 33,9 ◦C e a sua resolução é

∆T2 =5

210100

14,74= 0,0331 ◦C (2.7)

.

Note-se que estas medições de temperatura são sensíveis à tensão Vcc do Arduino. A variação da

tensão do valor nominal de 5 V implica um erro nas medidas efectuadas.

2.5 Micromanómetro

Existe um micromanómetro FCO12 de 3 1/2 dígitos da Furness Controls Limited, Fig. 2.8, para

medição de um diferencial de pressões, no máximo de ±199,9 mmH2O, com uma precisão de ±1%.

Ligando este dispositivo ao tubo de pressão total instalado no túnel de vento e à pressão estática, ou

atmosférica para um túnel com secção de teste aberta, a sua diferença será a pressão dinâmica que

está relacionada com a velocidade do escoamento do túnel.

Este micromanómetro possui dois métodos de calibração do zero, manual e automático, dois modos

de obtenção do valor, um com um ganho de 10 para ler 10 % e outro com um ganho de 1 para ler

100 % do valor máximo e dois modos de apresentação do resultado, em mmH2O ou convertendo para

velocidade em m s−1. O micromanómetro possui uma constante de tempo regulável de 20 ms a 10 s,

para diminuir a resposta do instrumento a condições turbulentas.

Existe também uma saída analógica entre−5 e 5 V directamente relacionada com o valor da pressão

medida, tendo em conta o ganho usado. Esta saída foi ligada a uma entrada analógica do Arduino para

se adicionar ao sistema de instrumentação o valor da pressão dinâmica do escoamento. Note-se que

14

ao ligar o micromanómetro ao Arduino, apenas será possível medir as diferenças de pressão positivas,

pois este mede dentro da gama 0 a 5 V.

Este micromanómetro tem a escala um pouco desadequada à gama de valores de pressões dinâ-

micas obtidas no túnel de vento. Com o motor do túnel de vento no seu máximo a 2280 rpm, o valor

de pressão lido é de 6 mmH2O, que com um ganho de 10 seleccionado corresponde a 30 % da escala.

Assim na prática, o Arduino irá medir apenas entre 0 e 1,5 V. Para a aquisição analógica o Arduino uti-

liza um valor de referência, que é por omissão os 5 V internos. Devido ao facto de as tensões medidas

serem na gama mais baixa, foi considerada a hipótese de se alterar o valor de referência do Arduino

para os 3,3 V também disponíveis no Arduino, pelo seu conversor USB-Série, mas as experiências efec-

tuadas revelaram que esta referência tinha fraca estabilidade. Uma outra opção possível era adicionar

um amplificador com um ganho de 3,3 que aumentasse os 1,5 V para os 5 V de referência do Arduino.

Novamente, note-se que as medições efectuadas são sensíveis a variações da tensão de referência do

Arduino.

Assim, dados os 10 bit de resolução do conversor analógico-digital do Arduino, a resolução do sis-

tema de aquisição da pressão dinâmica é de 19.9/210 = 0,019 43mmH2O.

O micromanómetro tem que ser calibrado periodicamente. A sua calibração é manual e o proce-

dimento consiste em usar um pequeno tubo para fazer um curto circuito entre as duas tomadas de

pressão. De seguida, escolhe-se o modo manual, um ganho de 100%, baixa-se o tempo de integração

para o mínimo e regula-se o botão do zero até o visor indicar zero. Repete-se o procedimento para o

ganho de 10%. Para finalizar, coloca-se em modo automático, ajusta-se a constante de integração para

um valor desejado, apesar do botão não ter marcas indicativas e retira-se o tubo que faz curto circuito.

Figura 2.8: Micromanómetro FC012.

Para verificar a relação entre os valores medidos pelo micromanómetro e a velocidade do motor,

realizou-se um ensaio com a unidade SIMOREG em modo manual, representado na Fig. 2.9. A veloci-

dade de escoamento é calculada a partir da pressão dinâmica. Note-se que com evolução quadrática,

é difícil obter uma boa relação na zona de baixas velocidades do motor.

Foi descoberto um equipamento na sala do túnel de vento capaz de seleccionar para um conjunto

de entradas de pressão qual o canal desejado. Este equipamento é composto por duas caixas (Fig

2.10), uma com 5 electroválvulas cujas entradas são as 5 entradas da caixa e as suas 5 saídas estão

15

0 500 1000 1500 2000 25000

1

2

3

4

5

6

7

0

2

4

6

8

10

12

Pressão dinâmica Velocidade escoamento

Velocidade angular do motor [rpm]

Pre

ssã

o d

inâ

mic

a [m

mH

_2

O]

Ve

loci

da

de

do

esc

oa

me

nto

[m/s

]

0 500 1000 1500 2000 25000

1

2

3

4

5

6

7

0

2

4

6

8

10

12

Pressão dinâmica Velocidade escoamento

Velocidade angular do motor [rpm]

Pre

ssã

o d

inâ

mic

a [m

mH

O]

Ve

loci

da

de

do

esc

oa

me

nto

[m/s

]

0 500 1000 1500 2000 25000

1

2

3

4

5

6

7

0

2

4

6

8

10

12

Pressão dinâmica Velocidade escoamento

Velocidade angular do motor [rpm]

Pre

ssã

o d

inâ

mic

a [m

mH

O]

Ve

loci

da

de

do

esc

oa

me

nto

[m/s

]

0 500 1000 1500 2000 25000

1

2

3

4

5

6

7

0

2

4

6

8

10

12

Pressão dinâmica Velocidade escoamento

Velocidade angular do motor [rpm]

Pre

ssã

o d

inâ

mic

a [m

mH

O]

Ve

loci

da

de

do

esc

oa

me

nto

[m/s

]

Figura 2.9: Relação entre a pressão dinâmica na secção de teste e a velocidade angular do motor, para uma

determinada temperatura.

ligadas à saída da caixa. O controlo das electroválvulas é feito pela segunda caixa através de um cabo

com conectores DB9. A segunda caixa contém dois circuitos K2633 da Velleman, um botão para ligar

e desligar, 8 leds para indicação de qual o canal escolhido e um cabo com um conector DB50 de 50

pinos. Não foi possível perceber onde ligaria este conector mas após alguma engenharia inversa, foi

possível adicionar um conector e um circuito integrado ao Arduino para poder escolher qual o canal

desejado.

Figura 2.10: Equipamento selector de pressões.

16

2.6 Programa WW6

Um dos componentes do sistema de aquisição de dados é o programa proprietário WW6 da Schenck,

Fig. 2.11, que foi desenvolvido para o ambiente MS-DOS. Quando o computador que albergava o sis-

tema de aquisição de dados avariou, foi instalado num outro computador o sistema operativo Windows

2000. No entanto este sistema operativo disponibiliza uma interface de acesso ao equipamento que é

diferente do acesso do MS-DOS e não permite que aplicações a correr em modo de utilizador possam

aceder directamente às portas de entrada e saída do computador [13]. Este facto não permitiu que o

programa WW6 funcionasse bem, pelo que teve que recorrer a um terceiro programa, PortTalk, para

permitir aceder a portas especificadas [14].

O endereço de GPIB de fábrica do multímetro é 7, mas o controlador de GPIB estava configurado

de fábrica para o endereço 1. Devido a estes factos, era necessário alterar manualmente no multímetro

o endereço para 1. Esta alteração tinha de ser feita cada vez que se ligava o equipamento, porque este

não era capaz de memorizar o novo endereço. Para eliminar esta necessidade foi alterado no ficheiro

de configuração GPIB.INI, localizado no system32, no Windows, o endereço padrão do multímetro.

A desactivação do WW6 e implementação de um programa próprio implica perceber alguns aspectos

deste programa proprietário, nomeadamente, como é feita a aquisição dos dados das placas ISA, como

é processado os dados do multímetro e qual é a configuração do túnel do DEM. O código fonte deste

programa foi disponibilizado pela Horiba. Estudando o código foi possível aprender estes pormenores,

com a dificuldade do código possuir nomes de variáveis, funções e comentários em alemão [15].

Outro problema encontrado com o programa WW6 foi aceder aos vários ficheiros de configuração.

O programa disponível para configuração da balança é o WWINST, mas mesmo com o código fonte

disponível, é importante aceder aos ficheiros para perceber qual a configuração do túnel de vento do

DEM. Estes ficheiros de configuração estão em formato binário pelo que é importante perceber que são

dependentes da implementação usada, neste caso da arquitectura de 16 bit e do compilador usado.

Estes ficheiros são quase todos estruturas na linguagem C e acabam por sofrer um alinhamento da

estrutura de dados (data structure alignment) diferente. Estes são factores a ter em conta ao aceder à

informação contida neles.

Figura 2.11: Interface do programa WW6.

17

2.7 Computador

Inicialmente, devido ao requisito por um computador com suporte ao barramento ISA, utilizou-se um

Pentium II com um processador de 400 MHz. Os sistemas operativos instalados foram o Windows 2000

para usar o programa proprietário WW6 e uma versão de Linux, Xubuntu, para desenvolver o projecto

deste trabalho.

Com a aquisição do conversor SSI-USB foi possível mudar de computador, passando a ser utilizado

um Pentium IV de 2800 MHz, onde foi reutilizado o disco rígido com a instalação do sistema operativo

Linux.

Os requisitos para o computador são assim 2 portas USB para ligação ao Arduino e conversor

SSI-USB, uma porta série para ligação à unidade de controlo SIMOREG e uma barramento PCI para

utilização da placa de expansão GPIB da NI.

2.8 Sensor de pressões

Não existe actualmente no túnel de vento do DEM um equipamento capaz de medir várias pressões

e possivelmente em simultâneo. Foi considerada a aquisição de tal equipamento mas foi adiada devido

ao seu custo. No entanto ficou estabelecido que o programa a desenvolver no âmbito deste trabalho

seria capaz de ser extensível a tal equipamento. A possível aquisição deste sensor ou de um seme-

lhante dotaria o sistema de aquisição de maior capacidade de análise do modelo em causa, podendo

estudar, por exemplo, um perfil de pressões em torno de um perfil alar

Um dispositivo que foi considerado de adquirir foi o Pneumatic Intelligent Pressure Scanner da Pres-

sure Systems. Este dispositivo possui 8 ou 16 tomadas de pressão, consoante o modelo, e pode ligar-se

a outros iguais até um total de 31, por meio de EIA-485 e também ao computador através do protocolo

Optomux [16].

2.9 Resumo

Os componentes, protocolos e ligações do sistema de aquisição de dados original foram apresen-

tados assim como discutidas e implementadas sugestões de melhoria e a inclusão de outros equipa-

mentos no sistema final. Tendo em conta a Fig. 2.1, é necessário proceder a uma actualização deste

esquema de ligações que se apresenta na Fig. 2.12. Nesta não se destaca os botões de comando dos

motores que continuam funcionais, mas que não devem ser operados em simultâneo com o sistema de

aquisição de dados que se implementou. Os detalhes do programa AeroIST que se pode ver na Fig.

2.12 é o alvo do próximo capítulo.

18

A100 +F1 PC

Encoders absolutosStegmann AG661

MotoresHDSH11

Conversor SSI-USB

MultimetroPrema 5001

Placa GPIB-PCINational Instruments

Portas USB

Células de cargaHBM-Z6

GPIB

SSI SoftwareAeroIST

Sistema OperativoLinux

Arduino

SensorTemperatura

SIMOREG

Porta Série

Micromanómetro Selector de canais

USS

Figura 2.12: Esquema das ligações nos vários componentes da balança, na configuração final.

19

CAPÍTULO 3

Desenvolvimento do programa da plataforma de aquisição de dados

O capítulo inicia-se com uma abordagem dos requisitos necessários para o programa desenvolvido,

designado por AeroIST, seguido de uma explicação dos conceitos utilizados pelo programa. É apre-

sentada uma visão geral da arquitectura do programa desenvolvido, seguido por uma exposição dos

componentes de maior importância. O capítulo termina com instruções para compilação e instalação

do programa.

3.1 Caso típico de utilização

Ao desenhar produtos, é útil imaginar algumas histórias de pessoas reais (de forma estereotipada)

a usá-los. Este cenários típicos de utilização são usados em alguns modelos de programação como

forma de delinear quais as funcionalidades, a arquitectura e a implementação do programa. Vejamos

um desses casos.

O Pedro é um aluno de Engenharia Aeroespacial e no âmbito de uma cadeira de laboratório deseja

ensaiar dois modelos de perfis alares para descobrir qual é o perfil com maior ângulo de perda aerodi-

nâmica. Executa o programa e efectua uma correcção para o primeiro modelo. Prossegue ao início de

uma medição, em que escolhe a correcção previamente efectuada e o controlo de forma automática do

ângulo α desde 10◦ até 20◦ com um passo de 2◦, para um β = 0◦ e U = 10m s−1. Enquanto é realizada

a medição, que é demorada, o Pedro vai observando os dados que vão aparecendo numa tabela para

verificar se os números parecem válidos. Após a conclusão da medição, o Pedro guarda o projecto

para o disco num ficheiro intitulado “comparação de perdas” e procede à troca do perfil montado na

balança. Com o programa, procede à correcção do segundo modelo e quando esta está concluída pro-

cede ao início da medição, escolhendo a correcção correspondente e os parâmetros de controlo iguais

ao primeiro modelo para que a comparação seja válida. Enquanto é efectuada a segunda medição, o

Pedro representa num gráfico dentro da aplicação, uma curva com o coeficiente de sustentação versus

21

o ângulo de ataque do primeiro modelo. Quando os dados do segundo modelo já são suficientes, faz

também um gráfico com os dados do segundo modelo para retirar algumas comparações iniciais acerca

de qual o perfil com maior ângulo de perda. Quando a medição acaba, o Pedro guarda novamente o

projecto e exporta os dados das duas medições para um ficheiro CSV e sai do programa. O Pedro

copia os ficheiros CSV para uma memória USB Flash, desliga o computador e vai para casa trabalhar

com os seus dados no Excel, um programa de folha de cálculo.

Este cenário permite definir o tipo de funcionalidades que o programa deverá disponibilizar a um

utilizador.

3.2 Requisitos

A análise do programa WW6, do programa observado na AFA assim como o cenário de utilização

mencionado fazem prever os seguintes requisitos para o programa a desenvolver:

• Aquisição de dados a partir do equipamento, tendo em atenção aspectos como, por exemplo,

histerese e tempo de resposta;

• Disponibilização dos dados brutos tal como obtidos do equipamento;

• Controlo do equipamento possível, permitindo um controlo das variáveis associadas;

• Permitir estudar dentro do mesmo projecto ou sessão vários modelos de interesse e fazer com-

parações, sem ser necessário um projecto separado para cada modelo;

• Apresentação de coeficientes aerodinâmicos de interesse;

• Visualização dos dados sobre a forma de tabela e de gráficos;

• Exportação dos resultados para inclusão noutros programas;

• Permitir expansão das variáveis quando novos equipamentos forem adquiridos. Esta não será

uma operação realizada com grande frequência, pelo que se podem exigir alguns conhecimentos

mais técnicos;

• O programa tem de ser capaz de correr no Pentium IV disponível para o laboratório. Não existe

qualquer outro requisito de performance, uma vez que o equipamento é o maior limitador temporal

com o controlo dos ângulos ou a leitura do multímetro;

• Reutilização dos ficheiros de matrizes do programa WW6.

São de menor importância os seguintes objectivos, pelo que a sua implementação é considerada

opcional:

• Utilização de ficheiros em modo texto

• Implementar o sistema de forma a suportar várias plataformas.

• Permitir que o programa seja traduzível para outras línguas.

Os seguintes objectivos não foram considerados de interesse para desenvolver neste programa:

• A interacção com o programa LabView, tal como observado no sistema instalado na AFA.

22

3.3 Conceitos

Existem alguns conceitos utilizados no programa que necessitam de ser definidos e explicados.

O programa assenta no conceito de variáveis, medições, referências e controlo destas. Por variável

entende-se uma abstracção das várias grandezas físicas a que temos acesso, como por exemplo as

forças, ângulos e temperatura. Algumas das variáveis podem ser controladas, pelo que se pode dizer

que são variáveis de entrada do sistema e permitem configurar o túnel de vento e a balança. As

restantes variáveis são variáveis de saída do sistema são consequência das variáveis de entrada.

Por referência entende-se a correcção que algumas variáveis necessitam para fornecer resultados

válidos, como por exemplo, descontar o peso do modelo para a variável das forças e momentos. No

sistema implementado a única variável que exige uma referência são as forças que precisam que se

desconte, por exemplo, o peso do modelo em estudo. Por medição entende-se a leitura de todas as

variáveis, que tem de estar obrigatoriamente associada a uma referência já realizada. Esta medição

será o resultado de maior interesse do programa.

O controlo das medições é realizado de forma automática alterando uma variável definida desde um

valor inicial até um valor final, com um passo definido ou de forma livre durante a medição, utilizando

os controlos disponíveis na interface gráfica.

A ideia de medição inclui ainda mais três conceitos: iterações, um número de medidas por iteração e

um tempo de estabilização. Uma iteração é o conjunto de medidas feitas entre alterações das variáveis,

o número de medidas por iteração é obviamente quantas medidas serão feitas em cada iteração e o

tempo de estabilização corresponde a um tempo de espera entre iterações, com o intuito de permitir

que o escoamento possa estabilizar, após a alteração de qualquer variável.

Tanto as medições como as referências contêm ainda o conceito de dados normais e de dados

brutos. Os dados normais são os dados de maior interesse que foram processados pelo programa e os

dados brutos são os dados obtidos directamente do equipamento, sem quaisquer cálculos adicionais.

3.4 Ambiente de desenvolvimento

Para desenvolver este programa foi escolhida a distribuição Xubuntu do sistema operativo de código

aberto Linux. A versão do núcleo não é uma versão preparada para tempo real, por não se ter verifi-

cado essa necessidade no estudo do equipamento disponível e de possível aquisição assim como nos

requisitos elaborados.

O programa está implementado na linguagem C++, com recurso à biblioteca Qt. Esta biblioteca é

suportada em vários sistemas operativos e é usada sobretudo para fazer a parte de interacção gráfica

com o utilizador, mas também é utilizada por outros componentes como a gestão de threads, módulos

e ficheiros XML. Uma parte importante desta biblioteca é o sistema de signals and slots, acrescen-

tando funcionalidades não presentes na linguagem C++. Para isso a plataforma Qt requer um meta

compilador para gerar o código C++ necessário para suportar esta e outras funcionalidades.

A componente do gráfico que o programa possui, utiliza a biblioteca Qwt, que expande a biblioteca

Qt acrescentando um conjunto de classes e componentes úteis para aplicações de carácter técnico.

23

É adicionalmente utilizada a biblioteca muParser para fazer a análise das expressões matemáticas

utilizadas para criar as curvas no gráfico.

Para o programa interagir com o equipamento são necessário mais bibliotecas. Para comunicação

com o multímetro existe uma biblioteca fornecida pela NI para Linux, mas que não foi possível colocar

a funcionar. Optou-se por utilizar o projecto de código aberto Linux GPIB Package, que consiste em

módulos controladores para o núcleo e uma biblioteca em C para uso em espaço de utilizador, que

procura ser compatível com a API da biblioteca C disponível pela NI.

A comunicação com os outros dispositivos é feita pela porta série. Procuraram-se bibliotecas que

facilitassem o uso destas portas e que suportassem várias plataformas. Foram estudados os projectos

QextSerialPort, QSerialDevice, Boost.Asio e LibSerial, mas nenhum destes se revelou fácil e maduro

para ser utilizado. Note-se que neste momento o projecto QSerialDevice foi renomeado de QtSerialPort

e sofre uma inclusão na futura versão 5 do Qt. Assim, o programa usa chamadas de sistema para

comunicação com a porta série, com o inconveniente de não serem multi-plataforma, mas que são

compatíveis com as normas POSIX.

3.5 Arquitectura do programa

Os requisitos delineados, sob as condições do ambiente de desenvolvimento, determinam as se-

guintes funcionalidades disponíveis ao operador de testes no túnel de vento pelo programa AeroIST:

• obtenção dos dados do equipamento, com controlo das variáveis de entrada do processo de

aquisição;

• visualização dos dados obtidos, normais ou brutos, numa tabela;

• exportação dos dados obtidos, em formato normal, médio ou brutos, para um ficheiro CSV;

• gestão das medições e referências efectuadas;

• representação gráfica de expressões matemáticas das variáveis obtidas em cada medição. Adi-

cionalmente é possível representar os valores médios de cada iteração e os valores máximos e

mínimos sobre a forma de barra de erro;

• exportação do gráfico representado para um ficheiro de imagem;

• salvaguardar o projecto num ficheiro XML.

Os componentes internos do programa AeroIST que merecem maior destaque são a worker thread

usada para comunicação com o equipamento, as interfaces gráficas implementadas para interacção

com o operador, os modelos model-view-controller (MVC) usados para gestão de dados de medições

e referências e gestão destas, o ficheiro XML usado para salvaguardar os dados obtidos em disco e o

sistema de extensões executado para permitir alterações das variáveis a medir. Adicionalmente, outros

pormenores que não fazem parte do programa base também merecem destaque como o protocolo de

comunicação usado com o Arduino. Serão apresentados detalhes sobre estes aspectos nas secções

seguintes.

A comunicação com o equipamento é lenta, em particular o controlo de ângulos e o multímetro. Se

a comunicação com estes equipamentos ocorresse dentro do fluxo normal de um GUI, iria bloquear o

24

programa até à conclusão de cada operação de comunicação. Por este motivo o programa usa duas

threads para desacoplar a tarefa de interacção com o equipamento, nomeada de worker thread, da

tarefa de interacção com o utilizador, nomeada de GUI thread, apesar de na verdade a interacção com

o utilizador também ser feita por equipamento, como o teclado, rato e monitor.

A comunicação entre as duas threads é realizada pelo sistema de signals and slots fornecido pela

plataforma Qt. A worker thread envia durante a medição os dados obtidos como sinais para GUI thread

e outras mensagens tal como a percentagem da operação e mensagens de erro. Caso o controlo

da medição seja manual, são enviados sinais a partir da GUI thread para a worker thread. A thread

responsável por guardar os dados é a GUI thread.

Na Fig. 3.1 pode-se observar um diagrama do fluxo de informações entre utilizador, threads e

equipamento. O sistema operativo encontra-se representado na figura devido ao facto de se ter imple-

mentado um módulo para o núcleo para comunicação com as placas ISA, tal como explicado em 2.2 e

3.13.

GUIThread

WorkerThread

AeroIST

Sistema Operativo

Hardware

Figura 3.1: Arquitectura geral do programa AeroIST.

3.6 Worker Thread

É dentro da worker thread que se faz efectivamente as medições. O algoritmo utilizado no processo

de medição encontra-se esquematizado na Fig. 3.2, onde cada repetição do ciclo corresponde ao

conceito de iteração referido.

O algoritmo começa por verificar a prontidão do equipamento. Este passo deve a sua existência à

variável do motor, que exige do operador uma activação manual do comando através do botão verde

para iniciar o motor. Assim, caso o operador se esqueça deste passo, o processo desiste da medição

e avisa o operador.

É efectuado um controlo inicial de todas as variáveis de entrada do sistema e inicia-se então o ciclo

de medição em concreto, com uma fase de controlo para a variável especificada, um compasso de

espera cujo objectivo principal é permitir que o escoamento do fluido estabilize, uma fase de recolha de

dados repetida pelo número de medidas definido e uma verificação do fim do processo.

Após o fim do ciclo de medição, é feito um controlo final de algumas variáveis, que estejam definidas

para tal. Este passo é novamente criado a pensar no motor do túnel de vento, para que no final de um

25

processo de medição o motor não fique a funcionar desnecessariamente.

Controlar Acabar?Medir

N Vezes

Controlo finalFim

Inicio

EsperarEstabilizar

Fim

Não

Sim

Pronto?

ControloInicial

Figura 3.2: Fluxo do processo de medição e controlo.

A comunicação com o equipamento é realizada no contexto desta thread, mas através das ex-

tensões mencionadas em 3.8. Apesar de estes poderem usar internamente o conceito de polling, o

algoritmo aqui explicitado não se encontra orientado para comunicação assíncrona, mas pelo contrário

para comunicação síncrona. Isto é, quando é realizado o pedido de leitura do multímetro, por exemplo,

a thread bloqueia enquanto este equipamento não retornar o pedido realizado. Esta foi uma opção

tomada com o intuito de simplificar e facilitar o algoritmo e as extensões usadas, mas que pode ser

revisitada em futuras iterações deste programa.

3.7 Modelos

O modelo MVC é uma forma de programação, muito utilizada em interfaces gráficas, que disso-

cia os dados da maneira como estes são apresentados ao utilizador [17]. A plataforma Qt simplifica

este modelo, requerendo do programador a implementação de uma classe que herde da classe virtual

QAbstractItemModel, ou seus descendentes, caso os modelos já implementados não sirvam. No caso

do modelo não necessitar de ser editável através das vistas, bastam implementar os métodos virtuais

rowCount(), columnCount() e data().

No programa AeroIST são implementados quatro modelos para gestão de dados das medições e

referências assim como gestão das mesmas. A classe ReferenceList, descendente da classe virtual

QAbstractListModel, serve o objectivo de gerir uma lista de referências efectuadas. A classe Measure-

List é semelhante e tem o objectivo de gestão das medições efectuadas.

A classe ReferenceModel é descendente da classe QAbstractTableModel e guarda os dados obtidos

do processo de referência. De forma análoga, a classe MeasurementsModel recebe e guarda os dados

do processo de medição.

Na interface gráfica são apresentas três vistas: duas listas para ver as medições e referências e

uma tabela para ver os dados obtidos. Esta separação da forma e conteúdo permite ver na mesma

tabela os dados de uma medição ou uma referência, conforme desejado, sem que seja obrigatório uma

26

tabela dedicada para cada modelo.

Existe ainda o modelo ProxyModel com descendência de QIdentityProxyModel para servir de in-

termediário entre os modelos e vistas especificadas. Consoante a opção do utilizador, este modelo

selecciona os dados brutos ou os dados normais da medição ou referência para apresentação na ta-

bela.

3.8 Extensões

Um dos objectivos do projecto é a capacidade de expansão futura no sentido de se incorporar

mais variáveis a medir, nomeadamente um Pneumatic Intelligent Pressure Scanner com 8 tomadas de

pressão. Para implementação deste objectivo foi utilizando um esquema de extensões, que é suportado

pela infraestrutura do Qt.

São definidas 4 interfaces em conjunto com uma outra que utiliza o modelo de programação de tipo

fábrica [17] para criar instâncias destas 4 interfaces. O interface completo encontra-se no anexo C.

A primeira interface, VariableMeta, é utilizada pelas outras três interfaces e define aspectos gerais

das variáveis como por exemplo nomes, número de dimensões, se é controlável pelo sistema e se tem

uma referência.

A segunda interface é VariablePreferences e tem o objectivo de permitir configurar alguns aspectos

próprios de cada variável, comum a todas as medições, sobretudo os caminhos dos dispositivos no

sistema operativo (e.g. “/dev/ttyS0” para o motor). A interface retorna um QWidget que é adicionado

sobre a forma de uma aba num QTabWidget, no diálogo de preferências do programa, e tem uma

outra função para validar e aceitar a configuração. As configurações feitas por esta classe devem ser

efectuadas utilizando o sistema QSettings do Qt.

A terceira interface, VariableModel, é aquela que é utilizada pelos modelos MeasurementsModel e

ReferenceModel e tem o intuito principal de aceder aos dados obtidos nas medições. Adicionalmente, é

possível fazer alguma configuração quando se inicia uma nova medição, como por exemplo, escolher o

tipo de teste e logo qual a matriz de calibração a usar nas forças. Para a configuração o esquema usado

é o mesmo que na interface de preferências, adicionando uma aba a um QTabWidget. As configurações

efectuadas por esta classe são específicas da medição e devem ser guardadas em conjunto com os

dados. Para isso, esta classe contém duas funções para guardar e carregar estas opções no ficheiro

XML.

A quarta interface, VariableHardware, é aquela que lida directamente com o equipamento e tem

funções para devolver os valores pretendidos, normais e brutos, assim como para controlar as variáveis.

Na instanciação desta classe é passada a referência à classe VariableModel respectiva, para que se

possa retirar informações específicas a cada variável necessárias para a operação, como no caso das

forças exemplificado. Sobretudo a pensar no caso específico do motor, em que é necessário pressionar

o botão verde para iniciar uma medição, existe uma função para verificar se o equipamento está pronto

a utilizar assim como para cessar a operação deste no final da medição existe uma função para um

controlo final, como visto em Fig. 3.2.

27

O esquema de divisão das variáveis efectuado permite que seja possível configurar o Arduino, co-

mum a várias variáveis, com uma classe VariablePreferences, sem que este tenha de ser considerado

uma variável para o sistema de aquisição de dados final.

Para facilitar a criação de instâncias destas variáveis foi criada a classe PluginManager. Esta classe

faz o carregamento dinâmico das extensões e procede às inicializações necessárias.

Os benefícios que resultam deste requisito são visíveis pelo exemplo de quando se adquiriu o con-

versor SSI-USB, foi apenas necessário implementar um novo módulo que utilizasse este equipamento

e reformar os módulos que utilizavam as placas ISA, sem ser necessário fazer alterações ao programa.

Escrever uma extensão no sistema Qt envolve escrever uma classe que herde de QObject e da inter-

face que se deseja implementar. Adicionalmente, é necessário usar a macro Q_INTERFACES(Factory)

para que o meta-compilador do Qt se aperceba das interfaces disponíveis. No ficheiro da implemen-

tação da classe tem de existir a macro Q_EXPORT_PLUGIN2(), com os devidos argumentos, para

exportar a classe.

Quando cria se uma extensão, o Qt cria uma chave de construção (build key) para registar alguma

informação. A chave contém a arquitectura, sistema operativo, compilador usado e configuração da

plataforma Qt. Esta chave é utilizada para verificar a compatibilidade das extensões disponíveis.

3.9 Interface gráfica

Na Fig. 3.3 pode-se ver a janela principal da interface gráfica construída. Este interface possui uma

barra de ferramentas para acesso a todas a funções do programa e uma barra de atalhos, que se pode

esconder, para acesso às principais funções, que são abrir e guardar o projecto e gestão das medições

e referências.

Em baixo das barras enumeradas, há uma outra para gestão de cada medição. Da esquerda para

a direita existe: um botão para iniciar e parar as medições; uma barra de progresso para visualizar a

evolução da medição; os controlos das variáveis, que apenas ficam disponíveis quando é escolhido um

ensaio do tipo controlo livre.

No canto inferior esquerdo existe uma lista das medições já efectuadas e uma outra lista das refe-

rências também já efectuadas, que se podem esconder. A ocupar a maior parte da área temos duas

abas. A primeira aba contém a tabela onde se pode visualizar os dados obtidos para cada medição

e referência. Alterando o tipo de vista no menu ferramentas é possível ver os dados em bruto. Na

segunda aba existe um espaço para representar sob a forma de um gráfico os dados que se desejem.

Foram construídos mais alguns interfaces gráficos, de menor importância. Existem dois interfaces

para a criação de uma nova medição ou referência. Existem outros dois interfaces para visualizar

pormenores de uma referência ou medição. Um outro interface construído é o diálogo das preferências

do programa, para gestão de alguns aspectos personalizáveis.

28

Figura 3.3: Interface gráfica do programa AeroIST.

3.10 Gráficos

O programa AeroIST possui capacidade de representar num gráfico relações matemáticas com os

dados obtidos das medições efectuadas, usando as capacidades da biblioteca muParser. Na janela

existe uma lista das variáveis possíveis de se utilizar assim como algumas constantes que se acharam

de interesse incluir.

Se por exemplo, for desejada a representação do coeficiente de sustentação de um perfil em fun-

ção do ângulo de ataque, basta colocar no campo para X a expressão “Alpha” e em Y a expressão

“-Fz/(Pressure*mmH20)” em que mmH20 é a constante necessária para converter a unidade milíme-

tros de coluna de água em Pascal. Também é possível representar apenas a média das iterações assim

como uma representação do erro através de barras de erro, associadas ao máximo e mínimo de cada

iteração.

Apesar de se ter incluído esta funcionalidade no programa, as suas capacidades são bastante bási-

cas pois servem apenas para uma rápida visualização da evolução dos parâmetros em estudo. Funcio-

nalidades avançadas devem ser realizadas em programas orientados para esse efeito, tal como folhas

de cálculo.

3.11 Ficheiros XML

Para guardar os dados obtidos pelo programa em disco existe a hipótese de se guardar em formato

binário ou em formato texto. Existem vantagens e desvantagens em ambos os modos, mas dado os

problemas explicados em 2.6, optou-se por evitar os formatos binários. Dentro dos formatos de texto,

poderia-se usar um formato personalizado para esta aplicação ou usar um formato já existente. Foi

escolhido escrever os dados do programa em formato XML.

29

Figura 3.4: Interface gráfica do programa AeroIST com destaque para a representação gráfica.

O programa guarda no ficheiro XML a lista de referências e a lista de medições que mantém em

memória. As opções específicas de cada variável são guardadas na respectiva referência ou medição.

O programa não tem o objectivo de ser um grande processador de dados, pelo que se tomou a opção

de não guardar os dados pertinentes aos gráficos.

Dentro do universo do XML, existe um mecanismo de validação dos ficheiros através de um ficheiro

esquema XSD. Esse ficheiro encontra-se no anexo D para uma noção da organização usada no ficheiro

XML.

Devido alguns erros conhecidos no processamento de ficheiros XML do Qt e também à relativa fraca

capacidade de processamento do computador disponível, a acção de carregar um ficheiro grande de

XML pode ser relativamente demorada.

A alteração das extensões utilizadas pelo programa tem de ser acompanhada por uma alteração

do ficheiro XSD. Se estas alterações forem efectuadas, é preciso ter em mente que os ficheiros XML

poderão deixar de ser retro-compatíveis com versões anteriores.

3.12 Protocolo de comunicação com o Arduino

A comunicação entre o Arduino e computador exige que se use o mesmo protocolo de comunicação.

Foi realizada uma pesquisa de protocolos existentes que se pudesse utilizar na comunicação entre o

micro-controlador e o computador, onde se realça, por exemplo, o protocolo Firmata [18], mas nenhum

pareceu adequado ao problema, pelo que acabou por se desenhar e implementar um protocolo simples

e personalizado.

O protocolo assume uma arquitectura do tipo mestre-escravo ou pergunta-resposta, em que o com-

putado é o mestre, responsável por iniciar todas as comunicações com o Arduino. Este protocolo

baseia-se no envio de oito caracteres, no formato “$ccdddd\n”. O primeiro carácter “$” inicia uma men-

30

sagem. Os dois caracteres que se seguem definem um comando e os quatro seguintes são valores

próprios para cada comando. Um carácter fim de linha (“\n”) finaliza a mensagem. A resposta do Ar-

duino, uma vez processado o comando, é obrigatória e tem a mesma estrutura. Na Tabela 3.1 estão

listados os comandos implementados para interacção com os relés de controlo dos ângulos, a caixa de

selecção dos canais de pressão e as entradas analógicas.

A porta para comunicação com o Arduino é configurável nas preferências do programa. A velocidade

de comunicação com o Arduino encontra-se fixa no 57 600 bps.

Tabela 3.1: Comandos implementados no Arduino.

Comando Descrição

CE Activar caixa de selecção de pressões

CD Desactivar caixa de selecção de pressões

CS Seleccionar canal de pressão

R0 Activar/desactivar relé aumento α

R1 Activar/desactivar relé diminuição α

R2 Activar/desactivar relés aumento β

R3 Activar/desactivar relés diminuição β

A0 Ler entrada analógica 0 - Temperatura LM35

A1 Ler entrada analógica 1 - Temperatura APC

A2 Ler entrada analógica 2

A3 Ler entrada analógica 3

A4 Ler entrada analógica 4

A5 Ler entrada analógica 5 - Micromanómetro

3.13 Módulo para núcleo Linux

Para se poder utilizar as placas ISA em espaço de utilizador, foi necessário criar um módulo para o

núcleo de Linux. Este é um módulo simples para acesso directo ao barramento ISA.

Os dispositivos em /dev não são criados pelo núcleo. Tipicamente, existe em distribuições de Linux

um programa responsável por isso, mas nesta situação os dispositivos têm de ser criados manualmente.

Os dispositivos em /dev tem um número principal (major number) correspondente ao módulo res-

ponsável e um número menor (minor number). É através deste número menor que é feita a distinção

entre as duas placas disponíveis. Assim o número menor 0 corresponde à placa com o endereço

0x230 e é usada para o ângulo β e o número menor 1 é usado para a placa com o endereço 0x240

correspondente à placa do ângulo α. Os comandos para criar os dispositivos são:

mknod / dev / angle_beta c $MAJOR 0

mknod / dev / angle_alpha c $MAJOR 1

em que $MAJOR é o número principal que é atribuído pelo núcleo quando se carrega o módulo. Os

31

dispositivos criados têm de ter permissões de forma a que os operadores do programa possam ler e

escrever.

Os responsáveis pelo Linux não se comprometem numa interface estável para os módulos do nú-

cleo. Apesar do módulo ser simples, poderá ser necessário em futuras versões do núcleo, efectuar

alterações ao módulo. No entanto, este módulo foi escrito para as placas ISA que foram desactivadas

quando se adquiriu o conversor SSI-USB.

3.14 Instruções para compilação e instalação

A instruções que se seguem são orientadas para uma distribuição Ubuntu ou derivados, mas de-

vem resultar em qualquer ambiente Linux. A distribuição Ubuntu não contém nos seus repositórios os

pacotes GPIB necessários pelo que é preciso obter, compilar e instalar a biblioteca e módulos GPIB.

É necessário fazer o download do site http://linux-gpib.sourceforge.net. Aqui assume-se a versão

linux-gpib-3.2.16 como a última disponível. Dado que serão compilados módulos para o núcleo, é

preciso obter os interfaces deste. As instruções para compilar são:

ap t i t ude i n s t a l l l i nux−headers−gener ic

t a r zx f l i nux−gpib −3.2.16. t a r . gz

cd l i nux−gpib −3.2.16

. / con f igu re

make

make i n s t a l l

O último passo requer permissões de administração. É necessário proceder à compilação dos

módulos para cada actualização do núcleo. Os utilizadores têm de ter acesso aos dispositivos GPIB

em /dev, pelo que se deve verificá-las.

Adicionalmente, a placa existente não é inicializada automaticamente, pelo que é necessário realizar

com permissões de administrador a inicialização da placa no arranque do computador:

gp ib_con f ig −b0

As instruções para obter, compilar e instalar o programa AeroIST são as seguintes, em que o último

passo requer permissões de administração:

ap t i t ude i n s t a l l −R qt4−qmake g++ l i b q t 4−dev l i bqwt−dev l i b i c u 4 8 g i t l ibmuparser−dev

g i t c lone h t t ps : / / g i t . g i t o r i o u s . org / a e r o i s t / a e r o i s t . g i t

cd a e r o i s t

qmake

make

make i n s t a l l

32

CAPÍTULO 4

Avaliação de resultados

Os resultados obtidos com o programa desenvolvido, AeroIST, precisam de ser confirmados para

aceitação do projecto. Esta verificação foi realizada usando uma das asas estudadas em [1]. A asa

usada (Fig. 1.2) tem um alongamento deA = 1,5 e um perfil NASA LS(1)-0417 também conhecido por

GA(W)-1 com uma espessura máxima de 0,17c e uma curvatura máxima de 0,02c, em que c = 0,232m

é a corda do perfil.

Realizou-se um ensaio para avaliar o impacto do tempo de integração do multímetro, usando a asa

especificada em quatro iterações para os valores de α = {0, 2, 4, 6}◦. O número de medidas para

cada iteração, na Tabela 4.1, foi escolhido de forma a que a soma total dos tempos de integração do

multímetro fosse igual a 2 minutos, para cada iteração.

Na Tabela 4.1, a coluna “rácio tempos” mostra o rácio entre o tempo observado experimentalmente

e o tempo teórico de 2 minutos por iteração. Pode-se verificar que escolher um tempo de integração

baixo tem um forte impacto no tempo total do ensaio. A razão para os diferentes valores do rácio entre

tempos previstos tendo em conta apenas o tempo de integração e o tempo experimental foi referido em

Tabela 4.1: Resultados para os vários tempos de integração do multímetro.

Tempo No medidas Rácio Média desvio padrão Média desvio padrão

integração (s) por iteração tempos relativo de Fz (%) relativo de Fx (%)

0,05 400 4,210 79,45 68,16

0,10 200 2,589 46,87 33,85

0,50 40 1,318 9,25 8,21

1,00 20 1,158 4,78 2,80

5,00 4 1,032 1,34 1,43

10,00 2 1,016 1,21 0,81

33

2.1 e reside no tempo necessário para o multímetro efectuar a mudança de canal.

Outro resultado interessante é o erro associado à escolha do tempo de integração. Na Tabela 4.1

pode-se ver a média dos desvios padrões relativos das várias iterações do ângulo α, onde é perceptível

que a escolha de um maior tempo de integração conduz a um menor desvio padrão.

Para comparação dos resultados dos programas WW6 e AeroIST, foram efectuados um ensaio com

um número de Reynolds baixo, Re = 70 000, e outro ensaio com um número de Reynolds moderado,

Re = 140 000, por programa. Na Fig. 4.1 e Fig. 4.2 podem-se observar os coeficientes de sustenta-

ção e de resistência respectivamente, para um número de Reynolds moderado. As figuras 4.3 e 4.4

referem-se a um número de Reynolds baixo. Estes dados são mostrados sem qualquer correcção,

nomeadamente para o suporte ou para a secção do túnel de vento em aberto.

O procedimento experimental usado consiste em repetir o mesmo ensaio com o programa WW6

e o programa AeroIST. Para isto, é necessário a troca de componentes entre computadores e mudar

algumas ligações.

Para usar o programa WW6 é preciso usar o computador Pentium II. Assim, verifica-se a instalação

adequada das placas ISA e instala-se a placa GPIB. Liga-se os cabos das placas ISA com atenção

à ordem e o cabo de GPIB. Dentro da caixa +F1 liga-se os cabos dos codificadores nos conversores

SPA3. Na unidade SIMOREG, configura-se para o modo manual (Tabela 2.1).

Abre-se a janela de ventilação da sala do túnel de vento. Regista-se a temperatura da sala e

determina-se a pressão dinâmica, para o número de Reynolds desejado.

Sem modelo instalado na balança, faz-se uma nova série no programa WW6 e uma calibração do

zero, para velocidade do motor nula. Aumenta-se a velocidade do motor até obter a pressão dinâmica

determinada e regista-se os dados no WW6, para obter uma avaliação da influência do suporte.

De seguida, instala-se a asa na balança, com cuidado para ficar devidamente alinhada e repete-se

o mesmo procedimento numa nova série do programa, variando o ângulo α nos valores desejados,

efectuando mais de 15 medidas por cada valor de α.

Guarda-se os ficheiros .ME0 produzidos pelo programa WW6 e repete-se o ensaio, desta vez com

o programa AeroIST. Para tal, usa-se o computador Pentium IV, instalando a placa GPIB, ligando os

cabos dos codificadores ao conversor SSI-USB e pondo a unidade SIMOREG em modo controlável

pelo computador.

Sem modelo instalado na balança, faz-se uma nova avaliação da influência do suporte. No programa

AeroIST, faz-se uma nova referência. Para que os testes sejam equiparáveis, tem que se descobrir qual

é a velocidade do motor, em percentagem, que corresponde à pressão dinâmica usada anteriormente.

Assim, realiza-se uma medição em modo de controlo livre e varia-se a velocidade do motor até se

descobrir o valor correspondente. Realiza-se uma nova medição, com o valor da velocidade do motor

descoberto.

Monta-se o modelo em estudo na balança, faz-se uma nova referência e uma nova medição, com

a referência certa, mas novamente em modo de controlo livre, porque desejamos variar o ângulo α

em espaços irregulares. No final exporta-se as medições efectuadas para ficheiros CSV. O ensaio

realizado com o programa AeroIST foi realizado com a constante de tempo de 10 s e duas medidas por

34

iteração.

Dentro do mesmo número de Reynolds, os desvios observados no coeficiente de resistência são

relativamente maiores do que os desvios observados no coeficiente de sustentação. Analisando a Ta-

bela 4.1, pode-se verificar que a convergência dos desvios padrões, em função da tempo de integração,

ocorre com maior acentuação na força Fz, que dá origem ao CL, do que na força Fx, que dá origem ao

CD,. Isto é, a força no sentido do escoamento tem menor precisão e está sujeita a maior variabilidade

do que a força no sentido vertical. Esta é a razão que se aponta para a diferença entre os desvios dos

dois coeficientes, para o mesmo número de Reynolds.

A ordem de grandeza das forças Fz e Fx do ensaio a um número de Reynolds baixo é inferior ao

ensaio a um número de Reynolds moderado. Assim, as forças de menor valor estão sujeitas a maior

influência de erros. Esta é a razão apontada para a diferença entre os desvios observados entre os

dois números de Reynolds.

Tendo em conta o âmbito deste projecto que é a implementação de um sistema de aquisição de

dados para o túnel de vento do DEM, os desvios observados são atribuídos a razões de natureza

aerodinâmica, como explicado. A comparação dos resultados obtidos pelo ensaio com o programa

WW6 e com o programa AeroIST permite validar a plataforma de aquisição de dados.

−5 0 5 10 15 20 250.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

α (°)

CL

WW6

AeroIST

Figura 4.1: Coeficiente de Sustentação para um número de Reynolds moderado.

35

−5 0 5 10 15 20 25

0.35

0.4

0.45

0.5

0.55

0.6

0.65

α (°)

CD

WW6

AeroIST

Figura 4.2: Coeficiente de Resistência para um número de Reynolds moderado.

36

−5 0 5 10 15 20 250.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

α (°)

CL

WW6

AeroIST

Figura 4.3: Coeficiente de Sustentação para um número de Reynolds baixo.

37

−5 0 5 10 15 20 25

0.35

0.4

0.45

0.5

0.55

0.6

0.65

0.7

α (°)

CD

WW6

AeroIST

Figura 4.4: Coeficiente de Resistência para um número de Reynolds baixo.

38

CAPÍTULO 5

Conclusões

O mote para este trabalho foi a avaria do computador do túnel de vento. Este problema foi resolvido

com recurso a um programa externo, o PortTalk, que permitiu usar o programa WW6, num ambiente

Windows.

O sistema de aquisição de dados que era usado no túnel de vento foi estudado com detalhe e

documentado nesta dissertação. Durante o estudo, foram examinadas as hipóteses de fazer melhora-

mentos ao sistema, através do controlo de algumas variáveis, assim como examinada a possibilidade

de aquisição de novos equipamentos.

Um programa, designado por AeroIST, foi desenvolvido para a aquisição de dados da balança e

controlo desta. O programa foi desenhado de forma a permitir o aumento das variáveis a usar, caso

venha a ser adquirido novo equipamento no futuro, para aumento das capacidades ou para substituição

do existente. O programa satisfaz todos os requisitos obrigatórios e alguns dos requisitos opcionais

elaborados.

Os resultados obtidos com o programa AeroIST foram comparados directamente com os resultados

do programa WW6, em dois ensaios com uma asa. A comparação permite categorizar o programa

AeroIST de válido. Durante estes ensaios, foi evidente a facilidade de operação do ensaio com recurso

ao programa AeroIST.

Em comparação com o sistema instalado na AFA, o programa desenvolvido é equiparável em funci-

onalidades, não dispondo apenas de interacção com o LabView.

Futuros trabalhos no sistema de aquisição de dados deverão passar pela aquisição de novo equi-

pamento, nomeadamente:

• Aquisição de um sistema para leitura em paralelo das tensões eléctricas das cargas para uma

frequência de aquisição do sistema mais rápida;

• O Arduino não é um bom sistema para adquirir sinais analógicos, pelo que aquisição de equipa-

39

mentos melhores poderiam beneficiar o sistema;

• Aumento da capacidade de medição através da compra e inclusão de um sensor de pressões

como o Pneumatic Intelligent Pressure Scanner da Pressure Systems.

A determinação das matrizes e a calibração do sistema saiu fora do âmbito deste trabalho e não

é essencial às operações no túnel de vento, no entanto é possível a sua investigação como trabalho

futuro.

40

Bibliografia

[1] Guerreiro, João Luís Esteves: Controlo Passivo de Perda em Micro-Veículos Aéreos e Usando

Bordos de Ataque Sinusoidais. Tese de Mestrado, Instituto Superior Técnico, Dezembro 2010.

[2] Carl Schenck AG: Compact Wind Tunnel Balance, Setembro 1992.

[3] PREMA: Digital Multimeter DMM 5001 and DMM 6001 Instruction Manual, 1991.

[4] Ewald, Bernd F R: Multi-component force balances for conventional and cryogenic wind tunnels.

Measurement Science and Technology, 11(6):R81, 2000.

[5] Burden, Richard L. e Douglas J. Faires: Numerical Analysis. Brooks Cole, 7a edição, Dezembro

2000, ISBN 0534382169.

[6] Stegmann: AG 661 Absolute Angle Encoder.

[7] Posital: Implementation of SSI Master Interface, July 2010.

[8] Stegmann: AD-SSIPG-PA, AD-SSIPF-PA, AD-SSIP-PA Serial Parallel Adaptor, 2003.

[9] NEC Electronics Inc.: PD8255A Programmable Peripheral Interface.

[10] BEI Sensors: Dual Encoder to USB Converter, 09/09 edição, 2009.

[11] Siemens: SIMOREG DC Master 6RA70 Series Base Drive Instructions, rev6.0 edição, 2006.

[12] National Semiconductor: LM35 Precision Centigrade Temperature Sensors, Novembro 2000.

[13] DOC: Port I/O with inp() and outp() Fails on Windows NT, 2003. http://support.microsoft.com/

kb/112298, acedido em 2012-05-25.

[14] PortTalk - A Windows NT I/O Port Device Driver, 2007. http://retired.beyondlogic.org/

porttalk/porttalk.htm, acedido em 2012-05-25.

[15] Horiba: código fonte do programa WW6.

[16] Pressure Systems: 9000 Series Intelligent Pressure Scanners Users Manual, 1998.

[17] Gamma, Erich, Richard Helm, Ralph Johnson e John Vlissides: Design Patterns: Elements of

Reusable Object-Oriented Software. Addison-Wesley Professional, 1a edição, Novembro 1994,

ISBN 0201633612.

[18] Firmata, 2012. http://www.firmata.org/wiki/Protocol, acedido em 2012-07-25.

41

APÊNDICE A

Matrizes de calibração

43

Tabela A.1: Matriz de calibração para um modelo no chão da secção de teste.

R1 R2 R3 R4 R5 R6

Fx −5,36× 10−2 9,54× 10−3 −7,23× 10−4 2,27 −1,66× 10−4 −1,26

Fy −5,01× 10−3 1,02 1,05 1,48× 10−3 −1,09 2,24× 10−3

Fz 9,57× 10−1 −2,58× 10−3 −1,15× 10−3 −1,80× 10−2 2,31× 10−3 1,98× 10−2

Mx 2,75× 10−3 3,04 3,15 −3,48× 10−3 6,20 1,45× 10−2

My 2,24× 10−1 −1,83× 10−3 −3,70× 10−2 −6,72 1,94× 10−2 6,67

Mz −1,01× 10−2 8,69 −8,89 1,08× 10−1 −4,10× 10−2 1,64× 10−1

FxFx −4,13× 10−5 −6,08× 10−5 1,32× 10−4 −4,78× 10−5 −9,83× 10−6 −4,78× 10−5

FxFy 0 0 0 0 0 0

FxFz 0 0 0 0 0 0

FxMx 0 0 0 0 0 0

FxMy 0 0 0 0 0 0

FxMz 0 0 0 0 0 0

FyFy −1,57× 10−4 −9,45× 10−5 −2,65× 10−5 −2,28× 10−4 −3,34× 10−5 3,87× 10−5

FyFz 0 0 0 0 0 0

FyMx 0 0 0 0 0 0

FyMy 0 0 0 0 0 0

FyMz 0 0 0 0 0 0

FzFz 9,05× 10−6 1,41× 10−5 1,00× 10−5 −1,50× 10−5 −9,13× 10−6 −2,51× 10−6

FzMx 0 0 0 0 0 0

FzMy 0 0 0 0 0 0

FzMz 0 0 0 0 0 0

MxMx −1,26× 10−4 4,43× 10−4 1,24× 10−3 2,95× 10−4 −3,09× 10−4 6,71× 10−4

MxMy 0 0 0 0 0 0

MxMz 0 0 0 0 0 0

MyMy −1,25× 10−4 7,57× 10−4 2,07× 10−4 1,83× 10−3 5,63× 10−5 −3,70× 10−4

MyMz 0 0 0 0 0 0

MzMz −2,38× 10−3 −8,48× 10−3 1,09× 10−2 −2,21× 10−3 −1,44× 10−3 −8,24× 10−4

44

Tabela A.2: Matriz de calibração para um modelo no meio da secção de teste.

R1 R2 R3 R4 R5 R6

Fx −1,41× 10−1 1,58× 10−3 5,80× 10−3 4,95 7,14× 10−3 −3,92

Fy −4,07× 10−3 2,23 2,30 3,69× 10−2 −3,55 −2,03× 10−2

Fz 9,58× 10−1 −8,77× 10−4 1,46× 10−3 −1,72× 10−2 −1,44× 10−4 1,69× 10−2

Mx −1,50× 10−2 3,04 3,17 −2,55× 10−4 −6,21 1,45× 10−2

My 2,21× 10−1 −2,23× 10−3 −2,67× 10−2 −6,74 1,35× 10−2 6,69

Mz −2,57× 10−2 8,67 −8,94 1,37× 10−1 1,31× 10−2 1,39× 10−1

FxFx −5,74× 10−5 −1,65× 10−4 8,46× 10−5 −4,30× 10−6 9,32× 10−5 6,42× 10−5

FxFy 0 0 0 0 0 0

FxFz 0 0 0 0 0 0

FxMx 0 0 0 0 0 0

FxMy 0 0 0 0 0 0

FxMz 0 0 0 0 0 0

FyFy −3,23× 10−4 −3,23× 10−4 4,63× 10−4 −1,05× 10−3 −5,84× 10−5 7,98× 10−4

FyFz 0 0 0 0 0 0

FyMx 0 0 0 0 0 0

FyMy 0 0 0 0 0 0

FyMz 0 0 0 0 0 0

FzFz −3,71× 10−5 6,93× 10−6 −2,23× 10−5 2,09× 10−5 −2,75× 10−5 1,54× 10−5

FzMx 0 0 0 0 0 0

FzMy 0 0 0 0 0 0

FzMz 0 0 0 0 0 0

MxMx 2,87× 10−3 −1,14× 10−3 1,50× 10−4 2,52× 10−3 8,40× 10−4 2,00× 10−3

MxMy 0 0 0 0 0 0

MxMz 0 0 0 0 0 0

MyMy 1,56× 10−4 4,21× 10−5 3,64× 10−4 −8,19× 10−4 8,98× 10−4 −4,71× 10−4

MyMz 0 0 0 0 0 0

MzMz 1,16× 10−3 −2,22× 10−2 9,12× 10−3 −2,64× 10−4 9,06× 10−3 −3,95× 10−4

45

APÊNDICE B

Diagrama das placas ISA

47

10/04/23 15:15 f=0.85 /home/flip/tuneldevento/placa ISA/isaboard.sch (Sheet: 1/1)

057-060-0

GND

GND

GND

GNDGND

GND

GND

GND

VC

C

VC

C

GND

GND

GND

VC

C GND

VC

C

GND

VC

C

VC

C

GND

VC

C

GND

VC

C

VC

C

GND

VC

C

VC

C

GND

VC

C

GND

GND

VC

C

VC

C

X5-

A2

X5-

A3

X5-

A4

X5-

A5

X5-

A6

X5-

A7

X5-

A8

X5-

A9

X5-

A10

X5-

A11

X5-

A12

X5-

A13

X5-

A14

X5-

A15

X5-

A16

X5-

A17

X5-

A18

X5-

A19

X5-

A20

X5-

A21

X5-

A22

X5-

A23

X5-

A24

X5-

A25

X5-

A26

X5-

A27

X5-

A28

X5-

A29

X5-

A30

X5-

A31

X5-

B2

X5-

B3

X5-

B4

X5-

B5

X5-

B6

X5-

B7

X5-

B8

X5-

B9

X5-

B10

X5-

B11

X5-

B12

X5-

B13

X5-

B14

X5-

B15

X5-

B16

X5-

B17

X5-

B18

X5-

B19

X5-

B20

X5-

B21

X5-

B22

X5-

B23

X5-

B24

X5-

B25

X5-

B26

X5-

B27

X5-

B28

X5-

B29

X5-

B30

X5-

B31

X5-

A1

X5-

B1

X1-1 X1-2

X1-3 X1-4

X1-5 X1-6

X1-7 X1-8

X1-9 X1-10

X1-11 X1-12

X1-13 X1-14

X1-15 X1-16

X1-17 X1-18

X1-19 X1-20

X1-21 X1-22

X1-23 X1-24

X1-25 X1-26

X1-27 X1-28

X1-29 X1-30

X1-31 X1-32

X1-33 X1-34

X1-35 X1-36

X1-37 X1-38

X1-39 X1-40

X1-41 X1-42

X1-43 X1-44

X1-45 X1-46

X1-47 X1-48

X1-49 X1-50

X1-51 X1-52

X1-53 X1-54

X1-55 X1-56

X1-57 X1-58

X1-59 X1-60

1 2 3 4

U8

5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 202122232425262728293031323334353637383940

1 2 3 4

U9

5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 202122232425262728293031323334353637383940

1 2 3 4

U10

5 6 7 8 9 1011121314151617181920

1 2 3 4

U6

5 6 7891011121314

1 2 3 4

U5

5 6 7891011121314

1 2 3 4

U4

5 6 7891011121314

1 2 3 4

U2

5 6 7891011121314

1 2 3 4

U1

5 6 7 8 9 1011121314151617181920

1 2 3 4

U7

5 6 7 8 9 10 11 12131415161718192021222324

1 2 3 4

U3

5 6 7 8 9 1011121314151617181920

C00

C10

C04

C03

C02

C01

C07

C09

C08

CC

2C

C1

R1

R2

R3

135

246

7

X3

8

123

JP1

Q1

1 2 3 4 5 6 7 8

X6

C06

C05

48

APÊNDICE C

Interface dos Módulos do AeroIST

# i fndef VARIABLE_H

#define VARIABLE_H

#include <QString >

#include <QWidget>

#include <QDomElement>

class Data ;

class VariableMeta {

public :

v i r t u a l ~VariableMeta ( ) { } ;

v i r t u a l bool i s _ c o n t r o l a b l e ( ) = 0 ;

v i r t u a l bool has_zero ( ) = 0 ;

v i r t u a l i n t get_num ( ) = 0 ;

v i r t u a l QStr ing get_general_name ( ) = 0 ;

/ / should be t r a n s l a t a b l e

v i r t u a l QStr ing get_general_name_tr ( ) = 0 ;

v i r t u a l QStr ing get_name ( i n t n ) = 0 ;

/ / should be t r a n s l a t a b l e

v i r t u a l QStr ing get_name_tr ( i n t n ) = 0 ;

/ / should be t r a n s l a t a b l e

v i r t u a l QStr ing ge t_un i t s ( i n t n ) = 0 ;

49

v i r t u a l QStr ing get_raw_uni ts ( i n t n ) = 0 ;

v i r t u a l double get_lower_bound ( i n t n ) = 0 ;

v i r t u a l double get_upper_bound ( i n t n ) = 0 ;

v i r t u a l double get_smal le r_s tep ( i n t n ) = 0 ;

v i r t u a l double ge t_de fau l t_s tep ( i n t n ) = 0 ;

v i r t u a l double g e t _ d e f a u l t _ s t a r t ( i n t n ) = 0 ;

} ;

class Var iab lePreferences {

public :

v i r t u a l ~Var iab lePreferences ( ) { } ;

v i r t u a l QWidget∗ get_widget ( ) = 0 ;

v i r t u a l bool accept_conf ig ( ) = 0 ;

v i r t u a l bool i s _ c o n f i g u r a b l e ( ) = 0 ;

Var iableMeta ∗meta ;

} ;

class VariableModel {

public :

v i r t u a l ~VariableModel ( ) { }

v i r t u a l QWidget∗ view_get_widget ( ) = 0 ; / / d e t a i l s

v i r t u a l QWidget∗ measurement_get_widget ( ) = 0 ; / / preferences

v i r t u a l bool measurement_accept_config ( Var iableModel ∗m) = 0;

v i r t u a l bool measurement_is_conf igurable ( ) = 0 ;

v i r t u a l void save_xml (QDomElement roo t ) = 0 ;

v i r t u a l void load_xml (QDomElement roo t ) = 0 ;

Var iableMeta ∗meta ;

QVector<double> s t a r t ;

Data ∗data ;

} ;

class VariableHardware {

public :

v i r t u a l ~VariableHardware ( ) { }

v i r t u a l void read ( ) = 0 ;

v i r t u a l double get_value ( i n t n ) = 0 ;

v i r t u a l double get_raw_value ( i n t n ) = 0 ;

v i r t u a l void set_va lue ( i n t n , double value ) = 0 ;

v i r t u a l bool isReady ( void ) = 0 ;

50

v i r t u a l bool has_se t_ f i na l ( ) = 0 ;

v i r t u a l void s e t _ f i n a l ( ) = 0 ;

Var iableMeta ∗meta ;

v i r t u a l void set_zero ( QVector<double> zero ) = 0 ;

QVector<double> s t a r t ;

} ;

class Factory {

public :

v i r t u a l ~Factory ( ) { }

v i r t u a l VariableMeta ∗ CreateVar iableMeta ( ) = 0 ;

v i r t u a l Var iab lePreferences ∗ CreateVariableGUI ( ) = 0 ;

v i r t u a l VariableModel ∗ CreateVar iableModel ( ) = 0 ;

v i r t u a l VariableHardware∗ CreateVariableHardware ( Var iableModel ∗ v ) = 0 ;

} ;

QT_BEGIN_NAMESPACE

Q_DECLARE_INTERFACE( Factory , " p t . i s t . u t l . a e r o i s t . f a c t o r y / 1 . 6 " )

QT_END_NAMESPACE

#endif / / VARIABLE_H

51

APÊNDICE D

Schema do ficheiro XML

<?xml version=" 1.0 " encoding="UTF−8" ?>

<xs:schema xmlns:xs=" h t t p : / /www.w3 . org /2001/XMLSchema">

< !−− d e f i n i t i o n o f s imple elements −−>

<xs:element name="name" type=" x s : s t r i n g " / >

<xs:element name=" reference_name " type=" x s : s t r i n g " / >

<xs:element name=" d e s c r i p t i o n " type=" x s : s t r i n g " / >

<xs:element name=" i d " type=" x s : i n t " / >

<xs:element name=" dvm_time " type=" x s : i n t " / >

<xs:element name=" mat r i x " type=" x s : i n t " / >

<xs:element name=" pressure_channel " type=" x s : i n t " / >

<xs:element name=" measures_per_ i te ra t ion " type=" x s : p o s i t i v e I n t e g e r " / >

<xs:element name=" i tem " type=" xs:double " / >

<xs:element name=" s e t t l i n g _ t i m e " type=" x s : i n t " / >

<xs:element name=" end " type=" xs:double " / >

<xs:element name=" step " type=" xs:double " / >

<xs:element name=" con t ro l _ t ype " type=" x s : s t r i n g " / >

<xs:element name=" i t e r a t i o n s " type=" x s : i n t " / >

<xs:element name=" Time " type=" xs:double " / >

<xs:element name=" Fx " type=" xs:double " / >

<xs:element name=" Fy " type=" xs:double " / >

<xs:element name=" Fz " type=" xs:double " / >

<xs:element name="Mx" type=" xs:double " / >

<xs:element name="My" type=" xs:double " / >

<xs:element name="Mz" type=" xs:double " / >

<xs:element name=" Alpha " type=" xs:double " / >

<xs:element name=" Beta " type=" xs:double " / >

<xs:element name=" Motor " type=" xs:double " / >

<xs:element name=" Temperature " type=" xs:double " / >

<xs:element name=" Pressure " type=" xs:double " / >

<xs:element name=" opt ions ">

<xs:complexType>

<xs:sequence>

<xs:element r e f = " dvm_time " / >

<xs:element r e f = " mat r i x " / >

<xs:element r e f = " pressure_channel " / >

< / xs:sequence>

< / xs:complexType>

< / xs:element>

<xs:group name=" v a r i a b l e s ">

<xs:sequence>

<xs:element r e f = " Time " minOccurs=" 0 " / >

<xs:element r e f = " Fx " minOccurs=" 0 " / >

<xs:element r e f = " Fy " minOccurs=" 0 " / >

53

<xs:element r e f = " Fz " minOccurs=" 0 " / >

<xs:element r e f = "Mx" minOccurs=" 0 " / >

<xs:element r e f = "My" minOccurs=" 0 " / >

<xs:element r e f = "Mz" minOccurs=" 0 " / >

<xs:element r e f = " Alpha " minOccurs=" 0 " / >

<xs:element r e f = " Beta " minOccurs=" 0 " / >

<xs:element r e f = " Motor " minOccurs=" 0 " / >

<xs:element r e f = " Pressure " minOccurs=" 0 " / >

<xs:element r e f = " Temperature " minOccurs=" 0 " / >

< / xs:sequence>

< / xs:group>

<xs:element name=" p r o j e c t ">

<xs:complexType>

<xs:sequence>

<xs:element name=" re ference " minOccurs=" 0 " maxOccurs=" unbounded ">

<xs:complexType>

<xs:sequence>

<xs:element r e f = "name" / >

<xs:element r e f = " d e s c r i p t i o n " / >

<xs:element r e f = " op t ions " / >

<xs:element r e f = " measures_per_ i te ra t ion " / >

<xs:element name=" s ta r t _v a l ues ">

<xs:complexType>

<xs:sequence>

<xs:element name=" i tem " >

<xs:complexType>

<xs:group r e f = " v a r i a b l e s " / >

< / xs:complexType>

< / xs:element>

< / xs:sequence>

< / xs:complexType>

< / xs:element>

<xs:element name=" data ">

<xs:complexType>

<xs:sequence>

<xs:element name=" i tem " maxOccurs=" unbounded " >

<xs:complexType>

<xs:sequence>

<xs:element r e f = " Fx " / >

<xs:element r e f = " Fy " / >

<xs:element r e f = " Fz " / >

<xs:element r e f = "Mx" / >

<xs:element r e f = "My" / >

<xs:element r e f = "Mz" / >

< / xs:sequence>

< / xs:complexType>

< / xs:element>

< / xs:sequence>

< / xs:complexType>

< / xs:element>

<xs:element name=" raw_data ">

<xs:complexType>

<xs:sequence>

<xs:element name=" i tem " maxOccurs=" unbounded " >

<xs:complexType>

<xs:sequence>

<xs:element r e f = " Fx " / >

<xs:element r e f = " Fy " / >

<xs:element r e f = " Fz " / >

<xs:element r e f = "Mx" / >

<xs:element r e f = "My" / >

<xs:element r e f = "Mz" / >

< / xs:sequence>

< / xs:complexType>

< / xs:element>

< / xs:sequence>

< / xs:complexType>

< / xs:element>

< / xs:sequence>

< / xs:complexType>

< / xs:element>

<xs:element name=" measurement " minOccurs=" 0 " maxOccurs=" unbounded ">

<xs:complexType>

<xs:sequence>

<xs:element r e f = "name" / >

<xs:element r e f = " d e s c r i p t i o n " / >

54

<xs:element r e f = " op t ions " / >

<xs:element r e f = " measures_per_ i te ra t ion " / >

<xs:element r e f = " s e t t l i n g _ t i m e " / >

<xs:element r e f = " end " / >

<xs:element r e f = " step " / >

<xs:element name=" s ta r t _v a l ues ">

<xs:complexType>

<xs:sequence>

<xs:element name=" i tem " >

<xs:complexType>

<xs:group r e f = " v a r i a b l e s " / >

< / xs:complexType>

< / xs:element>

< / xs:sequence>

< / xs:complexType>

< / xs:element>

<xs:element r e f = " con t ro l _ t ype " / >

<xs:element r e f = " i t e r a t i o n s " / >

<xs:element name=" data_reference " >

<xs:complexType>

<xs:sequence>

<xs:element r e f = " reference_name " / >

<xs:element name=" i tem " maxOccurs=" 1 " >

<xs:complexType>

<xs:group r e f = " v a r i a b l e s " / >

< / xs:complexType>

< / xs:element>

< / xs:sequence>

< / xs:complexType>

< / xs:element>

<xs:element name=" data " >

<xs:complexType>

<xs:sequence>

<xs:element name=" i tem " minOccurs=" 0 " maxOccurs=" unbounded " >

<xs:complexType>

<xs:group r e f = " v a r i a b l e s " / >

< / xs:complexType>

< / xs:element>

< / xs:sequence>

< / xs:complexType>

< / xs:element>

<xs:element name=" raw_data " >

<xs:complexType>

<xs:sequence>

<xs:element name=" i tem " minOccurs=" 0 " maxOccurs=" unbounded " >

<xs:complexType>

<xs:group r e f = " v a r i a b l e s " / >

< / xs:complexType>

< / xs:element>

< / xs:sequence>

< / xs:complexType>

< / xs:element>

< / xs:sequence>

< / xs:complexType>

< / xs:element>

< / xs:sequence>

< / xs:complexType>

< / xs:element>

< / xs:schema>

55