Unitman

Gestor de unidades flexible para HP49G/HP49G+
Añade y elimina unidades y directorios de unidades del sistema de menús de UNITS

Unitman es un pequeña biblioteca cuyos primeros cuatro comandos, los más importantes, se explicarán mediante ejemplos. Gracias a sus potentes funciones, las unidades definidas por el usuario pueden aparecer en cualquiera de los menús de unidades predefinidos, y se tratan de la misma forma que las unidades predefinidas. Esto se realiza con AddU. Los menús de unidades pueden reorganizarse completamente con el comando roUM (reorganize Unit Menu, reorganizar menú de unidades). Esto es, las unidades se pueden ordenar de otra manera, y las superfluas se pueden eliminar, o tal vez cambiar de nombre. Del mismo modo, roUDs (reorganize Unit Directories, reorganizar directorios de unidades) reorganiza el directorio maestro del sistema de unidades del comando UNITS. Unitman se autoextiende con el nuevo menú para conversiones de moneda MONEY, cuando se pulsa ExpU (Expand Units system, extender sistema de unidades) o cualquier otro comando. Se pueden añadir tantos menús de unidades como se desee.

Uno de los principales beneficios de Unitman es que la famosa y muy eficiente funcionalidad triple de las teclas de unidades, establecida en la 48 (véase la Nota 1, más abajo), funciona igualmente para las unidades definidas por el usuario. La mayoría de los comandos de Unitman ponen el modo RPN; en modo algebraico no hay gestión ágil de unidades. Los comandos de Unitman también ponen los modos USR y soft-menus (teclas de función) para poder funcionar adecuadamente. Asígnese «359 MENU» a la tecla con cambio derecho mantenido (rightshift-hold) 84.31, pues en los ejemplos subsiguientes utilizaremos continuamente los comandos de Unitman. Se puede asignar a cualquier otra tecla excepto a la 84.3 que es la que utiliza el propio Unitman automáticamente para redefinir el sistema de unidades cada vez que se modifica. EditU permite modificar una unidad definida por el usuario para actualizar su valor, como se explica en el Ejemplo 7. DelUK borra la asignación de la tecla 84.3 y la deja en la pila, para su compresión y posterior reasignación. La versión de la ROM de la calculadora no debe ser anterior a la 1.19-3. También se ha probado en la ROM 1.22 de la HP49G+.

Abreviaturas: NS = nonshift (sin cambio), LS = leftshift (con cambio izquierdo), RS = rightshift (con cambio derecho),


Historial de versiones

VERSIÓN 3.2003. Se modifica el comando EditU. Véase el Ejemplo 7

VERSIÓN 2.2003. Se añade el comando EditU. Permite modificar las unidades definidas por el usuario para actualizarlas o redefinirlas, véase más abajo. Se añaden los ejemplos 6 y 7. Se actualiza este documento.

VERSIÓN 1.2003: DelUK no solo borra la asignación de la tecla UNITS, sino que también la recupera para posterior reasignación. Este documento es una versión HTML revisada de Unitman.txt. También existe una versión en alemán, UnitmanD.htm. Para el símbolo del euro se utiliza un objeto gráfico para evitar problemas de impresión. Al colocar el cursor sobre las imágenes se obtiene información adicional.

VERSIÓN 1.2002: Puesto que Unitman se ha hecho aún más importante en la era del euro, este texto se ha revisado completamente.

VERSIÓN 9.2001: Cambio menor en el ROMPTR 167 D (el único que se utiliza en la asignación de la tecla UNITS). Ningún cambio de funcionalidad.

VERSIÓN 8.2001: Se reemplaza el comando Upgrd por DelUK. Solo debería utilizarse para empezar desde el principio una modificación del sistema de unidades. No es necesario redefinir las unidades definidas previamente si todavía existen los correspondientes nombres globales. Se puede simplemente poner sus nombres de nuevo en sus categorías mediante AddU, utilizando listas.


1. Definamos en primer lugar la moneda EUR en el nuevo directorio MONEY, que contiene solamente el $ (US) tras una primera ejecución de AddU o ExpU. Pulsar ExpU no es obligatorio; lo ejecutan automáticamente AddU y otros comandos. Simplemente pulsamos AddU y rellenamos la caja de diálogo, eligiendo el nombre MONEY en el campo UnitDir. Definición de una unidad nueva EUR se puede poner tal cual o, mejor, utilizar su símbolo situado en ALPHA cambio derecho 4. Los nombres de unidades deben siempre introducirse como cadenas de texto (strings), porque como nombres podrían ser ilegales, por ejemplo, 'kg/m^2'. En este caso, es necesario rellenar el campo Define, puesto que la HP49G no sabe de ninguna unidad llamada EUR o . El campo Define solo acepta unidades; estas normalmente constan de un número real seguido por un signo de subrayado (underscore) y la unidad propiamente dicha, como se ve en la imagen. Se puede obtener el símbolo $ con ALPHA cambio izquierdo 4. Finalmente, pulsando OK, se obtiene la tecla en el menú MONEY. Cualquier cantidad de dólares se puede convertir fácilmente a euros, y viceversa, Por ejemplo, escriba 100, pulse , y después cambio izquierdo $; el resultado es 107_$. Atención: Tanto $ como también aparecen ahora en HOME, suponiendo que el ejemplo se haya ejecutado en ese contexto. Se recomienda ocultar estas pequeñas variables de unidades más tarde. Si un nombre, como '$', ya se estaba utilizando en otro contexto, no se sobreescribirá, pero el nuevo nombre de unidad creado tendrá prioridad. El nombre de una unidad definida por el usuario en su menú de unidades ha de coincidir el nombre global correspondiente; esto debe tenerse en cuenta cuando se cambia el nombre de una unidad, véase el final del Ejemplo 3.

2. Ahora queremos que la importante unidad ms (milisegundo) aparezca en el menú TIME. La caja de diálogo se debe rellenar como se muestra en la imagen. El campo Define se puede dejar sin rellenar en este caso; no es necesario Adición de una unidad ya conocida por el sistema porque el sistema ya conoce el prefijo m y la unidad s, y, por tanto, su combinación ms, aunque no aparezca en el menu predefinido TIME. Con AddU la forzamos a aparecer. En general, CONVERT y los demás comandos pueden manejar las unidades formadas por otras ya existentes con los prefijos D (deca), h (hecto), ... o d (deci), m (mili), ..., incluso aunque no figuren en los menús de unidades predefinidos. En el manual se puede consultar la lista completa de prefijos. En estos casos, no se escribe nada en HOME. El campo UnitName también acepta una lista de nombres de unidades como cadenas de texto; pero todas las correspondientes unidades deben estar ya bien definidas, o por el sistema o por el usuario, quizá para una versión anterior de Unitman. Por ejemplo, después de crear un nuevo menú para unidades de frecuencia, como se propone en el siguiente ejemplo, se podría añadir {"KHz" "rpm"} de una vez, sin escribir nada en el campo Define. Las dos unidades son ya conocidas por la HP49. La unidad rpm (revoluciones por minuto) aparece en 117 MENU; su conversión es 1_Hz = 60_rpm.

3. El menú TIME no ha quedado bien ordenado tras el ejemplo anterior. Resultaría mejor si las unidades de frecuencia, como Hz, MHz, etc., quedaran en una nueva página; lo haremos con roUM (reorganize Unit Menu, reorganizar menú de unidades). Pila especial para reordenación, cambio de nombre y borrado Pulsamos roUM, elegimos el directorio TIME y pulsamos OK, lo que crea una pila especial (similar a la pila interactiva) como la que vemos en la imagen, correspondiente al menu TIME al que se ha añadido la unidad "ms", y con el cursor situado inicialmente en ella. Lo movemos a la posición "Hz" y pulsamos ROLL para rotar "Hz" a la posición 1. El nuevo menú TIME tendrá yr, d, h, min, s, ms en su primera página, y Hz en la segunda. Por último, pulsamos ON o ENTER para dejar la pila, y comprobamos el resultado seleccionando TIME. Cada unidad está estrechamente relacionada con su inversa; por ejemplo, si aplicamos la función 1/x a 440_Hz, obtenemos 0.00227..._1/Hz = 0.00227..._s como se comprueba pulsando UBASE. Véase también el Ejemplo 6. Se puede completar la segunda página del menú TIME con las unidades KHz, GHz, que no necesitan definición, y una unidad de frecuencia llamada "tic" definida como 1_tic = 8192_Hz, que es el número de tics por segundo del reloj interno de las calculadoras HP4x. Se se prefiere entender los tics del reloj como unidades de tiempo, de tal forma que 1_s = 8192_tic, se puede redefinir la unidad tic como se explica en el Ejemplo 7. También se puede crear un menú independiente de unidades de frecuencia, por ejemplo FREQ, de forma similar a como se explica en el ejemplo 4.

Importante: En la pila especial solo se deben usar las funciones ROLL y ROLLD para reordenar, la tecla de retroceso 45.1 para eliminar unidades (por ejemplo, "st" en VOL, 1_st es lo mismo que 1_m^3), y quizá EDIT para cambiar el nombre de una unidad (por ejemplo, kW a KW, que significa lo mismo). Si se cambia el nombre de, por ejemplo, "" por "EUR", también es necesario cambiar el nombre global '' por 'EUR', mejor con el Filer si la variable está oculta. La pila especial no se puede interrumpir; se salga de ella con ENTER o con CANCEL, el programa continuará y se aplicarán los cambios. Es necesario, por tanto, ser muy cuidadoso al utilizarla.

4. Queremos añadir otro directorio de unidades llamado InfU(Informatic Units, unidades informáticas), por ejemplo. Simplemente, pulsamos AddUD y escribimos InfU (como cadena de caracteres) en la línea de edición, como se ve en la imagen; las comillas de cierre no son necesarias. Adición de un nuevo directorio de unidades informáticas Por último, pulsamos OK (o ENTER, para evitar escribir una F si no se ha quitado el modo ALPHA), para añadir el nuevo directorio InfU, inicialmente vacío, sin ninguna unidad. Con AddU se pueden añadir las siguientes: 1_bit = 1_$, 1_byte = 8_bit, 1_Kbyte = 1024_byte, etc. No se puede dejar vacío el campo Define de Kbyte, pues la HP49 consideraría 1_Kbyte = 1000_byte, por ser K un prefijo estándar. La definición de 1_bit no es arbitraria; 1_$ es una unidad sin dimensiones, como lo es 1_bit. Pero el usuario puede definir 1_bit de otras formas, si lo desea. Una posibilidad sería definirlo como la diminuta unidad de longitud correspondiente a lo que ocupa un bit en un disco compacto.

5. Algunos podrían preferir tener el menú MONEY en primera posición. No hay ningún problema: se pulsa roUDs Pila especial de nombres de directorios (reorganize Unit Directories, reorganizar directorios de unidades), y aparece una pila interactiva con los nombres de los directorios de unidades actuales. Los directorios se reordenan con ROLL y ROLLD, como en el Ejemplo 3: desplazamos el cursor a "LENG" (probablemente en el nivel 17) y pulsamos ROLLD, eso es todo. También se puede eliminar un directorio con la tecla de retroceso; por ejemplo, el directorio "RAD", si nunca se utilizan las unidades de radiación. Cambiar un directorio de nombre es lo único ligeramente más complicado. Veamos un ejemplo: un alemán podría Cambio de nombre: TIME a ZEIT querer cambiar el nombre del directorio TIME a ZEIT. Con el cursor de la pila interactiva situado en "TIME" pulsamos EDIT; esto coloca la cadena "TIME" en la línea de edición. Añadimos el nombre nuevo ZEIT como se ve en la imagen de la izquierda. Es importante que el nombre antiguo y el nuevo estén en la misma cadena de caracteres, en dos líneas diferentes y sin ningún espacio en blanco adyacente. Pulsamos ENTER para abandonar el editor y volver a la pila; con otra pulsación de ENTER salimos de la pila y el directorio TIME se habrá convertido en ZEIT. No hay ningún riesgo en probar el ejemplo para los no hablantes de alemán; basta con cambiar el nombre de nuevo de ZEIT a TIME. Utilizando roUDs se pueden reordenar las categorías de unidades y cambiar de nombre o eliminar las que se desee, todo ello en un solo paso.

6. En la mayoría de los países europeos el consumo de combustible de los automóviles se mide en litros por 100 km. En el Reino Unido se suele medir en mi/galUK, es decir, la distancia en millas que se puede recorrer con 1_galUK. ¿Cómo se puede convertir entre estas unidades incompatibles? Crearemos un nuevo directorio de unidades, digamos DRIVE. La unidad "1 litro por 100 km" es equivalente a 1_cl/km. Pulsamos AddU y escribimos {"cl/km" "km/l" "mi/galUK"} en el campo UnitName. No es necesario definir ninguna de estas unidades, pues el sistema ya las conoce; por tanto, tampoco se graba ninguna variable en HOME. Bajo DRIVE aparece ahora el siguiente menú:

     cl/km           km/l      mi/galUK                                        UNITS    

km/l es una buena unidad de consumo de combustible, quizá la mejor; simplemente dice cuántos kilómetros podemos recorrer con un litro de combustible. Y es directamente convertible a mi/galUK. Por ejemplo, 12_km/l equivale a 33.9_mi/galUK; para obtener este resultado basta con pulsar la tecla mi/galUK con cambio izquierdo (leftshift) con 12_km/l en la pila. Para convertir a la unidad tradicional, basta con invertir con 1/x cualquiera de los dos valores y convertir el resultado a cl/km; el resultado en este caso es 8.3_cl/km.

7. Supongamos que tanto $ como están en MONEY, y que hemos de actualizar el tipo de cambio del . La actualización es muy fácil con el nuevo comando EditU. Pantalla de EditU en MONEY Al pulsarlo, aparecen los directorios de unidades; seleccionamos MONEY y aparecen sus unidades; EditU está aún funcionando, para recordarlo se muestra "EditU" en la pantalla; pulsamos y aparece su definición actual en la línea de edición, tal y como se ve en la imagen. Ahora se puede cambiar 1.07_$ por 1.17_$, por ejemplo. Al pulsar ENTER la variable global '' y la unidad correspondiente quedan redefinidas con el nuevo tipo de cambio. En este caso hemos modificado solamente el valor numérico de la unidad, pero también se puede modificar la definición dimensional. El entorno de EditU solo se puede abandonar con CANCEL o ENTER, y solo con esta última desde la línea de edición. Aparte de estas dos teclas, NXT y PREV que se usan para recorrer las páginas, y las teclas de menú, todas las demás teclas están bloqueadas y emitirán un pitido si se pulsan.

Importante: Solamente en el entorno EditU se pueden editar las unidades simplemente pulsando su tecla, y esto solo funciona para las unidades definidas por el usuario cuyo nombre se encuentra en la ruta (path) actual. No hay ninguna necesidad de editar las unidades predefinidas por el sistema, ni es posible. Fuera del entorno de EditU, las teclas de unidades funcionan como se describe en la Nota 1. Cada ejecución de EditU sirve para modificar una sola unidad; para editar sucesivas unidades es necesario volver a ejecutarlo.


Nota 1. Las unidades definidas por el usuario que se añaden con AddU funcionan de la misma manera que las predefinidas por el sistema. Las teclas de unidades funcionan en RPN de la siguiente manera —Para ver más detalles véase el capítulo 10 del manual de la HP48 (!); no se explica en la documentación de la HP49.
NS: Añade (multiplicando) la unidad al objeto del nivel 1 de la pila. Por ejemplo, con 100 en la pila la tecla $ del menú MONEY produce 100_$.
LS: Convierte. Por ejemplo, suponiendo que se ha definido en MONEY como se explica en los ejemplos, cambio izquierdo (leftshift) aplicado al objeto 100_$ en el primer nivel de la pila produce 93.45..._.
RS: Divide. Cambio derecho (rightshift) Hz aplicado a 100_Hz produce 100. Cambio derecho (rightshift) s "convierte" 100 en 100_1/s (= 100_Hz).

Nota 2. Cuando están activas las cajas de diálogo de Unitman, se pueden recorrer las páginas de los menús de unidades para examinar su contenido o para utilizar sus nombres como texto en la definición de otras unidades. Se debe ser cuidadoso al elegir los nombres de las unidades. Por ejemplo, la unidad PS (Petasiemens) no se puede redefinir, aunque nunca se ha utilizado. Un nombre de unidad que empiece por un símbolo no alfabético, o un nombre vacío (sin ningún carácter) puede provocar problemas serios al usarlo como se explica en la Nota 1. Siempre se debe hacer una copia de seguridad (backup) de HOME antes de hacer modificaciones importantes del sistema de unidades. Nótese también que una unidad de nombre 'e' para la carga de un electrón puede provocar problemas, puesto que e (el número de Euler, la base de los logaritmos naturales) es ya una constante de la calculadora.

Nota 3. Se pueden eliminar todas las unidades que no se desee tener disponibles. Por ejemplo, miUS^2 o galUK. El sistema no las olvida. No se debería dudar en borrar cualquier unidad no deseada ni siquiera directorios completos. Ni las unas ni los otros se pierden. Para usar el sistema de unidades predefinido, basta con abandonar el modo USR, pues el sistema modificado solo está activo en el modo USR. Incluso se pueden tener diferentes definiciones de unidades en diferentes contextos, dependiendo de cuál sea el directorio actual. Por ejemplo, en un directorio USA podría haber una definición del galón distinta de la de otro directorio UK.

Nota 4. Si se pierde la asignación de la tecla UNITS, por ejemplo, por haber pulsado DelUK y haber borrado posteriormente la asignación de la pila, y no hay disponible una copia de seguridad de HOME, no se ha perdido todo. El directorio MONEY reaparece con la primera ejecución de cualquier comando de Unitman, aunque todavía es necesario recrear los demás menús de unidades; sin embargo, todas las unidades definidas por el usuario estarán todavía en HOME. Así, será suficiente con volver a proporcionar en el campo UnitName de AddU, para cada menú de unidades, una única lista con los nombres de las unidades. Pero sus definiciones están todavía en el sistema, y no hace falta redefinirlas.

Nota 5. La asignación de la tecla 84.3 UNITS puede llegar a hacerse muy grande, pero se puede comprimir hasta aproximadamente 1 KB con BZ. Se recupera la asignación con S?UA de OT49, se comprime con el BZ-toggler ~, también de OT49: pulsando BZCE en su menú se produce a partir de la asignación un objeto de código que se autoevalúa. Y, por último, se asigna este objeto a la tecla 84.3. Está claro que esto solamente debe hacerse cuando la modificación del sistema de unidades ha llegado a hacerse suficientemente estable. Recuérdese que cada nueva modificación reasigna automáticamente la tecla 84.3, pero sin comprimir la asignación. Unitman y la biblioteca UTOOL se pueden utilizar conjuntamente.


Wolfgang Rautenberg  -  raut@math.fu-berlin.de
http://www.math.fu-berlin.de/~raut/  -  ftp://ftp.math.fu-berlin.de/pub/usr/raut/

Créditos: Gracias a Heiko Arnemann y Otto Praxl por la ayuda prestada en la creación de este documento HTML, y por indicaciones y beta-test con la ROM 19-6. Gracias también a Rafael Millán por la traducción de Unitman.htm al español.