el 03-29-2012 10:16 PM
Hola a todos!
No se si el título refleje bien la duda que quiero plantear... me explico:
Adquiero datos a través de una tarjeta USB-6210, provenientes de 2 AI. Utilizo la tarjeta y un PC. Estos datos los voy mostrando al mismo tiempo en un chart y en un indicador de aguja, en el panel frontal. El punto es que, cuando ya estoy mostrando un número grande de datos en el chart, el programa comienza a responder cada vez más lento, hasta arrojar un error de adquisición (lo que es lógico ya que repleta el buffer). Controlo los límites del eje X del Chart a través de un nodo de propiedad, ya que me interesa que la medición la muestre siempre al medio, esto es, al valor de tiempo actual le resto 10 s y lo ocupo como valor mínimo, al tiempo actual le agrego 10 s y lo utilizo como valor máximo (No me sirve de la forma usual en que el chart se llena desde el borde izquierdo al derecho).
Mi programa inicialmente estaba completamente dentro de un ciclo While (Adquisición - lectura - cálculo - registro). Lo que hice luego, fue utilizar la arquitectura productor-consumidor, para adquirir, calcular y presentar los datos en el productor, y grabar en el consumidor. Aún así, los indicadores de panel frontal no responden como lo espero.
El punto es que es sumamente necesario mostrar el chart con esa cantidad de datos... ¿Qué puedo hacer para no retrasar (tanto) lo que muestra el panel frontal, con respecto al valor real que estoy midiendo?
Utilizo LV 2011.
Gracias de antemano, saludos!
el 03-30-2012 12:59 AM
Hola.
Parece extraño que no puedas ya que la velocidad de adquisiscion de la 6210 es baja.
Si te parece, pon el vi que has hecho y veremos de ayudarte.
Saludos.
ANgazu.
el 03-30-2012 09:31 AM
Hola,
¿Cuál es la cantidad de datos que necesitas manejar? ¿Cuales son las características del computador que estas usando? Monitorea cuanta memoria RAM y virtual consume el proceso de tu aplicación desde que inicia hasta que te da el error.
Si haces click derecho en el Chart este tiene una opción que dice Chart History Length, ¿que valor estas usando allí?
A lo mejor lo que no pone lento no es la cantidad de datos sino las actualizaciones frecuentes de la escala, si pones el tiempo de -10s a +10s no seria bueno que lo cambies hasta q este cerca de tus +10s originales.
¿Cuál es el error de adquisición que te arroja?
¿Cómo sabes que está repleto el buffer? No se si puedes, pero intenta monitorear el tamaño del buffer para que veas si es que no procesas los datos suficientemente rápido, ¿de que tamaño es dicho buffer?
Trata de darnos toda la información que puedas para ayudarte a detectar el problema.
Saludos Cordiales,
03-30-2012 09:44 AM - editado 03-30-2012 09:46 AM
Hola Alipio,
Adjunto mi VI. Utilizo un rate de 10000 y un Nº of samples de 600.
Espero puedas ayudarme. Gracias de antemano.
Saludos,
EDIT: Luis, no alcancé a ver tu respuesta.
el 03-30-2012 10:57 AM
Hola Luis,
Estoy usando un Dell Vostro 230. Procesador: Pentium (R) Dual-Core 2.7GHz. Memoria RAM: 2 GB. SO: Windows 7 Professional 32 bits.
El tamaño del buffer es de 1000000 y lo defino cuando inicio la adquisición, con el VI DAQmx Configure Input Buffer.
Utilizo un rate de 10000 y un Nº of samples de 600. Cada ciclo tomo los 600 datos, los promedio y obtengo un valor. Acumulo valores por 7 ciclos, y luego saco el promedio, a ese valor le agrego unas constantes y obtengo el valor final, que muestro en los gráficos.
El Chart history Lenght en ambos gráficos es de 1024000.
Si fueran las actualizaciones de escala lo que pone lento al programa, de que otra forma podría lograr que el valor del gráfico se mantenga alejado del borde derecho? (este es un requerimiento de la persona a la que estoy desarrollando el programa)
Cualquier cosa me consultas, por favor.
Gracias de antemano,
Saludos!
el 03-30-2012 02:11 PM
Hola Samgut. Si pudieras subir los demás subVIs del programa, como comentamos por teléfono.
Saludos!
el 03-30-2012 02:12 PM
Hola.
Faltan las subvi. Trata de salvarlo como llb para incluir las subvi.
Saludos.
Alipio.
el 03-30-2012 02:21 PM
Hola,
Adjunto VI principal más todos los Sub VIs.
Gracias. Saludos,
03-30-2012 05:31 PM - editado 03-30-2012 05:32 PM
Hola Samuel.
Estuve revisando el VI, y te recomiendo que pases el procesamiento y el graficado de las señales al ciclo del consumidor. Como estas usando varios nodos de propiedad en el procesamiento y a la hora de graficar el programa se tarda más, por lo que el buffer de la DAQ se va llenando.
Al pasar el graficado al loop del consumidor vas a permitir que lea la DAQ más rápido, y los datos sin procesar se guarden mejor en el queue. Avisame que te parece la solución y si te ayuda en el problema.
De cualquier forma seguiré revisando el código para ver que más se puede hacer.
Saludos!
el 03-31-2012 07:34 AM
Hola.
Evidentemente, el tiempo se pierde en ajustar las escalas de los chart.
Una posible solucion es poner las escalas solas en un "while" y pasarle el tiempo por property node desde el lazo principal.
Te adjunto un grafico de como podrias hacerlo. Tendras que ajustar tiempos para que todo vaya fino. Quizas tengas que establecer algun sincronismo por ocurrencias o similar, pero de velocidad debe ir sobrado.
Saludos.
Alipio.