You are on page 1of 24

- 47 -

7. Estructura de programacin para el laboratorio JAVA.


7.1. Introduccin.
Despus de realizar el laboratorio remoto con el programa LabVIEW vimos la necesidad
de cambiar bruscamente de idea, aunque LabVIEW tiene la potencialidad suficiente para
desempear la funcin de motor para el laboratorio remoto observamos que no es
suficientemente flexible como para continuar desarrollndolo. Por este motivo se apost por
utilizar software libre para el desarrollo de esta nueva implementacin. El software libre tiene
generalmente varias ventajas fundamentales:
Su coste de utilizacin es normalmente cero o muy bajo.
Carecen de licencias de uso muy restrictivo.
Permiten total flexibilidad de programacin del usuario.
Para ello se utilizar JAVA, aunque ser necesario programar parte en C debido a que
los drivers usados para comunicarse con el osciloscopio que necesitamos utilizar estn en esa
plataforma.
Parte de este laboratorio basado en JAVA se elabor en el proyecto final de carrera de
Joaqun Manuel Surez Bentez llamado Arquitectura software para instrumentacin remota
basada en la API de JAVA JNI a travs del bus GPIB. Partiremos de este proyecto pero pronto
veremos que prcticamente se tendr que comenzar desde cero usando solamente algunos
trozos de cdigo. Conforme avanza este captulo se comentar los diversos cambios realizados.
7.2. Estructura del laboratorio original.
En este apartado estructuraremos el laboratorio creado en el proyecto anteriormente
indicado. Vemos que contiene dos partes diferenciadas, una es la encargada de comunicarse
con el instrumento de medida en cuestin, a travs de una librera dinmica realizada en C. La
otra parte esta realizada en JAVA e intenta reproducir el osciloscopio con todas sus funciones.
Para hacer comunicar estas dos partes es necesario tener un interfaz comn entre los dos
lenguajes, para ello se utilizar JNI.
Tambin es necesidad comunicar los comandos a los instrumentos, para ello se utilizar
el Bus GPIB que utiliza comandos SCPI estandarizados, creando una interfaz para tal cometido.
Hay que poner especial hincapi en observar que en este laboratorio solo se ha
desarrollado un elemento (osciloscopio) de tres que constituyen, en un inicio, todo el laboratorio.
Todos estos bloques se sintetizan en una interfaz de la siguiente estructura.
- 48 -
U
s
u
a
r
i
o
O
s
c
i
l
o
s
c
o
p
i
o
Figura 20. Arquitectura general de funcionamiento
7.2.1. JNI (Java Native Interface).
Debido a sus caractersticas multiplataforma y a su coste cero decidimos utilizar el
lenguaje de programacin JAVA
3
para el desarrollo de dicha implementacin. Es un lenguaje
multiplataforma, podemos usarlo en diversos sistemas operativos ya que hay versiones de Java
para casi todos los sistemas operativos. Es totalmente portable gracias a que es un lenguaje
compilado e interpretado, es decir, el cdigo Java es compilado solo una vez en un PC
cualquiera y el cdigo resultante es un cdigo independiente de la plataforma llamado
Bytecode
4
. Luego se usa un intrprete de Java distinto segn el sistema operativo que use
nuestra mquina. Ahora bien, cmo usar el lenguaje Java para que se comunique con la DLL
del bus GPIB? Java no puede usar directamente una DLL cualquiera simplemente cargndola.
Para solucionar esto se usa el lenguaje C como un lenguaje intermediario. Con el lenguaje C
podemos usar las libreras del bus GPIB e incluso directamente la DLL del adaptador.
Bien, ahora la pregunta es, cmo comunico Java con el lenguaje C? Usando una API
de Java llamada JNI. Esta API permite usar cdigo nativo, es decir, cdigo escrito en un lenguaje
distinto al de Java e insertarlo en nuestra aplicacin como si de Java se tratara.
3
Java es un lenguaje de programacin orientado a objetos desarrollado por Sun Microsystems a
principios de los aos 90. El lenguaje en s mismo toma mucha de su sintaxis de C y C++, pero tiene un
modelo de objetos ms simple y elimina herramientas de bajo nivel, que suelen inducir a muchos errores,
como la manipulacin directa de punteros o memoria.
4
El bytecode es un cdigo intermedio ms abstracto que el cdigo mquina. Habitualmente es tratado
como un fichero binario que contiene un programa ejecutable similar a un mdulo objeto, que es un
fichero binario producido por el compilador cuyo contenido es el cdigo objeto o cdigo mquina.
- 49 -
Figura 21. Comunicacin del lenguaje JAVA con lenguaje C
Esta API hace que podamos usar libreras dinmicas con JAVA, el inconveniente es que
hacemos que parte del sistema no tenga las ventajas de JAVA que comentamos anteriormente.
Sin embargo, actualmente es la mejor opcin encontrada hasta el momento.
7.2.2. Interconexin de equipos a travs del bus GPIB.
Necesitamos hacer una conexin desde los instrumentos a controlar hasta el PC,
inicialmente estos instrumentos se componen solamente de un osciloscopio.
Pero debido a motivos histricos se us el Bus GPIB para hacer el laboratorio remoto
anterior, por tanto, nos basaremos en el estudio que se ha hecho a este Bus para facilitar la
implementacin de este nuevo laboratorio.
Para hacer esta conexin usaremos un adaptador USB-GPIB de Agilent, el modelo
utilizado es el 82357A.
Figura 22. Adaptador USB-GPIB de Agilent
- 50 -
7.2.3. Interaccin entre comandos GPIB y el lenguaje C.
Una vez hemos realizado el conexionado, debemos instalar el software que nos viene
con el adaptador GPIB del fabricante. Este software viene incluido en un CD de instalacin y se
llama Agilent IO Libraries Suite, ste contiene una serie de programas y libreras de Agilent las
cuales nos permitirn acceder al dispositivo que queramos controlar. Entre todas las libreras que
incluye podemos destacar la existencia en el directorio include de una serie libreras que nos
sern tiles para hacer uso en nuestro trabajo del bus GPIB con el lenguaje C. De estas libreras
de dicho CD de instalacin solo nos van a interesar realmente 2 archivos.
El fichero de cabecera ni488.h
La librera dinmica GPIB-32.dll
El fichero ni488.h nos permite acceder mediante punteros a las funciones definidas en el
estndar GPIB. Las funciones en s mismas vienen recogidas en la librera dinmica GPIB-32.dll.
Una librera dinmica que contiene en tiempo de ejecucin todas las funciones del estndar IEEE
488.2. Esta librera dinmica es solo usable en Microsoft Windows.
Punt1 = funcion1;
Punt2 = funcion2;
...
funcion1 {

}
funcion2 {

}
ni488.h GPIB-32.dll
Figura 23. Relacin entre ni488.h y GPIB-32.dll
Ahora hay que hacer uso de las funciones GPIB definidas en la librera GPIB-32.dll
desde un programa escrito en C, nos queda definir qu funciones GPIB son las que se pueden
usar desde C y cuales son sus parmetros necesarios.
Las funciones GPIB que se van a usar en este proyecto se reducen concretamente a
cinco. Para una explicacin detallada de todas las funciones GPIB usables desde C revise el
manual de usuario de National Instruments, Function Reference NI-488.2.
- 51 -
Tabla 4. Funciones GPIB usadas
Nombre funcin Parmetros Objetivos
(int) ibdev
(int BdIndx, int pad, int sad, int tmo, int eot, int eos)
BdIndx Indica la interfaz de acceso para el dispositivo.
pad Direccin primaria GPIB del dispositivo.
sad Direccin secundaria del instrumento.
tmo Valor del temporizador de entrada/salida.
eot modo EOI del dispositivo.
eos carcter EOS y modos.
Obtener identificador del
instrumento.
(int) ibrd
(int ud, void *rdbuf, long count)
ud Descriptor de dispositivo.
count Nmero de bytes a ser ledos del bus GPIB.
Leer cadena de caracteres
por el bus GPIB.
Devuelve los errores
producidos en la lectura a
travs de la variable ibsta.
(int) ibwrt
(int ud, void *wrtbuf, long count)
ud Descriptor del dispositivo.
wrtbuf Direccin del buffer que contiene los bytes del
comando a escribir.
count Nmero de bytes a ser escritos.
Escribir cadena de
caracteres por el bus GPIB.
Devuelve los errores
producidos en la escritura a
travs de la variable ibsta.
(int) ibonl
(int ud, int v)
ud descriptor de dispositivo o interfaz.
v Indica que interfaz o dispositivo se pone offline.
Libera el identificador del
instrumento ponindolo
fuera de lnea.
Devuelve el estado del
instrumento a travs de la
variable ibsta.
(int) ibclr
(int ud)
ud descriptor de dispositivo o interfaz.
Reinicializa el instrumento
especificado en ud.
Devuelve el estado del
instrumento a travs de la
variable ibsta.
De esta forma, dadas estas funciones, los pasos para usar un instrumento pasa por:
1. Inicializar el instrumento usando la funcin ibdev.
2. Leer y/o escribir comandos GPIB a travs de las funciones GPIB usando ibrd y
ibwrt respectivamente.
3. Poner fuera de lnea el instrumento una vez hayamos terminado de usarlo,
usando ibonl.
7.2.4. Estudio del funcionamiento interno.
Veremos un esquema de como estara compuesta la arquitectura general de
funcionamiento del proyecto.
- 52 -
U
s
u
a
r
i
o
O
s
c
i
l
o
s
c
o
p
i
o
Figura 24. Arquitectura general de funcionamiento
En apartados anteriores hemos explicado como se construiran estructuralmente cada
bloque de carcter general, ahora tenemos que ser capaces de comprender el funcionamiento
de una forma global haciendo hincapi en el proyecto desarrollado en particular.
La parte programada en JAVA tiene un doble cometido, muestra en pantalla un entorno
grfico que se compone de una pantalla similar a la que tiene el osciloscopio y la botonera para
el manejo de dicho osciloscopio. Tambin hace la comunicacin con la parte realizada en C a
travs del la API denominada JNI.
La programacin en C es la que se encarga de enlazar con la librera dinmica (GPIB-
32.DLL) que contiene las funciones necesarias para comunicarse con el osciloscopio a travs del
bus GPIB. Estas funciones se han comentado anteriormente
7.2.4.1. Entorno JAVA.
Esta parte se puede dividir en diferentes bloques donde en cada bloque estn
contenidos varios archivos.
Figura 25. Diagrama de bloques del funcionamiento general
Explicaremos detalladamente cada bloque indicando que archivos estn involucrados y
que funcin desempea.
7.2.4.1.1. Interfaz grfica.
- 53 -
La interfaz grfica constituye el punto de interaccin grfica entre usuario y mquina.
Esta interfaz est constituida por 3 paneles.
Panel Izquierdo: panel de representacin de los datos procedentes del
osciloscopio.
Panel Derecho: panel de controles. Aqu aparecen representados los controles
ms habituales del osciloscopio. Los eventos de ratn provocados sobre estos
controles generan eventos que realizan acciones sobre el bus GPIB, ya sea
directa o indirectamente.
Panel Inferior: recoge los controles que se usan en los distintos mens del
osciloscopio.
Figura 26. Interfaz grfica del osciloscopio remoto
Para realizar grficamente estos paneles se ha hecho uso del paquete grfico Swing
que se encuentra en JAVA. La implementacin de la interfaz grfica viene recogida en los
archivos miosciloscopio.java, miosciloscopioaux.java, y miscontroles.java.
- 54 -
Figura 27. Archivos utilizados para crear la interfaz grfica
Miosciloscopio.java se encarga de inicializar todos los paneles y de crear la pantalla del
osciloscopio. Miosciloscopioaux.java incluye la funcionalidad de los 6 botones inferiores de la
pantalla comprobando y actualizando las variables bandera para moverse por los mens. De
esta clase surgen 6 clases, una por cada botn inferior. Cada una de estas clases es nombrada
con el formato bX siendo X un nmero entre 1 y 6. El panel derecho se encuentra
implementado en la clase miscontroles.java que incluye la composicin de todo el panel derecho
con los controles del osciloscopio.
La captura de los eventos de ratn realizados sobre el panel derecho e inferior es
realizada en la siguiente lista de archivos clasificados en subsistemas junto a una breve
descripcin.
Tabla 5. Archivos implicados en la captura de los eventos de ratn
Subsistema Archivos Implicados Descripcin
ActionBotonCursor1.java
ActionBotonCursor2.java
Controlan la activacin y
desactivacin del cursor 1 y/o
2.
ActionBotonCursors.java
Controla el sistema de
banderas para el despliegue
del men Cursors. Sistema de
cursores
ActionBotonDown.java
ActionBotonUp.java
ActionBotonLeft.java
ActionBotonRight.java
Comprueba la situacin de los
cursores (previamente mira si
estn activos para moverse o
no) y posteriormente los ajusta
convenientemente en base al
rango temporal o el rango de
tensin.
Medidas tensin ActionBotonMedidaVoltage.java
Controla el sistema de
banderas para el despliegue
del primer submen de Voltage
- 55 -
Medidas tiempo ActionBotonTime.java
Controla el sistema de
banderas para el despliegue
del primer submen de Time
Display ActionBotonDisplay.java
Controla el sistema de
banderas para el despliegue
del men Display
Autoscale ActionBotonAutoscale.java Invoca funcin Autoscale.
Activar/desactivar
canales
ActionBotonActivaCanal.java
Controla que canal se est
representando.
Delay
ActionBotonDelayLeft.java
ActionBotonDelayRight.java
Introduce un retraso a la
izquierda/derecha de la
posicin central en la seal de
entrada. La cantidad de retraso
introducido depende del rango
temporal en ese momento que
se calcula y se actualiza.
Posicin y ActionBotonPosY.java
Esta clase implementa las
acciones a realizar cuando se
pulsa el botn Posicin Y,
sumndole o restndole un
offset segn el caso.
ActionBotonTriggerDown.java
ActionBotonTriggerUp.java
Estas clases aumentan o
reducen progresivamente el
nivel de trigger.
Trigger
ActionBotonTriggerSource.java
Esta clase actualiza las
banderas para mostrar el
primer submen de fuentes de
trigger.
Slope/coupling
ActionBotonAcoples.java
Activa las banderas necesarias
para que el men
Slope/Coupling aparezca
Mode ActionBotonMode.java
Actualiza las banderas para
mostrar el men del botn
Mode
Botn time/div ActionBotonTimebase.java
Esta clase ajusta la base de
tiempos de nuestro
osciloscopio al que se indica
en el cajetn adjunto al botn
Time/div en el panel de
controles.
Botn volt/div ActionBotonVoltdivision.java
Esta clase ajusta la base de
tensin del canal de nuestro
osciloscopio al que se indica en
el cajetn adjunto al botn
Volt/div en el panel de controles
Botn holdoff ActionBotonHoldoff.java
Ajusta el valor de holdoff de
nuestro osciloscopio
Los eventos de ratn sobre los controles del panel derecho e inferior provocan la
ejecucin del bloque Auxiliar o directamente del bloque ControlGpib dependiendo del
evento de ratn realizado.
7.2.4.1.2. Auxiliar.
Este bloque es usado cuando las peticiones que se realicen desde la interfaz grfica
requieran un tratamiento previo y/o posterior de la informacin del osciloscopio en el entorno
- 56 -
Java. Este bloque se encarga de recoger las peticiones procedentes del tratamiento de la
captura de eventos de ratn (bloque Interfaz grfica) cuando dichas peticiones as lo requieran y
las transforma en otras peticiones aptas para su envo por el bus GPIB (bloque ControlGpib). El
bloque auxiliar se comunicar con el bloque ControlGpib indicndole cuales de las funciones de
dicho bloque quiere realizar y con qu parmetros.
El bloque auxiliar viene recogido en el fichero miclase.java.
7.2.4.1.3. Control Gpib.
Este bloque recoge las peticiones aptas desde Java que requieran el uso del bus GPIB y
las enva al bus GPIB en formato adecuado. La funcionalidad de este bloque viene recogida en
los ficheros ControlGpib.java y ControlGpib.h.
Dentro del bloque ControlGpib cabe destacar la clase ControlGpib.java. Esta clase
incluye la declaracin de todas las funciones escritas en lenguaje nativo C y el nombre de la
librera dinmica desde donde se cargar el contenido de las susodichas funciones.
7.2.4.2. Librera dinmica en C (DLL).
Esta parte es la ms dependiente tanto del sistema operativo como del propio elemento
de medida, por tanto es la pieza ms delicada de todo el sistema. Se encarga de comunicarse
con el driver del bus GPIB a travs de las funciones GPIB contenidas en la librera dinmica
GPIB-32.DLL, estas funciones se han comentado anteriormente.
Para usar estas funciones en la interfaz JAVA hay que hacer uso del mdulo JNI ya que
se tratan de funciones escritas en C. Esta parte de la comunicacin se encarga el bloque
ControlGPIB.
En nuestro caso se crea una librera dinmica llamada migpib.dll y contiene 9 funciones
que se encargan de transmitir y recibir informacin a travs del bus GPIB mediante las 5
funciones GPIB que usaremos de GPIB-32.DLL. Cada una de estas funciones tiene una
funcionalidad distinta, algunas de ellas solo es necesario transmitir el comando al bus pero en
otras precisamos obtener algn valor leyendo de ste para modificarlo en la interfaz grfica.
A continuacin mostraremos en una tabla estas 9 funciones indicando si es necesaria
respuesta y una breve descripcin de su funcionalidad.
- 57 -
Tabla 6. Funciones de migpib.dll
Nombre funcin Respuesta? Funcionalidad
ObtenerOnda
S Pide los puntos que generan la forma de onda en la
pantalla del osciloscopio, en funcin del canal. Se
obtiene un Array con los puntos requeridos.
Autoscale No Impone el comando para realizar el autoescalado.
Obtenermedidas S
Dependiendo de la variable opcion se pide al bus una
medida diferente dentro de las opciones disponibles en
el osciloscopio. Devuelve un string con el valor
requerido.
imponercomando No
Impone el comando GPIB que se le ha pasado en los
parmetros como un string.
solicitarcomando S
Impone el comando GPIB que se le ha pasado al bus
GPIB y se lee de l una respuesta que se pasa como un
string.
solicitarestado S
Impone el comando GPIB que se le ha pasado al bus
GPIB y se lee de l, si recibe respuesta se manda
true, si no false.
PideCursor S
Pide la posicin de los cursores tanto verticales
(tensin), como horizontales (tiempo) y lo devuelve en
un string.
PoneCursor S
Indica al osciloscopio en que posicin se tienen que
colocar los cursores verticales (de tensin) y
horizontales (de tiempo).
AjusteDisplay No Impone el tipo de adquisicin que se quiere hacer.
Figura 28. Como se observa se disponen de un nmero elevado de funciones para gestionar el bus GPIB.
7.3. Carencias y necesidad de mejora.
El sistema completo tiene funcionalidad al 100% y es capaz de manejar el osciloscopio
como si el manejo estuviera hacindose localmente, sin embargo tiene varios puntos que
suponen un handicap a la hora de la gestin y manutencin del recurso. Todo esto es debido a la
poca estructuracin del proyecto y la poca generalidad de ste, realizndose exclusivamente
para un instrumento del laboratorio hacindose prcticamente imposible la reutilizacin de algn
fragmento de cdigo programado.
Tenemos la necesidad de ampliar el sistema hacia otros elementos del laboratorio,
actualmente se encuentra implementado solamente un entorno para un osciloscopio, el modelo
para el que se ha realizado es el HP 54603B. Sera interesante implementar un generador de
ondas y una fuente de alimentacin, incluso otro modelo de osciloscopio, intentando modificar lo
mnimo posible el cdigo.
- 58 -
Figura 29. Osciloscopio que se encuentra implementado actualmente
Nos vemos imposibilitados para realizar esta accin ya que el cdigo escrito no tiene
ninguna modularidad. La parte grfica y la parte de comunicacin con el controlador GPIB estn
entremezcladas y para realizar algn cambio es necesario modificarlo todo. Por tanto la
ampliacin hacia otros instrumentos de medida es demasiado complicada si utilizamos el
sistema empleado actualmente.
Una posible opcin para evitar este molesto problema es diferenciar la interfaz grfica
con la de comunicacin, as en el momento de correccin o ampliacin no ser necesario buscar
en un largo cdigo complejo y desestructurado.
La idea es tener una parte comn a todos los instrumentos y otra especfica que forme la
interfaz grfica. La parte comn se encargar de comunicar los comandos GPIB a dicho bus,
esto se hace de la misma forma independientemente del instrumento con el que se comunique.
Por tanto tendramos tantas interfaces como instrumentos dispongamos y solamente un
entorno de comunicacin con el bus GPIB. En este proyecto actualmente es imposible
independizar debido a que los comandos GPIB se generan cuando se pulsa algn botn en la
interfaz grfica.
A continuacin se muestra un esquema de cmo se comportara el sistema cuando se
conectan varios elementos al bus GPIB.
- 59 -
Figura 30. Ejemplo de modulacin conectando 3 elementos al bus GPIB
Se ve de forma clara que solamente necesitamos crear una interfaz grfica para
introducir un nuevo elemento en nuestro laboratorio remoto. De hecho, se ha pensado en
introducir tambin un analizador lgico y un analizador de espectros.
Al modular y separar funcionalidad se pueden independizar las diferentes partes, as se
podra ejecutar la interfaz grfica en cualquier otro ordenador, como por ejemplo un cliente.
Hasta se puede dar otra vuelta de tuerca ya que la interfaz grfica se puede programar en otro
lenguaje distinto a JAVA, con solamente definir un protocolo de comunicacin entre estos
elementos.
En el captulo orientado al Bus GPIB se comenta que los estndares SCPI no
especifican el lenguaje de los comandos GPIB sino un estilo de formato, es decir, los comandos
SCPI no son iguales en todos los instrumentos, solamente es necesario que sigan unos patrones
que se especifican en las normas.
Por tanto, cada vez que tengamos un nuevo elemento necesitamos un juego de
comandos nuevos y por lo general ser diferente a cualquier otro, aunque conserven la forma
cada empresa crea sus comandos GPIB propios.
Esto es contraproducente en nuestro actual sistema ya que esos comandos GPIB se
generan dentro del cdigo mezclndose con el interfaz grfico. Cualquier adaptacin a un nuevo
instrumento partiendo del que existe se convierte en una ardua y larga tarea para cualquier
programador.
La idea ms sencilla a desarrollar trata de independizar estos comandos GPIB a la
programacin, un ejemplo de ello puede ser almacenarlos en un archivo de texto, por tanto
cada instrumento dispondra de un archivo que contuviera sus comandos especficos. As si
cambiamos de elemento solamente tendremos que cambiar de fichero para solucionar el
problema.
- 60 -
En la actualidad, en el sistema, la parte programada en C tiene mucho peso con
respecto a la totalidad del mismo. Se ha comprobado que es necesario pasar alguna
funcionalidad de esta parte a la de JAVA y hacer un poco ms ligero el fragmento del sistema
generado en C.
La idea de utilizar JAVA para realizar el laboratorio surge al tener la obligacin moral de
inculcar la disciplina de software libre GPL.
JAVA junto con la mayora de programas para su desarrollo aparecen bajo esta licencia,
como por ejemplo Eclipse
5
, sin embargo tenemos que tener especial cuidado porque los
programas para desarrollar el lenguaje C son de licencia privada en su mayora, de hecho en el
proyecto anterior se utiliz Borland C++ que tiene licencia privativa perteneciente a Borland
Software Corporation
6
.
Se opt por cambiar este entorno de desarrollo, para ello se hizo una bsqueda y se
seleccion un programa llamado Dev-C++ de la empresa de software Bloodshed. Ya tenemos
la certeza que estamos realizando un proyecto de coste cero debido a los programas software
libre.
7.4. Estructura del nuevo laboratorio.
Viendo todas las carencias de la estructura del proyecto original se opt por hacer un
desarrollo de un nuevo laboratorio mucho ms estructurado, orientado a una mejora importante
basado en la generalidad para hacer un uso de ste lo ms independientemente posible del
instrumento y del sistema operativo.
La solucin consiste en disminuir peso a la parte programada en C que se comunica con
los drivers del bus GPIB y en dividir la parte de JAVA en dos, una para la comunicacin de
forma generalizada para todos los instrumentos de medida que se puedan conectar al bus GPIB
y la otra parte se encarga de realizar la interfaz grfica de cada instrumento especfico.
As tambin podremos tener solamente el entorno grfico en el cliente, estando la parte
de comunicacin en el servidor. Veremos a continuacin una grfica mostrando dicha
configuracin.
5
Eclipse es un entorno de desarrollo integrado de cdigo abierto independiente de una plataforma para desarrollar
lo que el proyecto llama "Aplicaciones de Cliente Enriquecido", opuesto a las aplicaciones "Cliente-liviano" basadas
en navegadores. Esta plataforma, tpicamente ha sido usada para desarrollar entornos de desarrollo integrados,
como el IDE de Java llamado Java Development Toolkit (JDT) y el compilador (ECJ) que se entrega como parte de
Eclipse (y que son usados tambin para desarrollar el mismo Eclipse).
6
Borland Software Corporation (anteriormente Borland International, Inc.) es una compaa de software, ubicada en
Scotts Valley, California, Estados Unidos, conocida sobre todo por sus herramientas de programacin,
especialmente Turbo Pascal que evolucion hasta el actual Delphi. Borland naci en 1983 cuando el joven dans
- 61 -
Figura 31. Arquitectura general del nuevo laboratorio
Es importante darse cuenta que tenemos ahora dos tipos de comunicacin, una que se
encarga del bus GPIB usando el controlador GPIB y otra que trata de comunicarse con el
entorno grfico a travs de Internet, en esta parte haremos uso de ficheros que hacen de buffer
tanto de entrada como de salida. De esta forma hacemos ms verstil nuestro programa ya que
la parte del cliente que contiene el entorno grfico puede estar programada en cualquier
tecnologa, la hacemos independiente del servidor.
Figura 32. Bloques de uso de nuestro programa en el servidor
Se va a realizar una exposicin del programa realizado de forma gradual, paso a paso
comenzando por el instrumento y terminando por el cliente.
- 62 -
7.4.1. Programas utilizados para el desarrollo de la aplicacin.
Como se coment en el apartado anterior, uno de los motivos importantes para realizar
este proyecto es usar programas con licencia GPL, es decir, que sean software libre. Se ha
conseguido este propsito ya que todos los programas usados son software libre.
Primeramente con el adaptador USB-GPIB debera venir mediante algn soporte digital
los drivers necesarios para controlarlo. En nuestro caso estamos usando uno de la organizacin
Agilent y viene con un CD que contiene el Agilent IO Library Suite 14.0, se trata de un conjunto
de programas, libreras y documentacin necesarios para poder controlar cualquier instrumento
conectado bajo esta interfaz.
Para comunicarse con el controlador del bus GPIB necesitamos desarrollar un programa
en C. El motivo de por qu se tiene que hacer est explicado en captulos anteriores.
Para desarrollarlo necesitamos un entorno de desarrollo integrado ya que proveen un
marco de trabajo amigable para la mayora de los lenguajes de programacin. En proyectos
anteriores se us un programa con licencia privada, nuestro deseo es trabajar con licencias
gratuitas con software libre por tanto a partir de aqu se usar Dev-C++.
MinGW es el compilador que usa este entorno de desarrollo, es la implementacin de
los compiladores GCC para la plataforma Win32, que permite migrar la capacidad de este
compilador en entornos Windows. Es un fork de Cygwin en su versin 1.3.3. Adems MinGW
incluye un conjunto de la API de Win32, permitiendo un desarrollo de aplicaciones nativas para
esa plataforma, pudiendo generar ejecutables y libreras usando la API de Windows.
Para el desarrollo JAVA sera conveniente tambin utilizar un entorno de desarrollo, para
ello disponemos de infinidad de posibilidades. Debido a su extenso uso y su elevada distribucin
en Internet se ha optado por usar Eclipse, actualmente es el IDE ms usado de las
caractersticas que se est buscando.
Vimos que en el laboratorio creado se estableca una librera dinmica (DLL) para poder
controlar las funciones que gestionan el bus GPIB. Su nombre es migpib.dll, conservaremos
ese archivo aunque ser totalmente distinto.
La funcionalidad de esta parte es transmitir los comandos GPIB a travs de unas
funciones GPIB, hay dos mtodos, imponer un comando al bus y hacer una pregunta, en el
primero solamente hay que mandar el comando y en el segundo hay que mandarlo y leer la
respuesta del mismo bus.
Por tanto se pens en realizar solamente dos funciones, una que cumpla la funcionalidad
de imponer comando y otra que sea de pregunta al bus.
- 63 -
G
P
I
B
G
P
I
B
Figura 33. Nuevas funciones para migpib.dll
Comentaremos las funciones que se han realizado. Se trata de dos funciones, llamadas
Escribir y EscribirLeer.
Tabla 7. Nuevas funciones de migpib.dll
Nombre funcin Respuesta? Funcionalidad
Escribir No
Impone el comando GPIB que se le ha pasado en los
parmetros como un string.
EscribirLeer S
Impone el comando GPIB que se le ha pasado al bus
GPIB y se lee de l una respuesta que se pasa como un
string.
La funcin Escribir es simple, al principio carga la librera que tiene las funciones GPIB y
luego escribe en el bus GPIB con una de esas funciones. No necesita devolver nada ya que
solamente se trata de una imposicin.
En cambio, la funcin EscribirLeer es bastante ms compleja, aunque lo nico que
cambia es que despus de escribir la peticin debemos leer tantas veces haga falta hasta
terminar la respuesta. Al final se devuelve esa respuesta.
7.4.2. Clases comando e instrumento.
La orientacin a objetos promete mejoras de amplio alcance en la forma de diseo,
desarrollo y mantenimiento del software ofreciendo una solucin a largo plazo a los problemas y
preocupaciones que han existido desde el comienzo en el desarrollo de software: la falta de
portabilidad del cdigo y reusabilidad, cdigo que es difcil de modificar, ciclos de desarrollo
largos y tcnicas de codificacin no intuitivas.
En nuestro programa vamos a tener dos clases, inicialmente, que sern el comando que
se manda al bus y el instrumento al que se manda. Vemos que se asemeja bastante a la
realidad.
Crearemos tantos objetos instrumentos como instrumentos en la realidad haya y tantos
objetos comandos como buses tengamos a los que mandar comandos GPIB.
- 64 -
Vemos una grfica que indica la estructura que hemos creado para crear un instrumento
y ser capaces de mandar comandos GPIB.
Pantalla
Comando Migpib.dll
mandar (instrumento, comando)
Escribir (interfaz, comando)
EscribirLeer (interfaz, comando)
Instrumento
obtenerIDN ()
Int interfaz
Int dirppal
Int dirsec
Int index
String identificador
Boolean estado
ControlGpib
compruebaEstado ()
Figura 34. Diagrama con las clases Instrumento y Comando para comunicacin con el bus GPIB
La clase comando solamente contiene un mtodo que se encarga de mandar el
comando que especifiquemos al instrumento que hayamos creado con antelacin. Para crear
ese instrumento existe la clase instrumento que contiene las caractersticas propias que
diferencian a cada elemento. Esta funcin mandar usa las definiciones que se hacen en
ControlGpib.java de las funciones que programamos en C.
7.4.3. Ventana para comunicacin de forma local.
Existe una ventana de comunicacin para hacerlo de forma local teniendo as la
posibilidad de realizar pruebas y comprobar el comportamiento en el mismo servidor.
Este programa solamente utiliza las dos clases anteriormente explicadas, instrumento y
comando, se crean los tres instrumentos que componen actualmente el laboratorio con sus
propiedades y con un objeto de la clase comando mandamos comandos GPIB de cada uno de
los instrumentos.
Para esta sencilla aplicacin es suficiente con usar solamente AWT. Mostraremos a
continuacin la ventana generada.
- 65 -
Figura 35. Ventana de comunicacin local
Los instrumentos implementados son el osciloscopio (Agilent DSO3062A), el generador
de funciones (Agilent 3320A) y la fuente de alimentacin (Agilent E3631A). En la zona inferior
de la ventana se hace la seleccin del instrumento al que mandar los comandos y en la zona
superior se manda los comandos y se recibe el resultado que se obtiene.
Mostraremos a continuacin un esquema del funcionamiento del programa, haciendo
hincapi en los objetos creados y la zona que usa cada uno de ellos.
Figura 36. Esquema del funcionamiento del programa
7.4.4. Uso de properties para el juego de instrucciones.
El juego de instrucciones de cada instrumento es grande y en la mayora de los casos
diferente para cada elemento, tener este juego de instrucciones en el cdigo es un grave error,
ya que cada modificacin implicara la recompilacin del cdigo.
Sera importante tener almacenado ese juego de instrucciones en un archivo de texto
para cada instrumento, as solamente trabajaremos con la creacin o modificacin de esos
archivos para hacer modificaciones en el juego de instrucciones.
- 66 -
Para hacer esto las APIs de Java disponen de una clase llamada Properties que nos
permite hacer todo lo que queremos, que es crear ficheros de configuracin complejos y
manejarlos con facilidad. Tanto la estructura de la clase como la sintaxis de los ficheros de
propiedades estn comentadas en la documentacin del API y puede ser consultada online.
Para cargar estos archivos hemos creado una clase que se encarga de cargar con el
nombre que le hayamos indicado. Se trata de la clase Instrucciones, en ella solamente existe
un mtodo que se encarga de cargar el objeto juego de clase properties que hemos creado con
anterioridad.
Figura 37. Adiccin de la clase Instrucciones
Cada vez que creamos un objeto Instrumento hacemos la carga del archivo properties
perteneciente a dicho instrumento a travs del mtodo carga que se encuentra en la clase
Instrucciones. Veremos como se ha implementado el programa creado para la comunicacin
local.
- 67 -
Properties
Pantalla
Comando Migpib.dll
Escribir (interfaz, comando)
EscribirLeer (interfaz, comando)
Instrumento
ControlGpib
osciloscopio
comando
generadorOnda
fuenteAlimentacion
Instrucciones
juego
Agilent,
3320A.
gpib
Agilent,
E3631A.
gpib
Agilent,
DSO3062A.
gpib
Figura 38. Uso de properties en el programa de comunicacin local
7.4.5. Comunicacin con el cliente a travs de ficheros.
El sistema tiene un funcionamiento local, necesitamos hacer una comunicacin con otro
ordenador para que el funcionamiento sea remoto. Hay que ser capaz de hacer lo mismo que
hacamos con la ventana local pero a travs de un ordenador cliente.
La ventana de comunicacin local la dejamos apartada para usos de gestin en el
servidor y comprobacin, necesitamos un programa principal nuevo que haga la gestin de la
comunicacin. Es decir, un main que gestione la comunicacin con el instrumento remoto y sea
capaz de hacrselo saber al instrumento real mediante el mismo mtodo usado en la
comunicacin local, aprovechando las mismas clases y objetos que creamos con anterioridad.
La forma ms fcil de hacerlo es mediante archivos de texto que funcionan como
buffer de comandos para los diferentes instrumentos. Esta manera es la ms genrica posible,
cualquier lenguaje de programacin puede leer y escribir archivos. Habr dos archivos, uno de
entrada y otro de salida, en el de entrada el instrumento remoto volcar los comandos que
quiera que acten sobre el instrumento real, y el en el de salida el bus GPIB escribir los
resultados de las preguntas que se le han pedido.
- 68 -
La parte de comunicacin JAVA y la de la librera dinmica en C no debemos cambiarla
ya que est pensada de manera global para usarse con cualquier instrumento y tecnologa.
Se tendr que crear una clase main que cree los instrumentos y cargue sus
instrucciones, a continuacin lea del buffer de entrada, gestione esa informacin dependiendo de
lo que requiera y devuelva en el buffer de salida el resultado si es necesario. Mostraremos la
estructura de las clases creadas, se observar que prcticamente es la misma forma que
anteriormente ya que la nica diferencia es que leemos de un archivo en vez de un campo en
una ventana.
Figura 39. Estructura de las clases del programa final
Como en nuestro caso tenemos 3 instrumentos para la creacin del laboratorio remoto,
se ha realizado este programa con estos instrumentos, en un futuro prximo se podr ir
ampliando a ms elementos. A continuacin se muestra una figura con los objetos que hemos
tenido que crear de cada clase para el funcionamiento de este laboratorio en concreto.
- 69 -
Properties
Comunicacion
Comando Migpib.dll
Escribir (interfaz, comando)
EscribirLeer (interfaz, comando)
Instrumento
ControlGpib
osciloscopio
comando
generadorOnda
fuenteAlimentacion
Instrucciones
juego
Agilent,
3320A.
gpib
Agilent,
E3631A.
gpib
Agilent,
DSO3062A.
gpib
Main
Osciloscopio
F. Alimentacion
G. Ondas
In.buffer
Out.buffer
Comunicacin
remota
Figura 40. Funcionamiento del programa final para el laboratorio remoto con 3 instrumentos
Este es a grosso modo el programa final creado, se pueden hacer mejoras pero estarn
explicadas en el ltimo apartado, funcionalmente es muy bueno porque gestiona cualquier
instrumento con bus GPIB y podremos cargar su juego de instrucciones sin tener que volver a
reprogramar.
7.5. Mejoras realizadas.
A la hora de comenzar a hacer este laboratorio con tecnologa JAVA nos encontramos
un proyecto totalmente funcional, pero con un gran fallo, debido a su exclusividad, a la hora de
plantearse ampliar los elementos que componen el laboratorio desechamos continuar o adaptar
este entramado ilegible de cdigo.
Realmente solamente nos era til la parte realizada en C y su comunicacin con JAVA,
la ya referenciada JNI, a partir de esto se comenz a realizar un programa totalmente nuevo con
unas caractersticas superiores a su antecesor.
Este apartado resumir de forma global y breve cuales han sido las mejoras con
respecto a este anterior programa.
Primeramente se comentar que todo el desarrollo se ha hecho con programas software
libre, por tanto, el coste en este aspecto es cero.
- 70 -
Como prioridad tenamos hacer esta aplicacin abierta, es decir, hacer el acceso al bus
GPIB de forma genrica para que en cualquier momento otro elemento con bus GPIB pueda ser
aadido al programa y monitorizarlo con ste.
Otro tema importante es la portabilidad, la aplicacin anterior contena mucha
programacin en C, lo cual lo hace un programa ms ligero (debido a la rapidez del lenguaje)
pero menos portable. Debemos dar ms peso a la parte de JAVA y hacer ms ligera la de C,
para que a la hora de portar la aplicacin necesitemos hacer los mnimos cambios posibles. Una
de las consecuencias es que el programa se har ms lento ya que JAVA es un lenguaje
interpretado, actualmente este problema no tiene mucha influencia debido a la evolucin
tecnolgica que estn sufriendo los ordenadores.
Por todas estas causas se ha realizado esta aplicacin, con las caractersticas de
versatilidad, mxima portabilidad, fcilmente ampliable debido a su generalidad.

You might also like