desenvolvimento de uma plataforma aberta e escalável para ... · 2.9 relação entre a pressão...
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
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
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