1. Descripcion general
El lenguaje LinuxCNC G Code se basa en el lenguaje RS274/NGC. El lenguaje de código G se basa en líneas de código. Cada línea (también llamada bloque) puede incluir comandos para hacer varias cosas diferentes. Las líneas de código se puede recopilar en un archivo para crear un programa.
Una línea de código típica consiste en un número de línea opcional al comienzo seguido de una o más palabras. Una palabra consiste en una letra seguida de un número (o algo que se evalúe como un número, como una formula). Una palabra puede dar un comando o proporcionar un argumento a un comando. Por ejemplo, G1 X3 es una línea de código válida con dos palabras. G1 es un comando que significa moverse en línea recta a velocidad de avance programada hasta el punto final programado, y X3 proporciona un argumento de valor (el valor de X debe ser 3 al final del movimiento). La mayoría de los comandos de LinuxCNC G Code comienzan con G o M (de General y Misceláneo). Las palabras para estos comandos se llaman códigos G y códigos M.
El lenguaje LinuxCNC no tiene indicador para el inicio de un programa. El intérprete, sin embargo, se ocupa de los archivos. Un solo programa puede estar en un archivo único, o un programa puede extenderse a través de varios archivos. Un archivo se puede demarcar con porcentajes de la siguiente manera. La primera linea no en blanco de un archivo puede contener solo un signo de porcentaje, %, posiblemente rodeado de espacios en blanco y luego (normalmente al final del archivo) puede haber una línea similar. Demarcar un archivo con porcentajes es opcional si el archivo tiene un M2 o M30, pero es requerido si no los tiene. Se notificará un error si un archivo tiene una línea de porcentaje al principio pero no al final. El contenido util de un archivo delimitado por porcentajes termina después del segundo porcentaje. Cualquier cosa después de ese signo, se ignora.
El lenguaje LinuxCNC G Code tiene dos comandos (M2 o M30), y cualquiera de los dos termina un programa. Un programa puede finalizar antes del final de un archivo. Las líneas de un archivo que ocurren después del final de un programa no son ejecutadas. El intérprete ni siquiera las lee.
2. Formato de una linea
Una línea permitida de código de entrada consiste en lo siguiente, en orden, con la restricción de que hay un máximo (actualmente 256) número de caracteres permitidos en una línea.
-
un carácter de eliminación de bloque, opcional, que es una barra inclinada /.
-
Un número de línea opcional.
-
cualquier cantidad de palabras, configuraciones de parámetros y comentarios.
-
un marcador de fin de línea (retorno de carro o avance de línea o ambos).
Cualquier entrada no permitida explícitamente es ilegal y causará que el intérprete señale un error.
Se permiten espacios y tabulaciones en cualquier lugar de una línea de código sin cambiar el significado de la línea, excepto los comentarios internos. Esto hace que algunos entradas de aspecto extraño sean legales. La línea G0X +0. 12 34Y 7 es legal y equivalente a G0 x + 0.1234 Y7, por ejemplo.
Se permiten líneas en blanco en la entrada. Seran ignoradas.
La entrada no distingue entre mayúsculas y minúsculas, excepto en los comentarios, es decir, cualquier letra fuera de un comentario puede estar en mayúsculas o minúsculas sin cambiar el significado de una línea
2.1. Eliminar Bloque
El carácter opcional de eliminación de bloque es la barra / cuando se coloca el primero en una línea. Algunas interfaces de usuario pueden utilizarlo para omitir líneas de código cuando sea necesario. En Axis, la combinación de teclas Alt-m-/ activa o desactiva la eliminación de bloque. Cuando eliminar bloque está activado, cualquier línea que comience con la barra / se omite.
2.2. Numero de línea
Un número de línea es la letra N seguida de un entero sin signo, seguida opcionalmente por un punto y otro entero sin signo. Por ejemplo, N1234 y N56.78 son números de línea válidos. Pueden ser repetidos o usados fuera de orden, aunque la práctica normal es evitar tal uso. Los números de línea también se pueden omitir, y eso es la práctica normal. No es necesario utilizar un número de línea, pero debe estar en el lugar apropiado si se usa.
2.3. Palabra
Una palabra es una letra distinta de N seguida de un valor real.
Las palabras pueden comenzar con cualquiera de las letras que se muestran en la siguiente tabla. La tabla incluye N para que sea completa, aunque, como se definió anteriormente, los números de línea no son palabras. Varias letras (I, J, K, L, P, R) pueden tener diferentes significados en diferentes contextos. Las letras que hacen referencia a los nombres de los ejes no son válidas en una máquina que no tiene el eje correspondiente.
Letra | Significado |
---|---|
A |
Eje A de la máquina |
B |
Eje B de la máquina |
C |
Eje C de la máquina |
D |
Número de compensación de radio de herramienta |
F |
Velocidad de alimentación o avance |
G |
Función general (Ver tabla Grupos modales) |
H |
Índice de offset de longitud de herramienta |
I |
Offset X para arcos y ciclos fijos G87 |
J |
Offset Y para arcos y ciclos fijos G87 |
K |
Offset Z para arcos y ciclos fijos G87. |
Relacion Husillo-Movimiento para movimientos sincronizados G33. |
|
L |
palabra de parámetro genérico para G10, M66 y otros |
M |
Función miscelánea (Ver tabla Grupos modales) |
N |
Número de línea |
P |
Tiempo de parada en ciclos fijos y con G4. |
Clave utilizada con G10. |
|
Q |
Incremento de alimentación en ciclos fijos G73, G83 |
R |
Radio de arco o plano de ciclo fijo |
S |
Velocidad del husillo |
T |
Selección de herramienta |
U |
Eje U de la máquina |
V |
Eje V de la máquina |
W |
Eje W de la máquina |
X |
Eje X de la máquina |
Y |
Eje Y de la máquina |
Z |
Eje Z de la máquina |
2.4. Numeros
Las siguientes reglas se utilizan para números (explícitos). En estas reglas, un dígito es un solo carácter entre 0 y 9.
-
Un número consta de (1) un signo, más o menos, opcional, seguido de (2) de cero a muchos dígitos, seguido, posiblemente, por (3) un punto decimal, seguido de (4) cero a muchos dígitos, siempre que haya al menos un dígito en algún lugar del número.
-
Hay dos tipos de números: enteros y decimales. Un entero no tiene un punto decimal en él; un decimal si lo tiene.
-
Los números pueden tener cualquier número de dígitos, sujeto a la limitación de longitud de la línea. Solo se retendrán unas diecisiete cifras significativas, suficiente para todas las aplicaciones conocidas.
-
Un número distinto de cero sin signo en su primer carácter, se supone que es positivo.
Observe que los ceros inicial (antes del punto decimal y el primer dígito distinto de cero) y final (después del punto decimal y el último dígito distinto de cero) están permitidos pero no son obligatorios. Un número escrito con los ceros iniciales o finales tendrán el mismo valor cuando se lea como si los ceros adicionales no estuvieran allí.
Los números utilizados para fines específicos en RS274/NGC a menudo están restringidos a algún conjunto finito de valores o a algún rango de valores. En muchos usos, los números decimales deben ser cercanos a enteros; esto incluye el valores de índices (para parámetros y números de ranura de carrusel, por ejemplo), códigos M y códigos G multiplicados por diez. Un número decimal que está destinado a representar un número entero se considera lo suficientemente cerca si está dentro de 0.0001 de un valor entero.
3. Parametros
El lenguaje RS274/NGC admite parámetros, lo qué en otros los lenguajes de programación se llamarían variables. Hay varios tipos de parámetros de diferente propósito y apariencia, cada uno descrito en las siguientes secciones. El único tipo de valor soportado por los parámetros es el punto flotante; no hay tipos de cadena, booleanos o enteros en Código G, a diferencia de otros lenguajes de programación. Sin embargo, las expresiones lógicas se puede formular con operadores booleanos (AND, OR, XOR y los operadores de comparación EQ, NE, GT, GE, LT, LE), y los operadores MOD, ROUND, FUP y FIX admiten aritmética de enteros.
Los parámetros difieren en sintaxis, alcance, comportamiento cuando aún no se han inicializado, modo, persistencia y uso previsto.
- Sintaxis
-
Hay tres tipos de apariencia sintáctica:
-
numerado - #4711
-
nombre local - #<valorlocal>
-
nombre global - #<_valorglobal>
-
- Alcance
-
El alcance de un parámetro es global o local dentro de una subrutina. Los parámetros de subrutina y las variables nombradas locales tienen alcance local. Los parámetros nombrados globales y los parámetros numerados a partir del número 31 tiene alcance global. RS274/NGC utiliza alcance léxico - en una subrutina solo las variables locales definidas allí, y cualquier variable global, son visibles. Las variables locales de un procedimiento de llamada no son visibles por el procedimiento llamado.
- Comportamiento de parámetros no inicializados
-
-
Los parámetros globales no inicializados y los parámetros de subrutina no utilizados devuelve valor cero cuando se usan en una expresión.
-
Los parámetros con nombre no inicializados indican un error cuando se usan en una expresión.
-
- Modo
-
La mayoría de los parámetros son de lectura/escritura y pueden asignarse dentro de una declaración de asignación. Sin embargo, para muchos parámetros predefinidos esto no tiene sentido, por lo que son de solo lectura; puede aparecer en expresiones, pero no en el lado izquierdo de un sentencia de asignación.
- Persistencia
-
Cuando LinuxCNC se cierra, los parámetros volátiles pierden su valores. Todos los parámetros excepto los parámetros numerados en el actual rango persistente
[El rango de parámetros persistentes puede cambiar a medida que avanza el desarrollo. Este rango es actualmente 5161-5390. Se define en la matriz _required_parameters en el archivo src/emc/rs274ngc/interp_array.cc.]
son volátiles. Los parámetros persistentes se guardan en el archivo .var y son restaurados a sus valores anteriores cuando LinuxCNC se inicia de nuevo. los parámetros numerados volatiles se restablecen a cero. - Uso previsto
-
-
parámetros de usuario:: parámetros numerados en el rango 31..5000, y parámetros nombrados globales y locales, excepto parámetros predefinidos. Estan disponible para almacenamiento de uso general de valores de punto flotante, como resultados intermedios, banderas, etc., a lo largo de la ejecución del programa. Son de lectura/escritura (se le puede asignar un valor).
-
parámetros de subrutina - se utilizan para mantener los parámetros reales pasados a una subrutina.
-
parámetros numerados - La mayoría de estos se utilizan para acceder a offsets de sistemas de coordenadas.
-
parámetros del sistema - utilizado para determinar la versión en ejecución. Son de solo lectura.
-
3.1. Parametros numerados
Un parámetro numerado es el carácter de numeral # seguido de un
entero entre 1 y 5602 (actualmente)
[El intérprete RS274/NGC
mantiene una matriz de parámetros numerados. Su tamaño está definido por el
símbolo RS274NGC_MAX_PARAMETERS en el archivo
src/emc/rs274ngc/interp_internal.hh). Este número de
parámetros numéricos también pueden aumentar a medida que el desarrollo agrege soporte para nuevos
parámetros]
. El parámetro es referido
por este entero, y su valor es cualquier número almacenado en el parámetro.
Un valor se almacena en un parámetro con el operador = , por ejemplo:
#3 = 15 (configura el parámetro 3 a 15)
Una configuración de parámetros no toma efecto hasta después de que todos los valores de los parámetros en la misma línea hayan sido encontrados. Por ejemplo, si el parámetro 3 tiene previamente el valor 15 y se interpreta la línea #3=6 G1 X#3, ocurrirá un movimiento directo a un punto donde X es igual a 15 y el valor del parámetro #3 pasara a 6.
El carácter # tiene prioridad sobre otras operaciones, de modo que, por ejemplo, #1+2 significa el número resultante de sumar 2 al valor de parámetro 1, no el valor encontrado en el parámetro 3. Por supuesto, #[1+2] significa el valor encontrado en el parámetro 3. El carácter # puede repetirse; por ejemplo ##2 significa el valor del parámetro cuyo índice es el valor (entero) del parámetro 2.
-
'31 -5000 ' - parámetros de usuario del código G. Estos parámetros son globales en archivos de código G, y disponibles para uso general. Volátiles.
-
5061-5069 - Coordenadas de un resultado de la sonda G38 (X, Y, Z, A, B, C, U, V y W). Las coordenadas están en el sistema de coordenadas en que tuvo lugar el G38. Volátil.
-
5070 - Resultado de la sonda G38 ; 1 si es exitoso, 0 si la sonda no se pudo cerrar. Utilizado con G38.3 y G38.5. Volátil.
-
5161-5169 - Home "G28" para X, Y, Z, A, B, C, U, V y W. Persistente.
-
5181-5189 - Home "G30" para X, Y, Z, A, B, C, U, V y W. Persistente.
-
5210 - 1 si actualmente se aplica el desplazamiento "G52" o "G92", 0 en caso contrario. Volátil por defecto; persistente si DISABLE_G92_PERSISTENCE = 1 en la sección [RS274NGC] del archivo .ini.
-
5211-5219 - offsets compartidos "G52" y "G92" para X, Y, Z, A, B, C, U, V y W. Volátil por defecto; persistente si DISABLE_G92_PERSISTENCE = 1 en la sección [RS274NGC] del archivo .ini.
-
5220 - Sistema de coordenadas número 1-9 para G54 - G59.3. Persistente.
-
5221-5230 - Sistema de coordenadas 1, G54 para X, Y, Z, A, B, C, U, V, W y R. R denota el ángulo de rotación XY alrededor del eje Z. Persistente.
-
5241-5250 - Sistema de coordenadas 2, G55 para X, Y, Z, A, B, C, U, V, W y R. Persistente.
-
5261-5270 - Sistema de coordenadas 3, G56 para X, Y, Z, A, B, C, U, V, W y R. Persistente.
-
5281-5290 - Sistema de coordenadas 4, G57 para X, Y, Z, A, B, C, U, V, W y R. Persistente.
-
5301-5310 - Sistema de coordenadas 5, G58 para X, Y, Z, A, B, C, U, V, W y R. Persistente.
-
5321-5330 - Sistema de coordenadas 6, G59 para X, Y, Z, A, B, C, U, V, W y R. Persistente.
-
5341-5350 - Sistema de coordenadas 7, G59.1 para X, Y, Z, A, B, C, U, V, W y R. Persistente.
-
5361-5370 - Sistema de coordenadas 8, G59.2 para X, Y, Z, A, B, C, U, V, W y R. Persistente.
-
5381-5390 - Sistema de coordenadas 9, G59.3 para X, Y, Z, A, B, C, U, V, W y R. Persistente.
-
5399 - Resultado de M66 - Verifica o espera la entrada. Volátil.
-
5400 - Número de herramienta. Volátil.
-
5401-5409 - Offsets de herramientas para X, Y, Z, A, B, C, U, V y W. Volátil.
-
5410 - Diámetro de herramienta. Volátil.
-
5411 - Ángulo frontal de herramienta. Volátil.
-
5412 - Ángulo posterior de la herramienta. Volátil.
-
5413 - Orientación de herramienta. Volátil.
-
5420-5428 - Posición relativa actual en el sistema de coordenadas activo incluyendo todas los offsets y en las unidades de programa actuales para X, Y, Z, A, B, C, U, V y W, volátiles.
-
5599 - Indicador para controlar la salida de las declaraciones (DEBUG,). 1 = salida, 0 = sin salida; predeterminado = 1. Volátil.
-
5600 - Indicador de fallo del cambiador de herramientas. Utilizado con el componente iocontrol-v2. 1: cambiador de herramientas con fallos, 0: normal. Volátil.
-
5601 - Código de fallo del cambiador de herramientas. Utilizado con el componente iocontrol-v2. Refleja el valor del pin HAL toolchanger-reason si ocurrió un fallo. Volátil.
Los valores de los parámetros en el rango persistente se conservan en el tiempo, incluso si el centro de mecanizado está apagado. LinuxCNC usa un archivo de parámetros para garantizar la persistencia. Es administrado por el interprete. El intérprete lee el archivo cuando se inicia y escribe el archivo cuando sale.
El formato de un archivo de parámetros se muestra en la Tabla formato de archivo de parámetros.
El intérprete espera que el archivo tenga dos columnas. Se salta cualquier líneas que no contienen exactamente dos valores numéricos. Se espera que la primera columna contenga un valor entero (el número de parámetro). La segunda columna contiene un número de coma flotante (último valor del parámetro). El valor se representa como un número de coma flotante de doble precisión dentro del intérprete, pero el punto decimal no se requiere en el archivo.
Pueden agregarse al archivo parámetros definidos por el usuario en el rango (31-5000). Dichos parámetros serán leídos por el intérprete y escritos en el archivo al salir.
Los parámetros faltantes en el rango persistente se inicializarán a cero y se escribiran con sus valores actuales en la próxima operación de guardar.
Los números de los parámetros deben organizarse en orden ascendente. Se señalará el error Archivo de parámetros fuera de servicio si no están en orden ascendente
El archivo original se guarda como un archivo de respaldo cuando se escribe el nuevo archivo.
Número de parámetro | Valor del parámetro |
---|---|
5161 |
0.0 |
5162 |
0.0 |
3.2. Parametros de subrutina
-
1-30 Parámetros locales de argumentos de llamada de subrutina. Estos parámetros son locales a la subrutina. Volátil. Ver también el capítulo sobre códigos O.
3.3. Parametros con nombre
Los parámetros con nombre funcionan como parámetros numerados pero son más fáciles de leer. Todos los nombres de parámetros se convierten a minúsculas y tienen eliminados espacios y tabulaciones, por lo que <param> y <P a R am> se refieren al mismo parámetro. Los parámetros con nombre deben estar encerrados con las marcas < >.
#<parámetro con nombre> es un parámetro con nombre local. Por defecto, un parámetro con nombre es local en el ámbito en el que está asignado. No puede acceder a un parámetro local fuera de su subrutina. Esto significa que dos subrutinas pueden usar los mismos nombres de parámetros sin temor a una subrutina sobreescriba los valores de la otra.
#<_parámetro con nombre global> es un parámetro con nombre global. Son accesibles desde las subrutinas llamadas y pueden establecer valores dentro de subrutinas, accesibles para el llamante. En lo que respecta al alcance, actúan como parámetros numéricos regulares. No se almacenan en archivos.
Ejemplos:
#<_endmill_dia> = 0.049
#<_endmill_rad> = [#<_endmill_dia>/2.0]
o100 call [0.0] [0.0] [#<_inside_cutout>-#<_endmill_dia>] [#<_Zcut>] [#<_feedrate>]
Los parámetros con nombre aparecen cuando se les asigna un valor por primera vez. Los parámetros locales nombrados desaparecen cuando se abandona su alcance, esto es, cuando se vuelve de una subrutina se eliminan todos sus parámetros locales y ya no se puede hacer referencia a ellos.
Es un error utilizar un parámetro con nombre inexistente dentro de una expresión, o en el lado derecho de una asignacion. Imprimir el valor de un parámetro con nombre inexistente con una instrucción DEBUG, como (DEBUG, <no_exito_parameter>) mostrará la cadena #.
Los parámetros globales, así como parámetros locales asignados a nivel global, conservan su valor una vez asignados incluso cuando el programa finaliza y tendrán esos valores cuando el programa se ejecute nuevamente.
La función EXISTS prueba si existe un parámetro con nombre dado.
3.4. Parametros con nombre predefinidos
Los siguientes parámetros globales con nombre, de solo lectura, están disponibles para acceder al estado interno del intérprete y al estado de la máquina. Pueden ser usados en expresiones arbitrarias, por ejemplo para controlar el flujo de programa con sentencias if-then-else. Tenga en cuenta que un nuevo parámetro con nombre predefinido se puede agregar fácilmente, sin cambios en el código .ngc.
-
#<_vmajor> - Versión principal del paquete. Si la versión actual fuera 2.5.2, devolvería 2.5.
-
#<_vminor> - Versión menor del paquete. Si la versión actual fuera 2.6.2, devolvería 0.2.
-
#<_line> - Número de secuencia. Si ejecuta un archivo de código G, esto devuelve el número de línea actual.
-
#<_motion_mode> - Devuelve el modo de movimiento actual del intérprete:
Modo de movimiento | valor de retorno |
---|---|
G1 |
10 |
G2 |
20 |
G3 |
30 |
G33 |
330 |
G38.2 |
382 |
G38.3 |
383 |
G38.4 |
384 |
G38.5 |
385 |
G5.2 |
52 |
G73 |
730 |
G76 |
760 |
G80 |
800 |
G81 |
810 |
G82 |
820 |
G83 |
830 |
G84 |
840 |
G85 |
850 |
G86 |
860 |
G87 |
870 |
G88 |
880 |
G89 |
890 |
-
#<_plane> - devuelve el valor que designa el plano actual:
Plano | valor de retorno |
---|---|
G17 |
170 |
G18 |
180 |
G19 |
190 |
G17.1 |
171 |
G18.1 |
181 |
G19.1 |
191 |
-
#<_ccomp> - Estado de la compensación del cortador. Valores de retorno:
Modo | valor de retorno |
---|---|
G40 |
400 |
G41 |
410 |
G41.1 |
411 |
G41 |
410 |
G42 |
420 |
G42.1 |
421 |
-
#<_metric> - Devuelve 1 si G21 está activado, de lo contrario 0.
-
#<_imperial> - Devuelve 1 si G20 está activado, de lo contrario 0.
-
#<_absolute> - Devuelve 1 si G90 está activado, de lo contrario 0.
-
#<_incremental> - Devuelve 1 si G91 está activado, de lo contrario 0.
-
#<_inverse_time> - Devuelve 1 si el modo de alimentación inversa (G93) está activado, de lo contrario 0.
-
#<_units_per_minute> - Devuelve 1 si el modo de alimentación udes/minuto (G94) está activado, de lo contrario 0.
-
#<_units_per_rev> - Devuelve 1 si el modo udes/revolución (G95) está activado, de lo contrario 0.
-
#<_coord_system> - Devuelve un flotante del nombre del sistema de coordenadas actual (G54..G59.3). Por ejemplo, si está en el sistema de coordenadas G55, el valor de retorno es 550.000000 y si está en G59.1 el valor de retorno es 591.000000.
Modo | valor de retorno |
---|---|
G54 |
540 |
G55 |
550 |
G56 |
560 |
G57 |
570 |
G58 |
580 |
G59 |
590 |
G59.1 |
591 |
G59.2 |
592 |
G59.3 |
593 |
-
#<_tool_offset> - Devuelve 1 si el offset de herramienta (G43) está activado, de lo contrario 0.
-
#<_retract_r_plane> - Devuelve 1 si G98 está configurado, de lo contrario 0.
-
#<_retract_old_z> - Devuelve 1 si G99 está activado, de lo contrario 0.
3.5. Parametros del sistema
-
#<_spindle_rpm_mode> - Devuelva 1 si el modo rpm del cabezal (G97) está activado, de lo contrario 0.
-
#<_spindle_css_mode> - Devuelve 1 si el modo de velocidad de superficie constante (G96) está activado, de lo contrario 0.
-
#<_ijk_absolute_mode> - Devuelve 1 si el modo de distancia de Arco absoluto (G90.1) está activado, de lo contrario 0.
-
#<_lathe_diameter_mode> - Devuelve 1 si el modo de diámetro en torno (G7) está activado, de lo contrario 0.
-
#<_lathe_radius_mode> - Devuelve 1 si el modo de radio en torno (G8) está activado, de lo contrario 0.
-
#<_spindle_on> - Devuelve 1 si el husillo está girando actualmente (M3 o M4), de lo contrario 0.
-
#<_spindle_cw> - Devuelve 1 si la dirección del husillo es en sentido horario (M3), de lo contrario 0.
-
#<_mist> - Devuelve 1 si la niebla (M7) está activada.
-
#<_flood> - Devuelve 1 si la inundación (M8) está activada.
-
#<_speed_override> - Devuelva 1 si la anulación de alimentación (M48 o M50 P1) está activada, de lo contrario 0.
-
#<_feed_override> - Devuelve 1 si el ajuste de alimentación (M48 o M51 P1) está activado, de lo contrario 0.
-
#<_adaptive_feed> - Devuelve 1 si la alimentación adaptativa (M52 o M52 P1) está activada, de lo contrario 0.
-
#<_feed_hold> - Devuelve 1 si el interruptor de retención de alimentación está habilitado (M53 P1), de lo contrario 0.
-
#<_feed> - Devuelve el valor actual de F, no la velocidad de alimentación real.
-
#<_rpm> - Devuelve el valor actual de S, no la velocidad real del husillo.
-
#<_x> - Devuelve la coordenada X relativa actual, incluidos todos los offsets. Igual que #5420.
-
#<_y> - Devuelve la coordenada Y relativa actual, incluidos todos los offsets. Igual que #5421.
-
#<_z> - Devuelve la coordenada Z relativa actual, incluidos todos los offsets. Igual que #5422.
-
#<_a> - Devuelve la coordenada relativa actual A, incluidos todos los offsets. Igual que #5423.
-
#<_b> - Devuelve la coordenada B relativa actual, incluidos todos los offsets. Igual que #5424.
-
#<_c> - Devuelve la coordenada C relativa actual, incluidos todos los offsets. Igual que #5425.
-
#<_u> - Devuelve la coordenada U relativa actual, incluidos todos los offsets. Igual que #5426.
-
#<_v> - Devuelve la coordenada V relativa actual, incluidos todos los offsets. Igual que #5427.
-
#<_w> - Devuelve la coordenada W relativa actual, incluidos todos los offsets. Igual que #5428.
-
#<_current_tool> - Número de la herramienta actual en el husillo. Igual que # 5400.
-
#<_current_pocket> - Devuelve el número de ranura de la herramienta actual.
-
#<_selected_tool> - El número de la herramienta seleccionada por un código T. Por defecto -1.
-
#<_selected_pocket> - El número de ranura seleccionado por un código T. Predeterminado -1 (sin ranura seleccionada).
-
#<_value> - Valor de retorno de la última palabra O return o endsub. Por defecto valor 0 si no hay expresión después de return o endsub. Inicializado a 0 al inicio del programa.
-
#<_value_returned> - 1.0 si la última palabra O return o endsub devolvió un valor, 0 de otra manera. Limpiado por la siguiente llamada O-word.
-
#<_task> - 1.0 si la instancia del intérprete en ejecución es parte de milltask, 0.0 de otra manera. A veces es necesario tratar este caso especialmente para mantener una vista previa adecuada, por ejemplo, cuando se prueba el éxito de una sonda (G38.n) inspeccionando #5070, que siempre fallará en el intérprete de vista previa (por ejemplo, Axis).
-
#<_call_level> - nivel actual de anidamiento de los procedimientos O-word. Para depuracion.
-
#<_remap_level> - nivel actual de la pila de reasignación. Cada reasignación en un bloque agrega uno al nivel de reasignación. Para depuracion.
4. Pines HAL y valores INI
Si está habilitado en el archivo INI G-code tiene acceso a los valores de las entradas del archivo INI y a los pines HAL.
-
#<_ini[section]name> Devuelve el valor del elemento correspondiente en el archivo INI. Por ejemplo, si el archivo ini se ve así:
[SETUP] XPOS = 3.145 YPOS = 2.718
puede referirse a los parámetros nombrados #<_ini[setup]xpos>
y
#<_ini[setup]ypos>
dentro del código G.
EXISTS
puede usarse para probar la presencia de una variable en el archivo ini dado:
o100 if [EXISTS[#<_ini[setup]xpos>]] (debug, [setup]xpos existe: #<_ini[setup]xpos>) o100 else (debug, [setup]xpos no existe) o100 endif
El valor se lee desde el archivo ini una vez y se almacena en caché del interprete. Estos parámetros son de solo lectura: asignar un valor causa un error de tiempo de ejecución. Los nombres no distinguen entre mayúsculas y minúsculas, son convertido a mayúsculas antes de consultar el archivo ini.
-
#<_hal[elemento Hal]> Permite que los programas de código G lean los valores de los pines HAL. El acceso a las variables es de solo lectura; la única forma de dar valores a pines HAL desde código G sigue siendo M62-M65, M67, M68 y los códigos personalizados M100-M199. Tenga en cuenta que el valor leído no se actualizará en tiempo real; normalmente será devuelto el valor que estaba en el pin cuando se inició el programa de código G. Es posible solucionar esto forzando una sincronización de estado. Una forma de hacerlo es con un comando M66 ficticio: M66E0L0
Ejemplo:
(debug, #<_hal[motion-controller.time]>)
El acceso a los items HAL es de solo lectura. Actualmente, solo se puede acceder de esta manera a los nombres HAL en minúsculas.
EXISTS
se puede usar para probar la presencia de un elemento HAL dado:
o100 if [EXISTS[#<_hal[motion-controller.time]>]] (debug, [motion-controller.time] existe: #<_hal[motion-controller.time]>) o100 else (debug, [motion-controller.time] no existe) o100 endif
Esta característica fue motivada por el deseo de una conexion más fuerte entre
componentes de la interfaz de usuario como GladeVCP
y` PyVCP` para actuar como
fuente de parámetros para manejar el comportamiento del archivo NGC. La alternativa -
pasar por los pines M6x y conectarlos - tiene un
espacio de nombres límitado y no mnemotécnico y es innecesariamente engorroso como
mecanismo de comunicación UI/Intérprete.
5. Expresiones
Una expresión es un conjunto de caracteres que comienzan con un corchete izquierdo [ y terminan con un corchete derecho de equilibrio ]. Entre los corchetes hay números, valores de parámetros, operaciones matemáticas y otras expresiones. Una expresión se evalúa para producir un número. Las expresiones en una línea se evalúan cuando la línea se lee, antes de que se ejecute nada en la línea. Un ejemplo de una expresión es [1 + acos[0] - [#3 ** [4.0/2]]].
6. Operadores binarios
Los operadores binarios solo aparecen dentro de las expresiones. Hay cuatro operaciones matemáticas básicas: suma (+), resta (-), multiplicación (*) y división (/). Hay tres operaciones lógicas: o no exclusivo (OR), o exclusivo (XOR), y lógico AND). La octava operación es la operación de módulo (MOD). La novena operación es la operación potencia (**); elevar el número a la izquierda de la operación al exponente de la derecha. Los operadores relacionales son igualdad (EQ), desigualdad (NE), estrictamente mayor que (GT), mayor o igual que (GE), estrictamente menor que (LT), y menor o igual que (LE).
Las operaciones binarias se dividen en varios grupos según su precedencia. Si las operaciones en diferentes grupos de precedencia se unen (por ejemplo, en la expresión [2.0 / 3 * 1.5 - 5.5 / 11.0]), las operaciones en un grupo superior deben realizarse antes de las operaciones en un grupo inferior. Si una expresión contiene más de una operación del mismo grupo (como el primer / y * en el ejemplo), la operación mas a la izquierda se realiza primero. Así, el ejemplo es equivalente a: [ [ [2.0 / 3] * 1.5] - [5.5 / 11.0] ], que es equivalente a [1.0 - 0.5], que es 0.5.
Las operaciones lógicas y el módulo pueden realizarse en cualquier número, no solo en enteros. El número cero es equivalente a falso lógico, y cualquier número distinto de cero es equivalente a verdadero lógico.
Operador | Precedencia |
---|---|
** |
más alto |
* / MOD |
|
+ - |
|
EQ NE GT GE LT LE |
|
AND OR XOR |
más bajo |
7. Igualdad y valores de coma flotante
El lenguaje RS274/NGC solo admite valores de punto flotante de precisión finita. Por lo tanto, probar la igualdad o desigualdad de dos valores de punto flotante es inherentemente problemático. El interprete resuelve este problema considerando valores iguales si su diferencia absoluta es menor que 0.0001 (este valor se define como TOLERANCE_EQUAL en src/emc/rs274ngc/interp_internal.hh).
8. Funciones
Las funciones disponibles se muestran en la siguiente tabla. Los argumentos unarios de las operaciones que toman medidas de ángulo (COS, SIN y TAN) están en grados. Los valores devueltos por operaciones unarias que devuelven medidas de ángulo (ACOS, ASIN y ATAN) también están en grados.
Nombre de la función | Resultado de la función |
---|---|
ATAN[arg]/[arg] |
Tangente inversa de cuatro cuadrantes |
ABS[arg] |
Valor absoluto |
ACOS[arg] |
Coseno inverso |
ASIN[arg] |
Seno inverso |
COS[arg] |
Coseno |
EXP[arg] |
e elevado al exponente dado |
FIX[arg] |
Redondear hacia abajo a entero |
FUP[arg] |
Redondear a entero hacia arriba |
ROUND[arg] |
Redondear al entero más cercano |
LN[arg] |
Logaritmo Base-e |
SIN[arg] |
Seno |
SQRT[arg] |
Raíz cuadrada |
TAN[arg] |
Tangente |
EXISTS[arg] |
Comprueba el parámetro con nombre |
La función FIX se redondea hacia la izquierda (menos positiva o más negativa) en una recta numérica, de modo que FIX[2.8] = 2 y FIX[-2.8] = -3.
La operación FUP se redondea hacia la derecha (más positiva o menos negativa) en una recta numérica; FUP[2.8] = 3 y FUP[-2.8] = -2.
La función EXISTS verifica la existencia de un solo parámetro con nombre. Solo toma un parámetro con nombre y devuelve 1 si existe y 0 si no existe. Es un error si usa un parámetro numerado o una expresión. Aquí hay un ejemplo para el uso de la función EXISTS:
o<test> sub
o10 if [EXISTS[#<_global>]]
(debug, _global existe y tiene el valor #<_global>)
o10 else
(debug, _global does no existe)
o10 endif
o<test> endsub
o<test> call
#<_global> = 4711
o<test> call
m2
9. Items repetidos
Una línea puede tener cualquier número de palabras G, pero dos palabras G del mismo grupo modal no pueden aparecer en la misma línea. Consulte la sección Grupos Modales para obtener más información.
Una línea puede tener de cero a cuatro palabras M. Dos palabras M del mismo grupo modal no deben aparecer en la misma línea.
Para todas las demás letras legales, una línea puede tener solo una palabra que comienza con esa letra.
Si una configuración del mismo parámetro se repite en una línea, #3 = 15 #3 = 6, por ejemplo, solo la última configuración tendrá efecto. Es absurdo, pero no ilegal, establecer el mismo parámetro dos veces en la misma línea.
Si aparece más de un comentario en una línea, solo el último será usado; cada uno de los otros comentarios será leído y su formato será marcado, pero se ignorará a partir de entonces. Poner más de un comentario en una línea es muy raro.
10. Orden de items
Los tres tipos de items cuyo orden puede variar en una línea (como se indica en el comienzo de esta sección) son palabras, configuración de parámetros y comentarios. Imagine que estos tres tipos de elementos se dividen en tres grupos por tipo.
El primer grupo (las palabras) puede reordenarse de cualquier manera sin cambiar el significado de la línea.
Si se reordena el segundo grupo (la configuración de parámetros), no habrá cambio en el significado de la línea a menos que el mismo parámetro sea establecido más de una vez. En este caso, solo la última configuración del parámetro tendrá efecto. Por ejemplo, después de que la línea #3 = 15 #3 = 6 ha sido interpretada, el valor del parámetro 3 será 6. Si el orden se invierte a #3 = 6 #3 = 15 y se interpreta la línea, el valor del parámetro 3 será 15.
Si el tercer grupo (los comentarios) contiene más de un comentario y se reordena, solo se utilizará el último comentario.
Si cada grupo se mantiene en orden o se reordena sin cambiar el significado de la línea, entonces los tres grupos pueden estar intercalados en cualquier forma sin cambiar el significado de la línea. Por ejemplo, la linea g40 g1 #3 = 15 (foo) #4=-7.0 tiene cinco elementos y significa exactamente lo mismo en cualquiera de los 120 posibles ordenes (por ejemplo #4=-7.0 g1 #3=15 g40 (foo)) de los cinco items.
11. Comandos y Modos de Maquina
Muchos comandos hacen que el controlador cambia de un modo a otro, y el modo permanece activo hasta que algún otro comando lo cambie implícita o explícitamente. Tales comandos se denominan modales. Por ejemplo, si el refrigerante está encendido, permanece encendido hasta que sea explícitamente apagado. Los códigos G para movimiento también son modales. Si un G1 (movimiento recto) se da en una línea, se ejecutará nuevamente en la línea siguiente si hay una o más palabras de eje disponibles en esa línea, a menos que en ella se dé un comando explícito usando las palabras de eje o cancelando el movimiento.
Los códigos no modales solo tienen efecto en las líneas en las que se encuentran. Por ejemplo, G4 (Dwell) no es modal.
12. Coordenadas Polares
Las coordenadas polares se pueden usar para especificar la coordenada XY de un movimiento. El @n es la distancia y ^n es el ángulo. La ventaja de esto está en cosas como círculos de agujeros de pernos que se pueden hacer de manera muy simple moviéndose a un punto en el centro del círculo, estableciendo el desplazamiento y luego moviendose hacia el primer agujero para luego ejecutar el ciclo de perforación. Las coordenadas polares siempre son desde la posición cero XY actual. Para cambiar las coordenadas polares del cero máquina, use un desplazamiento o seleccione un sistema de coordenadas.
En modo absoluto, la distancia y el ángulo son desde la posición cero XY y el ángulo comienza con 0 en el eje X positivo y aumenta en dirección CCW sobre el eje Z. El código G1 @1 ^90 es el mismo que G1 Y1.
En modo relativo, la distancia y el ángulo también son desde el cero XY pero son acumulativos. Puede ser confuso al principio cómo funciona esto en modo incremental.
Por ejemplo, si tiene el siguiente programa, puede esperar que sea un patrón cuadrado
F100 G1 @.5 ^90
G91 @.5 ^90
@.5 ^90
@.5 ^90
@.5 ^90
G90 G0 X0 Y0 M2
Puede ver en la siguiente figura que la salida no es lo que usted podría esperar. Ya que agregamos 0.5 a la distancia cada vez, la distancia desde la posición XY cero aumentó con cada línea.
Espiral polar
El siguiente código producirá nuestro patrón cuadrado.
F100 G1 @.5 ^90
G91 ^90
^90
^90
^90
G90 G0 X0 Y0 M2
Como puede ver solo agregando al ángulo 90 grados cada vez, la distancia del punto final es la misma para cada línea.
Cuadrado polar
Es un error si:
-
Se inicia un movimiento incremental en el origen
-
Se usa una mezcla de palabras Polar y X o Y
13. Grupos modales
Los comandos modales se organizan en conjuntos llamados grupos modales, y solo un miembro de un grupo modal puede estar en vigor en cualquier momento. En general, un grupo modal contiene comandos para los cuales es lógicamente imposible que dos miembros entren en vigencia al mismo tiempo, como medida en pulgadas y medida en milímetros. Un centro de mecanizado puede estar en muchos modos al mismo tiempo, con un modo de cada grupo modal en vigor. Los grupos modales se muestran en la siguiente tabla.
Significado del grupo modal | Miembros |
---|---|
Detención (Grupo 4) |
M0, M1, M2, M30, M60 |
Husillo (Grupo 7) |
M3, M4, M5 |
Refrigerante (Grupo 8) |
(M7 M8 puede estar ambos ON), M9 |
Interruptores de ajuste (Grupo 9) |
M48, M49 |
Definido por el usuario (Grupo 10) |
M100-M199 |
Para varios grupos modales, cuando un centro de mecanizado está listo para aceptar comandos, un miembro del grupo debe estar en vigor. Hay por defecto ajustes para estos grupos modales. Cuando el centro de mecanizado está encendido o reinicializado, los valores predeterminados entran automáticamente en efecto.
El grupo 1 es un grupo de códigos G para movimiento. Uno de ellos siempre está vigente. A ese se le llama modo de movimiento actual.
Es un error colocar un código G del grupo 1 y un código G del grupo 0 en la misma línea si ambos usan palabras de eje. Si un código G del grupo 1 que usa palabras de eje estaba implícitamente vigente en una línea (por haber sido activado en una línea anterior) y un código G del grupo 0 que usa las palabras de eje aparece en la línea, la actividad del código G del grupo 1 es suspendida para esa línea. Los códigos G del grupo 0 que usan palabras de eje son G10, G28, G30, G52 y G92.
Es un error incluir palabras no relacionadas en una línea con control de flujo O-.
14. Comentarios
Se pueden agregar comentarios a las líneas de código G para ayudar a aclarar la intención del programador. Los comentarios se pueden incrustar en una línea usando paréntesis () o al final de una línea usando un punto y coma. El punto y coma no se trata como el comienzo de un comentario cuando está encerrado entre paréntesis
Los comentarios pueden aparecer entre palabras, pero no entre palabras y sus parámetros correspondientes. Por tanto, S100 (velocidad establecida) F200 (alimentación) está bien mientras que S (velocidad) 100F (alimentación) no lo está.
G0 (Rápido para comenzar) X1 Y1
G0 X1 Y1 (Rápido para comenzar; pero no olvide el refrigerante)
M2 ; Fin del programa.
Hay varios comentarios activos que parecen comentarios pero causan alguna acción, como (debug, ..) o (print, …). Si hay varios comentarios en una línea, solo se interpretará el último comentario de acuerdo con estas reglas. Por lo tanto, un comentario normal después de un comentario activo deshabilitará el comentario activo. Por ejemplo, (foo) (debug, # 1) imprimirá el valor del parámetro #1; sin embargo (debug, #1) (foo) no lo hará.
Un comentario introducido por un punto y coma es, por definición, el último comentario en esa línea, y siempre se interpretará para la sintaxis activa de comentarios.
NOTA: Los comentarios en línea en palabras O no deben usarse. Vea la sección del Código O comentarios para más información.
15. Mensajes
-
(MSG,) - muestra el mensaje si aparece MSG después del paréntesis izquierdo y antes de cualquier otro caracter imprimible. Se permiten variantes de MSG que incluyen espacios en blanco y minúsculas. El resto de los caracteres antes del paréntesis derecho se consideran un mensaje. Los mensajes deben mostrarse en el dispositivo de visualización de mensajes del interfaz de usuario, si se proporciona.
(MSG, esto es un mensaje)
16. Registro de sonda
-
(PROBEOPEN filename.txt) - abrirá filename.txt y almacenará 9 números de coordenadas, XYZABCUVW, de cada sondeo recto exitoso en el.
-
(PROBECLOSE) - cerrará el archivo abierto. Para más información sobre sondeo ver la sección G38.
17. Registro
-
(LOGOPEN, filename.txt) - abre el archivo de registro nombrado. Si el archivo ya existe, se trunca.
-
(LOGAPPEND, filename) - abre el archivo de registro nombrado. Si el archivo ya existe, los datos se adjuntan.
-
(LOGCLOSE) - cierra un archivo de registro abierto.
-
(LOG,) - todo lo sigue a la , se escribe en el archivo de registro si está abierto. Admite la expansión de parámetros como se describe a continuación.
Ejemplos de registro están en nc_files/examples/smartprobe.ngc y en nc_files/ngcgui_lib/rectange_probe.ngc archivos de código G de muestra.
18. Mensajes de depuracion
-
(DEBUG,) - muestra un mensaje como (MSG,) con la adición de manejo especial de parámetros de comentarios como se describe a continuación.
19. Imprimir mensajes
-
(PRINT,) - los mensajes se envían a stderr con un manejo especial para parámetros como se describe a continuación.
20. Parametros de comentario
En los comentarios DEBUG, PRINT y LOG, los valores de los parámetros en el mensaje se expanden.
Por ejemplo: para imprimir una variable global con nombre en stderr (el valor predeterminado ventana de consola).
(print,endmill dia = #<_endmill_dia>)
(print,el valor de la variable 123 es: #123)
Dentro de los tipos de comentarios anteriores, se reemplazan secuencias como #123 por el valor del parámetro 123. Secuencias como #<nombre de parámetro> son reemplazadas por el valor del parámetro nombrado. Los parámetros nombrados tendrán los espacio en blanco eliminados. Por tanto, #<parámetro con nombre> se convertirá en # <parametroconnombre>.
21. Requisitos de archivos
Un archivo de código G debe contener una o más líneas de código G y debe terminarse con un Final de Programa. Cualquier código G pasado el final del programa no se evalúa.
Si no se usa un código de finalización de programa, se utilizarán un par de signos de porcentaje % con el primer signo de porcentaje en la primera línea del archivo seguido de una o más líneas de código G y un segundo signo de porcentaje. Cualquier código pasado el segundo signo de porcentaje no es evaluado.
Aviso
|
Usar % al principio y final de un archivo de código G no hará lo mismo que usar un Final de Programa. Usando %, la máquina estará en cualquier estado en que el programa la dejó, el husillo y el refrigerante aún pueden estar encendidos y cosas como G90/91 se dejan como el último programa las configuró. Si no usa un preámbulo apropiado, el próximo programa podría comenzar en una condición peligrosa. |
Nota
|
El archivo debe crearse con un editor de texto como Gedit y no con un procesador como Open Office Word Processor. |
22. Tamaño de archivo
El intérprete y el planificador de tareas están cuidadosamente escritos para que el único límite en el tamaño del programa sea la capacidad del disco. La interfaz TkLinuxCNC y Axis cargan el texto del programa para mostrarlo al usuario, y entonces la RAM se convierte en un factor limitante. En Axis, donde se dibuja la gráfica de vista previa por defecto, el tiempo de redibujo también se convierte en un límite práctico en el tamaño del programa. La vista previa se puede desactivar en Axis para acelerar la carga de grandes programas. En Axis, las secciones de la vista previa se pueden desactivar usando comentarios de control de vista previa.
23. Orden de ejecución del Codigo G
El orden de ejecución de los elementos en una línea no se define por la posición de cada elemento en la línea, sino según la siguiente lista:
-
Comandos O-word (opcionalmente seguidos de un comentario, pero no se permiten otras palabras en la misma línea)
-
Comentario (incluido mensajes)
-
Establecer el modo de velocidad de alimentación (G93, G94).
-
Establecer la velocidad de alimentación (F).
-
Establecer la velocidad del husillo (S).
-
Seleccionar herramienta (T).
-
I/O en pines HAL (M62-M68).
-
Cambiar herramienta (M6) y Establecer número de herramienta (M61).
-
Husillo encendido o apagado (M3, M4, M5).
-
Guardar estado (M70, M73), Restaurar estado (M72), Invalidar estado (M71).
-
Refrigerante activado o desactivado (M7, M8, M9).
-
Activar o desactivar los ajustes (M48, M49, M50, M51, M52, M53).
-
Comandos definidos por el usuario (M100-M199).
-
Dwell (G4).
-
Establecer plano activo (G17, G18, G19).
-
Establecer unidades de longitud (G20, G21).
-
Compensación de radio de corte activada o desactivada (G40, G41, G42)
-
Offset de longitud del cortador activada o desactivada (G43, G49)
-
Selección del sistema de coordenadas (G54, G55, G56, G57, G58, G59, G59.1, G59.2, G59.3).
-
Establecer el modo de control de ruta (G61, G61.1, G64)
-
Establecer el modo de distancia (G90, G91).
-
Establecer el modo de retracción (G98, G99).
-
Ir a la ubicación de referencia (G28, G30) o cambiar datos del sistema de coordenadas (G10) o establecer offsets de eje (G52, G92, G92.1, G92.2, G94).
-
Realizar movimiento (G0 a G3, G33, G38.n, G73, G76, G80 a G89), como se modificó (posiblemente) por G53.
-
Detener (M0, M1, M2, M30, M60).
24. Buenas practicas de código G
Use al menos 3 dígitos después del decimal al fresar en milímetros, y al menos 4 dígitos después del decimal al fresar en pulgadas.
El código G es más legible cuando aparece al menos un espacio antes de las palabras. Si bien está permitido insertar espacios en blanco en medio de los números, no hay razón para hacerlo.
Los arcos de formato central (que usan I- J- K- en lugar de R-) se comportan más consistentemente que los arcos de formato R, particularmente para ángulos incluidos cerca de 180 o 360 grados.
Cuando la ejecución correcta de su programa depende de la configuración modal, asegúrese de configurarlos al comienzo del programa de pieza. Los modos pueden llegar desde programas anteriores y desde los comandos MDI.
Preámbulo de ejemplo para una fresadora.
G17 G20 G40 G49 G54 G80 G90 G94
G17 usar plano XY, G20 modo pulgadas, G40 cancelar compensación de diámetro, G49 cancelar offset de longitud, G54 usar sistema de coordenadas 1, G80 cancelar ciclos fijos, G90 modo de distancia absoluta, G94 modo de avance/minuto.
Quizás la configuración modal más crítica es la unidad de distancia; si usted no incluyen G20 o G21, entonces diferentes máquinas fresarán el programa a diferentes escalas. Otras configuraciones, como el modo de retorno en los ciclos fijos también pueden ser importantes.
Ignore todo en la Sección Orden de ejecución, y en su lugar no escriba ninguna línea de código que sea ambigua.
No use y establezca un parámetro en la misma línea, aunque la semántica está bien definida. Actualizar una variable a un nuevo valor, como #1=[#1+#2] está bien.
Los números de línea no ofrecen beneficios. Cuando se informan números de línea en mensajes de error, los números se refieren al número de línea en el archivo, no al valor de palabras N.
25. Ejes lineales y rotativos
Puesto que el significado de una palabra F en el modo de alimentación por minuto varía dependiendo de qué ejes se ordena mover, y ya que la cantidad del material eliminado no depende solo de la velocidad de alimentación, puede ser más fácil usar el modo de alimentación de tiempo inverso G93 para lograr la tasa de eliminación de material deseada.
26. Mensajes de error comunes
-
Código G fuera de rango - se utilizó un código G mayor que G99; el alcance de los códigos G en LinuxCNC son 0 - 99. No todos los números entre 0 y 99 son código G válidos.
-
Código g desconocido utilizado - se utilizó un código G que no forma parte de LinuxCNC.
-
palabra i, j, k sin Gx para usarla - las palabras i, j y k deben usarse en la misma línea del código G.
-
No se pueden usar valores de eje sin un código g que los use - Los valores de eje no debe usarse en una línea sin un código G modal vigente o un código G en la misma linea.
-
Archivo finalizado sin signo de porcentaje o fin de programa - Cada archivo de código G debe termina en un M2 o M30 o estar envuelto con signos de porcentaje %.