Vea también la página man motion(9).

1. Motion (motmod)

Los siguientes pines y parámetros son creados por el módulo motmod en tiempo real. Este módulo proporciona una interfaz HAL para el planificador de movimiento de LinuxCNC. Básicamente, motmod toma una lista de puntos de referencia y genera un flujo correcto, limitado por las restricciones de posiciones de articulaciones, de posiciones de articulaciones que alimenta a los drivers 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.

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])
  • base_period_nsec=period - 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 ms) se tendria una tasa de paso máxima absoluta de (1000/0,05) 20,000 pasos por segundo. 50,000 ns (50 us) 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 = period - 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 = period - 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ática unusual (por ejemplo, hexápodos) no hay razón para que este valor sea mas alto que servo_period_nsec.

1.1. Opciones

Si la cantidad de E/S digital necesaria es mayor que el valor predeterminado (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 articulacion 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 articulacion 0 y sucesivamente. Ejemplo:

   unlock_joints_mask = 0x38 (111000b)

selecciona articulaciones 3,4,5

1.2. Pines

Estos pines 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 ajuste manual de alimentación y motion.feed-hold. A partir de la versión 2.8 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 controlado por M66 (espera en entrada).

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

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

  • 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 controlado por M62 a M65 (control de salida digital).

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

  • 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 desconectada 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 (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 accion 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 maquina está en estado machine on.

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

    • 0: Idle (sin movimiento)

    • 1: Traverse

    • 2: Linear feed

    • 3: Arc feed

    • 4: Tool change

    • 5: Probing

    • 6: Rotary axis indexing

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

  • motion.probe-input - (bit, in) G38.n (sondeo) 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 linea a linea.

  • 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 desplazamiento de la herramienta en efecto; podría provenir de la tabla de herramientas (G43 activo), o podría venir del gcode (G43.1 activo)

  • spindle.0.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 alimentacion.

    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 encoder 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 encoder del husillo. La posición del encoder del husillo debe escalarse de manera que spindle-revs aumente en 1 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 del encoder del husillo no tiene salida de velocidad, puede generar uno adecuado enviando la posición del husillo a través de un componente ddt. Si no tiene un encoder 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 sera 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 sera 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 (el menor angulo).

  • '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 orientacion. Cualquier valor distinto de cero provocará que el ciclo de orientacion se aborte.

  • 'spindle.N.lock` - (bit, out) Pin de orientacion 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 siguientes modos:

  • 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 el modo de orientación deseado, 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, segun 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.

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 busqueda de orientación deseada o orientación completa. Esto queda indicado al desactivar los pins spindle-orient y spindle-locked.

El pin spindle-orient-mode refleja la palabra M19 P 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 encoder del husillo, spindle-orient-angle y spindle-orient-mode.

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 - (flotante, RO) Se usa con fines de depuración

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

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

  • motion.debug-float-3 - (flotante, 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 - Procesa comandos de movimiento provenientes del espacio de usuario

  • motion-controller - Ejecuta el controlador de movimiento LinuxCNC

2. 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.

3. iocontrol

iocontrol - acepta comandos de E/S NML, interactúa con HAL en el espacio de usuario.

Las señales se activan y desactivan en el espacio de usuario. Si tiene requisitos de tiempo estrictos o simplemente necesita más E/S, considere usar el tiempo real I/O sincronizado proporcionado por motion en su lugar.

3.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.lube - (bit, out) TRUE cuando se activa el lubricante.

  • iocontrol.0.lube_level - (bit, in) Debe ser TRUE cuando el nivel de lubricante es correcto.

  • 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, fuera) 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 preparación de una 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.

4. Configuración ini

Muchos items de configuracion ini están disponibles como pines de entrada hal.

4.1. Pines

N se refiere a un número de articulacion, 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 continua 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 jog) 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