Noticias:

¡Bienvenido a la HispaLUG! - Asociación para aficionados a LEGO®

Menú Principal

Dudas sobre DataLog

Iniciado por 31415926, 11 de Abril de 2010, 23:18:07 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

31415926

RobotC incorpora funciones para almacenar datos rápidamente: AddToDatalog, SaveNxtDatalog, ... Se realiza en RAM y va más rápido que escribir en ficheros.

¿Conocéis alguna utilidad para incorporar el contenido del fichero resultante en una hoja de calculo para representar/analizar el resultado?

No se si seguir buscando o picar una cuantas líneas para leer el fichero directamente en Excel. Creo que NXT-G tiene algo parecido ¿No?

Jetro

NXT-G 2 versión Education tiene una utilidad incorporada para datalogging, pero aunque a nivel de firmware eso se puede hacer con cualquier versión de NXT-G - teóricamente - la utilidad de análisis solamente está disponible en la versión educativa. Aún así, tiene serias limitaciones y es que aunque en un inicio se dijo que con ella se podrían adquirir datos de todos los sensores homologados, a día de hoy solamente funciona con los sensores del set.

Aunque es cierto que la utilidad de datalogging in NXT-G escribe a Ram y por tanto puede grabar datos con gran velocidad, de vez en cuando esos datos se tienen que volcar a un archivo para liberar espacio ram. Esto puede provocar 'cuelgues' de un tiempo considerable (al menos para datalogging) de a veces hasta un segundo o más. Clave para reducir este inconveniente es declarar el tamaño del fichero de datalogging de antemano porque es en el reasignar espacio para este fichero que se pierde más tiempo.

En cuento al tratamiento de los datos, realmente Excel es tu mejor opción.

31415926

Pues al Excel directamente, No tengo la versión educativa  :-[.

El fichero rdt que se genera cuando llamas a SaveNxtDatalog() tras introducir datos con AddToDatalog(valor) contiene:

09 00 00 D5 00 00 00 00 FF 47 00 // parece una cabecera del fichero, 47 00  el tamaño?
02 39 1B // tipo 02 y valor 0x1B39
.....

Todos los tipos de datos los guarda en 2 byte, no se puede guardar ni long ni float. Para Excel, por si a alguien le sirve de algo (se puede mejorar mucho, pero mañana madrugo):


Private Sub cmdLeer_Click()

    Dim intFileNum As Integer, intCellRow As Integer
    Dim bTipo As Byte, iValor As Integer
   
    intFileNum = FreeFile: intCellRow = 3
     Open Cells(1, 2) For Binary Access Read As intFileNum
    ' Cabecera
    For i = 0 To 10: Get intFileNum, , bTipo: Next
    ' Datos
    Do While Not EOF(intFileNum)
        Get intFileNum, , bTipo
        Get intFileNum, , iValor
        Cells(intCellRow, 1) = iValor 
        intCellRow = 1 + intCellRow
    Loop
    Close intFileNum

End Sub

jcaro

Mi problema con el datalog, es ese, que almacena como dos datos separados con comas, por lo que no puedo jugar bien con los datos en excel, alguien sabe algun metodo sencillo para poder interpretar dicho datalogs en excel???

31415926

¿En que lenguajes desarrollas? ¿Puedes subir un ejemplo de fichero para verlo?

En RobotC el fichero tiene el aspecto que mencioné y el código básico para Excel es el que ya he puesto. Me está funcionando bien.

WiWaEdu

Cita de: jcaro en 12 de Abril de 2010, 23:27:45 PM
alguien sabe algun metodo sencillo para poder interpretar dicho datalogs en excel???

jcaro... no se si sera esto lo que pides: https://www.milbits.com/895/csv-xls-excel.html
:)

jcaro

Estupendo!!! si, era justo lo que buscaba, ya lo probaré, el datalog me parece de mucha utilidad para optimizar ciertas cosas o incluso experimentar con datos. gracias!

31etc programo en RobotC

saludos :guino:

31415926

Solo para corroborar lo que comento Jetro:

Un programa sencillo para ver la diferencia que hay entre DataLog y ficheros.

• Un bucle de 12.000 vueltas, en cada una se calcula 1000*cos((float)i/1000), 1000*sin((float)i/1000)), 100*log(i) y se añaden al fichero ó DataLog. En el fichero, además del valor se añade un byte para distinguir que estamos guardando (así lo hace DataLog).
• Se guarda el valor de un temporizador cada 400 medidas reiniciándolo a cero después (como tiempo de referencia)
• Cada 1108 escrituras: Para ficheros - se cierra y se abre el siguiente, apuntando el tiempo antes de cerrar y después de crear. Para el DataLog - se llama a SaveNxtDatalog y apuntamos el tiempo como en el fichero.

Con esto conseguimos 11 ficheros con un tamaño total de 105KB. Comparemos los 3 primeros segundos de cada uno de los dos métodos.


(Haz clic en la imagen para verla a tamaño completo)

Resultado:
DataLog vuelca 400*3 datos en unos 115 ms, con ficheros en 238 ms
DataLog tarda unos 278 ms en generar cada fichero, con ficheros 25 ms

Personalmente, usare casi siempre ficheros, DataLog sólo en pruebas muy concretas (que el tiempo sea un factor crítico, pero que dure pocos segundos, ...) ya que en el caso de que tengamos que recoger muchos datos estaremos a ciegas mientras se crea el fichero. La velocidad de DataLog no compensa frente al tiempo que paramos el sistema.

Ojala salga el sol este fin de semana y pueda sacar al NXT de paseo.

DataLog:
nDatalogSize
nMaxDataFileSize
nMaxDataFiles
AddToDatalog(tipo,valor)
SaveNxtDatalog()

Ficheros:
OpenWrite(hFileHandle, nIoResult, sFileName, nFileSize)
WriteByte(  hFileHandle, nIoResult, 16);
WriteShort( hFileHandle, nIoResult, time1[T1]);
Close(hFileHandle, nIoResult);


Cita de: jcaro en 14 de Abril de 2010, 23:39:13 PM
programo en RobotC
Ya somos dos  :}

jcaro

#8
Aun no he entrado en el aprendizaje de ficheros, de echo estoy empezando a controlar el datalog, pero es cierto eso, el datalog presenta la desventaja del tiempo de guardado. Gracias por la información temporal.



MOD EDIT: Por favor, no cites el mensaje anterior entero