el 01-20-2012 07:53 AM
Hola a todos. Debo almacenar los datos de una adquisicion en un fichero de texto, para tratarlos con matlab. de forma que tenga los valores de tiempo en una columna y los voltages adquiridos en las siguientes columnas. He hecho una prueba y almacena los datos correctamente, pero los tiempos no.
Si en el DQmx Read le doy por ejemplo 100 samples por canal, lee 100 muestras y luego otras 100 y asi... y en cada iteracion los tiempos comienzan de nuevo.
0,0000E+0 -5,4795E-2 -2,3887E-2 -5,0520E-2
1,0000E-3 -6,7618E-2 -3,8025E-2 -6,2686E-2
2,0000E-3 -7,7483E-2 -4,8219E-2 -7,2551E-2
3,0000E-3 -8,2086E-2 -5,4466E-2-7,6496E-2
4,0000E-3 -8,1757E-2 -5,5781E-2 -7,5510E-2
........
........
........
0,0000E+0 -2,0927E-2 8,3369E-3 -1,8954E-2
1,0000E-3-3,8025E-2 -8,4324E-3 -3,6053E-2
........
........
Si pongo este valor en -1, se supone que va tomando todas las muestras segun esten disponibles, pero obtengo los mismo que antes con la diferencia que en vez de empezar los tiempos cada 100 muestras lo hace de forma aleatoria.
No se si es cosa del timeout, lo puesto a -1 tambien para que espere indefinidamente, pero parece que no tiene nada que ver. La cosa seria que me matenga bien los tiempos a lo largo de todo el fichero. Adjunto el VI.
Muchas gracias
el 02-02-2012 09:25 AM
Hola!
Te dejo una liga que contiene un ejemplo que puede ayudarte a resolver tu problema. El ciclo que te recomendaría utilizar es el tercero, el que abre y cierra el archivo fuera del while loop. Esto hace mas eficiente tu aplicación, ya que realizas la adquisición dentro del mismo ciclo.
https://decibel.ni.com/content/docs/DOC-4831
Espero que te sirva!!
Saludos,
Anuar Rojas
02-03-2012 03:27 PM - editado 02-03-2012 03:30 PM
hola, bueno, primero, los datos que estas guardando no son compatibles con el formato que maneja matlab, recuerda que matlab usa el "." y no la "," para la representacion de valores decimales (recuerda que la "," es un separador de columnas), para arreglar esto usa los vi array to spreadsheet string.vi para hacer tu vector una cadena de texto y search and replace string.vi donde el vector de busqueda es una constante "," y el vector reemplazo es una constante "." y crea una constante verdadera para la entrada replace all?
lo otro, una sugerencia, usa el vi daq assistant.vi, usa la configuracion continuous o n samples, con estas sabras que el tiempo entre toma de datos no es estocastico sino deterministico, con lo cual puedes reconstruir en matlab el vector de tiempo sabiendo cual es la frecuencia de muestreo, yo implemente una solucion parecida, creo que puedes encontrar mi codigo aqui, si deseas te puedo mostrar tambien el codigo en matlab para reconstruir el vector de tiempos.
espero que te halla servido, cualquier duda puedes contactarme por mensaje privado.
pedro rivera
pdta: es un poco peligroso que el timeout sea -1, a veces el timeout te ayuda a saber si se ha dañado tu equipo o de algun otro error, lo que te aconsejo es que si sabes cuanto se demorara pongas un timeout largo, de alguna manera puede darse el caso de que tu vi no pueda cerrar al generarse un error, bueno, es una recomendacion pero no creo que sea la causa del fenomeno que estas reportando.