150 likes | 364 Views
Projeto: Desenvolvimento do software de opera ç ão do experimento FOTANTAR-3 para medir temperatura da alta atmosfera. CAP 365 – Ferramentas e Paradigmas de Desenvolvimento de Software Instituto Nacional de Pesquisas Espaciais (INPE) Primavera Botelho de Souza São José dos Campos
E N D
Projeto: Desenvolvimento do software de operação do experimento FOTANTAR-3 para medir temperatura da alta atmosfera CAP 365 – Ferramentas e Paradigmas de Desenvolvimento de Software Instituto Nacional de Pesquisas Espaciais (INPE) Primavera Botelho de Souza São José dos Campos Dezembro de 2006
Aplicação A pesquisa em luminescência atmosférica desenvolvida pelo grupo LUME da Divisão de Aeronomia do INPE consiste em estudar fenômenos na região da alta atmosfera. O experimento FotAntar3 deverá medir a temperatura da alta atmosfera na Antártica com o propósito de investigar a resposta da região frente às mudanças climáticas globais (registros de longo prazo > 1 década.). • Termos de Variabilidade:ciclo solar, sazonal, diurna, marés e ondas planetárias; • Relações entre a dinâmica do buraco de ozônio e a atividade de ondas planetárias na região. LUME/INPE - http://www.laser.inpe.br/lume/
Fonte: Wrasse, 2000. Fonte: Wrasse, 2005. Fonte: Gobbi, 2000. Fonte: Gobbi, 2005. Histórico FotAntar-3 FotAntar-1 e 2 Fotomultiplicadora - modo de contagem; seleciona o espectro da emissão através de filtro de interferência inclinável. Softwares de operação construídos em Visual Basic (“cultura do grupo”). CCD alta resolução – armazena fótons em um dado tempo de exposição; seleciona o espectro da emissão através de filtro de interferência. Intenção de aproveitar o software em VB desenvolvido para fotômetros.
Motivação Características intrínsecas da linguagem deprogramação Visual Basicacarretaram na perda de resolução da imagem, além de interferir na velocidade de transferência da imagem adquirida. • Surge a necessidade de adotar outra linguagem, cujas características permitissem: • Máxima qualidade da imagem adquirida; • Rapidez no processo de amostragem; • Contemplar uma classe de novos imageadores.
Objetivo Desenvolverem C++ um software de operaçãoque satisfaça aos requisitos de qualidade e velocidade da imagem adquirida, bem como privilegie o reuso para uma classe de imageadores similares, destinados a medir temperatura da alta atmosfera.
Solução em C++ • Drivers fornecidos pelo fabricante do imageador: Santa Barbara Instrument Group (SBIG) são suportados pelas linguagens VB, Delphi e C++. • Imagem adquirida é uma matriz do tipo inteiro não-sinalizado-16 bits. • Recomendação do fabricante para perdas mínimas na qualidade e bom desempenho na leitura durante transferência através da interface paralela: utilizar o tipo unsigned short. Fonte: http://www2.fundao.pro.br
Comparação entre os códigos Leitura da imagem em: Visual Basic C++ For j = 0 To 1023 If j Mod 20 = 0 Then lblprogress.Caption = Str(j + 1) lblprogress.Refresh End If i = SBIGUnivDrvCommand(CC_READOUT_LINE, rlp, linedata(0)) If i <> 0 Then MsgBox "Readout exposure command failed for line " & Str(j) Exit Sub End If ' Visual Basic does not have word data types, so I truncate ' the data to avoid negative values For k = 0 To 1023 If linedata(k) > 0 Then imagedata(k, j) = linedata(k) Else imagedata(k, j) = 32767 End If Next 'k t0 = GetTickCount(); /* Reading Data */ rlp.ccd = CCD_IMAGING; rlp.readoutMode = 1; rlp.pixelStart = 0; rlp.pixelLength = 765; for(i=0; i<510; i++){ res = SBIGUnivDrvCommand(CC_READOUT_LINE, &rlp, iimage[i]); if(res != CE_NO_ERROR){ sprintf(s,"Readout Line Error = %d at row %d",res, i); MessageBox(NULL, s, "SBIG Test Message", MB_OK); return; } } t0 = GetTickCount() - t0; sprintf(s,"Time for download = %1.2lf seconds",t0/1000.0); MessageBox(NULL, s, "SBIG Test Message", MB_OK);
Comparação entre as imagens obtidas Visual Basic C++
Motivação Características intrínsecas da linguagem deprogramação Visual Basicacarretaram na perda de resolução da imagem, além de interferir na velocidade de transferência da imagem adquirida. • Surge a necessidade de adotar outra linguagem, cujas características permitissem: • Máxima qualidade da imagem adquirida; • Rapidez no processo de amostragem; • Contemplar uma classe de novos imageadores.
Como construir em C++ um software de operação adequado a novos imageadores? • Critérios a serem avaliados: • Não se trata apenas de uma transcrição entre linguagens; • Projeto de classes compatível com as características do software de tempo real; • Migrar utilizando padrões para garantir reuso; • Funções pré-definidas para esta classe de imageadores: • Estabelecer comunicação • Abrir shutter • Adquirir imagem • Transferir imagem • Fechar shutter
Fonte: Gamma et al. 1995. Design Pattern Adequado Pattern Comportamental “Chain of Responsibility" (Cadeia de Responsabilidades). Estrutura: • Vantagens: • Acoplamento reduzido • Maior flexibilidade ao atribuir responsabilidades aos objetos. • Desvantagens: • Não há garantia de recebimento da solicitação.
Implementação do Modelo MFC – Microsoft Foundation Class: Application Framework //////////////////////////////////////////////////// // mstst32.cpp : Defines the class behaviors for the application BEGIN_MESSAGE_MAP(CMstst32App, CWinApp) //{{AFX_MSG_MAP(CMstst32App) ON_COMMAND(ID_APP_ABOUT, OnAppAbout) ON_COMMAND(ID_CAMERA_ESTABLISH2NDLINK, OnCameraEstablish2ndlink) ON_COMMAND(ID_CAMERA_DUMPLINESTIMING, OnCameraDumpLinesTiming) //}}AFX_MSG_MAP // Standard file based document commands ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew) ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen) ON_COMMAND(ID_CAMERA_OPENDRIVER, OnCameraOpenDriver) ON_COMMAND(ID_CAMERA_CLOSEDRIVER, OnCameraCloseDriver) ON_COMMAND(ID_CAMERA_GETDRIVERINFO, OnCameraGetDriverInfo) ON_COMMAND(ID_CAMERA_ESTABLISHLINK, OnCameraEstablishLink) ON_COMMAND(ID_CAMERA_GETCCDINFO, OnCameraGetCCDInfo) ON_COMMAND(ID_CAMERA_TAKETRACKINGIMAGE, OnCameraTakeTrackingImage) ON_COMMAND(ID_CAMERA_TAKEIMAGINGIMAGE, OnCameraTakeImagingImage) ON_COMMAND(ID_CAMERA_UPDATECLOCK, OnCameraUpdateClock) END_MESSAGE_MAP() /////////////////////////////////////////////////// //CMstst32App construction CMstst32App::CMstst32App() // Only CMstst32App object CMstst32App theApp; void CMstst32App::OnCameraOpenDriver() . . void CMstst32App::OnCameraCloseDriver() . . void CMstst32App::OnCameraGetDriverInfo() . . void CMstst32App::OnCameraEstablishLink() . . void CMstst32App::OnCameraGetCCDInfo() . . void CMstst32App::OnCameraTakeTrackingImage() . . void CMstst32App::OnCameraTakeImagingImage() . . void CMstst32App::OnCameraUpdateClock() .
Considerações Finais Os requisitos de qualidade e rapidez da imagem adquirida levaram ao desenvolvimento de um módulo em C++. No entanto, esta solução parcial não atenderia a facilidade de se dispor de um software adaptável e reutilizável. A implementação do modelo gerou um protótipo que mostrou-se bastante adequado as características de um software de operação, sendo um passo inicial para a implementação em C++ do software final, onde serão integrado os módulos desenvolvidos anteriormente e agregadas outras funcionalidades. A utilização de um padrão promoveu ainda clareza no código para manutenção do mesmo, bem como para adaptação aos novos imageadores.