1. Componentes del archivo INI

Un archivo INI típico sigue un diseño bastante simple, que incluye;

  • comentarios

  • secciones

  • variables

Cada uno de estos elementos está separado en líneas individuales. Cada final de línea o el carácter de nueva línea crea un nuevo elemento.

1.1. Comentarios

A comment line is started with a ; or a # mark. When the INI reader sees either of these marks on a line, the rest of the line is ignored by the software. Comments can be used to describe what an INI element will do.

; Este es mi archivo de configuración de fresadora.
# Configurado el 12 de enero de 2012

Los comentarios también se pueden usar para desactivar una variable. Esto hace más fácil elegir entre diferentes variables.

DISPLAY = axis
# DISPLAY = touchy

En esta lista, la variable DISPLAY se establecerá en Axis porque el otro valor está comentado. Si alguien edita descuidadamente una lista como esta y deja dos de las líneas sin comentar, se utilizará la primera encontrada.

Note that inside a variable’s value, the "#" and ";" characters are still comments. You should use double or single quoted strings if you need to embed # or ; characters:

# Below results in INCORRECT=value
# because comments are stripped
INCORRECT = value # and a comment

# Correct embedding
CORRECT = "value # and an embedded # char"

1.2. Secciones

Related parts of an INI file are separated into sections. A section name is enclosed in brackets like this: [THIS_SECTION]. The order of sections is unimportant. Sections begin at the section name and end at the next section name. Section identifiers are case senstive and can only contain letters A-Z, a-z, digits 0-9 and underscore (_). Additionally, section identifiers cannot start with a digit.

Las siguientes secciones son utilizadas por LinuxCNC:

  • [EMC] información general

  • [DISPLAY] configuraciones relacionadas con la interfaz gráfica de usuario

  • [FILTER] configuración de los programas de filtro de entrada

  • [RS274NGC] configuración utilizada por el intérprete de código G

  • [EMCMOT] configuraciones utilizadas por el controlador de movimiento en tiempo real

  • [TASK] configuraciones utilizadas por el controlador de tareas

  • [HAL] especifica archivos .hal

  • [HALUI] comandos MDI utilizados por HALUI

  • [APPLICATIONS] otras aplicaciones que iniciará LinuxCNC

  • [TRAJ] configuraciones adicionales utilizadas por el controlador de movimiento en tiempo real

  • [JOINT_n] variables de articulaciones individuales

  • [AXIS_l] variables de eje individuales

  • [KINS] variables de cinemáticas

  • [EMCIO] configuración utilizada por el controlador de E/S

1.3. Variables

A variable line is made up of a variable name, an equals sign (=), and a value. A variable identifier is case sensitive and may only consist of letters A-Z, a-z, digits 0-9 and underscore (_). Additionally, variable identifiers cannot start with a digit. White space at the beginning of the line and after the variable identifier, up to the equals sign, is ignored.

Ejemplo de variable
MACHINE = Mi máquina

A variable line may be extended to multiple lines with a terminal backslash (\) character. There may be white space following the trailing backslash character, but this is strongly discouraged.

Los identificadores de sección no pueden extenderse a varias líneas.

Ejemplo de variable con línea extendida
APP = sim_pin \
ini.0.max_acceleration \
ini.1.max_acceleration \
ini.2.max_acceleration \
ini.0.max_velocity \
ini.1.max_velocity \
ini.2.max_velocity

A specific variable in a specific sections is often denoted in the documentation as [SECTION]VARIABLE. This specification mirrors the same way they are specified in HAL files for expansion.

Variable values may be quoted to ensure proper space and special character embedding in literal or escaped forms. Both single and double quoted values are allowed. Mutiple quoted value segments are merged into one value. Embedding quotes in quoted values must use the backslash \\ character to escape the embedded quote if it is the same kind as the enclosing quotes. Double quotes values also support all common escape formats and full Unicode:

  • control: \\[abfnrtv]

  • octal: \\[0-2][0-7]{0,2}

The resulting value is always converted into UTF-8 and checked for validity. It is not allowed to embed NUL characters either literally or by using an escape.

Value Quote and Escape Example
STRING = "Hello World!"
STRING = 'Hello World Too!'

# The following would become: Hello World!
STRING = "Hello" \
" " \
'World' \
"!"

EMBED = "Literal single ' in double"
EMBED = 'Literal double " in single'
EMBED = "Literal double \" in double"
EMBED = 'Literal single \' in single'

SMILE = "\\370\\237\\230\\200 = 😀"
SMILE = "\\xf0\\x9f\\x98\\x80 = 😀"
SMILE = "\\ud83d\\ude00 = 😀"
SMILE = "\\U0001f600 = 😀"

Variables' value can have types associated when they are read by LinuxCNC. The types are enforced by the INI file reader when the appropriate function calls are performed. All values may always be read as string. Conversion into other types has restrictions. Possible types are:

  • string - the value is taken as-is

  • boolean - only boolean words are accepted

  • signed integer - whole numbers in decimal, hexadecimal, octal or binary bases

  • unsigned integer - whole numbers in decimal, hexadecimal, octal or binary bases

  • real - floating point values (always using decimal point)

  • enumeration - a restricted set of keys to represent a value or function

Signed and unsigned integers are read and converted as 64-bit numbers when marked as s64 and u64. Plain old 32-bit integers are marked int and are always signed. The default number base is decimal. Alternative bases may be specified using a prefix. The complete list of valid integer numbers:

  • \[0-9]+ - decimal

  • 0x\[0-9A-Fa-f]+ - hexadecimal

  • 0o\[0-7]+ - octal

  • 0b\[01]+ - binary

Signed integers may be preceded by a plus (+) or minus (-) sign, regardless number base. Unsigned integers will generate a warning if they are preceded by a minus (-) sign upon conversion.

Boolean values are case insensitive and allow the following words:

  • true/enabled - TRUE, YES ON or 1

  • false/disabled - FALSE, NO OFF or 0

Enumerations are a set of keywords defined by LinuxCNC and interpreted to mean a setting, value or functionality. The exact values are declared in the individual variable description and the variables are marked with enum. Most enumerations are interpreted without case. It is noted in the variable description if case matters.

Some LinuxCNC variables are special in that their format is interpreted as a multi-valued entry. These variables have an appropriate description below of the format expected.

Variables that are used by LinuxCNC must always use the section names and variable names as shown. Any custom or private variables and sections are up to the user.

1.4. Secciones personalizadas y variables

La mayoría de las configuraciones de muestra utilizan secciones y variables personalizadas para poner todas las configuraciones en una ubicación para mayor comodidad.

Para agregar una variable personalizada a una sección LinuxCNC existente, simplemente incluye la variable en esa sección.

Ejemplo de variable personalizada, asignando el valor LINEAR a la variable TYPE, y el valor 16000 a la variable SCALE.
[JOINT_0]
TYPE = LINEAR
...
SCALE = 16000

Para introducir una sección personalizada con sus propias variables, agregar la sección y variables al archivo INI.

Ejemplo de sección personalizada
[PROBE]
Z_FEEDRATE = 50
Z_OFFSET = 12
Z_SAFE_DISTANCE = -10

Para usar las variables personalizadas en tu archivo HAL, coloca la sección y el nombre de la variable en lugar del valor.

Ejemplo de HAL
setp offset.1.offset [PROBE]Z_OFFSET
setp stepgen.0.position-scale [JOINT_0]SCALE
Nota
El valor almacenado en la variable debe coincidir con el tipo especificado por el pin del componente.

Para usar las variables personalizadas en el código G, usar la sintaxis de variable global #<_ini[sección]variable>. El siguiente ejemplo muestra una simple rutina touch-off del eje Z para una ruteadora o fresadora que utiliza una placa de sonda.

Please note that G-code embedded ini variables are converted to upper case before they are searched in the INI file. The #<_ini[section]variable> should be called [SECTION]VARIABLE in the INI file.

Ejemplo de código G
G91
G38.2 Z#<_ini[probe]z_safe_distance> F#<_ini[probe]z_feedrate>
G90
G1 Z#5063
G10 L20 P0 Z#<_ini[probe]z_offset>

1.5. Inclusión de archivos

Un archivo INI puede incluir el contenido de otro archivo usando una directiva #INCLUDE.

Formato #INCLUDE
#INCLUDE archivo

El nombre del archivo se puede especificar como:

  • un archivo en el mismo directorio que el archivo INI

  • un archivo relativo al directorio de trabajo

  • un nombre de archivo absoluto (comienza con /)

  • a user-home-relative file name (starts with a ~/)

Se admiten varias directivas #INCLUDE.

Ejemplos de #INCLUDE
#INCLUDE joint_0.inc
#INCLUDE ../parallel/joint_1.inc
#INCLUDE below/joint_2.inc
#INCLUDE /home/myusername/myincludes/display.inc
#INCLUDE ~/linuxcnc/myincludes/rs274ngc.inc

The #INCLUDE directives are supported up to 16 levels — an included file may include additional files up to 16 levels deep. Recursive inclusion of files is detected and flagged as an error. The recommended file extension is .inc. Do not use a file extension of .ini for included files.

2. Secciones del archivo INI

Variables in each section have an associated type as denoted in parentheses after the variable.

2.1. Sección [EMC]

  • VERSION = 1.1 - (string) The format version of this configuration. Any value other than 1.1 will cause the configuration checker to run and try to update the configuration to the new style joint axes type of configuration.

  • MACHINE = My Controller - (string) This is the name of the controller, which is printed out at the top of most graphical interfaces. You can put whatever you want here as long as you make it a single line long.

  • DEBUG = 0 - (u64) Debug level 0 means no messages will be printed when LinuxCNC is run from a terminal. Debug flags are usually only useful to developers. See src/emc/nml_intf/debugflags.h for other settings.

  • RCS_DEBUG = 1 (u64) RCS debug messages to show. Print only errors (1) by default if EMC_DEBUG_RCS and EMC_DEBUG_RCS bits in DEBUG are unset, otherwise print all (-1). Use this to select RCS debug messages. See src/libnml/rcs/rcs_print.hh for all MODE flags.

  • RCS_DEBUG_DEST = STDOUT - (enum) how to output RCS_DEBUG messages (NULL, STDOUT, STDERR, FILE, LOGGER, MSGBOX).

  • RCS_MAX_ERR = -1 - (int) Number after which RCS errors are not reported anymore (-1 = infinite).

  • NML_FILE = /usr/share/linuxcnc/linuxcnc.nml - (string) Set this if you want to use a non-default NML configuration file.

2.2. Sección [DISPLAY]

Los diferentes programas de interfaz de usuario utilizan diferentes opciones, y no todas las opciónes son compatibles con todas las interfaces de usuario. Hay varias interfaces como AXIS, GMOCCAPY, Touchy, QtDragon y Gscreen de QtVCP. AXIS es una interfaz para usar con computadora y monitor normales. Touchy es para usar con pantallas táctiles. GMOCCAPY se puede usar en ambos tipos y también ofrece muchas conexiones para controles de hardware. Las descripciones de las interfaces se encuentran en la sección Interfaces del manual de usuario.

  • DISPLAY = axis - (string) The file name of the executable providing the user interface to use. Prominent valid options are (all in lower case): axis, touchy, gmoccapy, gscreen, tklinuxcnc, qtvcp, qtvcp qtdragon or qtvcp qtplasmac.

  • POSITION_OFFSET = RELATIVE - (enum) The coordinate system (RELATIVE or MACHINE) to show on the DRO when the user interface starts. The RELATIVE coordinate system reflects the G92 and G5x coordinate offsets currently in effect.

  • POSITION_FEEDBACK = COMMANDED - (enum) The coordinate value (COMMANDED or ACTUAL) to show on the DRO when the user interface starts. In AXIS this can be changed from the View menu. The COMMANDED position is the position requested by LinuxCNC. The ACTUAL position is the feedback position of the motors if they have feedback like most servo systems. Typically the COMMANDED value is used.

  • DRO_FORMAT_MM = %+08.6f - (string) Override the default DRO formatting in metric mode (normally 3 decimal places, padded with spaces to 6 digits to the left). The example above will pad with zeros, display 6 decimal digits and force display of a + sign for positive numbers. Formatting follows Python practice: https://docs.python.org/2/library/string.html#format-specification-mini-language . An error will be raised if the format can not accept a floating-point value.

  • DRO_FORMAT_IN = % 4.1f - (string) Override the default DRO formatting in imperial mode (normally 4 decimal places, padded with spaces to 6 digits to the left). The example above will display only one decimal digit. Formatting follows Python practice: https://docs.python.org/2/library/string.html#format-specification-mini-language . An error will be raised if the format can not accept a floating-point value.

  • CONE_BASESIZE = .25 - (real) Override the default cone/tool base size of .5 in the graphics display. Valid values are between 0.025 and 2.0.

  • DISABLE_CONE_SCALING = TRUE - (bool) Any non-empty value (including "0") will override the default behavior of scaling the cone/tool size using the extents of the currently loaded G-code program in the graphics display.

  • MAX_FEED_OVERRIDE = 1.2 - (real) The maximum feed override the user may select. 1.2 means 120% of the programmed feed rate.

  • MIN_SPINDLE_OVERRIDE = 0.5 - (real) The minimum spindle override the user may select. 0.5 means 50% of the programmed spindle speed. (This is used to set the minimum spindle speed.)

  • MIN_SPINDLE_0_OVERRIDE = 0.5 - (real) The minimum spindle override the user may select. 0.5 means 50% of the programmed spindle speed. (This is used to set the minimum spindle speed.) On multi spindle machine there will be entries for each spindle number. Only used by the QtVCP based user interfaces.

  • MAX_SPINDLE_OVERRIDE = 1.0 - (real) The maximum spindle override the user may select. 1.0 means 100% of the programmed spindle speed.

  • MAX_SPINDLE_0_OVERRIDE = 1.0 - (real) The maximum feed override the user may select. 1.2 means 120% of the programmed feed rate. On multi spindle machine there will be entries for each spindle number. Only used by the QtVCP based user interfaces.

  • DEFAULT_SPINDLE_SPEED = 100 - Las RPM predeterminadas del husillo cuando se inicia en modo manual. Si esta configuración no está presente, el valor predeterminado es 1 RPM para AXIS y 300 RPM para GMOCCAPY.

    • obsoleta - Usar en cambio la sección [SPINDLE_n]

  • DEFAULT_SPINDLE_0_SPEED = 100 - Las RPM predeterminadas del husillo en modo manual. En una máquina con múltiples husillos habrá entradas para cada número de husillo. Solo usado por interfases de usuario basadas en QtVCP.

    • obsoleta - Usar en cambio la sección [SPINDLE_n].

  • SPINDLE_INCREMENT = 200 - Incremento utilizado al hacer clic en los botones de aumento/disminución. Utilizada sólo por las interfaces basadas en QtVCP.

    • obsoleta - Usar en cambio la sección [SPINDLE_n].

  • MIN_SPINDLE_0_SPEED = 1000 - Las RPM mínimas que pueden seleccionarse manualmente. En máquinas con múltiples husillo habrá entradas para cada número de husillo. Usada sólo por interfaces de usuario basadas en QtVCP.

    • obsoleta - Usar en cambio la sección [SPINDLE_n].

  • MAX_SPINDLE_0_SPEED = 20000 - Las RPM máximas que se pueden seleccionar manualmente. En una máquina con múltiples husillos habrá entradas para cada número de husillo. Solo usada por interfaces de usuario basadas en QtVCP.

    • obsoleta - Usar en cambio la sección [SPINDLE_n].

  • PROGRAM_PREFIX = ~/linuxcnc/nc_files - La ubicación predeterminada para archivos de código G, subrutinas nombradas y códigos M definidos por el usuario. Se busca en el directorio PROGRAM_PREFIX antes que en los directorios listados en [RS274]SUBROUTINE_PATH y [RS274]USER_M_PATH.

  • INTRO_GRAPHIC = emc2.gif - La imagen que se muestra en la pantalla de inicio.

  • INTRO_TIME = 5 - El tiempo máximo a mostrar la pantalla de inicio, en segundos.

  • CYCLE_TIME = 0.05 - Tiempo de ciclo de despliegue de la GUI. Dependiendo de la pantalla, puede ser un segundos o ms (de preferencia ms). A menudo es la tasa de actualización en vez de el tiempo de espera entre actualizaciones. Si no se configura correctamente el tiempo de actualización, puede que la pantalla no responda o se vea entrecortada. Un valor de 100 ms (0.1 s) es una configuración común, aunque en un rango entre 50 - 200 ms (.05 - .2 s) puede ser usable. Un CPU con poca energía puede ver mejoras con un valor más alto. Normalmente el valor predeterminado esta bien.

  • PREVIEW_TIMEOUT = 5 - Tiempo de espera (en segundos) para cargar la previsualización gráfica de código G. Actualmente, sólo AXIS.

  • HOMING_PROMPT = TRUE - Any non-empty value (including "0") will enable showing a prompt message with homing request, when the Power On button is pressed in AXIS GUI. Pressing the "Ok" button in prompt message is equivalent to pressing the "Home All" button(or the Ctrl-HOME key).

  • FOAM_W = 1.5 - Establece la altura de espuma W.

  • FOAM_Z = 0 - Establece la altura de espuma Z.

  • GRAPHICAL_MAX_FILE_SIZE = 20 - El tamaño más grande (en mega bytes) que se mostrará gráficamente. Si el programa es más grande que esto, se mostrará una caja delimitada. Predeterminadamente, ésta configuración está a 20 MB o 1/4 de la memoria del sistema, lo que sea más bajo. Un valor negativo se interpreta como ilimitado.

Nota
GladeVCP y PyVCP utilizan los siguientes elementos [DISPLAY], consulte la sección Incrustando una pestaña del capítulo GladeVCP o el Capítulo PyVCP para más información.
  • EMBED_TAB_NAME = GladeVCP demo

  • EMBED_TAB_COMMAND = halcmd loadusr -Wn gladevcp gladevcp -c gladevcp -x {XID\} -u ./gladevcp/hitcounter.py ./gladevcp/manual-example.ui

    Nota

    Los diferentes programas de interfaz de usuario utilizan diferentes opciones, y no todas las opciones son compatibles con todas las interfaces de usuario. Consulte el documento GUI AXIS para obtener detalles sobre AXIS. Consulte el documento GMOCCAPY para obtener detalles sobre GMOCCAPY.

  • DEFAULT_LINEAR_VELOCITY = .25 - La velocidad predeterminada para trotes lineales, en unidades máquina por segundo.

  • MIN_VELOCITY = .01 - El valor más bajo aproximado del control deslizante de trote.

  • MAX_LINEAR_VELOCITY = 1.0 - La velocidad máxima para trotes lineales, en unidades de máquina por segundo.

  • MIN_LINEAR_VELOCITY = .01 - El valor más bajo aproximado del deslizante de trote.

  • DEFAULT_ANGULAR_VELOCITY = .25 - La velocidad predeterminada para trotes angulares, en unidades máquina por segundo.

  • MIN_ANGULAR_VELOCITY = .01 - El valor más bajo aproximado del deslizante de trote angular.

  • MAX_ANGULAR_VELOCITY = 1.0 - La velocidad máxima para trotes angulares, en unidades de máquina por segundo.

  • INCREMENTS = 1 mm, .5 in, ... - Define los incrementos disponibles para trotes incrementales. Los INCREMENTS se pueden usar para ajustar los valores predeterminados. Los valores pueden ser números decimales (p. ej. 0.1000) o números fraccionarios (p. ej. 1/16), opcionalmente seguidos por una unidad (cm, mm, um, inch, in o mil). Si no se especifica una unidad, se supone la unidad de máquina. Las distancias métricas e imperiales se pueden mezclar: INCREMENTS = 1 inch, 1 mil, 1 cm, 1 mm, 1 um es una entrada válida.

  • GRIDS = 10 mm, 1 in, ... - Define los valores preestablecidos para las líneas de cuadrícula. El valor se interpreta de la misma manera que INCREMENTS.

  • OPEN_FILE = /ruta/completa/a/archivo.ngc - El archivo que se mostrará en la gráfica de vista previa cuando se inicie AXIS. Una cadena en blanco "" no cargará ningún archivo en el arranque. GMOCCAPY no usará esta configuración, ya que ofrece una entrada correspondiente en su página de configuración.

  • EDITOR = gedit - El editor que se usará al seleccionar Archivo> Editar para editar código G desde el menú de AXIS. Esto debe configurarse para que este elemento de menú trabaje. Otra entrada válida es gnome-terminal -e vim. Esta entrada no se aplica a GMOCCAPY ya que esta GUI tiene un editor integrado.

  • TOOL_EDITOR = tooledit - El editor que se utilizará al editar la tabla de herramientas (por ejemplo, al seleccionar "Archivo > Editar datos de herramienta …" en AXIS). Otras entradas validas son gedit, gnome-terminal -e vim y gvim. Esta entrada no se aplica a GMOCCAPY ya que esta GUI tiene un editor integrado.

  • PYVCP = /archivo.xml - El archivo de descripción del panel PyVCP. Ver el << cha:pyvcp,capítulo PyVCP >> para más información.

  • PYVCP_POSITION = BOTTOM - La ubicación del panel PyVCP en la interfaz de usuario AXIS. Si se omite esta variable, el panel pasará por defecto al lado derecho. La única alternativa valida es BOTTOM. Ver el << cha:pyvcp,Capítulo PyVCP >> para más información.

  • LATHE = 1 - Cualquier valor no vacío (incluido "0") hace que Axis utilice el "modo torno" con una vista superior y con Radio y Diámetro en el DRO.

  • BACK_TOOL_LATHE = 1 - Cualquier valor no vacío (incluido "0") hace que Axis utilice el "modo torno de herramienta trasera" con el eje X invertido.

  • FOAM = 1 - Cualquier valor no vacío (incluido "0") hace que Axis cambie la visualización para el modo cortador por espuma.

  • GEOMETRY = XYZABCUVW - Controla la vista previa y el backplot de movimiento giratorio. Este elemento consiste en una secuencia de letras de eje, opcionalmente precedidas por un signo "-":

    1. Las letras X,Y,Z especifican la traslación a lo largo de la coordenada nombrada.

    2. Las letras A,B,C especifican rotación alrededor de los correspondientes ejes X, Y, Z.

    3. Las letras U,V,W especifican traslación a lo largo de los ejes relacionados X, Y, Z.

    4. Cada letra especificada debe ocurrir en [TRAJ]COORDINATES para que tenga efecto.

    5. Un caracter especial "-" precediendo a cualquier letra invierte la dirección de la operación.

    6. Las operaciones de traslación y rotación se evalúan de derecha a izquierda. De tal manera que usar GEOMETRY=ZYZBC especifica una rotación C seguida de una rotación B seguida por traslaciones Z, Y, X. El ordenamiento consecutivo de letras de traslación es inmaterial.

    7. La cadena apropiada de GEOMETRY depende de la configuración de la máquina y de las cinemáticas usadas para controlarla. El orden de las letras es importante. Por ejemplo, rotar alrededor de C y luego B es diferente que rotar alrededor de B y luego C.

    8. Las rotaciones se aplican predeterminadamente con respecto al origen de máquina. Ejemplo: GEOMETRY=CXYZ primero traslada al punto de control X, Y, Z y luego realiza una rotación C alrededor del eje Z centrado en el origen de máquina.

    9. Ejemplo de traslación UVW: GEOMETRY=XYZUVW provoca mover UVW en el sistema de coordenadas de la herramienta y mover XYZ en el sistema de coordenadas del material.

    10. Las máquinas de corte de espuma (FOAM = 1) deben especificar "XY;UV" o dejar el valor en blanco aunque este valor se ignore actualmente en el modo de cortador de espuma. Una versión futura puede definir qué significa ";", pero si lo hace "XY;UV" significará lo mismo que el predeterminado para espuma actual.

    11. Experimental: Si se incluye el signo de exclamación (!) en la cadena GEOMETRY, muestra los puntos para las rotaciones A, B, C respecto a los offsets X, Y, Z establecidos por los códigos G5x, G92. Ejemplo: Usando GEOMETRY = !CXZ para una máquina con [TRAJ]COORDINATES=XZC. Esta provisión aplica sólo para gráficos en vivo (previsualizaciones de código G deben hacerse con offsets G5x, G92 cero. Esto se puede facilitar configurando offsets en programas sólo cuando la tarea se ejecuta como se indica en #<_task> == 1. Si existen offsets distintos de cero en el arranque por persistencia, se debe poner en cero los offsets y recargar la vista previa.

    Nota
    Si no se incluye [DISPLAY]GEOMETRY en el archivo INI, un predeterminado es proporcionado por el programa GUI [DISPLAY]DISPLAY (típicamente "XYZABCUVW").
  • ARCDIVISION = 64 - Establece la calidad de la vista previa de los arcos. Los arcos se previsualizan dividiéndolos en una serie de líneas rectas; un semicírculo se divide en ARCDIVISIÓN partes. Los valores más grandes dan una vista previa más precisa, pero tardan más tiempo en cargar y dan como resultado una pantalla más lenta. Los valores más pequeños dan una vista previa menos precisa, pero tarda menos tiempo en cargar y puede resultar en un despliegue más rápido. El valor predeterminado de 64 significa que un círculo de hasta 3 pulgadas se mostrará con precision de 1 mil (.03%).

  • MDI_HISTORY_FILE = - El nombre del archivo de historial MDI local. Si no se especifica, AXIS guardará el historial MDI en .axis_mdi_history en el directorio de usuario. Esto es útil si tiene múltiples configuraciones en una computadora.

  • JOG_AXES = - El orden en que se asignan las teclas de trote a las letras del eje. Las flechas izquierda y derecha se asignan a la letra del primer eje, arriba y abajo a la segunda, página arriba/página abajo a la tercera, y corchetes izquierdo y derecho a la cuarta. Si no se especifica, el valor predeterminado se determina a partir de los valores de [TRAJ]COORDINATES, [DISPLAY]LATHE y [DISPLAY]FOAM.

  • JOG_INVERT = - Para cada letra de eje, se invierte la dirección del trote. El valor predeterminado es "X" para tornos y en blanco en el resto.

    Nota
    La configuración de JOG_AXES y JOG_INVERT se aplican al trote modo universal por letra de eje de coordenadas y están vigentes mientras se encuentra en modo universal después de un homing exitoso. Cuando se opera en modo articulación anterior al homing, las teclas de trote del teclado se asignan en una secuencia fija: izquierda/derecha: joint0, arriba/abajo: joint1, página arriba/ página abajo: joint2, corchete izquierdo/derecho: joint3
  • USER_COMMAND_FILE = mycommands.py - El nombre de un archivo Python opcional, específico de configuración originado por la GUI AXIS en lugar del archivo específico del usuario ~/.axisrc.

Nota
El siguiente elemento [DISPLAY] es utilizado únicamente por la interfaz TKLinuxCNC.
  • HELP_FILE = tklinucnc.txt - Ruta al archivo de ayuda.

2.3. Sección [FILTER]

AXIS y GMOCCAPY tienen la capacidad de enviar archivos cargados a través de un programa de filtro. Este filtro puede hacer cualquier tarea deseada: algo tan simple como asegurarse el archivo termina con M2, o algo tan complicado como detectar si la entrada es una imagen de profundidad y generar código G para fresar la forma definida. La sección [FILTER] del archivo INI controla cómo trabajan los filtros. Primero, para cada tipo de archivo, escribe una línea PROGRAM_EXTENSION. Luego, especifica el programa a ejecutar para cada tipo de archivo. Este programa recibe como primer argumento el nombre del archivo de entrada, y debe escribir código RS274NGC en la salida estándar. Esta salida es lo que se mostrará en el área de texto, se previsualizará en el área de pantalla y será ejecutado por LinuxCNC cuando se ordene.

  • PROGRAM_EXTENSION = .extensión Descripción

Si su postprocesador genera archivos en mayúsculas, es posible que desee agregar la siguiente linea:

PROGRAM_EXTENSION = .NGC Postprocesador XYZ

Las siguientes líneas agregan soporte para el convertidor de imagen a código G incluido con LinuxCNC.

PROGRAM_EXTENSION = .png,.gif,.jpg # Imagen de profundidad de escala de grises
  png = image-to-gcode
  gif = image-to-gcode
  jpg = image-to-gcode

Un ejemplo de un convertidor de código G personalizado ubicado en el directorio linuxcnc.

PROGRAM_EXTENSION = .gcode 3D Printer
  gcode = /home/mill/linuxcnc/convert.py
Nota
El archivo de programa asociado con una extensión debe tener la ruta completa al programa o estar ubicado en un directorio que se encuentre en la ruta del sistema.

También es posible especificar un intérprete:

PROGRAM_EXTENSION = .py Python Script
  py = python

De esta manera se puede abrir cualquier script de Python y su salida es tratada como código G. Un script de ejemplo de este tipo está disponible en nc_files/holecircle.py. Este script crea código G para perforar una serie de agujeros a lo largo de una circunferencia. Hay muchos generadores más de código G en el sitio Wiki de LinuxCNC https://wiki.linuxcnc.org/.

Los filtros de Python deben usar la función de impresión para enviar el resultado a AXIS.

Este programa de ejemplo filtra un archivo y agrega un eje W para que coincida con el eje Z. Depende de que haya un espacio entre cada palabra de eje para que funcione.

#!/usr/bin/env python3

import sys

def main(argv):

  openfile = open(argv[0], 'r')
  file_in = openfile.readlines()
  openfile.close()

  file_out = []
  for line in file_in:
    # print(line)
    if line.find('Z') != -1:
      words = line.rstrip('\n')
      words = words.split(' ')
      newword = ''
      for i in words:
        if i[0] == 'Z':
          newword = 'W'+ i[1:]
      if len(newword) > 0:
        words.append(newword)
        newline = ' '.join(words)
        file_out.append(newline)
    else:
      file_out.append(line)
  for item in file_out:
    print("%s" % item)

if __name__ == "__main__":
  main(sys.argv[1:])
  • FILTER_PROGRESS=%d
    Si se establece la variable de entorno AXIS_PROGRESS_BAR, entonces las líneas escritas a stderr de la forma de arriba establecen la barra de progreso de AXIS en el porcentaje dado. Esta característica debería ser utilizada por cualquier filtro que se ejecute por un tiempo prolongado.

2.4. Sección [RS274NGC]

  • PARAMETER_FILE = myfile.var - El archivo ubicado en el mismo directorio que el archivo INI que contiene los parámetros utilizados por el intérprete (guardado entre ejecuciones).

  • ORIENT_OFFSET = 0 - Un valor float agregado al parámetro R de una operación M19 Orientar husillo. Se usa para definir una posición cero arbitraria independientemente de la orientación de montaje del codificador.

  • RS274NGC_STARTUP_CODE = G17 G20 G40 G49 G64 P0.001 G80 G90 G92 G94 G97 G98 - Una cadena de códigos NC que con la que se inicializa el intérprete. Esto no es un sustituto para especificar códigos G modales en la parte superior de cada archivo NGC, porque los códigos modales de las máquinas difieren, y pueden ser cambiados por el código G interpretado anteriormente en la sesión.

  • SUBROUTINE_PATH = ncsubroutines:/tmp/testsubs:lathesubs:millsubs - Especifica una lista separada por dos puntos (:) de hasta 10 directorios a buscar cuando se especifican subrutinas de un solo archivo en código G. Se busca en estos directorios después de buscar [DISPLAY] PROGRAM_PREFIX (si está especificado) y antes de buscar [WIZARD]WIZARD_ROOT (si se especifica). Se busca en las rutas en el orden que están listadas. Se usa el primer archivo de subrutina coincidente encontrado en la búsqueda. Los directorios se especifican en relación con el directorio actual para el archivo INI o como rutas absolutas. La lista no debe contener espacios en blanco intermedios.

  • G64_DEFAULT_TOLERANCE = n (Predeterminado: 0) Valor P predeterminado para G64 si P no es llamado.

  • G64_DEFAULT_NAIVETOLERANCE = n (Predeterminado: 0) Valor Q predeterminado para G64 si Q no es llamado.

  • CENTER_ARC_RADIUS_TOLERANCE_INCH = n (Predeterminado 0.00005)

  • CENTER_ARC_RADIUS_TOLERANCE_MM = n (Predeterminado 0.00127)

  • USER_M_PATH = myfuncs:/tmp/mcodes:experimentalmcodes - Especifica una lista de directorios separados por dos puntos (:) para funciones definidas por el usuario. Los directorios se especifican relativos al directorio actual del archivo INI o como rutas absolutas. La lista no debe contener espacios en blanco intermedios.

    Se realiza una búsqueda para cada posible función definida por el usuario, típicamente (M100-M199). El orden de búsqueda es:

    1. [DISPLAY]PROGRAM_PREFIX (si se especifica)

    2. Si no se especifica [DISPLAY]PROGRAM_PREFIX, busca en la ubicación predeterminada: nc_files

    3. Luego busca en cada directorio de la lista [RS274NGC]USER_M_PATH.

      El primer ejecutable M1xx encontrado en la búsqueda se usa para cada M1xx.

    Nota
    El número máximo de directorios USER_M_PATH se define en tiempo de compilación (typ: USER_DEFINED_FUNCTION_MAX_DIRS == 5).
  • INI_VARS = 1 (Predeterminado: 1)
    Permite que los programas de código G lean valores del archivo INI usando el formato #<_ini[sección]nombre>. Ver parámetros del código G.

  • HAL_PIN_VARS = 1 (Predeterminado: 1)
    Permite que los programas de código G lean los valores de los pines HAL usando el formato #<_hal[elemento HAL]>. El acceso a esta variable es de solo lectura. Consultar parámetros de código G para obtener más detalles y una advertencia importante.

  • RETAIN_G43 = 0 (Predeterminado: 0)
    Cuando está configurado, puede activar G43 después de cargar la primera herramienta, y luego despreocuparse de eso durante el transcurso del programa. Cuando usted finalmente descargue la última herramienta, el modo G43 es cancelado.

  • OWORD_NARGS = 0 (Predeterminado 0)
    Si esta función está habilitada, una subrutina llamada puede determinar el número de parámetros posicionales reales pasados al inspeccionar el parámetro #<n_args>.

  • NO_DOWNCASE_OWORD = 0 (Predeterminado: 0)
    Conservar mayúsculas y minúsculas en los nombres de palabra O dentro de los comentarios si está configurado, permite leer elementos HAL en mayúsculas y minúsculas en comentarios estructurados como (debug, #<_hal[ElementoConMayMin]).

  • OWORD_WARNONLY = 0 (Predeterminado: 0)
    Advertir en lugar de error en caso de errores en las subrutinas O-word.

  • DISABLE_G92_PERSISTENCE = 0 (Predeterminado: 0) Permite limpiar el offset G92 automáticamente al iniciar la configuración.

  • DISABLE_FANUC_STYLE_SUB = 0 (Predeterminado: 0) Si hay alguna razón para desactivar subrutinas Fanuc asignarle 1.

  • G73_PECK_CLEARANCE = .020 (default: Metric machine: 1mm, imperial machine: .050 inches) Chip breaking back-off distance in machine units

  • G83_PECK_CLEARANCE = .020 (default: Metric machine: 1mm, imperial machine: .050 inches) Clearance distance from last feed depth when machine rapids back to bottom of hole, in machine units.

Nota

Las seis opciones anteriores fueron controladas por la máscara de bits FEATURES en versiones de LinuxCNC anteriores a 2.8. Esta etiqueta INI ya no trabaja.
Para referencia:

FEATURES & 0x1  -> RETAIN_G43
FEATURES & 0x2  -> OWORD_NARGS
FEATURES & 0x4  -> INI_VARS
FEATURES & 0x8  -> HAL_PIN_VARS
FEATURES & 0x10 -> NO_DOWNCASE_OWORD
FEATURES & 0x20 -> OWORD_WARNONLY
Nota
[WIZARD]WIZARD_ROOT es una ruta de búsqueda válida, pero el asistente no se ha implementado por completo y los resultados de su uso son impredecibles.
  • LOG_LEVEL = 0 - Especifica el nivel de registro en bitácora (predeterminado: 0)

  • LOG_FILE = file-name.log
    Para especificar el archivo a usar para registrar datos de bitácora.

  • REMAP=M400 modalgroup=10 argspec=Pq ngc=myprocedure - Ver el capítulo Extensión de código G por remapeo para más detalles.

  • ON_ABORT_COMMAND=O <on_abort> call- Ver el capítulo Extensión de código G por remapeo para más detalles.

2.5. Sección [EMCMOT]

Esta es una sección personalizada y LinuxCNC no la utiliza directamente. Muchas configuraciones utilizan valores de esta sección para cargar el controlador de movimiento. Para obtener más información sobre el controlador de movimiento, ver la sección Movimiento.

  • EMCMOT = motmod - El nombre del controlador de movimiento generalmente se usa aquí.

  • BASE_PERIOD = 50000 - El período de tarea Base en nanosegundos.

  • SERVO_PERIOD = 1000000 - Este es el período de tarea "Servo" en nanosegundos.

  • TRAJ_PERIOD = 100000 - Este es el período de la tarea Planificador de trayectoria en nanosegundos.

  • COMM_TIMEOUT = 1.0 - Número de segundos para esperar a Motion (la parte en tiempo real del controlador de movimiento) para acusar recibo de mensajes desde Task (la parte en tiempo no-real del controlador de movimiento).

  • HOMEMOD = alternate_homing_module [home_parms=value] La variable HOMEMOD es opcional. Si se especifica, usa un módulo (construido por el usuario) en lugar del predeterminado (homemod). Los parámetros del módulo (home_parms) pueden incluirse si los soporta el módulo especificado. La configuración puede ser anulada desde la línea de comandos usando la opción -m ($ linuxcnc -h).

2.6. Sección [TASK]

  • TASK = milltask - Especifica el nombre de la tarea ejecutable. La tarea ejecutable hace varias cosas, como

    • Comunicar con la interfaz de usuario por medio de NML,

    • comunicar con el planificador de movimiento en tiempo real por medio de memoria compartida no-HAL, y

    • interpretar código G. Actualmente sólo hay una tarea ejecutable que tiene sentido para el 99.99% de los usuarios: milltask.

  • CYCLE_TIME = 0.010 - The period, in seconds, at which TASK will run. This parameter affects the polling interval when waiting for motion to complete, when executing a pause instruction, and when accepting a command from a user interface. There is usually no need to change this number. Defaults to 0.100 if omitted.

2.7. Sección [HAL]

  • HALFILE = example.hal - Ejecuta el archivo example.hal al arranque.

    Si se especifica HALFILE varias veces, los archivos se interpretan en el orden en que aparecen en el archivo INI. Los archivos HAL son descriptivos, la ejecución de lo descrito en el archivo se dispara por hilos a los que se les cuelgan funciones, no al leer el archivo HAL. Casi todas las configuraciones tendrán al menos un HALFILE, y los sistemas paso a paso suelen tener dos de estos archivos, uno que especifica la configuración paso a paso genérica (core_stepper.hal) y uno que especifica los pines de la máquina (xxx_pinout.hal).

    Los archivos HAL especificados en la variable HALFILES se encuentran con una búsqueda. Si el archivo nombrado se encuentra en el directorio que contiene el archivo INI, se utiliza. Si el archivo nombrado no se encuentra en este directorio de archivos INI, se realiza una búsqueda utilizando una biblioteca de sistema de archivos HAL.

    Si se arranca LinuxCNC con el script linuxcnc usando la opción "-H`_nombredirectorio_", se prepone el nombre de directorio especificado a la búsqueda descrita arriba, de tal manera que se busca primero en _nombredirectorio_. La opción "-H` nombredirectorio" puede ser especificada mas de una vez, los directorios se preponen en orden.

    Un HALFILE también se puede especificar como una ruta absoluta (cuando el nombre comienza con un caracter /). Las rutas absolutas no son recomendables ya que su uso puede limitar la reubicación de configuraciones.

  • HALFILE = texample.tcl [arg1 [arg2] …] - Ejecuta el archivo tcl texample.tcl al inicio con arg1, arg2, etc. como lista argv. Los archivos con un sufijo .tcl son procesados como se indica arriba, pero son procesados por haltcl. Ver el capitulo HALTCL para más información.

  • HALFILE = LIB:sys_example.hal - Ejecuta el archivo de la biblioteca de sistema sys_example.hal al inicio. El uso explícito del prefijo LIB: provoca el uso de la biblioteca del sistema HALFILE sin buscar en el directorio de archivos INI.

  • HALFILE = LIB:sys_texample.tcl [arg1 [arg2 …]] - Ejecuta el archivo de biblioteca de sistema sys_texample.tcl al inicio. El uso explícito del prefijo LIB: provoca el uso de la biblioteca del sistema HALFILE sin buscar en el directorio de archivos INI.

HALFILE items specify files that loadrt HAL components and make signal connections between component pins. Common mistakes are:

  1. omisión de la sentencia addf necesaria para agregar funciones de componente a un hilo,

  2. especificación incompleta de señal (red).

La omisión de las sentencias addf requeridas es casi siempre es un error. Las señales generalmente incluyen una o más conexiones de entrada y una sola salida (pero ambas no son estrictamente necesarias). Se proporciona un archivo de biblioteca de sistema para verificar estas condiciones e informar a stdout y en una ventana emergente de GUI:

HALFILE = LIB:halcheck.tcl [nopopup]
Nota
La línea LIB:halcheck.tcl debería ser la última [HAL]HALFILE. Especificar la opción nopopup para suprimir el mensaje emergente y permitir el inicio inmediato. Las conexiones realizadas con un POSTGUI_HALFILE no serán verificadas.
  • TWOPASS = ON - Utilice el procesamiento de dos pasos para cargar componentes HAL. Con el procesamiento TWOPASS, las líneas [HAL]HALFILE se procesan en dos pasadas. En el primer pase (pass0), se leen todos los HALFILES y se acumulan múltiples apariciones de comandos loadrt y loadusr. Estos comandos de carga acumulados se ejecutan al final de pass0. Esta acumulación permite especificar más de una vez líneas de carga para un componente dado (siempre que los nombres names= utilizados sean únicos en cada uso). En el segundo pase (pass1) los HALFILES son releídos y todos los comandos, excepto los comandos de carga ejecutados previamente, son ejecutados.

  • TWOPASS = nodelete verbose - La funcionalidad TWOPASS se puede activar con cualquier cadena no nula que incluya las palabras clave verbose y nodelete. La palabra clave verbose provoca la impresión de detalles en la salida estándar. La palabra clave nodelete preserva archivos temporales en /tmp.

Para obtener más información, ver el capítulo HAL TWOPASS.

  • HALCMD = _comando_ - Ejecuta comando como un solo comando HAL. Si se especifica HALCMD varias veces, los comandos se ejecutan en el orden en que aparecen en el archivo INI. Las líneas HALCMD se ejecutan después de todas las líneas HALFILE.

  • SHUTDOWN = shutdown.hal - Ejecuta el archivo shutdown.hal cuando se sale de LinuxCNC. Dependiendo de los controladores de hardware utilizados, esto puede permitir configurar salidas a valores definidos cuando LinuxCNC sale normalmente. Sin embargo, ya que no se garantiza que este archivo será ejecutado (por ejemplo, en el caso de un bloqueo de la computadora) no es un reemplazo para una cadena de parada de emergencia adecuada u otras protecciones contra fallos de software.

  • POSTGUI_HALFILE = example2.hal - Ejecuta example2.hal después de que la GUI haya creado sus pines HAL. Algunas GUI crean pines HAL y admiten el uso de un archivo HAL postgui para usarlos. Las GUI que admiten archivos HAL postgui incluyen Touchy, AXIS, Gscreen y GMOCCAPPY.
    Ver la sección PyVCP con AXIS para más información.

  • HALUI = halui - Agrega los pines de la interfaz de usuario de HAL.
    Para mas información, ver el capítulo Interfaz de usuario HAL.

2.8. Sección [HALUI]

  • MDI_COMMAND = G53 G0 X0 Y0 Z0 - Se puede ejecutar un comando MDI utilizando halui.mdi-command-00. Incremente el número para cada comando que se enumera en la sección [HALUI]. También es posible iniciar subrutinas. MDI_COMMAND = o<tu-subrutina> CALL [#<tu-variable>]

2.9. Sección [APPLICATIONS]

LinuxCNC puede iniciar otras aplicaciones antes de que se inicie la GUI especificada. Las aplicaciones se pueden iniciar después de un retraso especificado para permitir acciones dependientes de la GUI (como crear pines HAL específicos de GUI).

  • DELAY = _valor_ - Segundos de espera antes de comenzar otras aplicaciones. Puede ser necesario un retraso si una aplicación tiene dependencias en acciones [HAL]POSTGUI_HALFILE o pines HAL creados por GUI (predeterminado DELAY= 0).

  • ‘APP =` appname [arg1 [arg2 …]]’ - Aplicación que se iniciará. Esta especificación se puede incluir varias veces. El nombre de la aplicación puede ser dado explícitamente como un nombre de archivo especificado absoluto o especificado con tilde (primer carácter es / o ~), un nombre de archivo relativo (los primeros caracteres del nombre de archivo son ./), o como un archivo en el directorio INI. Si no se encuentra ningún archivo ejecutable usando estos nombres, se utiliza la ruta de búsqueda del usuario para encontrar la aplicación.
    Ejemplos:

    • Simular las entradas a los pines HAL para prueba (usando sim_pin, una GUI simple para configurar entradas a parámetros, pines desconectados o señales sin escritores):

      APP = sim_pin motion.probe-input halui.abort motion.analog-in-00
    • Invocar halshow con una lista de observación previamente guardada. Como LinuxCNC establece el directorio de trabajo al directorio del archivo INI, puedes hacer referencia a los archivos en ese directorio (ejemplo: my.halshow):

      APP = halshow my.halshow
    • Alternativamente, se podría especificar un archivo de lista de observación identificado con un nombre de ruta completo:

      APP = halshow ~/saved_shows/spindle.halshow
    • Abrir halscope usando una configuración previamente guardada:

      APP = halscope -i my.halscope

2.10. Sección [TRAJ]

Aviso

El nuevo Planificador de trayectoria (TP) está activado de forma predeterminada. Si no tiene configuraciones TP en su sección [TRAJ] - LinuxCNC por defecto hace:
ARC_BLEND_ENABLE = 1
ARC_BLEND_FALLBACK_ENABLE = 0
ARC_BLEND_OPTIMIZATION_DEPTH = 50
ARC_BLEND_GAP_CYCLES = 4
ARC_BLEND_RAMP_FREQ = 100

La sección [TRAJ] contiene parámetros generales para el módulo de planificación de trayectoria en motion.

  • ARC_BLEND_ENABLE = 1 - Activa el nuevo TP. Si se establece en 0, TP utiliza mezcla parabólica (1 segmento adelantado). (Predeterminado: 1).

  • ARC_BLEND_FALLBACK_ENABLE = 0 - Recurrir opcionalmente a mezclas parabólicas si la velocidad estimada es más rápida. Sin embargo, esta estimación es aproximada y parece que deshabilitarlo proporciona un mejor rendimiento (Predeterminado: 0).

  • ARC_BLEND_OPTIMIZATION_DEPTH = 50 - Profundidad de anticipación en cantidad de segmentos.

    Para ampliar esto un poco, se puede elegir este valor de forma algo arbitraria. Aquí hay una fórmula para estimar cuánta profundidad se necesita para una configuración determinada:

    # n = v_max / (2.0 * a_max * t_c)
    # dónde:
    # n = profundidad de optimización
    # v_max = velocidad máxima del eje (UU/seg)
    # a_max = aceleración máxima del eje (UU/seg)
    # t_c = período servo (segundos)

    Por lo tanto, una máquina con una velocidad máxima del eje de 10 IPS, una aceleración máxima de 100 IPS2, y un período servo de 0.001 s necesitaría:

    10 / (2.0 * 100 * 0.001) = 50 segmentos para alcanzar siempre la velocidad máxima a lo largo del eje más rápido.

    En la práctica, afinar este número no es tan importante, ya que la anticipación rara vez necesita toda la profundidad a menos que se tengan muchos segmentos muy cortos. Si durante la prueba se notan ralentizaciones extrañas y no se puede averiguar de dónde vienen, primero intentar aumentar esta profundidad usando la fórmula anterior.

    Si aún se ven ralentizaciones extrañas, pueden deberse a que se tienen segmentos cortos en el programa. Si este es el caso, intentar agregar una pequeña tolerancia para la detección Naive CAM. Una buena regla general es esta:

    # min_length ~= v_req * t_c
    # dónde:
    # v_req = velocidad deseada en UU/seg
    # t_c = servo período (segundos)

    Si deseas recorrer una ruta a 1 IPS = 60 IPM, y tu período servo es de 0.001 segundos, entonces cualquier segmento más corto que min_length ralentizará la trayectoria. Si configuras la tolerancia Naive CAM a aproximadamente esta longitud mínima, los segmentos demasiado cortos se combinarán para eliminar este cuello de botella. Por supuesto, establecer la tolerancia demasiado alta significa grandes desviaciones de ruta, por lo que debes jugar un poco para encontrar un buen valor. Como consejo, comienza con 1/2 de min_length, luego continúa ajustando según sea necesario. * ARC_BLEND_GAP_CYCLES = 4- Qué tan corto debe ser el segmento anterior antes de que el planificador de trayectorias lo consuma.

    A menudo, una combinación de arco circular dejará segmentos de línea cortos entre mezclas. Como la geometría tiene que ser circular, no podemos mezclar toda una línea si la siguiente es un poco más corta. Puesto que el planificador de trayectoria tiene que tocar cada segmento al menos una vez, significa que segmentos muy pequeños ralentizarán las cosas significativamente. Mi solución a esto es "consumir" el segmento corto haciéndolo parte del arco de mezcla. Ya que la línea + mezcla es un segmento, no tenemos que reducir la velocidad para alcanzar el segmento muy corto. Probablemente, no necesitarás tocar esta configuración. * ARC_BLEND_RAMP_FREQ = 20 - Esta es una frecuencia de corte para usar velocidades en rampa.

    Velocidad en rampa en este caso solo significa aceleración constante sobre el segmento entero. Esto es menos óptimo que un perfil de velocidad trapezoidal, ya que la aceleración no está maximizada. Sin embargo, si el segmento es lo suficientemente corto, no hay tiempo suficiente para acelerar mucho antes de alcanzar el segmento siguiente. Recordemos los segmentos de línea corta de los ejemplos anteriores. Como son líneas, no hay aceleración en esquinas, así que somos libres de acelerar hasta la velocidad solicitada. Sin embargo, si esta línea está entre dos arcos, entonces tendrá que desacelerar rápidamente de nuevo para estar dentro de la velocidad máxima del siguiente segmento. Esto significa tener un pico de aceleración y luego un pico de desaceleración, causando un gran tirón, para muy poco aumento de rendimiento. Esta configuración es una forma de eliminar este tirón para segmentos cortos.

    Básicamente, si un segmento se completa en menos tiempo que 1 / ARC_BLEND_RAMP_FREQ, no nos molestamos con un perfil de velocidad trapezoidal en ese segmento, y usaríamos aceleración constante. (Ajustar ARC_BLEND_RAMP_FREQ = 1000 es equivalente a usar siempre aceleración trapezoidal, si el bucle servo es de 1 kHz).

    Se puede caracterizar el peor caso de pérdida de rendimiento comparando la velocidad que alcanza un perfil trapezoidal contra la rampa:

    # v_ripple = a_max / (4.0 * f)
    # donde:
    # v_ripple = velocidad promedio "perdida" debido a la rampa
    # a_max = aceleración máxima del eje
    # f = frecuencia de corte del INI

    Para la máquina mencionada, la ondulación para una frecuencia de corte de 20 Hz es 100 / (4 * 20) = 1.25 IPS. Esto parece alto, pero ten en cuenta que es solo una estimación del peor de los casos. En realidad, el perfil de movimiento trapezoidal está limitado por otros factores, como la aceleración normal o velocidad solicitada, por lo que la pérdida de rendimiento real debería ser mucho menor. Aumentar la frecuencia de corte puede sacar más rendimiento, pero hace que el movimiento sea más duro debido a discontinuidades de aceleración. Un valor en el rango de 20 Hz a 200 Hz debería ser razonable para comenzar.

Finalmente, ninguna cantidad de ajustes acelerará una trayectoria de herramienta con muchas esquinas pequeñas y estrechas, ya que estás limitado por la aceleración en las esquinas.

  • SPINDLES = 3 - El número de husillos a soportar. Es imperativo que este número coincida con el parámetro "num_spindles" pasado al módulo motion.

  • COORDINATES = X Y Z - Los nombres de los ejes que se controlan. Solo son válidos X, Y, Z, A, B, C, U, V, W. En código G solo se aceptan ejes nombrados en COORDINATES. Está permitido escribir un nombre de eje más de una vez (p. ej. X Y Y Z para una máquina de pórtico). Para las cinemáticas trivkins comunes, los números de articulación se asignan en secuencia de acuerdo con el parámetro trivkins coordinates=. Por tanto, para trivkins coordinates = xz, la articulación 0 corresponde a X y la articulación 1 corresponde a Z. Consulte la página de manual de cinemáticas ($ man kins) para obtener información sobre trivkins y otros módulos de cinemáticas.

  • LINEAR_UNITS = <unidades> - Especifica las unidades máquina para ejes lineales. Las opciones posibles son milímetros o pulgadas. Esto no afecta las unidades lineales en código NC (las palabras G20 y G21 hacen esto).

  • ANGULAR_UNITS = <unidades> - Especifica las unidades máquina para ejes de rotación. Las opciones posibles son deg, degree (360 por círculo), rad, radian (2*π por círculo), grad o gon (400 por círculo). Esto no afecta las unidades angulares de código NC. En RS274NGC, las palabras A, B y C siempre se expresan en grados.

  • DEFAULT_LINEAR_VELOCITY = 0.0167 - La velocidad inicial para trotes de ejes lineales, en unidades máquina por segundo. El valor que se muestra en AXIS equivale a unidades máquina por minuto.

  • DEFAULT_LINEAR_ACCELERATION = 2.0 - En máquinas con cinemáticas no triviales, la aceleración utilizada para trotes "teleop" (espacio cartesiano), en unidades máquina por segundo al cuadrado.

  • MAX_LINEAR_VELOCITY = 5.0 - La velocidad máxima para cualquier eje o movimiento coordinado, en unidades máquina por segundo. El valor mostrado es igual a 300 unidades por minuto.

  • MAX_LINEAR_ACCELERATION = 20.0 - La aceleración máxima para cualquier eje o movimiento coordinado, en unidades máquina por segundo cuadrado.

  • PLANNER_TYPE = 0 - Selects the trajectory planner type: 0 = trapezoidal (default), 1 = S-curve with jerk limiting. S-curve planning is only active when PLANNER_TYPE = 1 AND MAX_LINEAR_JERK > 0.

  • MAX_LINEAR_JERK = 10000.0 - The maximum jerk (rate of change of acceleration) for coordinated moves, in machine units per second cubed. Default is 1e9 (1 billion) if not specified, which effectively disables jerk limiting while avoiding numerical instability. Values are clamped to a maximum of 1e9 to prevent numerical issues in S-curve calculations. When PLANNER_TYPE = 1, this enables S-curve trajectory planning. Note: Not specifying MAX_LINEAR_JERK (defaulting to 1e9) produces motion similar to trapezoidal planning (PLANNER_TYPE = 0) but not identical, as extremely high jerk still uses S-curve calculations.

  • POSITION_FILE = position.txt - Si se establece en un valor no vacío, las posiciones articulares se almacenan entre ejecuciones en este archivo. Esto permite que la máquina comience con las mismas coordenadas que tenía en el apagado. Esto supone que no hubo movimiento de la máquina mientras estuvo apagada. Si no se establece, las posiciones no se almacenan y comenzará en 0 cada vez que se inicie LinuxCNC. Esto puede ayudar en máquinas pequeñas sin interruptores casa. Si usa la interfaz de resolver de Mesa, este archivo se puede usar para emular codificadores absolutos y eliminar la necesidad de homing (sin pérdida de precisión). Ver la página de manual de hostmot2 para más detalles.

  • NO_FORCE_HOMING = 1 - (bool) The default behavior is for LinuxCNC to force the user to home the machine before any MDI command or a program is run. Normally, only jogging is allowed before homing. For configurations using identity kinematics, setting NO_FORCE_HOMING = 1 allows the user to make MDI moves and run programs without homing the machine first. Interfaces using identity kinematics without homing ability will need to have this option set to 1.

Aviso

LinuxCNC no sabrá tus límites de carrera de articulación cuando se usa NO_FORCE_HOMING = 1.

  • HOME = 0 0 0 0 0 0 0 0 0 - Se necesita una posición de inicio mundial para los módulos de cinemáticas que calculan las coordenadas mundiales usando kinematicsForward() al cambiar de modo articular a teleop. Pueden especificarse hasta nueve valores de coordenadas (X Y Z A B C U V W), los elementos finales no utilizados pueden omitirse. Este valor solo se usa para máquinas con cinemáticas no triviales. En máquinas con cinemáticas triviales (fresadoras, tornos, varios tipos de pórtico) este valor se ignora. Nota: la configuración sim de hexapod requiere un valor distinto de cero para la coordenada Z.

  • TPMOD = alternate_trajectory_planning module [tp_parms=value]
    La variable TPMOD es opcional. Si se especifica, usa un módulo especificado (construido por el usuario) en lugar del predeterminado (tpmod). Los parámetros del módulo (tp_parms) pueden incluirse si los soporta el módulo especificado. La configuración puede anularse desde la línea de comandos usando la opción -t ($ linuxcnc -h).

  • NO_PROBE_JOG_ERROR = 0 - Permite omitir la verificación de recorrido de sonda al hacer trote manual.

  • NO_PROBE_HOME_ERROR = 0 - Permite omitir la verificación de recorrido de sonda cuando homing esta en progreso.

2.11. Sección [KINS]

  • JOINTS = 3 - Especifica el número de articulaciones (motores) en el sistema. Por ejemplo, una máquina trivkins XYZ con un solo motor para cada eje tiene 3 articulaciones. Una máquina de pórtico con un motor en cada uno de los dos ejes, y dos motores en el tercer eje, tiene 4 articulaciones. (Esta variable de configuración puede ser utilizada por una interfaz gráfica de usuario para establecer el número de articulaciones (num_joints) especificado en el módulo de movimiento (motmod).)

  • KINEMATICS = trivkins - Especifica un módulo de cinemáticas para el módulo motion. Las GUIs pueden usar esta variable para especificar la línea loadrt en archivos HAL para el módulo motmod. Para obtener más información sobre los módulos de cinemáticas, consulte la página de manual: $ man kins.

2.12. Sección [AXIS_<letra>_]

La <letra> especifica una de: X Y Z A B C U V W

  • TYPE = LINEAR - (enum) The type of this axis, either LINEAR or ANGULAR. Required if this axis is not a default axis type. The default axis types are X,Y,Z,U,V,W = LINEAR and A,B,C = ANGULAR. This setting is effective with the AXIS GUI but note that other GUI’s may handle things differently.

  • MAX_VELOCITY = 1.2 - (real) Maximum velocity for this axis in machine units per second.

  • MAX_ACCELERATION = 20.0 - (real) Maximum acceleration for this axis in machine units per second squared.

  • MAX_JERK = 0.0 - (real) Maximum jerk for this axis in machine units per second cubed. Used when S-curve trajectory planning is enabled. When set to 0 (default), no per-axis jerk limiting is applied.

  • MIN_LIMIT = -1000 - (real) The minimum limit (soft limit) for axis motion, in machine units. When this limit is exceeded, the controller aborts axis motion. The axis must be homed before MIN_LIMIT is in force. For a rotary axis (A,B,C typ) with unlimited rotation having no MIN_LIMIT for that axis in the [AXIS_<letter>] section a value of -1e99 is used.

  • MAX_LIMIT = 1000 - (real) The maximum limit (soft limit) for axis motion, in machine units. When this limit is exceeded, the controller aborts axis motion. The axis must be homed before MAX_LIMIT is in force. For a rotary axis (A,B,C typ) with unlimited rotation having no MAX_LIMIT for that axis in the [AXIS_<letter>] section a value of 1e99 is used.

  • WRAPPED_ROTARY = 1 - (bool) When this is set to 1 for an ANGULAR axis the axis will move 0-359.999 degrees. Positive Numbers will move the axis in a positive direction and negative numbers will move the axis in the negative direction.

  • LOCKING_INDEXER_JOINT = 4 - (int) This value selects a joint to use for a locking indexer for the specified axis <letter>. In this example, the joint is 4 which would correspond to the B axis for a XYZAB system with trivkins (identity) kinematics. When set, a G0 move for this axis will initiate an unlock with the joint.4.unlock pin then wait for the joint.4.is-unlocked pin then move the joint at the rapid rate for that joint. After the move the joint.4.unlock will be false and motion will wait for joint.4.is-unlocked to go false. Moving with other joints is not allowed when moving a locked rotary joint. To create the unlock pins, use the motmod parameter:

    unlock_joints_mask=jointmask

    Los bits jointmask son: (LSB) 0: articulación0, 1: articulación1, 2: articulación2, …

    Ejemplo: loadrt motmod ... unlock_joints_mask = 0x38 crea pines de desbloqueo para articulaciones 3,4,5.

  • OFFSET_AV_RATIO = 0.1 - (real) If nonzero, this item enables the use of HAL input pins for external axis offsets:

    axis.<letra>.eoffset-enable
    axis.<letra>.eoffset-count
    axis.<letra>.eoffset-scale

Consultar el capítulo: Offsets externos de ejes para información de su uso.

2.13. Secciones [JOINT_<número>]

<número> especifica el número de articulación 0 … (no_articulaciones-1) El valor de no_articulaciones lo establece [KINS]JOINTS=.

Las secciones [JOINT_0], [JOINT_1], etc. contienen parámetros generales para los componentes individuales en el módulo de control de articulaciones. Los nombres en la sección comienzan a numerarse en 0 y llegan hasta el número de articulaciones especificado en la entrada [KINS]JOINTS menos 1.

Típicamente (para sistemas que usan cinemáticas trivkins, hay correspondencia 1:1 entre una articulación y una letra de eje de coordenadas):

  • JOINT_0 = X

  • JOINT_1 = Y

  • JOINT_2 = Z

  • JOINT_3 = A

  • JOINT_4 = B

  • JOINT_5 = C

  • JOINT_6 = U

  • JOINT_7 = V

  • JOINT_8 = W

Otros módulos de cinemáticas con cinemáticas de identidad están disponibles para admitir configuraciones con conjuntos parciales de ejes. Por ejemplo, usando trivkins con coordenadas=XZ, las relaciones articulación-eje comunes son:

  • JOINT_0 = X

  • JOINT_1 = Z

Para obtener más información sobre los módulos cinemáticos, consultar la página de manual de kins (en una terminal de UNIX teclee man kins).

  • TYPE = LINEAR - (enum) The type of joint, either LINEAR or ANGULAR.

  • UNITS = INCH - (enum) If specified, this setting overrides the related [TRAJ] UNITS setting, e.g., [TRAJ]LINEAR_UNITS if the TYPE of this joint is LINEAR, [TRAJ]ANGULAR_UNITS if the TYPE of this joint is ANGULAR.

  • MAX_VELOCITY = 1.2 - (real) Maximum velocity for this joint in machine units per second.

  • MAX_ACCELERATION = 20.0 - (real) Maximum acceleration for this joint in machine units per second squared.

  • MAX_JERK = 0.0 - (real) Maximum jerk for this joint in machine units per second cubed. Used when S-curve trajectory planning is enabled. When set to 0 (default), no per-joint jerk limiting is applied.

  • BACKLASH = 0.0000 - (real) Backlash in machine units. Backlash compensation value can be used to make up for small deficiencies in the hardware used to drive an joint. If backlash is added to an joint and you are using steppers the STEPGEN_MAXACCEL must be increased to 1.5 to 2 times the MAX_ACCELERATION for the joint. Excessive backlash compensation can cause an joint to jerk as it changes direction. If a COMP_FILE is specified for a joint BACKLASH is not used.

  • COMP_FILE = file.extension - (string) The compensation file consists of map of position information for the joint. Compensation file values are in machine units. Each set of values are are on one line separated by a space. The first value is the nominal value (the commanded position). The second and third values depend on the setting of COMP_FILE_TYPE. Points in between nominal values are interpolated between the two nominals. Compensation files must start with the smallest nominal and be in ascending order to the largest value of nominals. File names are case sensitive and can contain letters and/or numbers. Currently the limit inside LinuxCNC is for 256 triplets per joint.

    Si se especifica COMP_FILE para un eje, BACKLASH no se utiliza.

  • COMP_FILE_TYPE = 0 or 1 - (int) Specifies the type of compensation file. The first value is the nominal (commanded) position for both types.
    A COMP_FILE_TYPE must be specified for each COMP_FILE.

    • Tipo 0: El segundo valor especifica la posición real a medida que se mueve el eje en la dirección positiva (valor creciente). El tercer valor especifica la posición real a medida que el eje se mueve en la dirección negativa (valor decreciente).

      Ejemplo de tipo 0
      -1.000 -1.005 -0.995
      0.000 0.002 -0.003
      1.000 1.003 0.998
    • Tipo 1: El segundo valor especifica el offset positivo del nominal mientras se va en la dirección positiva. El tercer valor especifica el offset negativo del nominal mientras se va en una dirección negativa.

      Ejemplo de tipo 1
      -1.000 0.005 -0.005
      0.000 0.002 -0.003
      1.000 0.003 -0.004
  • MIN_LIMIT = -1000 - (real) The minimum limit for joint motion, in machine units. When this limit is reached, the controller aborts joint motion. For a rotary joint with unlimited rotation having no MIN_LIMIT for that joint in the [JOINT_N] section a the value -1e99 is used.

  • MAX_LIMIT = 1000 - (real) The maximum limit for joint motion, in machine units. When this limit is reached, the controller aborts joint motion. For a rotary joint with unlimited rotation having no MAX_LIMIT for that joint in the [JOINT_N] section a the value 1e99 is used.

Nota

Para cinemáticas identidad, la configuraciones [JOINT_N]MIN_LIMIT/MAX_LIMIT deben ser iguales o exceder los límites [AXIS_L] correspondientes (uno a una identidad). Estas configuraciones se verifican al inicio cuando se especifican los módulos de cinemáticas trivkins.

Nota

Las configuraciones [JOINT_N]MIN_LIMIT/MAX_LIMIT se hacen valer al trotar en modo articulación antes de homing. Después de homing, los límites de coordenadas [AXIS_L]MIN_LIMIT/MAX_LIMIT se usan como restricciones para trote de eje (letra de coordenada) y para movimientos en código G (programas y comandos MDI) por el planificador de trayectoria. El planificador de trayectoria funciona en el espacio cartesiano (XYZABCUVW) y no tiene información sobre el movimiento de articulaciones implementado por cualquier módulo de cinemáticas. Es posible que ocurran violaciones a los límites de articulación en código G que obedezca los límites de posición del planificador de trayectoria cuando se usan cinemáticas no identidad. El módulo de movimiento detecta siempre violaciones a los límites de posición de articulación y falla si ocurren durante la ejecución de comandos en código G. Ver el asunto #97 de GitHub relacionado.

  • MIN_FERROR = 0.010 - (real) This is the value in machine units by which the joint is permitted to deviate from commanded position at very low speeds. If MIN_FERROR is smaller than FERROR, the two produce a ramp of error trip points. You could think of this as a graph where one dimension is speed and the other is permitted following error. As speed increases the amount of following error also increases toward the FERROR value.

  • FERROR = 1.0 - (real) FERROR is the maximum allowable following error, in machine units. If the difference between commanded and sensed position exceeds this amount, the controller disables servo calculations, sets all the outputs to 0.0, and disables the amplifiers. If MIN_FERROR is present in the INI file, velocity-proportional following errors are used. Here, the maximum allowable following error is proportional to the speed, with FERROR applying to the rapid rate set by [TRAJ]MAX_VELOCITY, and proportionally smaller following errors for slower speeds. The maximum allowable following error will always be greater than MIN_FERROR. This prevents small following errors for stationary axes from inadvertently aborting motion. Small following errors will always be present due to vibration, etc.

  • LOCKING_INDEXER = 1 - (bool) Indicates the joint is used as a locking indexer.

2.13.1. Homing

Estos parámetros están relacionados con Homing; para una mejor explicación leer el capítulo Configuración de homing.

  • HOME = 0.0 - (real) The position that the joint will go to upon completion of the homing sequence.

  • HOME_OFFSET = 0.0 - (real) The joint position of the home switch or index pulse, in machine units. When the home point is found during the homing process, this is the position that is assigned to that point. When sharing home and limit switches and using a home sequence that will leave the home/limit switch in the toggled state, the home offset can be used define the home switch position to be other than 0 if your HOME position is desired to be 0.

  • HOME_SEARCH_VEL = 0.0 - (real) Initial homing velocity in machine units per second. Sign denotes direction of travel. A value of zero means assume that the current location is the home position for the machine. If your machine has no home switches you will want to leave this value at zero.

  • HOME_LATCH_VEL = 0.0 - (real) Homing velocity in machine units per second to the home switch latch position. Sign denotes direction of travel.

  • HOME_FINAL_VEL = 0.0 - (real) Velocity in machine units per second from home latch position to home position. If left at 0 or not included in the joint rapid velocity is used. Must be a positive number.

  • HOME_USE_INDEX = NO - (bool) If the encoder used for this joint has an index pulse, and the motion card has provision for this signal you may set it to yes. When it is yes, it will affect the kind of home pattern used. Currently, you can’t home to index with steppers unless you’re using StepGen in velocity mode and PID.

  • HOME_INDEX_NO_ENCODER_RESET = NO - (bool) Use YES if the encoder used for this joint does not reset its counter when an index pulse is detected after assertion of the joint index_enable HAL pin. Applicable only for HOME_USE_INDEX = YES.

  • HOME_IGNORE_LIMITS = NO - (bool) When you use the limit switch as a home switch and the limit switch this should be set to YES. When set to YES the limit switch for this joint is ignored when homing. You must configure your homing so that at the end of your home move the home/limit switch is not in the toggled state you will get a limit switch error after the home move.

  • HOME_IS_SHARED = NO - (bool) If the home input is shared by more than one joint set to true to prevent homing from starting if the one of the shared switches is already closed. Set to false (the default) to permit homing if a switch is closed.

  • HOME_ABSOLUTE_ENCODER = 0 | 1 | 2 - (int) Used to indicate the joint uses an absolute encoder. At a request for homing, the current joint value is set to the HOME_OFFSET value. If the HOME_ABSOLUTE_ENCODER setting is 1, the machine makes the usual final move to the HOME value. If the HOME_ABSOLUTE_ENCODER setting is 2, no final move is made.

  • HOME_SEQUENCE = <n> - (int) Used to define the "Home All" sequence. <n> must start at 0 or 1 or -1. Additional sequences may be specified with numbers increasing by 1 (in absolute value). Skipping of sequence numbers is not allowed. If a HOME_SEQUENCE is omitted, the joint will not be homed by the "Home All" function. More than one joint can be homed at the same time by specifying the same sequence number for more than one joint. A negative sequence number is used to defer the final move for all joints having that (negative or positive) sequence number. For additional info, see: HOME SEQUENCE.

  • VOLATILE_HOME = 0 - (bool) When enabled (set to 1) this joint will be unhomed if the Machine Power is off or if E-Stop is on. This is useful if your machine has home switches and does not have position feedback such as a step and direction driven machine.

2.13.2. Servos

Estos parámetros son relevantes para las articulaciones controladas por servos.

Aviso
Las siguientes son entradas de archivos INI personalizadas que se pueden encontrar en un archivo INI de muestra o en un archivo generado por asistente. Estos no son utilizados por el software LinuxCNC. Solo están ahí para poner todas las configuraciones en un solo lugar. Para más información sobre entradas de archivo INI personalizadas ver la subsección Secciones y variables personalizadas .

Los siguientes elementos pueden ser utilizados por un componente PID y se supone que la salida es en voltios.

  • DEADBAND = 0.000015 - (real) How close is close enough to consider the motor in position, in machine units.

    Esto a menudo se establece en una distancia equivalente a 1, 1.5, 2, o 3 conteos de codificador, pero no hay reglas estrictas. Las configuraciones más holgadas (grandes) permiten menos hunting (caza) de servos a expensas de una menor precisión. Las configuraciones más estrictas (pequeñas) intentan una mayor precisión a expensas de más hunting. ¿Es realmente más preciso si también es más incierto? Como regla general, es bueno evitar si puede, o al menos limitar, el hunting de servos.

    Ten cuidado de ir por debajo de 1 cuenta de codificador, ya que puedes crear una situación en la que tu servo no estará feliz en ningún lugar. Esto puede ir más allá de hunting (lento) a nervous (rápido), e incluso squealing (estrepitoso), que es fácil de confundir con la oscilación causada por una afinación incorrecta. Es mejor perder un conteo o dos al principio, hasta que hayas realizado una afinación burda por lo menos.

    Ejemplo de cálculo de unidades máquina por pulso de codificador a usar al decidir el valor de DEADBAND:

    images/encoder-counts-math.png
  • BIAS = 0.000 - Esto es utilizado por hm2-servo y algunos otros. BIAS es una cantidad constante que se agrega a la salida. En la mayoría de los casos, debe dejarse en cero. Sin embargo, a veces puede ser útil para compensar servoamplificadores, o para equilibrar el peso de un objeto que se mueve verticalmente. BIAS se desactiva cuando el bucle PID está desactivado, al igual que todos los demás componentes de la salida.

  • P = 50 - La ganancia proporcional para el servo. Este valor multiplica el error entre la posición ordenada y la real en unidades máquina, lo que resulta en una contribución a la tensión calculada para el amplificador del motor. Las unidades en la ganancia P son voltios por unidad máquina, p. ej. images/p-term.png

  • I = 0 - La ganancia integral para el servo. El valor multiplica el error acumulativo entre la posición ordenada y la real en unidades máquina, lo que resulta en una contribución a la tensión calculada para el amplificador de motor. Las unidades en la ganancia I son voltios por unidad máquina por segundo, p. ej., images/i-term.png

  • D = 0 - La ganancia derivativa para el servo. El valor multiplica la diferencia entre el error actual y los anteriores, lo que resulta en una contribución a la tensión calculada para el amplificador del motor. Las unidades en la ganancia D son voltios por unidad de máquina por segundo, p. ej., images/i-term.png

  • FF0 = 0 - Ganancia de avance de orden 0. Este número es multiplicado por el posición ordenada, lo que resulta en una contribución a la tensión calculada para el amplificador del motor. Las unidades en la ganancia FF0 son voltios por unidad máquina, p. ej., images/p-term.png

  • FF1 = 0 - La ganancia de avance de 1er orden. Este número es multiplicado por el cambio en la posición ordenada por segundo, lo que resulta en una contribución al voltaje calculado para el amplificador del motor. Las unidades en la ganancia FF1 son voltios por unidad máquina por segundo, p. ej., images/i-term.png

  • FF2 = 0 - La gganancia de avance de 2do orden. Este número es multiplicado por el cambio en la posición ordenada por segundo por segundo, lo que resulta en un contribución a la tensión calculada para el amplificador del motor. Las unidades en la ganancia FF2 son voltios por unidad máquina por segundo por segundo, p. ej., images/ff2.png

  • OUTPUT_SCALE = 1.000

  • OUTPUT_OFFSET = 0.000

    Estos dos valores son los factores de escala y el offset para la salida de la articulación al amplificador del motor.

    El segundo valor (offset) se resta de la salida calculada (en voltios), y se divide por el primer valor (factor de escala), antes de ser escrito en los convertidores D/A. Las unidades de los valores de escala están en voltios verdaderos por voltios de salida DAC. Las unidades del valor de offset está en voltios. Estos se pueden usar para linealizar un DAC. Específicamente, al escribir salidas, LinuxCNC primero convierte la salida deseada en unidades cuasi-SI a valores brutos de actuador, p. ej., voltios para un amplificador DAC. Esta escala se parece a: images/output-offset.png

    El valor de la escala se puede obtener analíticamente haciendo un análisis de unidades, es decir, las unidades son [unidades SI de salida]/[unidades de actuador]. Por ejemplo, en una máquina con un amplificador de modo de velocidad tal que 1 voltio da como resultado una velocidad de 250 mm/seg.

    images/scale-math.png

    Tener en cuenta que las unidades del offset están en unidades máquina, p. ej., mm/s, y se restan previamente de las lecturas del sensor. El valor para este offset se obtiene al encontrar el valor de tu salida que produce 0.0 para la salida del actuador. Si el DAC está linealizado, este offset es normalmente 0.0.

    La escala y el offset también se pueden usar para linealizar el DAC, resultando en valores que reflejan los efectos combinados de la ganancia del amplificador, no linealidad del DAC, unidades DAC, etc.

    Para hacer esto, seguir este procedimiento.

    1. Cree una tabla de calibración para la salida, alimentando el DAC con el voltaje deseado y midiendo el resultado.

    2. Hacer un ajuste lineal de mínimos cuadrados para obtener los coeficientes a, b tales como images/calibration-1.png

    3. Tenga en cuenta que queremos una salida en bruto de modo que nuestro resultado medido sea idéntico a la salida ordenada. Esto significa

      1. images/calibration-2.png

      2. images/calibration-3.png

    4. Como resultado, los coeficientes a y b del ajuste lineal pueden ser utilizados como la escala y el offset para el controlador directamente.

    La siguiente tabla es un ejemplo de mediciones de voltaje.

    Tabla 1. Mediciones del voltaje de salida
    Bruto Medido

    -10

    -9.93

    -9

    -8.83

    0

    -0.03

    1

    0.96

    9

    9.87

    10

    10.87

  • MAX_OUTPUT = 10 - El valor máximo para la salida de la compensación PID que se escribe en el amplificador del motor, en voltios. El valor calculado de salida está sujeto a este límite. El límite se aplica antes de escalar a unidades de salida en bruto. El valor se aplica simétricamente tanto al lado positivo como al negativo.

  • INPUT_SCALE = 20000 - En configuraciones de muestra

  • ENCODER_SCALE = 20000 - En configuraciones construidas con PnCconf

Especifica el número de pulsos que corresponde a un movimiento de una unidad máquina como se establece en la sección [TRAJ]. Para una articulación lineal, una unidad máquina será igual a la configuración de LINEAR_UNITS. Para una articulación angular, una unidad es igual a la configuración en ANGULAR_UNITS. Un segundo número, si se especifica, se ignora. Por ejemplo, en un codificador de 2000 cuentas por revolución, y una transmisión de 10 revoluciones por pulgada y unidades deseadas en pulgadas, tenemos:

images/encoder-scale.png

2.13.3. Motores a pasos

Estos parámetros son relevantes para las articulaciones controladas por motores a pasos.

Aviso
Las siguientes son entradas de archivos INI personalizadas que se pueden encontrar en un archivo INI de muestra o un archivo generado por asistente. Estos no son utilizados por el software LinuxCNC y solo están ahí para poner todas las configuraciones en un solo lugar. Para más información sobre entradas de archivo INI personalizadas ver la subsección Secciones y variables personalizadas .

Los siguientes elementos pueden ser utilizados por un componente StepGen.

  • SCALE = 4000 - En configuraciones de muestra

  • STEP_SCALE = 4000 - En configuraciones construidas con PnCconf

Especifica el número de pulsos que corresponden a un movimiento de una unidad máquina como se establece en la sección [TRAJ]. Para sistemas paso a paso, esto es el número de pulsos de paso emitidos por unidad máquina. Para una articulación lineal una unidad de máquina será igual a la configuración de LINEAR_UNITS. Para una articulación angular una unidad es igual a la configuración en ANGULAR_UNITS. Para servo sistemas, este es el número de pulsos de retroalimentación por unidad máquina. Un segundo número, si se especifica, se ignora.

Por ejemplo, en un motor paso a paso de 1.8 grados con semipasos, y transmisión de 10 revoluciones por pulgada, y unidades de máquina deseadas en pulgadas, tendríamos:

images/stepper-scale.png
Nota
Los archivos INI y HAL antiguos usaban INPUT_SCALE para este valor.
  • ENCODER_SCALE = 20000 (Opcionalmente utilizado en configuraciones construidas con PnCconf) - Especifica el número de pulsos que corresponden a un movimiento de una unidad máquina como se establece en la sección [TRAJ]. Para una articulación lineal, una unidad máquina será igual a la configuración de LINEAR_UNITS. Para una articulación angular, una unidad es igual a la configuración en ANGULAR_UNITS. Un segundo número, si se especifica, se ignora. Por ejemplo, en un conteo de 2000 por revolucion de codificador, transmisión de 10 revoluciones por pulgada, y unidades deseadas en pulgadas, se tiene:

images/encoder-scale.png
  • STEPGEN_MAXACCEL = 21.0 - Límite de aceleración para el generador de pasos. Esto debería ser entre 1% y 10% más grande que MAX_ACCELERATION de la articulación. Este valor mejora la afinación de "bucle de posición" de StepGen. Si has agregado compensación de holgura a una articulación, entonces esto debería ser 1.5 a 2 veces mayor que MAX_ACCELERATION.

  • STEPGEN_MAXVEL = 1.4 - Los archivos de configuración antiguos tienen también un límite de velocidad para el generador de pasos. Si se especifica, también debería ser entre 1% y 10% más grande que MAX_VELOCITY de la articulación. Pruebas posteriores han demostrado que el uso de STEPGEN_MAXVEL no mejora el ajuste del bucle de posición de StepGen.

2.14. Sección(es) [SPINDLE_<número>]

El <número> especifica el número de husillo 0 … (no_husillos-1)
El valor de no_husillos se configura en [TRAJ]SPINDLES=.
Predeterminadamente la velocidad máxima del husillo en avance y reversa es aproximadamente 2147483000 RPM.
Predeterminadamente la velocidad mínima del husillo en avance y reversa es 0 RPM.
Predeterminadamente el incremento es 100 RPM.
Se pueden modificar estos valores predeterminados configurando las variables INI siguientes:

Nota
Estas configuraciones son para el componente controlador de movimiento. Las pantallas de control pueden limitar estas configuraciones más adelante.
  • MAX_FORWARD_VELOCITY = 20000 - (real) The maximum spindle speed (in rpm) for the specified spindle. Optional. This will also set MAX_REVERSE_VELOCITY to the negative value unless overridden.

  • MIN_FORWARD_VELOCITY = 3000 - (real) The minimum spindle speed (in rpm) for the specified spindle. Optional. Many spindles have a minimum speed below which they should not be run. Any spindle speed command below this limit will be /increased/ to this limit.

  • MAX_REVERSE_VELOCITY = 20000 - (real) This setting will default to MAX_FORWARD_VELOCITY if omitted. It can be used in cases where the spindle speed is limited in reverse. Set to zero for spindles which must not be run in reverse. In this context "max" refers to the absolute magnitude of the spindle speed.

  • MIN_REVERSE_VELOCITY = 3000 - (real) This setting is equivalent to MIN_FORWARD_VELOCITY but for reverse spindle rotation. It will default to the MIN_FORWARD_VELOCITY if omitted.

  • INCREMENT = 200 - (real) Sets the step size for spindle speed increment / decrement commands. This can have a different value for each spindle. This setting is effective with AXIS and Touchy but note that some control screens may handle things differently.

  • HOME_SEARCH_VELOCITY = 100 - (real) FIXME: Spindle homing not yet working. Sets the homing speed (rpm) for the spindle. The spindle will rotate at this velocity during the homing sequence until the spindle index is located, at which point the spindle position will be set to zero. Note that it makes no sense for the spindle home position to be any value other than zero, and so there is no provision to do so.

  • HOME_SEQUENCE = 0 - (int) FIXME: Spindle homing not yet working Controls where in the general homing sequence the spindle homing rotations occur. Set the HOME_SEARCH_VELOCITY to zero to avoid spindle rotation during the homing sequence.

2.15. Sección [EMCIO]

  • TOOL_TABLE = tool.tbl - (string) The file which contains tool information, described in the User Manual.

  • DB_PROGRAM = db_program - (string) Path to an executable program that manages tool data. When a DB_PROGRAM is specified, a TOOL_TABLE entry is ignored.

  • TOOL_CHANGE_POSITION = 0 0 2 - Especifica la ubicación XYZ a moverse al realizar un cambio de herramienta si se utilizan tres dígitos. Especifica la ubicación XYZABC cuando se usan 6 dígitos. Especifica la ubicación XYZABCUVW cuando se utilizan 9 dígitos. Los cambios de herramienta se pueden combinar. Por ejemplo, si combina la pinola con la posición de cambio, puede mover primero la Z y luego la X e Y.

  • TOOL_CHANGE_WITH_SPINDLE_ON = 1 - (bool) The spindle will be left on during the tool change when the value is 1. Useful for lathes or machines where the material is in the spindle, not the tool.

  • TOOL_CHANGE_QUILL_UP = 1 - (bool) The Z axis will be moved to machine zero prior to the tool change when the value is 1. This is the same as issuing a G0 G53 Z0.

  • TOOL_CHANGE_AT_G30 = 1 - (bool) The machine is moved to reference point defined by parameters 5181-5186 for G30 if the value is 1. For more information see G-code Parameters and G-code G30-G30.1.

  • RANDOM_TOOLCHANGER = 1 - (bool) This is for machines that cannot place the tool back into the pocket it came from. For example, machines that exchange the tool in the active pocket with the tool in the spindle.