:lang: es = Componentes Principales [[cha:core-components]] Vea también la página man 'motion(9)'. [[sec:motion]] == 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 referencia y genera un flujo correcto de posiciones de articulaciones, limitado por las restricciones de posicion de esas 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 una. Los nombres de pines y parámetros que comienzan con 'axis.L' y 'joint.N' son leídos y actualizados por la función del controlador de movimiento. 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 = 50000' - es el período de la tarea 'Base' en nanosegundos. Este es el hilo más rápido en la máquina. [NOTE] En sistemas basados en servos, generalmente no hay razón para que 'base_period_nsec' sea menor 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 requisitos de longitud de paso y de espacio entre pasos largos, la tasa de pasos máxima absoluta es de un paso por 'base_period_nsec'. Por lo tanto, para 'base_period_nsec = 50000' se tendria una tasa de paso máxima absoluta de 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 paso necesario, y la velocidad del procesador. Elegir un 'base_period_nsec' que sea demasiado rapido puede conducir a un mensaje de "retraso de 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'. === 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 articulaciones rotatorias). Los bits de máscara seleccionan la(s) articulación(es). El LSB de la máscara selecciona la articulacion 0. Ejemplo: ---- unlock_joints_mask = 0x38 (111000b) ---- selecciona las articulaciones 3,4 y 5 [[sec:motion-pins]] === Pines (((motion (HAL pins)))) Los siguientes pines son los 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'. * 'motion.analog-in-00' - (float, in) Estos pines (00, 01, 02, 03, o más si están configurados) son controlado por M66. * '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 * '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 a '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-65. * '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 el Control de Parada de Alimentacion está habilitado ('M53 P1'), y este bit es TRUE, la velocidad de avance se hace 0. * 'motion.feed-inhibit' - (bit, in) Cuando este bit es TRUE, la velocidad de avance se hace 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) Estos valores estan en src/emc/nml_intf/motion_types.h - 0: Idle (ocioso, sin movimiento) - 1: Traverse (movimiento rápido) - 2: Linear feed (avance lineal) - 3: Arc feed (avance en arcos) - 4: Tool change (cambio de herramienta) - 5: Probing (sondeo) - 6: Rotary axis indexing (indexado de eje rotativo) * 'motion.on-soft-limit' - (bit, out) TRUE cuando la máquina está en un límite 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. FALSE para contacto de sonda abierto. * 'motion.program-line' - (s32, out) La línea de programa actual durante su ejecución. Vale cero si no corre un programa o entre líneas mientras se avanza de una linea a otra. * '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. * 'spindle.0.at-speed' - (bit, in) Motion se detendrá hasta que este pin sea TRUE, en las siguientes condiciones: antes del primer movimiento de avance después de cada inicio del husillo o cambio de velocidad; antes del inicio de cada cadena de movimientos sincronizados con el husillo. Si está en modo CSS (velocidad constante en superficie), en cada transición de velocidad de alimentación a rápida. Esta entrada se puede usar para asegurar que el husillo esté a su velocidad antes de comenzar un corte, o que el husillo de un torno en modo CSS se haya ralentizado, después de una pasada de un refrentado grande, para uno pequeño, antes de comenzar la próxima pasada en el diámetro grande. Muchos VFD tienen una salida 'en velocidad'. Por otro lado, es fácil generar esta señal con el componente 'HAL near', comparando las velocidades del husillo solicitadas y reales. * 'spindle.N.brake' - (bit, out) TRUE cuando debe aplicarse el freno de husillo . * 'spindle.N.forward' - (bit, out) TRUE cuando el husillo debe girar hacia adelante. * 'spindle.N.index-enable' - (bit, I/O) Para el correcto funcionamiento de los movimientos sincronizados del husillo, este pin debe estar conectado al 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 hace 0. * 'spindle.N.on' - (bit, out) TRUE cuando el husillo debe girar. * 'spindle.N.reverse' - (bit, out) TRUE cuando el husillo debe girar hacia atras. * 'spindle.N.revs' - (float, in) Para el correcto funcionamiento de los movimientos sincronizados del husillo, esta señal debe estar conectada al pin de posición del codificador de husillo. La posición del codificador del husillo debe escalarse de manera que las revoluciones del husillo aumenten en 1.0 por cada rotación del husillo en el sentido de las agujas del reloj ('M3'). * 'spindle.N.speed-in' - (flat, in) Realimentación de la velocidad real del husillo en rotaciones por segundo. Esto es usado por el movimiento de alimentación por revolución ('G95'). Si el controlador del codificador de su husillo no tiene una 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 un bucle de vuelta con 'spindle.N.speed-out-rps'. * 'spindle.N.speed-out' - (float, out) Velocidad de giro ordenada en rotaciones por minuto. Positivo para el husillo hacia adelante ('M3'), negativo para el husillo hacia atrás ('M4'). * 'spindle.N.speed-out-abs' - (float, out) Velocidad de giro ordenada en rotaciones por minuto. Debe ser siempre positivo. * 'spindle.N.speed-out-rps' - (float, out) Velocidad de giro ordenada en rotaciones por segundo. Positivo para husillo hacia adelante ('M3'), negativo para el husillo hacia atrás ('M4'). * 'spindle.N.speed-out-rps-abs' - (float, out) Velocidad de giro ordenada en rotaciones por segundo. Debe ser siempre positivo. * '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 actual; podría provenir de la tabla de herramientas ('G43' activo), o podría venir del gcode ('G43.1' activo) * 'spindle.N.orient-angle' - (float,out) Orientacion deseada del husillo M19. El valor de la palabra R de M19 mas el valor del parametro ini [RS274NGC]ORIENT_OFFSET. * 'spindle.N.orient-mode' - (s32,out) Mode deseado de rotacion del husillo M19. Por defecto 0. * 'spindle.N.orient' - (out,bit) Indica el inicio del ciclo de orientación del husillo. Establecido por M19. desactivado por M3, M4 o M5. Si spindle-orient-fault no es cero durante spindle-orient TRUE, el comando M19 falla con un mensaje de error. * 'spindle.N.is-oriented' - (in, bit) Pin de reconocimiento de husillo orientado. Completa el ciclo de orientacion. Si spindle-orient era TRUE cuando spindle-is-oriented estaba orientada, el pin de orientación del husillo se limpia y el pin spindle-locked se activa. Además, el pin spindle-brake del husillo es activado. * 'spindle.N.orient-fault' - (s32, in) Entrada de codigo de fallo de orientacion de husillo. Cualquier valor distinto de cero aborta el ciclo de orientacion. * 'spindle.N.lock' - (bit, out) Pin de orientacion completa de husillo. Desactivado por M3,M4 o M5. .Uso de pines HAL para orientacion de 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 'modo de busqueda de orientación deseada', y se activa el pin HAL 'spindle-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 completada'. Esto tambien activa el pin 'spindle.N.brake'. El husillo queda en modo de orientación completada. Si mientras que 'spindle.N.orient' es TRUE, y 'spindle.N.is-oriented' no ha sido aun activado, 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 completada'. Esto queda indicado al desactivar los pines '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 comando PID basado en la posición del encoder del husillo, 'spindle-orient-angle' y 'spindle-orient-mode'. === 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' - (float, RO) === 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 == 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 man 'motion(9)' para obtener detalles sobre los pines y parámetros. == 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 unos estrictos requisitos de tiempo o simplemente necesita más E/S, considere usar el sincronizado I/O en tiempo real proporcionado por <>. === Pines (((iocontrol (HAL pins)))) * 'iocontrol.0.coolant-flood' - (bit, out) TRUE cuando se solicita refrigerante por inundación. * 'iocontrol.0.coolant-mist' - (bit, out) TRUE cuando se solicita refrigerante por 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 la lubricacion de maquina. * '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, 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 de 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 rearme el E-Stop. == Configuración ini Varias configuraciones ini están disponibles como pines de entrada hal. === Pines (((ini settings (HAL pins)))) 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 [NOTE] Los pines min_limit y max_limit por cada eje se respetan continuamente después de homing. Los pines ferror y min_ferror por cada eje se respetan cuando la máquina está encendida y no en posición. Los pines max_velocity y max_acceleration por cada eje se muestrean cuando la máquina está encendida y motion_state es free (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 detenga y motion_state vuelva a ser free. * '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 [NOTE] 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