Los offsets externos de ejes estan soportados durante los movimientos teleop (universal) y coordinado (gcode). Los offsets externos de ejes estan habilitados para cada eje en la configuración del archivo ini y controlados dinámicamente por pines Hal de entrada. La interfaz Hal es similar a la que se utiliza para un volante jog. Este tipo de interfaz está implementado normalmente con un generador de pulsos manual (mpg), conectado a un componente codificador hal que cuenta los pulsos.

1. Configuración del archivo ini

Para cada letra de eje (L será uno de x,y,z,a,b,c,u,v,w):

[AXIS_L]OFFSET_AV_RATIO = valor (controla acel/vel para offsets externos)
  1. Valores permitidos: 0 <= valor <= 0.9

  2. Los valores no permitidos se reemplazan con 0.1, con un mensaje a la salida estándar

  3. Valor por defecto: 0 (desactiva el offset externo). Consecuencia: omitiendo [AXIS_L]OFFSET_AV_RATIO se desactiva el offset externo para el eje L.

  4. Si no es cero, OFFSET_AV_RATIO (r), ajusta la velocidad y aceleración máxima convencional (planificada) para preservar las restricciones en [AXIS_L]:

    velocidad máxima planificada   = (1-r) * MAX_VELOCITY
    velocidad de offset externo    = (  r) * MAX_VELOCITY
    aceleración máxima planificada = (1-r) * MAX_ACCELERATIOIN
    aceleración de offset externo  = (  r) * MAX_ACCELERATION

2. Pines Hal

2.1. Pines Hal de movimiento por eje

Para cada letra de eje (L será uno de x,y,z,a,b,c,u,v,w)

  1. axis.L.eoffset-enable Entrada (bit): habilitacion.

  2. axis.L.eoffset-scale Entrada (float): factor de escala.

  3. axis.L.eoffset-count Entrada (s32): entrada al registro de conteo.

  4. axis.L.eoffset-clear Entrada (bit): borrar el offset solicitado.

  5. axis.L.eoffset Salida (float): offset externo actual.

  6. axis.L.eoffset-request Salida (float): offset externo solicitado.

2.2. Otros Pines Hal Motion

  1. motion.eoffset-active Salida (bit): se aplican offsets externos distintos de cero.

  2. motion.eoffset-limited Salida (bit): movimiento inhibido debido a límite soft.

3. Uso

Los pines hal de entrada del eje (enable,scale,counts) son similares a los pines utilizados para volante jog.

3.1. Cálculo de offset

En cada período servo, el pin axis.L.eoffset-count se compara con el valor en el periodo anterior. El aumento o disminución (delta positivo o negativo) del pin axis.L.eoffset-count se multiplica por el valor actual del pin axis.L.eoffset-scale. Este producto es acumulado en un registro interno y exportado al pin Hal axis.L.eoffset-request. El registro de acumulación se reinicia a cero en cada encendido de la máquina.

El valor de offset solicitado se utiliza para planificar el movimiento para el offset que se aplica a la coordenada L y se representa por el pin hal axis.L.eoffset. El movimiento previsto respeta las restricciones asignadas de velocidad y aceleración, que pueden ser limitadas si el movimiento neto (offset más jogging teleop o movimiento coordinado) alcanza un límite soft de la coordenada L.

Para muchas aplicaciones, el pin axis.L.eoffset-scale es constante y la respuesta neta axis.L.eoffset-request a axis.L.eoffset-count es equivalente al producto del valor acumulado de axis.L.eoffset-count y el valor (constante) del pin axis.L.eoffset-scale.

3.2. Máquina apagada/encendida

Cuando la máquina está apagada, la posición actual con los offsets se mantiene, por lo que no hay movimiento inesperado al apagar o encender.

En cada arranque (máquina-on), los registros internos de conteos para cada uno de los pines hal axis.L.eoffset-count se ponen a cero y el pin correspondiente de la salida hal axis.L.eoffset se restablece a cero.

En otras palabras, los offsets externos se definen como CERO en cada inicio (machine-on) independientemente del valor de los pines axis.L.eoffset-count. Para evitar confusiones, se recomienda que todos los pines axis.L.eoffset-count estén configurados a cero cuando la máquina se apaga.

3.3. Límites soft

Los movimientos por offsets externos de eje se planifican independientemente con ajustes de velocidad y aceleración especificados por [AXIS_L]OFFSET_AV_RATIO. El movimiento de offset no está coordinado con jogs teleop ni con movimientos coordinados (gcode). Durante el movimiento teleop y el movimiento coordinado (gcode), los límites soft de eje ([AXIS_L]MIN_LIMIT, MAX_LIMIT) restringen el movimiento del eje.

Cuando se aplican offsets externos y el movimiento alcanza un límite soft (por aumentos de offset externo o jogging teleop o movimiento coordinado), se activa el pin hal motion.eoffset-limited y el valor del eje se mantiene nominalmente al del límite soft. Este pin hal puede ser utilizado por la lógica hal asociada para truncar cuentas de eoffsets adicionales o para detener la máquina (conectando a halui.machine.off por ejemplo). Si el eje se mueve dentro de los límites soft, el pin motion.eoffset-limited se reinicia.

Cuando se opera en un límite soft durante el movimiento coordinado que continúa cambiando el valor planificado del eje, el pin de salida axis.L.eoffset indicará el offset actual - la distancia necesaria para alcanzar el límite en lugar de la solicitud de offset calculada. Este valor indicado cambiará a medida que cambie el valor planificado del eje.

El pin hal axis.L.eoffset-request indica el offset actual solicitado, que es el producto del registro de conteos interno y eoffset-scale. En general, el valor del pin axis.L.eoffset retrasa el valor de axis.L.eoffset-request puesto que el offset externo está sujeto a un límite de aceleración. Cuando se opera en un límite soft, las actualizaciones adicionales de axis.L.eoffset-count continuará afectando al offset externo solicitado como se refleja en el pin Hal axis.L.eoffset-request.

Cuando se hace jogging teleop con offsets externos habilitados y con valores distintos de cero, el movimiento se detendrá al encontrar un límite soft en el eje infractor sin un intervalo de desaceleración. Del mismo modo, durante el movimiento coordinado con offsets externos habilitados, alcanzar un límite soft detendrá el movimiento sin fase de desaceleración. Para este caso, no importa si los offsets son cero.

Cuando el movimiento se detiene sin fase de desaceleración, los límites de aceleración del sistema pueden violarse y dar lugar a: 1) a un error de seguimiento (y/o un golpe brusco) en un sistema servo, 2) una pérdida de pasos para un sistema de motor paso a paso. En general, se recomienda que los offsets externos se apliquen de forma que se evite la cercania a los límites softs.

3.4. Notas

Los offsets externos se aplican a las letras de coordenadas de eje (xyzabcuvw). Todas las articulaciones deben tener home antes de que los offsets externos del eje sean aplicados.

Si un pin hal axis.L.eoffset-enable se restablece cuando su offset no es cero, el offset se mantiene. El offset puede ser borrado por:

  1. una conmutacion Máquina apagada/Máquina encendida

  2. reactivación del pin de habilitación e incremento/decremento del pin Hal axis.L.eoffset-count para devolver el offset a cero.

  3. pulso en el pin hal axis.L.eoffset-clear

Los offsets externos están diseñados para usarse con offsets pequeños que se aplican dentro de los límites soft.

Cuando se aplican offsets externos, se respetan los límites soft tanto para jogging teleop como para movimiento coordinado. Sin embargo, cuando se alcanza un límite soft durante el movimiento coordinado, la reduccion del offset externo culpable no produce alejamiento del límite soft si el movimiento planificado continúa en la misma dirección. Esta circunstancia puede ocurrir ya que la tasa de eliminación de corrección de offset (según lo establecido en [AXIS_L]OFFSET_AV_RATIO) puede ser menor que la velocidad de movimiento planificada opuesta. En tales casos, pausando (o parando) lo planificado, el movimiento coordinado permitirá el alejamiento del límite soft cuando se hacen cambios correctivos en el offset externo ofensivo.

3.5. Advertencia

El uso de offsets externos puede alterar el movimiento de la máquina de una manera significativa. El control de los offsets externos con componentes y conexiones hal y cualquier interfaz de usuario asociada, debe ser cuidadosamente diseñado y probado antes de la implementación.

4. Componentes de Hal relacionados

4.1. eoffset_per_angle.comp

Componente para calcular un offset externo desde una función basada en un ángulo medido (coordenada rotativa o husillo). Ver la página man para detalles ($ man eoffset_per_angle).

5. Pruebas

La capacidad de offset externo de un eje se habilita agregando una configuración [AXIS_L] para cada eje candidato. Por ejemplo:

[AXIS_Z]
OFFSET_AV_RATIO = 0.2

Para las pruebas, es conveniente simular una interfaz de jog de volante utilizando la gui sim_pin. Por ejemplo, en una terminal:

$ sim_pin axis.z.eoffset-enable axis.z.eoffset-scale axis.z.eoffset-counts

El uso de offsets externos se facilita mostrando información relacionada con los offsets actuales: el valor actual de eoffset y el valor de eoffset solicitado, pos-cmd del eje, y (para una máquina con cinemática de identidad) pos-cmd y offset del motor de la articulación correspondiente. La configuración sim proporcionada (ver más abajo) muestra un ejemplo de panel pyvcp para la gui Axis.

En ausencia de una pantalla personalizada, se puede iniciar halshow como una aplicación auxiliar con una lista de observación personalizada.

Ejemplo de configuración de archivos ini para simular conexiones del pin hal eoffset y mostrar información de eoffset para el eje z (para cinemática de identidad con z==joint2):

[APPLICATIONS]
APP = sim_pin \
      axis.z.eoffset-enable \
      axis.z.eoffset-scale \
      axis.z.eoffset-counts \
      axis.z.eoffset-clear

APP = halshow --fformat "%0.5f" ./z.halshow

Donde el archivo z.halshow (en el directorio de configuración) es:

pin+joint.2.motor-pos-cmd
pin+joint.2.motor-offset
pin+axis.z.pos-cmd
pin+axis.z.eoffset
pin+axis.z.eoffset-request
pin+motion.eoffset-limited

6. Ejemplos

Las configuraciones de simulación proporcionadas demuestran el uso de offsets externos como punto de partida para personalización de hardware real del usuario.

Las configuraciones sim utilizan la configuración ini [HAL]HALFILE = LIB:basic_sim.tcl para configurar todas las rutina de conexiones hal para los ejes especificados en el archivo ini [TRAJ]COORDINATES =. La lógica hal necesaria para demostrar la funcionalidad de offset externo y las conexiones de pines de gui hal para un panel pyvcp se realizan en archivos hal separados. Una configuración no simulada debería reemplazar el elemento LIB:basic_sim.tcl con HALFILEs apropiados para la máquina. Los archivos pyvcp proporcionados (.hal y .xml) podrían ser un punto de partida para interfaces gui específicas de la aplicación.

6.1. eoffsets_demo.ini

La configuración sim sim/configs/axis/external_offsets/eoffsets_demo.ini demuestra una máquina cartesiana XYZ con controles para habilitar offsets externos en cualquier eje.

Se proporcionan pantallas para mostrar todas las posiciones importantes y valores de offset.

Una gui sim_pin proporciona controles para los pines de offset del eje: eoffset-scale, eoffset-count (a través de la señal e:<L>counts) y eoffset-clear (a través de la señal e:clearall)

Se usa un script (eoffsets_monitor.tcl) para establecer los pines axis.L.counts en cero en el apagado de la máquina.

6.2. jwp_z.ini

La configuración sim sim/configs/axis/external_offsets/jwp_z.ini demuestra la implementacion de una capacidad jog-while-pause en una sola coordenada (Z):

Los LED del panel se proporcionan para mostrar los estados de elementos importantes.

Se proporcionan controles para establecer el factor de escala eoffset y para incrementar/decrementar/borrar las cuentas eoffset.

6.3. dynamic_offsets.ini

Esta configuración sim sim/configs/axis/external_offsets/dynamic_offsets.ini demuestra los offsets aplicados dinámicamente mediante la conexión de una forma de onda sinusoidal a las entradas externas de offset de la coordenada z.

Los LED del panel se proporcionan para mostrar los estados de elementos importantes.

Se proporcionan controles para modificar la configuración del archivo ini para velocidad máxima y aceleración máxima del eje Z.

Se proporcionan controles para configurar los parámetros del generador de forma de onda.

Se inicia una aplicación de halscope para mostrar la forma de onda aplicada, la respuesta de offset, y la respuesta del comando motor.

Nota: no se reconocen cambios en la coordenada z, max-acceleration y max-speed mientras se está ejecutando un programa.

6.4. opa.ini (eoffset_per_angle)

La configuración opa.ini utiliza el componente hal eoffset_per_angle ($ man eoffset_per_angle) para demostrar una máquina XZC con offsets funcionales calculados a partir de la coordenada C (ángulo) y aplicados a la coordenada transversal (X). Los cálculos de offset se basan en un radio de referencia especificado normalmente establecido por un M68 programado (o comando MDI) para controlar un pin motion.analog-out-NN.

Los LED del panel se proporcionan para mostrar los estados de elementos importantes.

Se proporcionan funciones para los polígonos internos y externos (nsides> = 3), ondas sinusoidales y ondas cuadradas. Las funciones se pueden multiplicar en frecuencia usando el pin fmul y modificar la amplitud usando el pin rfrac (fracción del radio de referencia).

Se proporcionan controles para iniciar/detener las formas de onda de offset y para establecer el tipo de función y sus parámetros.