Un graficador continuo virtual
Margarita Ezpeleta (i); Jorge Fiora(ii)
(i)INTI-Programa de Fortalecimiento de Centros (ii)INTI-Energía
Introducción Se presenta un objeto computacional que funciona como un graficador continuo, es decir como una cinta de papel indefinida sobre la que se representan diversas cantidades como función del tiempo. El objeto presenta una ventana donde puede verse parte del “papel” el que es posible “deslizar” arbitrariamente.
Este objeto intenta ser parte de una plataforma para la construcción de sistemas de adquisición de datos en tiempo real.
Asimismo es posible
— realizar anotaciones como se harían sobre una cinta de papel real (P.ej. “Aquí se prende el quemador”)
— insertar automáticamente textos de alarma (por ejemplo “Temperatura >50C ”)
— definir marcas o señaladores para acceder directamente a un lugar.
— representar cada curva en una escala propia
— controlar el aspecto y visibilidad de cada curva individualmente
— medir gráficamente las cantidades representadas
— variar arbitrariamente la escala de tiempo
Descripción del objeto Este control está diseñado para emular las funciones de un graficador continuo sobre papel. En una ventana se muestra una parte de este papel que puede deslizarse para mostrar distintos sectores.
Si bien los deslizamientos pueden ser verticales u horizontales, está principalmente diseñado para deslizamientos horizontales, es decir el código es más eficiente en estos deslizamientos.
Los objetos a graficar deben ser agregados a alguna de las colecciones públicas que el control expone
Tabla I Propiedades y métodos del graficador
Propiedades Curvas Leyendas MarcasX MarcasY AutoDeslizar DesplazamientoX DesplazamientoY Actualizado
Métodos DibujarMarcasX DibujarMarcasY DibujarCurvas DibujarLeyendas Refresh
Los objetos de la clase Curva tienden a describir poligonales, a través de SerieX y SerieY que son a su vez objetos de una clase llamada oTira donde se almacenan series de valores numéricos (double). La clase oTira provee la funcionalidad para agregar valores, concatenar series de valores, ordenarlos, etc., de una manera sencilla. Además el objeto Curva almacena información de escala y características del trazo. Provee además métodos para generar automáticamente la representación de una función calculada.
La Leyenda es un objeto que especifica un texto a ser escrito en un punto (X , Y) o una serie de puntos (SerieX , SerieY) . Puede utilizarse como alarma, por ejemplo “Temperatura alta”, y el formato de salida es controlable. Estas leyendas pueden eventualmente editarse en forma automática con lo cual proporcionan una manera en la que un operador anota sobre el gráfico distintos eventos u observaciones.
Las MarcaX son líneas verticales que se dibujan en una SerieX de valores (o un valor X), análogamente las MarcaY son líneas horizontales en una serie de valores SerieY (o un valor Y).
La propiedad DesplazamientoX permite deslizar el gráfico horizontalmente. Un deslizamiento igual a 1 corresponde a un desplazamiento del grafico hacia la izquierda igual al ancho de la ventana de visión, de manera que se ve lo que antes se encontraba a la
INSTITUTO NACIONAL DE TECNOLOGÍA INDUSTRIAL
1
derecha. Es decir si se quiere ver “lo que está a la derecha” hay que desplazar positivamente y negativamente para ver “lo que está a la izquierda”. Análogamente funciona el DesplazamientoY, un desplazamiento igual a 1 corresponde a un deslizamiento del gráfico hacia debajo igual a la altura de la ventana de visión, con lo cual se ve lo que “se encontraba arriba”.
La actualización del gráfico se produce cada vez que el sistema operativo necesita refrescar la ventana o al llamar explicitamente al método Refresh. De esta manera es posible realizar una serie de modificaciones sin redibujar en cada una de ellas, por ejemplo si se agregan puntos a una serie de curvas no se querrá actualizar hasta que hayan sido todos agregados, esto tendrá lugar al llamar al método Refresh.
Para determinar si el gráfico se encuentra o no actualizado se dispone de la propiedad Actualizado que se hace verdadera cada vez que se dibuja, de manera que dándole valor falso, lo que hay que hacer explícitamente, puede verse si se ha dibujado alguna vez desde ese momento.
Se implantó un método para aumentar la velocidad de dibujo. Las curvas representadas se dan como poligonales (Xi,Yi), donde se supone que las Xi forman una sucesión no decreciente. Esto no es estrictamente necesario pero como se verá si esta condición no se cumple pueden obtenerse representaciones inadecuadas de los objetos. En efecto la mecánica de dibujo es precedida de una selección de puntos visibles para aumentar la velocidad de la siguiente manera : se barre la sucesión de los Xi hasta encontrar el primer punto tal que su representación no se encuentre a la derecha del borde izquierdo de la ventana de visión: si no existe un tal punto toda la curva está a la derecha y no se dibuja. Si se encuentra, se considera el punto anterior (si lo hubiere) y se comienza entonces a dibujar hasta el primer punto cuya coordenada X quede a la derecha del borde derecho de la ventana o bien hasta agotar los puntos. Si las abscisas son crecientes este método dibuja efectivamente la parte visible de la poligonal pero si esta “retrocediera” ulteriormente después de salir del campo de visión para entrar en él nuevamente, esta parte no sería dibujada
Fig. 1: El graficador deslizante en una aplicación de control de humedad.
Un ejemplo de uso del graficador es la aplicación de control de humedad que se muestra en la figura 1. La línea vertical negra señala una “marca “ : a su lado se indican los valores de las magnitudes graficadas y un rótulo. Este tipo de marcas puede usarse como un señalador de lugar al que puede accederse sencillamente mediante un menú del tipo “ir a tal rótulo”. Las marcas pueden generarse automáticamente desde el programa, o pueden ser anotaciones del usuario. La barra deslizante, abajo, permite desplazar el gráfico continuamente. El “largo” máximo del gráfico depende solamente de la memoria disponible resultando en general prácticamente infinito.
Para mayor información contactarse con: Jorge Fiora – mingo@inti.gov.ar
Resultados Se dispone de una versión en funcionamiento. Esta versión esta realizada como un control Activex que corre bajo Windows 98 o posterior.
INSTITUTO NACIONAL DE TECNOLOGÍA INDUSTRIAL
2
Ver+/-