Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 8

Capı́tulo 2

Antecedentes y estado del arte

En el siguiente apartado se incluirá una visión general sobre las tecnologı́as utilizadas para el
desarrollo de la aplicación pero no sin antes hacer referencia a los antecedentes que supusieron
el punto de partida de este proyecto.

A lo primero que hay que hacer referencia es al trabajo realizado por el antiguo alumno Pablo
Sordo, cuyo Proyecto Fin de Carrera ha supuesto el punto de partida de éste. Su proyecto se
basaba en una interfaz, también en lenguaje Qt sobre C++ y que se comunicaba con el mismo
analizador de espectros que se utiliza en este proyecto. Su trabajo ha servido al alumno de gran
ayuda a la hora de resolverle muchas dudas acerca de la programación en Qt y el uso de algunos
componentes que Qt permite incluir en los desarrollos.

Después, también se comenzó el proyecto con un fichero de código MatLab que existı́a en el
laboratorio de radiocomunicación y que realizaba la misma comunicación que se querı́a conse-
guir con este proyecto en cuanto a la obtención de los datos del analizador. En este código se
encontraba el algoritmo que se tuvo luego que traducir a lenguaje C++ con los consecuentes
arreglos para la adaptación de un lenguaje al otro.

2.1. Programación Orientada a Objetos, Lenguaje C++

Vamos a hablar un poco sobre el lenguaje C++ que es la base de todo el desarrollo de la
aplicación. Para ello, vamos a hacer mención del artı́culo encontrado en el portal Wikipedia
sobre este lenguaje de programación [6]:

C++ es un lenguaje de programación diseñado a mediados de los años 1980 por Bjarne
Stroustrup. La intención de su creación fue el extender al exitoso lenguaje de programación C
con mecanismos que permitan la manipulación de objetos. En ese sentido, desde el punto de
vista de los lenguajes orientados a objetos, el C++ es un lenguaje hı́brido.

Posteriormente se añadieron facilidades de programación genérica, que se sumó a los otros dos
paradigmas que ya estaban admitidos (programación estructurada y la programación orientada
a objetos). Por esto se suele decir que el C++ es un lenguaje de programación multiparadigma.

Actualmente existe un estándar, denominado ISO C++, al que se han adherido la mayorı́a
de los fabricantes de compiladores más modernos.

9
CAPÍTULO 2. ANTECEDENTES Y ESTADO DEL ARTE 10

Una particularidad del C++ es la posibilidad de redefinir los operadores, y de poder crear
nuevos tipos que se comporten como tipos fundamentales.

El nombre C++ fue propuesto por Rick Mascitti en el año 1983, cuando el lenguaje fue
utilizado por primera vez fuera de un laboratorio cientı́fico. Antes se habı́a usado el nombre C
con clases. En C++, la expresión C++ significa incremento de C y se refiere a que C++ es una
extensión de C.

Los objetos en C++ son abstraı́dos mediante una clase. Según el paradigma de la progra-
mación orientada a objetos un objeto consta de:

Identidad, que lo diferencia de otros objetos (Nombre que llevara la clase a la que pertenece
dicho objeto).

Métodos o funciones miembro

Atributos o variables miembro

Con este breve resumen damos por cerrado la visión general de este lenguaje, ya que si
quisiéramos extendernos podrı́amos hacerlo todo lo que quisiéramos pero no es objeto de este
proyecto. Para quien quiera más información puede dirigirse a la referencia [1] de la bibliografı́a,
o a internet, donde podemos encontrar multitud de páginas con multitud de ejemplos de todo
tipo.

2.2. Programación de Interfaz Gráfica. Lenguaje Qt

En este apartado, también vamos a hacer referencia al artı́culo de Wikipedia que habla sobre
este lenguaje [7]:

Qt es una biblioteca multiplataforma ampliamente usada para desarrollar aplicaciones con


interfaz gráfica de usuario, ası́ como también para el desarrollo de programas sin interfaz gráfica,
como herramientas para la lı́nea de comandos y consolas para servidores.

Qt es desarrollada como un software libre y de código abierto a través de Qt Project, donde


participa tanto la comunidad, como desarrolladores de Nokia, Digia y otras empresas. Anterior-
mente, era desarrollado por la división de software de Qt de Nokia, que entró en vigor después
de la adquisición por parte de Nokia de la empresa noruega Trolltech, el productor original de
Qt, el 17 de junio de 2008. Qt es distribuida bajo los términos de GNU Lesser General Public
License (y otras). Por otro lado, Digia está a cargo de las licencias comerciales de Qt desde
marzo de 2011.

Qt es utilizada en KDE, entorno de escritorio para sistemas como GNU/Linux o FreeBSD,


entre otros. Qt utiliza el lenguaje de programación C++ de forma nativa, adicionalmente puede
ser utilizado en varios otros lenguajes de programación a través de bindings1 También es usada
en sistemas informáticos empotrados para automoción, aeronavegación y aparatos domésticos
como frigorı́ficos.
1
En el campo de la programación, un binding es una adaptación de una biblioteca para ser usada en un lenguaje
de programación distinto de aquél en el que ha sido escrita.
CAPÍTULO 2. ANTECEDENTES Y ESTADO DEL ARTE 11

Funciona en todas las principales plataformas, y tiene un amplio apoyo. El API (Interfaz de
programación de aplicaciones, del inglés Application Programming Interface) de la biblioteca
cuenta con métodos para acceder a bases de datos mediante SQL, ası́ como uso de XML, gestión
de hilos, soporte de red, una API multiplataforma unificada para la manipulación de archivos y
una multitud de otros para el manejo de ficheros, además de estructuras de datos tradicionales.

Qt es utilizada principalmente en Autodesk Maya, The Foundry’s Nuke, Adobe Photoshop


Album, Google Earth, Skype, VLC media player, VirtualBox, Dassault DraftSigh, Mathema-
tica, por la Agencia Espacial Europea, DreamWorks, HP, KDE, Lucasfilm, Panasonic, Philips,
Samsung, Siemens, Volvo, Walt Disney Animation Studios y Research In Motion.

Fue desarrollado inicialmente por Haavard Nord (CEO de Trolltech) y Eirik Chambe-Eng
(presidente de Trolltech). Haavard y Eirik se reunieron en el Instituto Noruego de Tecnologı́a de
Trondheim, donde ambos se graduaron con un máster en ciencias de la computación. El kit de
herramientas se llamó Qt porque la letra Q lucı́a atractiva en la fuente Emacs la cual era muy
usada por Haavard en su trabajo, y ”t”se inspiró en Xt, el kit de herramientas X ”X Tool kit”.

En este proyecto, se va a usar el software QtCreator para la programación de la aplicación.


El aspecto de este programa es el mostrado en la figura 2.1:

Figura 2.1: Aspecto del programa QtCreator

Este programa nos permite escribir proyectos en lenguaje Qt, lanzarlos directamente para
hacer pruebas y poder detectar errores, y construir la aplicación una vez creada.

QtCreator tiene distintos modos de visualización, en el modo Edit podremos editar el código
de la aplicación (figura 2.2), la pestaña Design nos permite configurar el aspecto de la interfaz
(figura 2.3), incluyendo tipos de objetos que luego podremos tratar en el código, y la vista Debug
(figura 2.4), que nos permitirá hacer una ejecución paso a paso para poder detectar errores en
el código.
CAPÍTULO 2. ANTECEDENTES Y ESTADO DEL ARTE 12

Figura 2.2: Vista Edit de QtCreator

Figura 2.3: Vista Design de QtCreator

Para el aprendizaje de este lenguaje de programación, el alumno ha recurrido, además de


al Proyecto Fin de Carrera del alumno Pablo Sordo, del que hablamos anteriormente, a la
publicación C++ GUI programming with Qt 4 [2] y, sobre todo, al Canal en Youtube del
CAPÍTULO 2. ANTECEDENTES Y ESTADO DEL ARTE 13

Figura 2.4: Vista Debug de QtCreator

usuario VoidRealms [8], en el que explica mediante videotutoriales el funcionamiento de Qt con


ejemplos bastante prácticos.

2.3. Bus de Comunicaciones GPIB

El bus de comunicaciones GPIB es una forma estandarizada de transmitir información. Si


buscamos por internet, podemos encontrar un artı́culo en Wikipedia [9], del que hemos extraı́do
una parte:

El Hewlett-Packard Instrument Bus (HP-IB) es un estándar bus de datos digital de corto


rango desarrollado por Hewlett-Packard en los años 1970 para conectar dispositivos de test y
medida (por ejemplo multı́metros, osciloscopios, etc) con dispositivos que los controlen como un
ordenador. Otros fabricantes copiaron el HP-IB, llamando a su implementación General-Purpose
Instrumentation Bus (GP-IB). En 1978 el bus fue estandarizado por el Institute of Electrical
and Electronics Engineers (IEEE) como el IEEE-488 (488.1).

El IEEE-488 permite que hasta 15 dispositivos inteligentes compartan un simple bus paralelo
de 8 bits, mediante conexión en cadena, con el dispositivo más lento determinando la velocidad
de transferencia. La máxima velocidad de transmisión está sobre 1 Mbps en el estándar original
y en 8 Mbps con IEEE-488.1-2003 (HS-488).

Las 16 lı́neas que componen el bus están agrupadas en tres grupos de acuerdo con sus
funciones: 8 de bus de datos, 3 de bus de control de transferencia de datos y 5 de bus general.
Algunas de ellas tienen retornos de corrientes común y otras tienen un retorno propio, lo que
provoca un aumento del número de lı́neas totales (8 masas).

En el caso que nos atañe en el laboratorio, en nuestro montaje, como veremos más adelante,
CAPÍTULO 2. ANTECEDENTES Y ESTADO DEL ARTE 14

tenemos conectados tres equipos:

Un PC que nos permite ejecutar la interfaz y en el que se ha desarrollado la misma.

Un analizador del que obtendremos los datos y podremos configurar mediante la interfaz.

Un generador de señales que también configuraremos desde la interfaz de forma remota.

En la figura 2.5 se pueden ver los diferentes cables utilizados para conectar los equipos y
formar un bus GPIB entre ellos.

Figura 2.5: Cables GPIB

A la izquierda,podemos ver un cable para conectar dos equipos de medición. A la derecha,


un cable para conectar un equipo de medición a un PC mediante USB.

2.4. Biblioteca VISA

En este apartado se va a hablar sobre la biblioteca que incluiremos en nuestro código, y con la
que podremos realizar la comunicación mediante el bus GPIB. Para que los equipos conectados al
bus se comuniquen con el PC necesitaremos una serie de comandos con un determinado formato,
que podremos encontrar en los manuales de cada uno de los dispositivos [4] [5] en su apartado
de programación de los equipos.

Para hacer llegar estos comandos, llamados SCPI (Standard Commands for Programmable
Instruments), a los dispositivos, la biblioteca VISA (Virtual Instrument Software Architecture)
nos proporciona una serie de funciones en lenguaje C++ que podremos incluir en nuestro código,
y que son las siguientes:

ViSession: Clase C++ que nos permite manejar la sesión que abriremos con el equipo
elegido mediante el bus GPIB.

ViStatus: Clase C++ con la que manejamos el estado de la sesión VISA. Se comporta
como un booleano en C++.
CAPÍTULO 2. ANTECEDENTES Y ESTADO DEL ARTE 15

viOpenDefaultRM(): Es una función que permite abrir una sesión VISA por defecto.
Su único parámetro de entrada es la dirección de un objeto de la clase ViSession que será el
que maneje dicha sesión. Devuelve 0 si la sesión se ha creado correctamente y algo distinto
de cero en otro caso.

viOpen(): Es una función que permite abrir una sesión VISA en el puerto que se le pase
por parámetro. Para poder abrir una sesión con cualquiera de los dispositivos del labora-
torio debemos saber qué dirección GPIB tienen. Esta función recibe el objeto ViSession
anterior, una cadena de caracteres con la dirección GPIB en el formato correcto (después
hablaremos de los formatos en el apartado 3.1) y la dirección de otro objeto de la clase
ViSession que será el que maneje la sesión iniciada en el puerto indicado y con el equipo
deseado. Esta función también devuelve 0 si la sesión se creó correctamente y algo distinto
en otro caso.

viClose(): Esta función cierra una sesión VISA que hubiera abierta. Recibe por parámetro
un objeto de la clase ViSession que maneje una sesión ya abierta anteriormente. Esta
función no devuelve nada.

viQueryf(): Permite enviar un comando y esperar una respuesta del equipo al que se
está enviando dicho comando. Sus parámetros de entrada son el objeto ViSession de la
sesión anteriormente abierta, una cadena de caracteres que indica el comando que se quiere
ejecutar y una cadena de caracteres donde se almacenarán los datos recibidos después del
comando. Esta función devuelve la cadena de caracteres que se le pasa como parámetro
rellena con los datos recibidos del aparato de medida.

viPrintf(): Permite enviar un comando como en el caso anterior, pero esta vez no espera
a que se le envı́e ningún dato. Sus parámetros de entrada son, como antes, un objeto
ViSession que maneje la sesión abierta y una cadena de caracteres que indique el comando
a enviar. Esta función no devuelve nada.

Para ayudarnos con la sintaxis y el aprendizaje de estos parámetros, en el PC del laboratorio


tenemos instalado un software de Agilent, que nos permite enviar directamente comandos tanto
al analizador como al generador. En la figura 2.6 podemos ver una captura de este software.
Nos permite también saber la dirección GPIB de cada equipo para poder comenzar la sesión y
comunicarnos con él.
CAPÍTULO 2. ANTECEDENTES Y ESTADO DEL ARTE 16

Figura 2.6: Aspecto del software de Agilent

También podría gustarte