Manejo de ficheros en NXT-G

iconoLas variables son la forma más común de almacenar datos, pero tienen una pega importante: todos los datos que contienen se borran al acabar el programa -porque se almacenan en memoria RAM, que es volátil- o si hay un corte en el suministro de energía. Si queremos almacenar información de forma permanente podemos trabajar con ficheros. Veamos cómo se realiza el manejo de ficheros en NXT-G.

Podemos hacer que estos ficheros sean accesibles desde otros programas a través del PC, o a través de otros dispositivos NXT si descargamos dichos ficheros. Esto es posible ya que esta información se almacena en la memoria FLASH, que es NO volátil.

¿Y para qué sirve esto? Los ficheros tienen infinidad de aplicaciones. Imaginemos, por ejemplo, que queremos un robot que recorra un circuito, almacenando el recorrido en forma de datos del sensor de rotación, para que luego otro robot pueda hacer exactamente el mismo recorrido. El primer robot almacena todos los datos del tacómetro (sensor de rotación) en un fichero, cargamos ese fichero en el segundo robot y usamos los datos almacenados para “copiar” los pasos. Quede esto como idea, ya no es tan simple. Una forma de hacerlo funcionar sería creando una serie de pasos predefinidos que ambos robots conocen y almacenando en el fichero datos del tipo: avanzar 20, girar 10, … dónde 20, 10 son unidades conocidas y dónde se han establecido previamente unos parámetros de avance, de giro (sobre el eje de la rueda, sobre el eje del robot), etc.

Vamos a hacer un pequeño tutorial con las bases del manejo de ficheros, con ejemplos de programación.

El bloque que utilizaremos se encuentra en “Paleta Completa”, dentro de la pestaña de “Avanzado”, es decir, aquí:

ficherosdonde

Bloque de Acceso a archivos y menú de opciones:

icono menu

Como podéis observar en el menú, el bloque de Acceso a archivos nos permite 4 opciones: Leer, Escribir, Cerrar y Eliminar.

Hay una serie de reglas a seguir cuando se trata de manejar ficheros en NXT:

1. Sólo se pueden almacenar y leer datos de tipo Texto o Número, no Lógicos.
2. El bloque permite hacer las 4 opciones citadas más arriba, pero sólo puede hacer una cada vez que se usa. Es decir, si queremos leer y luego cerrar el archivo, tendremos que usar 2 bloques.
3. El dato almacenado al escribir el archivo se guarda siempre al final del archivo.
4. ¡Para leer información de un fichero, tienes que cerrarlo primero!

Los valores almacenados en el fichero pueden proceder de una entrada externa (por ejemplo la lectura de un un sensor), o pueden grabarse manualmente utilizando la casilla correspondiente en el menú.

Ahora que ya conocemos los elementos y las reglas básicas de manejo, hagamos unos ejemplos.

1. Escribir y leer un dato de un fichero.

A)Vamos a utilizar la lectura del sensor de rotación del motor del puerto B, leeremos los grados que ha girado y almacenaremos ese valor en un fichero llamado MotorB.
ej1a
B) Ahora vamos a leer el valor del fichero y a presentarlo en pantalla
ej1b
Finalmente nuestro programa será algo como esto:
ej1completo
Para este ejemplo, he indicado al motor en la configuración correspondiente, que debía girar 300 grados, para poder comprobar más fácilmente si el valor guardado es correcto. No debemos olvidar cerrar el fichero antes de leerlo, y añadir una pequeña espera al final del programa, para poder ver en pantalla el texto resultante.

Nota: Si cambiáis los parámetros de giro (ponéis 200 grados) y volvéis a ejecutar el programa, no aparecerá en pantalla 200, que es lo que cabría esperar, si no el valor de la primera vez que lo ejecutasteis, en este ejemplo concreto aparece 300 de nuevo.
Esto se debe a que NXT-G no sobreescribe el fichero, añade los datos al final del mismo (regla 3), así que si queremos mantener el nombre del fichero pero sobreescribiendo datos deberemos Eliminar el archivo al inicio del programa (bloque Acceso a archivos -> acción: Eliminar y MotorB como nombre de archivo, en este caso).

El ejemplo anterior muestra cómo usar el bloque para un sólo dato, pero supongamos que necesitamos llevar un registro de los grados que ha girado el motor, y presentarlos en pantalla uno a uno en el mismo orden en el que se guardaron. Vamos a aprender a acceder a todos los datos del fichero.

2. Escribir y leer varios datos de un fichero.

A)Vamos a utilizar la lectura del sensor de rotación del motor del puerto B, leeremos los grados que ha girado y almacenaremos ese valor en un fichero llamado MotorB, realizaremos esto 4 veces consecutivas.

ej2a

B) Ahora vamos a leer el valor del fichero y a presentarlo en pantalla

ej2b

Explicar una peculiaridad de esta segunda parte del programa, el control de salida del bucle se hace mediante un valor lógico que se obtiene del propio bloque de Acceso a archivos. Esta salida lógica (llamada “Error”) del bloque devuelve “Verdadero” si hemos llegado al final del fichero, y “Falso” mientras aún quede información. Esto nos permite leer tantos datos como se hayan almacenado, sin necesidad de conocer el número exacto con anterioridad.

El programa completo quedaría de la siguiente manera:

ej2completo

Hemos incluido un bloque para la eliminación del archivo al inicio del programa, con el fin de sobreescribir los datos (como explicábamos más arriba). Y por supuesto, siempre cerramos el archivo antes de leerlo.

Comments are closed.