Ver también la página de manual motion(9).

1. Motion

Estos pines y parámetros son creados por el módulo en tiempo real motmod.

Este módulo proporciona una interfaz HAL para el planificador de movimiento de LinuxCNC.

Básicamente motmod toma una lista de puntos de camino y genera un flujo bien balanceado y restringido de posiciones de articulaciones para alimentar a los controladores de motor.

Opcionalmente, el número de E/S digitales se establece con num_dio. El número de E/S analógicas se establece con num_aio. El valor predeterminado es 4 en cada uno. El número de husillos se establece con num_spindles, el predeterminado es 1.

Los nombres de pines y parámetros, que comienzan con axis.L y joint.N son leídos y actualizados por la función motion-controller.

Motion se carga con el comando motmod. Antes de motion, debe ser cargado un modulo de cinematica.

loadrt motmod base_period_nsec=['period'] servo_period_nsec=['period']
              traj_period_nsec=['period'] num_joints=['0-9']
              num_dio=['1-64'] num_aio=['1-16'] unlock_joints_mask=['0xNN']
              num_spindles=['1-8']
  • base_period_nsec = 50000 - es el período de la tarea Base en nanosegundos. Este es el hilo más rápido en la máquina.

Nota
En sistemas basados en servo, generalmente no hay razón para que base_period_nsec sea mas rapida que servo_period_nsec. En máquinas con generación por pasos de software, base_period_nsec determina la cantidad máxima de pasos por segundo. En ausencia de necesidad de pasos largos y requisitos de espacio, la tasa de pasos máxima absoluta es de un paso por base_period_nsec. Por lo tanto, para base_period_nsec = 50000 (0,05 m´s) se tendria una tasa de paso máxima absoluta de (1000/0,05) 20,000 pasos por segundo. 50,000 ns (50 µs) es un valor bastante conservador. El menor valor utilizable está relacionado con el resultado de la prueba de latencia, el ttiemp de paso necesario, y la velocidad del procesador. Elegir un base_period_nsec que sea demasiado rapido puede conducir a un mensaje de "retraso en tiempo real inesperado", bloqueos o reinicios espontáneos.
  • servo_period_nsec = 1000000 - Este es el período de la tarea Servo en nanosegundos. Este valor se redondeará a un múltiplo entero de base_period_nsec. Este período se usa incluso en sistemas basados en motores paso a paso.

    Esta es la velocidad a la que se calculan las nuevas posiciones de los motores, se verifica el error de seguimiento, se actualizan los valores de salida PID, y así sucesivamente. La mayoría de los sistemas no necesitarán cambiar este valor. Es la tasa de actualización del planificador de movimiento de bajo nivel.

  • traj_period_nsec = 100000 - Este es el periodo de la tarea Planificador de trayectoria en nanosegundos. Este valor se redondeará a un número entero múltiplo de servo_period_nsec. Excepto para máquinas con cinemáticas inusuales (p. ej., hexápodos) no hay razón para que este valor sea más alto que servo_period_nsec.

1.1. Opciones

Si la cantidad de E/S digital necesaria es mayor que el valor predeterminado de 4, puede agregar hasta 64 E/S digitales usando la opción num_dio al cargar motmod.

Si la cantidad de E/S analógica necesaria es mayor que el valor predeterminado de 4, puede agregar hasta 16 E/S analógicas usando la opción num_aio al cargar motmod.

El parámetro unlock_joints_mask se usa para crear pines para una articulación utilizada como indexador con bloqueo (típicamente rotativas). Los bits de máscara seleccionan la(s) articulación(es). El bit menos significativo de la máscara selecciona la articulación 0. Ejemplo:

unlock_joints_mask=0x38 selecciona las articulaciones 3, 4 y 5

1.2. Pines

Estos pines, parámetros y funciones son creados por el módulo de tiempo real motmod.

  • motion.adaptive-feed - (float, in) Cuando la alimentación adaptativa está habilitada con M52 P1, la velocidad ordenada se multiplica por este valor. Este efecto es multiplicativo con el valor de nivel NML de porcentaje de alimentación y motion.feed-hold. A partir de la versión 2.9 de LinuxCNC, es posible utilizar un valor de alimentación adaptativo negativo para ejecutar la ruta del código G en reversa.

  • motion.analog-in-00 - (float, in) Estos pines (00, 01, 02, 03, o más si están configurados) son controlados por M66.

  • motion.analog-out-00 - (float, out) Estos pines (00, 01, 02, 03, o más si están configurados) son controlados por M67 o M68.

  • motion.coord-error - (bit, out) TRUE cuando el movimiento ha encontrado un error, como exceder un límite suave

  • motion.coord-mode - (bit, out) TRUE cuando el movimiento está en modo coordinado, en oposición al modo teleop

  • motion.current-vel - (float, out) La velocidad actual de la herramienta en unidades de usuario por segundo.

  • motion.digital-in-00 - (bit, in) Estos pines (00, 01, 02, 03 o más si están configurados) son controlados por M62-65.

  • motion.digital-out-00 - (bit, out) Estos pines (00, 01, 02, 03 o más si están configurados) son controlados por M62-65.

  • motion.distance-to-go - (float, out) La distancia restante en el movimiento actual.

  • motion.enable - (bit, in) Si este bit se hace FALSE, el movimiento se detiene; la máquina queda colocada en el estado máquina apagada y se muestra un mensaje para el operador. En movimiento normal, este bit es TRUE.

  • motion.feed-hold - (bit, in) Cuando Feed Stop Control está habilitado con M53 P1, y este bit es TRUE, la velocidad de avance se establece en 0.

  • motion.feed-inhibit - (bit, in) Cuando este bit es TRUE, la velocidad de avance se establece en 0. Esta acción se retrasará durante los movimientos de sincronización del husillo hasta el final del movimiento.

  • motion.in-position - (bit, out) TRUE si la máquina está en posición.

  • motion.motion-enabled - (bit, out) TRUE cuando la máquina está en estado máquina encendida.

  • motion.motion-type - (s32, out) Valores definidos en src/emc/nml_intf/motion_types.h

    • 0: Idle (sin movimiento)

    • 1: Atravesar

    • 2: Avance lineal

    • 3: Avance de arco

    • 4: Cambio de herramienta

    • 5: Sondeo

    • 6: Indexación de eje rotativo

  • motion.on-soft-limit - (bit, out) TRUE cuando la máquina está en un límite de software.

  • motion.probe-input - (bit, in) G38.n usa el valor de este pin para determinar cuándo la sonda ha hecho contacto. TRUE para contacto de sonda cerrado (ha tocado), FALSO para contacto de sonda abierto.

  • motion.program-line - (s32, out) La línea de programa actual durante la ejecución. Vale cero si no corre un programa o entre líneas mientras se avanza línea a línea.

  • motion.requested-vel - (float, out) La velocidad solicitada actual en unidades de usuario por segundo. Este valor es la configuración de la palabra F del archivo de código G, posiblemente reducido para acomodar la velocidad y aceleración a los limites de la máquina. El valor en este pin no refleja el ajuste manual de la alimentación o cualquier otro ajuste.

  • motion.teleop-mode - (bit, out) TRUE cuando el movimiento está en modo teleop, en oposición a modo coordinado

  • motion.tooloffset.x … motion.tooloffset.w - (float, out, uno por eje) muestra el offset de la herramienta en efecto; podría provenir de la tabla de herramientas (G43 activo), o podría venir de código G (G43.1 activo)

  • motion.on-soft-limit - (bit, out) TRUE cuando la máquina está en un límite de software.

  • motion.probe-input - (bit, in) G38.n usa el valor de este pin para determinar cuándo la sonda ha hecho contacto. TRUE para contacto de sonda cerrado (ha tocado), FALSO para contacto de sonda abierto.

  • motion.program-line - (s32, out) La línea de programa actual durante la ejecución. Vale cero si no corre un programa o entre líneas mientras se avanza línea a línea.

  • motion.requested-vel - (float, out) La velocidad solicitada actual en unidades de usuario por segundo. Este valor es la configuración de la palabra F del archivo de código G, posiblemente reducido para acomodar la velocidad y aceleración a los limites de la máquina. El valor en este pin no refleja el ajuste manual de la alimentación o cualquier otro ajuste.

  • motion.teleop-mode - (bit, out) TRUE cuando el movimiento está en modo teleop, en oposición a modo coordinado

  • motion.tooloffset.x … motion.tooloffset.w - (float, out, uno por eje) muestra el offset de la herramienta en efecto; podría provenir de la tabla de herramientas (G43 activo), o podría venir de código G (G43.1 activo)

1.3. Parámetros

Muchos de estos parámetros sirven como ayudas para la depuración, y están sujetos a cambio o eliminación en cualquier momento.

  • motion-command-handler.time - (s32, RO)

  • motion-command-handler.tmax - (s32, RW)

  • motion-controller.time - (s32, RO)

  • motion-controller.tmax - (s32, RW)

  • motion.debug-bit-0 - (bit, RO) Se usa con fines de depuración.

  • motion.debug-bit-1 - (bit, RO) Se usa con fines de depuración.

  • motion.debug-float-0 - (float, RO) Se usa con fines de depuración.

  • motion.debug-float-1 - (float, RO) Se usa con fines de depuración.

  • motion.debug-float-2 - (float, RO) Se usa con fines de depuración.

  • motion.debug-float-3 - (float, RO) Se usa con fines de depuración.

  • motion.debug-s32-0 - (s32, RO) Se usa con fines de depuración.

  • motion.debug-s32-1 - (s32, RO) Se usa con fines de depuración.

  • motion.servo.last-period - (u32, RO) El número de ciclos de CPU entre las invocaciones del hilo servo. Normalmente este número, dividido por la velocidad de la CPU, da el tiempo en segundos, y se puede usar para determinar si el movimiento en tiempo real del controlador cumple con sus restricciones de tiempo

  • motion.servo.last-period-ns - (flotar, RO)

1.4. Funciones

En general, estas funciones se agregan al hilo servo en el orden mostrado.

  • motion-command-handler - Recibe y procesa comandos de movimiento

  • motion-controller - Ejecuta el controlador de movimiento LinuxCNC

2. Husillo

LinuxCNC puede controlar hasta ocho husillos. El movimiento producirá los pines siguientes: El N (entero entre 0 y 7) sustituye el número de husillo.

2.1. Pines

* spindle.N.at-speed - (bit, in) El movimiento se detendrá hasta que este pin sea TRUE, bajo las siguientes condiciones: antes del primer movimiento de alimentación, después de cada arranque de husillo o cambio de velocidad; antes del inicio de cada cadena de movimientos sincronizados con el husillo; ** si está en modo CSS, en cada transición de velocidad rapida a velocidad de alimentación. Esta entrada se puede usar para asegurar que el husillo esté a su velocidad antes de comenzar un corte, o que un husillo de torno en modo CSS se ha ralentizado después de un pase de refrentado grande a pequeño antes de comenzar el próximo pase en el diámetro grande. Muchos VFD tienen una salida a velocidad. De lo contrario, es fácil generar esta señal con el componente HAL near mediante la comparación de las velocidades solicitadas y reales del eje. * spindle.N.brake - (bit, out) TRUE cuando se debe aplicar el freno del husillo. * spindle.N.forward - (bit, out) TRUE cuando el husillo debe girar en sentido normal. * spindle.N.index-enable - (bit, I/O) Para un funcionamiento correcto de los movimientos sincronizados del eje, este pin debe estar conectado con el pin de habilitación de índice del codificador del husillo. * spindle.N.inhibit - (bit, in) Cuando este bit es TRUE, la velocidad del husillo se establece en 0. * spindle.N.on - (bit, out) TRUE cuando el husillo debe rotar. * spindle.N.reverse - (bit, out) TRUE cuando el husillo debe girar en sentido contrario * spindle.N.revs - (float, in) Para un funcionamiento correcto de los movimientos sincronizados del husillo, esta señal debe estar enganchada al pin de posición del codificador del husillo. La posición del codificador del husillo debe escalarse de manera que spindle-revs aumente en 1.0 por cada rotación del husillo en el sentido de las agujas del reloj (M3). * spindle.N.speed-in - (float, in) Retroalimentación de la velocidad real del husillo en rotaciones por segundo. Esto es utilizado en movimientos de avance por revolución (G95). Si su controlador codificador del husillo no tiene salida de velocidad, puede generar una adecuada enviando la posición del husillo a través de un componente ddt. Si no tiene un codificador de husillo, puede hacer bucle con spindle.N.speed-out-rps. * spindle.N.speed-out - (float, out) Velocidad ordenada del husillo en rotaciones por minuto. Positivo para giro horario (M3), negativo para giro antihorario (M4). * spindle.N.speed-out-abs - (float, out) Velocidad ordenada del husillo en rotaciones por minuto. Siempre será un número positivo. * spindle.N.speed-out-rps - (float, out) Velocidad del husillo ordenada en rotaciones por segundo. Positivo para sentido horario (M3), negativo para sentido antihorario (M4). * spindle.N.speed-out-rps-abs - (float, out) Velocidad del husillo ordenada en rotaciones por segundo. Siempre será un número positivo. * spindle.N.orient-angle - (float, out) Orientación del husillo especificada por M19. Valor del parámetro de la palabra R de M19 más el valor del parámetro ini [RS274NGC]ORIENT_OFFSET. * spindle.N.orient-mode - (s32, out) Modo de rotación de husillo para M19. Modo predeterminado = 0. * spindle.N.orient - (bit, out) Indica el inicio del ciclo de orientación del husillo. Activado por M19. Desactivado por M3, M4 o M5. Si spindle-orient-fault no es cero mientras que spindle-orient es TRUE, el comando M19 falla con un mensaje de error. * spindle.N.is-oriented - (bit, in) Pin de confirmación de spindle-orient. Completa el ciclo de orientacion. Si spindle-orient era verdadero cuando spindle-is-oriented se activa, el pin spindle-orient se borra y el pin spindle-locked se activa. Además, se activa el pin del freno del husillo. * spindle.N.orient-fault - (s32, in) Entrada del código de fallo para el ciclo de orientación. Cualquier valor distinto de cero provocará que el ciclo de orientación se aborte. * spindle.N.lock - (bit, out) Pin de orientación de husillo completada. Desactivado por M3, M4 o M5.

Uso del pin HAL de orientacion del husillo M19

Conceptualmente, el husillo está en uno de los modos siguientes:

  • modo de rotación (predeterminado)

  • modo de busqueda de orientación deseada

  • modo de orientación completada.

Cuando se ejecuta un M19, el husillo cambia a buscando orientación deseada, y se activa el pin HAL spindle.__N__.orient. La posición objetivo deseada se especifica mediante los pines spindle.__N__.orient-angle y spindle.__N__.orient-fwd, y se controla con los parámetros R y P de M19.

Se espera que la lógica de soporte HAL reaccione a spindle.__N__.orient moviendo el husillo a la posición deseada. Cuando esto se completa, se espera que la lógica HAL lo reconozca activando el pin spindle.__N__.is-oriented.

A continuación, motion reconoce esto desactivando el pin spindle.__N__.orient y activando el pin spindle.__N__.locked para indicar el modo orientación completa. También activa el pin spindle.__N__.brake. El husillo queda en modo orientación completa.

Si mientras que spindle.__N__.orient es verdadero, spindle.__N__.is-oriented no ha sido aun activado y el pin spindle.__N__.orient-fault tiene un valor diferente a cero, el comando M19 se cancela, se muestra un mensaje que incluye el código de fallo, y la cola de movimiento se vacía. El husillo vuelve a modo de rotación.

Además, cualquiera de los comandos M3, M4 o M5 cancela los modos de búsqueda de orientación deseada u orientación completa. Esto queda indicado al desactivar los pines spindle-orient y spindle-locked.

El pin spindle-orient-mode refleja la palabra P M19 y debe ser interpretado de la siguiente manera:

  • 0: girar en sentido horario o antihorario, el que obtenga el movimiento angular más pequeño

  • 1: girar siempre en el sentido horario

  • 2: girar siempre en sentido antihorario

Se puede usar con el componente HAL orient que proporciona un PID basado en la posición del codificador del husillo, spindle-orient-angle y spindle-orient-mode.

3. Pines y parámetros de ejes y articulaciones

Estos pines y parámetros son creados por el modulo motmod en tiempo real. [En las máquinas de cinemática trivial, hay una correspondencia uno-a-uno entre articulaciones y ejes.] Son leídos y actualizados por la función motion-controller.

Consulte la página del manual motion(9) para obtener detalles sobre los pines y parámetros.

4. iocontrol

iocontrol - acepta comandos de E/S en tiempo no-real mediante NML, interactúa con HAL.

Los pines HAL de iocontrol se activan y desactivan en un contexto de tiempo no-real. Si tiene requisitos de tiempo estrictos o simplemente necesita más E/S, considere usar en su lugar la E/S sincronizada de tiempo real proporcionada por motion.

4.1. Pines

* iocontrol.0.coolant-flood - (bit, out) TRUE cuando se solicita refrigerante de inundación. * iocontrol.0.coolant-mist - (bit, out) TRUE cuando se solicita refrigerante de niebla. * iocontrol.0.emc-enable-in - (bit, in) Debe ser FALSE cuando exista una condición externa de E-Stop. * iocontrol.0.tool-change - (bit, out) TRUE cuando se solicita un cambio de herramienta. * iocontrol.0.tool-changed - (bit, in) Debe ser TRUE cuando se completa un cambio de herramienta. * iocontrol.0.tool-number - (s32, out) El número de herramienta actual. * iocontrol.0.tool-prep-number - (s32, out) El número de la siguiente herramienta, de la palabra T RS274NGC. * iocontrol.0.tool-prepare - (bit, out) TRUE cuando se solicita una preparación de herramienta. * iocontrol.0.tool-prepared - (bit, in) Debe ser TRUE cuando se completa una preparación de herramienta. * iocontrol.0.user-enable-out - (bit, out) FALSE cuando existe una condición de parada de emergencia interna. * iocontrol.0.user-request-enable - (bit, out) TRUE cuando el usuario ha solicitado que se borre el E-Stop.

5. Configuraciones de INI

Muchas configuraciones INI están disponibles como pines HAL de entrada.

5.1. Pines

N se refiere a un número de articulación, L se refiere a una letra de eje.

  • ini.N.ferror - (float, in) [JOINT_N]FERROR

  • ini.N.min_ferror - (float, in) [JOINT_N]MIN_FERROR

  • ini.N.backlash - (float, in) [JOINT_N]BACKLASH

  • ini.N.min_limit - (float, in) [JOINT_N]MIN_LIMIT

  • ini.N.max_limit - (float, in) [JOINT_N]MAX_LIMIT

  • ini.N.max_velocity - (float, in) [JOINT_N]MAX_VELOCITY

  • ini.N.max_acceleration - (float, in) [JOINT_N]MAX_ACCELERATION

  • ini.N.home - (float, in) [JOINT_N]HOME

  • ini.N.home_offset - (float, in) [JOINT_N]HOME_OFFSET

  • ini.N.home_offset - (s32, in) [JOINT_N]HOME_SEQUENCE

  • ini.L.min_limit - (float, in) [AXIS_L]MIN_LIMIT

  • ini.L.max_limit - (float, in) [AXIS_L]MAX_LIMIT

  • ini.L.max_velocity - (float, in) [AXIS_L]MAX_VELOCITY

  • ini.L.max_acceleration - (float, in) [AXIS_L]MAX_ACCELERATION

Nota
Los pines min_limit y max_limit por eje se respetan continuamente después de homing. Los pines ferror y min_ferror por eje se respetan cuando la máquina está encendida y no en posición. Los pines max_velocity y max_acceleration por eje se muestrean cuando la máquina está encendida y motion_state es libre (homing o trote) pero no son muestreados cuando se está ejecutando un programa (modo automático) o en modo mdi. Por consiguiente, cambiar los valores de pin cuando un programa se está ejecutando no tendrá efecto hasta el programa se detiene y motion_state vuelve a estar libre.
  • ini.traj_arc_blend_enable - (bit, in) [TRAJ]ARC_BLEND_ENABLE

  • ini.traj_arc_blend_fallback_enable - (bit, in) [TRAJ]ARC_BLEND_FALLBACK_ENABLE

  • ini.traj_arc_blend_gap_cycles - (float, in) [TRAJ]ARC_BLEND_GAP_CYCLES

  • ini.traj_arc_blend_optimization_depth - (float, in) [TRAJ]ARC_BLEND_OPTIMIZATION_DEPTH

  • ini.traj_arc_blend_ramp_freq - (float, in) [TRAJ]ARC_BLEND_RAMP_FREQ

Nota
Los pines traj_arc_blend se muestrean continuamente, pero cambiar los valores de pin mientras se ejecuta un programa puede no tener efecto inmediato debido a la cola de comandos.
  • ini.traj_default_acceleration - (float, in) [TRAJ]DEFAULT_ACCELERATION

  • ini.traj_default_velocity - (float, in) [TRAJ]DEFAULT_VELOCITY

  • ini.traj_max_acceleration - (float, in) [TRAJ]MAX_ACCELERATION

Pines de planificación de trayectoria de curva S (muestreados continuamente, pueden cambiar en tiempo de ejecución):

  • ini.traj_planner_type - (s32, in) [TRAJ]PLANNER_TYPE

  • ini.traj_max_jerk - (float, in) [TRAJ]MAX_LINEAR_JERK

Pines de límite de sacudida por eje (donde L es x, y, z, a, b, c, u, v o w):

  • ini.L.max_jerk - (float, in) [AXIS__L_]MAX_JERK

Pines de límite de sacudida por articulación (donde N es el número de articulación 0-8):

  • ini.N.max_jerk - (float, in) [JOINT__N_]MAX_JERK