Discusiones sobre Productos NI

cancelar
Mostrando los resultados de 
Buscar en lugar de 
Quiere decir: 

Guardar datos CVI en .txt

¡Resuelto!
Ir a solución

Buenos días,

 

¿como puedo extraer los datos de un arrya en un fichero? He buscado en el foro pero no encuentro nada en LABWINDOWS. Necesito extraer los datos que obtengo para posteriori analizarlos con Matlab.

 

Cualqier ayuda es bien recibida¡¡

Un saludo a todos.

0 kudos
Mensaje 1 de 10
5.078 Vistas
Solución
Aceptado por teleco_loco

Hola,

el CVI proporciona varios instrumentos para almacenar datos:

  • ArrayToFile () es un comando que desde un arrego en la memoria crea un archivo de texto divididos en lineas y columnas dependiendo en los parámetros que se ponen. Este comando tiene un vínculo, en que todos los datos deben estar en el mismo arreglo y ser del mismo tipo. En la ayuda sobre este comando viene un link a un ejemplo
  • OpenFile + FmtFile + CloseFile: con estos comando se va creando el archivo en el formato que quieras: puedes poner en una linea datos diferentes (por ej. hora de registro + datos numericos)

So nos das algun ejemplo de los datos que tienes que almacenar puedo proporcionarte un pequeño código por probar.



Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
0 kudos
Mensaje 2 de 10
5.072 Vistas
Muchas gracias Roberto, me voy a poner a ello, si veo que no lo saco lo comento por aquí.

Gracias de nuevo.
Saludos!!
0 kudos
Mensaje 3 de 10
5.065 Vistas

Bueno, si tienes algo por comentar aquí estoy.

Solamente quiero añadir que las soluciones que te he indicado son de librerías propias del CVI: si quieres algo que pueda ser usado en otros compiladores debes usar funciones de las librerías estándard: fopen, fprintf, fclose. Tienen una sintáxis algo diferente pero son poderosas también.



Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
0 kudos
Mensaje 4 de 10
5.049 Vistas

Hola Roberto, 

 

a ver estoy intentando, pero solo me ha salido algo básico.

 

basicamente estoy haciendo un barrido de frecuencias. Cada vez que se ejecuta el bucle while, se lee una frecuencia distitnta.

Lo ideal seria meter cada frecuencia en una colmna, para luego poder analizarlas todas, y no tener que estar abriendo un fichero por cada frecuencia que quiero analizar.

 

Las muestras de cada tono se almacenan en un array que se va sobreescribiendo cada vez que se ejecuta el while.

No se si me he explicado bien,

 

Un saludo. Mil gracias

0 kudos
Mensaje 5 de 10
5.040 Vistas

Bueno, creo que si simplemente vas acumulando datos en un largo arreglo sin borrar nada podrías obtener lo que quieres.

Te adjunto un ejemplo que puede ejecutarse en la ventana de inmediato del CVI: basicamente se simula tener 10 frecuencias y adquirir 10 tonos para cada una; al final se crea el archivo de datos con las mediciones de cada frecuencias en columna.

 

#include <formatio.h>
static int		x[100];	// Arreglo de mediciones
static int		frecuencia, tono, idx;

// Simulacion de como se adcquieren las mediciones
for (frecuencia = 0, idx = 0; frecuencia < 10; frecuencia++) {
	for (tono = 0; tono < 10; tono++) {
		x[idx++] = frecuencia * 10 + tono;
	}
}

// Creacion del archivo de datos
ArrayToFile ("c:\\temp\\data.txt", x, VAL_INTEGER, 100, 10, VAL_GROUPS_TOGETHER, VAL_GROUPS_AS_COLUMNS,
	VAL_SEP_BY_TAB, 0, VAL_ASCII, VAL_TRUNCATE);

 



Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
0 kudos
Mensaje 6 de 10
5.029 Vistas

Hola Roberto,

 

El problema que yo le veo a eso es que en mi caso, cada frecuencia tienes 2048 muestras, y ademas de eso el barrido es ajustable, por lo que, si junto todas las muuestras para hacerlo de esta forma, puedo acabar con un vector demasiado grande. El programa seria algo asi

 

mientras (contar hasta numero de salto en el barido)

     envío informacion a un generador de onda

     espero que se estabilice la señal

     obtengo la señal en un thread aparte

     almaceno la señal en un vector

 

 

Por lo tanto, cada vez que se ejecuta ArrayToFile, me escribe el vector consecutivo al anterior. Podria almacenar todos los vectores juntos, pero, si por ejemplo hago un barrido de 40 frecuencias, serian 40*2048 elementos en el vector.

 

No se si habria alguna manera de hacerlo, alomejor con los otros comandos que me pusiste anteriormente en vez de con ArrayToFile.

 

Intentare a ver, aunque no me queda muy claro el funcionamiento, seguire investigando.

 

Saludos

 

0 kudos
Mensaje 7 de 10
5.021 Vistas

Bueno, yo no estría preocupado por la ocupación de memoria: 40 * 2048 * 8 (dimensión de un doble) son 655 kB en la memoria de la PC: con las máquinas de hoy no son realmente un problema! Emoticono feliz

 

Sí se podría hacer con otros comandos de escritura del archivo, pero tu dijiste que quieres tener las mediciones de una frecuencia en columna y esto es un problema ya que en cada frecuencia debes añadir un dato a una línea que ya existe en el file. Si puedes organizar tu archivo de tal manera que cada frecuencia sea en una sola línea podrías escribir todos los datos cuando terminas las mediciones de una frecuencia, esto es puedes tener solo un arreglo de 2018 muestras y sobreescribirlo en cada frecuencia.



Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
0 kudos
Mensaje 8 de 10
5.006 Vistas

al final lo hice con ArrayToFIe. capturando un vector mayor, no caí yo en que el peso del array es mínimo. Fallo mío

 

Gracias por la ayuda. Depsues de mucho tiempo ya casi esta el proyecto acabado ¡¡ xDD

0 kudos
Mensaje 9 de 10
4.992 Vistas

Me alegra oír esto.  ¡Suerte con tu proyecto! 



Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
0 kudos
Mensaje 10 de 10
4.982 Vistas