el 05-14-2012 06:57 AM
Buenas,
tengo un sistema con unos sensores, las salidas de los cuales van a una SCB68 y estos datos son adquiridos con una PCI 6229 y posteriormente tratados un un software realizado con Labview 8.2 con el cual voy tomando muestras de las variaciones que se producen en los sensores.
El problema que tengo es que los valores de uno de los sensores varian muy rapido y no los visualizo correctamente con mi software, ya que el ciclo de ejecución de éste es de 100ms y por lo tanto, el mínimo periodo de guardado es el mismo. Es decir, el sensor con el que tengo problemas me tarda en variar de su valor inicial a su valor final 60ms, y si por ejemplo quisiera tomar 150muestras de dicha variación necesitaria guardar datos cada 0'4ms.....logicamente con un ciclo de ejecución del software de 100ms esto me resulta imposible.
Así que la opción creí que era modificar el software para poder reducir el ciclo de ejecución y por lo tanto, el tiempo de guardado lo suficiente para tomar las muestras.
Pero al tratarse de un sistema no Real Time el cual no adquiere y muestra en tiempo real, normalmente su limitación viene del procesador en el que son instalados, es decir, del pc. El pc, cuando estas aplicaciones corren, esta haciendo en paralelo otras tareas, lo que le resta capacidad de procesador.
Asi que me han comentado que me va a resultar algo imposible bajar tanto el tiempo de guardado puesto que el límite de respuesta de Windows está en torno los 10ms si el resto de procesos estan detenidos....
Esto es realmente así? alguien tiene alguna idea de si hay alguna opción o solución para éste problema la agradeceria.
05-14-2012 10:11 AM - editado 05-14-2012 10:15 AM
Hola.
Da la impresión de que pretendes leer una muestra de cada sensor por ciclo y procesarla, lo que no parece una buena idea.
En primer lugar, una estructura producer/consumer minimizaria el tiempo por ciclo de adquisición.
En segundo lugar, deberias adquirir varias muestras de cada vez usando adquisicion continua y procesarlas adecuadamente.
Si pones un ejemplo de la vi que quieres hacer y el tiempo minimo requerido, quizas podamos ayudarte.
Saludos.
Alipio.
el 05-16-2012 04:28 AM
Hola, Sitco4,
tal y como planteas la estructura del código, tienes en un mismo bucle la adquisición y el volcado a disco. La escritura o lectura es un proceso no determinista, tanto en Windows como en RT, y no se puede determinar su tiempo de ejecución. Este proceso ralentiza la ejecución del bucle de adquisición. En general hay que separar los procesos de adquisición de los de procesamiento de datos y volcado a disco. Para ello te propongo una aquitectura productor-consumidor que consta de los siguientes elementos:
1.- Bucle productor: realiza la adquisición de datos y los mete en una cola que es una posición de memoria. Al hacerlo, este bucle no ve afectada su velocidad.
2.- Bucle consumidor: recoge por orden los datos de esa cola y los procesa sin afectar al determinismo del bucle productor.
Puedes encontrar la plantilla de diseño en la pantalla de inicio de LabVIEW >> New >> More... >> VI >> From Template >> Frameworks >> Design Patterns >> Producer-Consumer (Data). Te adjunto un esqueleto de cómo tendría que ser tu aplicación.