|
ONCE.24. CÓDIGOS Y MENSAJES DE ERROR
ONCE.24.1. Códigos de error
En la tabla siguiente se muestran los valores de códigos de error generados por AutoLISP. La variable de sistema ERRNO toma uno de estos valores cuando una llamada de función de AutoLISP provoca un error que AutoCAD detecta después.
Código ----- Significado
------------------------------------------------------------------------------------
0 ----------- Sin errores
1 ----------- Nombre no válido de tabla de símbolos
2 ---------- Nombre no válido de conjunto de selección o entidad
3 ---------- Se ha superado el número máximo de conjuntos de selección
4 ---------- Conjunto de selección no válido
5 ---------- Uso no adecuado de definición de bloque
6 ---------- Uso no adecuado de referencia externa
7 ---------- Selección de objeto: fallo en la designación
8 ---------- Final de archivo de entida
9 ---------- Final de archivo de definición de bloque
10 --------- No se ha encontrado la última entidad
11 --------- Intento no válido de suprimir un objeto de ventana gráfica
12 --------- Operación no permitida durante el comando POL
13 --------- Identificador no válido
14 --------- Identificadores no activados
15 --------- Argumentos no válidos en la petición de transformación de coordenadas
16 --------- Espacio no válido en la petición de transformación de coordenadas
17 --------- Uso no válido de entidad suprimida
18 --------- Nombre de tabla no válido
19 --------- Argumento de función de tabla no válido
20 --------- Intento de definir una variable de sólo lectura
21 --------- No puede utilizarse el valor cero
22 --------- Valor incorrecto
23 --------- Regeneración compleja en curso
24 --------- Intento de cambiar el tipo de entidad
25 --------- Nombre de capa erróneo
26 --------- Nombre de tipo de línea erróneo
27 --------- Nombre de color erróneo
28 --------- Nombre de estilo de texto erróneo
29 --------- Nombre de forma erróneo
30 --------- Campo para el tipo de entidad erróneo
31 --------- Intento de modificar una entidad suprimida
32 --------- Intento de modificar una subentidad SEQEND
33 --------- Intento de cambiar identificador
34 --------- Intento de modificar la visibilidad en pantalla gráfica
35 --------- Entidad en capa bloqueada
36 --------- Tipo de entidad errónea
37 --------- Entidad polilínea errónea
38 --------- Entidad compleja incompleta en el bloque
39 --------- Campo de nombre de bloque no válido
40 --------- Campos de identificador de bloque repetidos
41 --------- Campos de nombre de bloque repetidos
42 --------- Vector normal erróneo
43 --------- Falta el nombre de bloque
44 --------- Faltan los indicadores de bloques
45 --------- Bloque anónimo no válido
46 --------- Definición de bloque no válida
47 --------- Falta un campo obligatorio
48 --------- Tipo de datos extendidos ( XDATA) no reconocido
49 --------- Anidación errónea de lista en XDATA
50 --------- Ubicación errónea del campo APPID
51 --------- Se ha superado el tamaño máximo de XDATA
52 --------- Selección de entidad: respuesta nula
53 --------- APPID duplicada
54 --------- Intento de crear o modificar objeto de pantalla gráfica
55 --------- Intento de crear o modificar RefX, XDef o XDep
56 --------- Filtro SSGET: fin de lista no esperado
57 --------- Filtro SSGET: falta operando de prueba
58 --------- Filtro SSGET: cadena opcode (-4) no válida
59 --------- Filtro SSGET: anidación errónea o cláusula condicional vacía
60 --------- Filtro SSGET: incoherencia en principio y final de cláusula condicional
61 --------- Filtro SSGET: número erróneo de argumentos en cláusula condicional (con NOT o XOR)
62 --------- Filtro SSGET: superado el límite máximo de anidación
63 --------- Filtro SSGET: código de grupo no válido
64 --------- Filtro SSGET: prueba de cadena no válida
65 --------- Filtro SSGET: prueba de vector no válida
66 --------- Filtro SSGET: prueba de número real no válida
67 --------- Filtro SSGET: prueba de número entero no válida
68 --------- El digitalizador no es un tablero
69 --------- El tablero no está calibrado
70 --------- Argumentos de tablero no válidos
71 --------- Error ADS: no es posible asignar buffer nuevo de resultados
72 --------- Error ADS: se ha detectado un puntero nulo
73 --------- No es posible abrir el archivo ejecutable
74 --------- La aplicación ya está cargada
75 --------- Número máximo de aplicaciones ya cargadas
76 --------- No es posible ejecutar la aplicación
77 --------- Número de versión no compatible
78 --------- No es posible descargar la aplicación anidada
79 --------- La aplicación no se descarga
80 --------- La aplicación no está cargada
81 --------- Memoria insuficiente para cargar la aplicación
82 --------- Error ADS: matriz de transformación no válida
83 --------- Error ADS: nombre de símbolo no válido
84 --------- Error ADS: valor de símbolo no válido
85 --------- Operación AutoLISP/ADS no permitida mientras se presenta un cuadro de diálogo
ONCE.24.2. Mensajes de error
Como ya sabemos, cuando AutoLISP detecta una condición de error, cancela la función en proceso y llama a la función *error* del usuario con un mensaje que indica el tipo de error. Si no se define ninguna función *error* (o si *error* se limita a cero), la acción estándar es presentar el mensaje en la forma siguiente:
error: mensaje
El mensaje va seguido de un indicador de función. Si hay una función *error* definida por el usuario, el indicador no actúa, sino que se hace referencia a dicha función de usuario con mensaje como argumento único.
A continuación se muestra una lista completa de los mensajes de error que puede proporcionar AutoLISP en programas de usuario, además de una explicación de cada uno. La lista recoge los mensajes únicamente en castellano, excepto los que se encuentran en inglés en todas las plataformas idiomáticas.
Lista 1
Los argumentos de defun no pueden tener el mismo nombre
Una función definida con varios argumentos que tengan el mismo nombre fallará y generará este mensaje.
AutoCAD rechazó la función
Los argumentos suministrados a una función de AutoCAD no son válidos (como en SETVAR con una variable de sistema de sólo lectura o TBLNEXT con un nombre de tabla no válido) o la propia función no es válida en el contexto actual. Por ejemplo, no se puede utilizar una función GET... de introducción de datos del usuario dentro de la función COMMAND.
Desbordamiento de pila de AutoLISP
Se ha superado el espacio de almacenamiento de pila de AutoLISP. El motivo puede ser una repetición excesiva de funciones o listas de argumentos muy largas.
tipo de argumento erróneo
Se ha pasado un tipo de argumento incorrecto a una función Por ejemplo, no se puede obtener la STRLEN de un número entero.
bad association list
La lista suministrada a la función ASSOC no está formada por listas de valor clave.
código de conversión erróneo
El identificador SPACE suministrado a la función TRANS no es válido.
bad ENTMOD list
El argumento suministrado a ENTMOD no es una lista de datos de entidades adecuada (tal y como lo devuelve ENTGET).
bad ENTMOD list value
Una de las sublistas de la lista de asociación suministrada a ENTMOD contiene un valor erróneo.
lista de argumento formal inadecuada
Al evaluar esta función, AutoLISP ha detectado una lista de argumento formal no válida. Quizás no se trate de una función, sino más bien de una lista de datos.
función incorrecta
El primer elemento de la lista no es un nombre de función válido; quizás se trate de un nombre de variable o de un número. Este mensaje también puede indicar que la función especificada no está bien definida (no olvidar la lista de argumentos formal obligatoria).
código de función erróneo
El identificador de función suministrado al comando TABLET no es correcto.
bad grvecs list value
El valor pasado en una lista GRVECS no es un punto 2D o un punto 3D.
bad grvecs matrix value
La matriz que se ha suministrado a GRVECS contiene errores de formación o de tipo de datos (por ejemplo: STR, SYM, etc.).
lista incorrecta
Se ha suministrado una lista con errores de forma a una función. Esto puede suceder si un número real empieza con un separador decimal. Hemos de incluir un cero inicial en este caso.
lista de puntos incorrecta
La solicitud F, CP o WP lleva adjunta una lista nula o con elementos que no son puntos. Se utilizan con SSGET y GRVECS.
bad node
La función TYPE ha encontrado un tipo de elemento no válido.
tipo de nodo erróneo en la lista
La función FOREACH ha encontrado un tipo de elemento no válido.
argumento de puntos incorrecto valor de punto incorrecto
Se ha pasado un punto mal definido (una lista de dos números reales) a una función que esperaba un punto. Un número real no puede empezar por un separador decimal; en dicho caso, hay que incluir el cero inicial.
detectado número real incorrecto
Se ha intentado transmitir un número real no válido de AutoLISP a AutoCAD.
bad ssget list
El argumento suministrado a SSGET "X" no es una lista de datos de entidad adecuada (tal y como devuelve ENTGET).
bad ssget list value
Una de las sublistas de la lista de asociaciones suministrada a SSGET "X" contiene un valor erróneo.
cadena modo ssget incorrecta
Este error se produce cuando SSGET recibe una cadena no válida en el argumento modo.
lista de xdata incorrecta
Este error se genera cuando XDSIZE, SSGET, ENTMOD, ENTMAKE o TEXTBOX recibe una lista de datos de entidad extendida con errores de forma.
se requiere punto de base
Se ha llamado a la función GETCORNER sin el argumento de punto base obligatorio.
Boole arg1 0 or 15
El primer argumento de la función booleana ha de ser un número entero entre 0 y 15.
imposible evaluar la expresión
Separador decimal mal colocado o alguna otra expresión incorrecta.
no es posible abrir (archivo) para entrada; fallo de LOAD
No se ha encontrado el archivo designado en la función LOAD, o el usuario no tiene permisos de lectura sobre ese archivo.
imposible volver a entrar en AutoLISP
Una función activa está utilizando el buffer de comunicación AutoCAD/AutoLISP; no se podrá llamar a otra nueva función hasta que la actual haya finalizado.
interrupción desde el teclado
El usuario ha tecleado CTRL+C durante el proceso de una función.
divide by zero
No se puede dividir por cero.
desbordamiento en división
La división por un número muy pequeño ha dado como resultado un cociente no válido.
exceeded maximum string length
Se ha pasado a una función una cadena con más de 132 caracteres.
extra right paren
Se ha encontrado uno o más paréntesis cerrados de los necesarios.
file not open
El descriptor de archivo para la operación de E/S no es el de un archivo abierto.
lectura de archivo, memoria de cadenas insuficiente
Memoria de cadenas agotada mientras AutoLISP leía un archivo.
file size limit exceeded
Un archivo ha superado el límite de tamaño permitido por el sistema operativo.
floating-point exception
Sólo sistemas UNIX. El sistema operativo ha detectado un error aritmético de coma flotante.
función cancelada
El usuario ha tecleado CTRL+C o ESC (cancelar) en respuesta a una solicitud de datos.
function undefined for argument
El argumento pasado a LOG o SQRT sobrepasa los límites permitidos.
function undefined for real
Se ha suministrado un número real como argumento de una función que exige un número entero, por ejemplo (LSH 2.2 1).
falta punto final grvecs
Falta un punto final en la lista de vectores que se ha suministrado a GRVECS.
illegal type in left
El archivo .LSP no es ASCII puro, sino que se ha guardado con un programa de tratamiento de textos e incluye códigos de formato.
improper argument
El argumento para GCD es negativo o cero.
inappropriate object in function
El paginador de funciones VMON ha detectado una función mal expresada.
número incorrecto de argumentos
La función QUOTE sólo espera un argumento concreto, pero se le han proporcionado otros.
número incorrecto de argumentos para una función
El número de argumentos para la función creada por el usuario no coincide con el número de argumentos formales especificado en DEFUN.
solicitud inadecuada de datos sobre lista de comandos
Se ha encontrado una función de comando pero no se puede ejecutar porque hay otra función activa o porque el intérprete de comandos no está completamente inicializado. Este error puede producirse desde una llamada a la función COMMAND en ACAD.LSP, ACADR14.LSP o en un archivo .MNL.
entrada interrumpida
Se ha detectado un error o condición de fin de archivo prematuro, lo que ha provocado la finalización de la introducción de datos en el archivo.
insufficient node space
No hay espacio suficiente en la pila de almacenamiento para la acción solicitada.
insufficient string space
No hay espacio en la pila de almacenamiento para la cadena de texto especificada.
invalid argument
Tipo de argumento erróneo o argumento sobrepasa los límites permitidos.
lista de argumentos no válida
Se ha pasado a una función una lista de argumentos que contiene errores.
invalid character
Una expresión contiene un carácter erróneo.
par punteado no válido
No se ha dejado el espacio pertinente antes y después del punto en la construcción manual del par punteado. Este mensaje de error también puede deberse a un número real que empieza por el separador decimal, en cuyo caso ha de incluir el cero inicial.
valor de número entero no válido
Se ha encontrado un número menor que el entero más pequeño o mayor que el número entero más grande.
desbordamiento LISPSTACK
Se ha superado el espacio de almacenamiento de pila de AutoLISP. El motivo puede ser una repetición excesiva de funciones o listas de argumentos muy largas.
malformed list
Se ha terminado prematuramente una lista que se estaba leyendo en un archivo. La causa más común es una incoherencia en el emparejamiento de las aperturas y cierres de paréntesis o comillas.
malformed string
Se ha terminado prematuramente una cadena que se estaba leyendo en un archivo.
misplaced dot
Un número real comienza con el separador decimal. Se ha de incluir un cero inicial en este caso.
función nula
Se ha intentado evaluar una función que tiene una definición vacía.
quitar/salir abandonar
Se ha llamado a la función QUIT o EXIT.
cadena demasiado larga
La cadena que se ha pasado a SETVAR es demasiado larga.
too few arguments
Se han pasado pocos argumentos a una función integrada.
argumentos insuficientes para grvecs
No se han pasado suficientes argumentos a GRVECS.
demasiados argumentos
Se han pasado demasiados argumentos a una función integrada.
La siguiente lista muestra los errores internos de AutoLISP que no tienen que ver con el programa de usuario. Estos errores, si se producen, hay que notificarlos a Autodesk de forma inmediata ya que se pueden deber a bugs o fallos en la programación de AutoCAD 14 o en la implementación de AutoLISP en él. Para más información véase la ayuda del programa.
Lista 2
bad argument to system call
Sólo sistemas UNIX. El sistema operativo ha detectado una llamada errónea generada por AutoLISP.
bus error
Sólo sistemas UNIX. El sistema operativo ha detectado un error de bus.
hangup
Sólo sistemas UNIX. El sistema operativo ha detectado una señal hangup (colgado).
illegal instruction
Sólo sistemas UNIX. El sistema operativo ha detectado una instrucción de máquina no válida.
segmentation violation
Sólo sistemas UNIX. El sistema operativo ha detectado un intento de direccionamiento externo al área de memoria especificada para este proceso.
unexpected signal nnn
Sólo sistemas UNIX. El sistema operativo ha emitido una señal inesperada.
ONCE.FIN. EJERCICIOS PROPUESTOS
Diseñar un programa en AutoLISP que permita dibujar un perfil doble T parametrizado. El programa solicitará en línea de comandos la altura total y la altura del alma, la anchura del ala y del alma y el punto de inserción. El perfil se dibujará con ángulo de inserción 0.
Realizar un programa que extraiga todos los bloques existentes en el dibujo actual y los guarde en disco en la unidad y directorio que el usuario indique. El programa contendrá una rutina de control de errores y funcionará desde línea de comandos. El resto al gusto del programador.
Realizar un programa que permita dibujar un agujero en alzado seccionado. Tras solicitar el punto de inserción se irán pidiendo los demás datos. El usuario dispondrá de la posibilidad de dibujar el agujero con o sin cajera y/o roscado o no. La cajera (si existiera) y el agujero se dibujarán en la capa actual; la rosca (si existiera) y el eje de simetría se dibujarán en sendas capas cuyos nombres serán solicitados al usuario. El programa funcionará bajo línea de comandos únicamente.
Crear un programa en AutoLISP que dibuje una curva de nivel cartográfica a partir de los puntos contenidos en un fichero topográfico. El programa funcionará mediante un cuadro diseñado en DCL que tendrá el siguiente aspecto:
Como se puede apreciar en este letrero de diálogo, el usuario dispondrá de la posibilidad de escoger un fichero en entrada —donde están los datos— y un fichero de salida. En este último se guardarán las coordenadas de los puntos precedidas de un número de orden o marca que será el que se dibuje en pantalla al lado de cada punto. Además, también se podrá escoger la posibilidad de ver el fichero de salida al terminar de dibujar la curva, en cuyo caso se abrirá un editor ASCII (tipo Bloc de Notas) con el fichero en cuestión, y la posibilidad de no generar este fichero, en cuyo caso no se generará (al elegir esta opción habrán de desactivarse la innecesarias).
Como segundo paso se elegirá el tipo de curva con el que se dibujará la curva de nivel (sección Generar curva). Después elegiremos las propiedades de la curva: capa, color y tipo de línea. En cada lista desplegable se reflejarán los elementos actuales en el dibujo.
Como se ve en el cuadro, habremos de especificar también un estilo de texto, su rotación y su altura, así como dispondremos de la posibilidad de no escribir las marcas en pantalla. También se ofrece en esta sección del letrero una casilla de edición para indicar cuál será la primera de las marcas.
Por último escogeremos el separador de coordenadas en el archivo de entrada, es decir, cuál es el carácter que divide unas componentes de otras: una coma (formato CDF), un espacio blanco (formato SDF) o cualquier otro que, en su caso, se especificará.
El programa dispondrá de una rutina de control de errores, tanto del cuadro de diálogo (para no introducir valores incorrectos) como de errores AutoLISP.
Crear un programa mediante AutoLISP y DCL que dibuje escaleras de caracol en 3D. El cuadro de diálogo puede ser el que sigue:
Como observamos habremos de introducir todos los datos necesarios para el dibujo de la escalera. La opción Hueco interior determina si en por dentro existirá hueco o una columna cilíndrica. Dispondremos de un botón para designar un punto de inserción en pantalla.
Créense rutinas de control de errores y demás.
Diseñar un programa AutoLISP/DCL cuyo cometido será sumar o acumular todas distancias de tramos rectos y curvos de las líneas y/o polilíneas y/o arcos existentes en una capa del dibujo actual. Al final, el programa escribirá un texto personalizable con las cantidades acumuladas. Este programa puede serle muy útil a todo aquel que necesite saber en un momento el total de tramos trazados en un dibujo (en una capa), sean tuberías, circuitos eléctricos, carreteras, etcétera.
El cuadro de diálogo principal del programa será el que se puede observar en la página siguiente.
EL área Actuar en capa define la capa en la cual se realizarán las mediciones. Como vemos puede ser una elegida de la lista desplegable —que contendrá todas las capas del dibujo—, la capa actual o la correspondiente al objeto que se designará (si se elige la última opción). En estos dos último casos la primera opción quedará inhabilitada, evidentemente; en el último caso, se pedirá designar objeto al pulsar el botón Aceptar, antes de proceder a la medición.
En el área Acumular se especifica el tipo de objeto sobre el que actuará: línea, polilínea, arcos o todos (con las correspondientes combinaciones).
En el área Inserción del texto habremos de pulsar el botón designar para escoger un punto de inserción en pantalla. Al volver el cuadro, se reflejarán en las casillas correspondientes las coordenadas X, Y y Z de dicho punto. Además, escogeremos aquí la capa donde se insertará el texto ( Actuación dice relación a la capa elegida en el área primera).
Por último, en el área Mostrar texto describiremos las propiedades del texto (estilo, altura y rotación), así como el texto que aparecerá antes del total acumulado y después del mismo.
El botón Preferencias... nos lleva a otro cuadro de diálogo, cuyo diseño lo vemos en la página siguiente. En este nuevo cuadro elegiremos diversas preferencias (si así lo deseamos) para el texto final escrito en pantalla. Así pues, dispondremos de la posibilidad de mostrar el subtotal de tramos rectos y de tramos curvos —con sus correspondientes textos inicial y final—, la fecha y la hora de la medición y el autor de la misma, así como su empresa y la ubicación de ésta.
Este programa representa ya un alto nivel en la programación en AutoLISP/DCL. Se puede hacer de variadas formas, sobre todo el cuerpo principal donde se realiza la medición. Intentemos escoger la que nos resulte más sencilla y versátil a la hora de tener en cuenta otros aspectos del programa.
|