External axis offsets are supported during teleop (world) jogs and coordinated (G-code) motion. External axis offsets are enabled on a per-axis basis by INI file settings and controlled dynamically by INI input pins. The INI interface is similar to that used for wheel jogging. This type of interface is typically implemented with a manual-pulse-generator (mpg) connected to an encoder INI component that counts pulses.

1. INI File Settings

Für jeden Buchstaben der Achse (L in xyzabcuvw):

[AXIS_L]OFFSET_AV_RATIO = Wert (steuert Beschleunigung/Drehung für externe Offsets)
  1. Erlaubte Werte: 0 <= Wert <= 0.9

  2. Nicht zulässige Werte werden durch 0.1 mit der Meldung an stdout ersetzt

  3. Standardwert: 0 (deaktiviert den externen Offset).
    Folge: Weglassen von [AXIS_L]OFFSET_AV_RATIO deaktiviert den externen Offset für die Achse.

  4. Wenn der Wert nicht Null ist, passt das OFFSET_AV_RATIO (r) die konventionelle (Planungs-) Höchstgeschwindigkeit und -beschleunigung an, um die [AXIS_L]-Einschränkungen einzuhalten:

maximale Planungsgeschwindigkeit = (1-r) * MAX_VELOCITY
externe Offset-Geschwindigkeit = ( r) * MAX_VELOCITY

Planung maximale Beschleunigung = (1-r) * MAX_ACCELERATIOIN
externe Offset-Beschleunigung = ( r) * MAX_ACCELERATION

2. HAL-Pins

2.1. Per-Axis Motion HAL Pins

Für jeden Achsenbuchstaben (L in xyzabcuvw)

  1. axis.L.eoffset-enable Input(bit): enable

  2. axis.L.eoffset-scale Input(float): scale factor

  3. axis.L.eoffset-counts Input(s32): input to counts register

  4. axis.L.eoffset-clear Input(bit): clear requested offset

  5. axis.L.eoffset Output(float): current external offset

  6. axis.L.eoffset-request Output(float): requested external offset

2.2. Other Motion HAL Pins

  1. motion.eoffset-active Output(bit): non-zero external offsets applied

  2. motion.eoffset-limited Output(bit): motion inhibited due to soft limit

3. Anwendung

The axis input HAL pins (enable,scale,counts) are similar to the pins used for wheel jogging.

3.1. Offset-Berechnung

At each servo period, the axis.L.eoffset-counts pin is compared to its value in the prior period. The increase or decrease (positive or negative delta) of the axis.L.eoffset-counts pin is multiplied by the current axis.L.eoffset-scale pin value. This product is accumulated in an internal register and exported to the axis.L.eoffset-request HAL pin. The accumulation register is reset to zero at each machine-on.

The requested offset value is used to plan the movement for the offset that is applied to the L coordinate and represented by the axis.L.eoffset HAL pin. The planned motion respects the allocated velocity and acceleration constraints and may be limited if the net motion (offset plus teleop jogging or coordinated motion) reaches a soft limit for the L coordinate.

Bei vielen Anwendungen ist der axis.L.eoffset-scale-Pin konstant und die Netto-axis.L.eoffset-request-Antwort auf axis.L.eoffset-counts entspricht dem Produkt aus dem kumulierten Wert von axis.L.eoffset-counts und den (konstanten) axis.L.eoffset-scale-Pin-Werten.

3.2. Maschine aus/Maschine ein

Wird die Maschine ausgeschaltet, so wird die aktuelle Position mit externen Offsets beibehalten, damit es keine unerwarteten Bewegungen beim Aus- oder Einschalten gibt.

At each startup (machine-on), the internal counts register for each HAL pin axis.L.eoffset-counts is zeroed and the corresponding HAL output pin axis.L.eoffset is reset to zero.

Mit anderen Worten: Externe Offsets werden bei jedem Start (Maschine ein) als NULL definiert, unabhängig vom Wert der axis.L.eoffset-counts-Pins. Um Verwirrung zu vermeiden, wird empfohlen, dass alle axis.L.eoffset-counts-Pins auf Null gesetzt werden, wenn die Maschine ausgeschaltet ist.

3.3. Weiche Grenzwerte

Externe Achsen-Offset-Bewegungen werden unabhängig mit den durch [AXIS_L]OFFSET_AV_RATIO festgelegten Geschwindigkeits- und Beschleunigungseinstellungen geplant. Die Offset-Bewegung wird weder mit dem Teleop-Jogging noch mit der koordinierten (G-Code-) Bewegung koordiniert. Während des Teleop-Jogging und der koordinierten (G-Code-)Bewegung schränken weiche Achsengrenzen ([AXIS_L]MIN_LIMIT,MAX_LIMIT) die Bewegung der Achse ein.

Wenn externe Offsets angewendet werden und die Bewegung eine weiche Grenze erreicht (durch externe Offset-Erhöhungen oder Teleop-Jogging oder koordinierte Bewegung), wird der HAL-Pin motion.eoffset-limited aktiviert und der Achsenwert nominal auf der weichen Grenze gehalten. Dieser HAL-Pin kann von der zugehörigen HAL-Logik verwendet werden, um weitere E-Offset-Zählungen abzuschneiden oder die Maschine anzuhalten (z. B. durch Anschluss an halui.machine.off). Wird die Achse innerhalb des Softlimits bewegt, so wird der motion.eoffset-limited-Pin zurückgesetzt.

Beim Betrieb an einer weichen Grenze während einer koordinierten Bewegung, die den geplanten Achsenwert weiter verändert, zeigt der HAL-Ausgangspin axis.L.eoffset den aktuellen Offset an - die Distanz, die benötigt wird, um die Grenze zu erreichen, anstatt der berechneten Offset-Anforderung. Dieser angezeigte Wert ändert sich, wenn sich der geplante Achsenwert ändert.

Der HAL-Pin axis.L.eoffset-request zeigt den aktuellen angeforderten Offset an, der das Produkt aus dem internen Zählregister und der eoffset-Skala ist. Im Allgemeinen hinkt der Wert des Pins axis.L.eoffset dem Wert von axis.L.eoffset-request hinterher, da der externe Offset einer Beschleunigungsgrenze unterliegt. Beim Betrieb an einer weichen Grenze wirken sich zusätzliche Aktualisierungen der axis.L.eoffset-counts weiterhin auf den angeforderten externen Offset aus, wie er im axis.L.eoffset-request-HAL-Pin reflektiert wird.

Beim Teleop-Jogging mit aktivierten externen Offsets und angewandten Werten ungleich Null wird bei Erreichen eines Soft-Limits die Bewegung in der betreffenden Achse ohne Verzögerungsintervall angehalten. In ähnlicher Weise wird bei einer koordinierten Bewegung mit aktivierten externen Offsets das Erreichen eines Soft-Limits zum Anhalten der Bewegung ohne Verzögerungsphase führen. In diesem Fall spielt es keine Rolle, ob die Offsets Null sind.

Wenn die Bewegung ohne Verzögerungsphase gestoppt wird, können die Beschleunigungsgrenzen des Systems verletzt werden, was zu Folgefehlern führt: 1) einem Schleppfehler (und/oder einem Klopfen) bei einem Servomotor-System, 2) einem Verlust von Schritten bei einem Schrittmotor-System. Im Allgemeinen wird empfohlen, externe Offsets so zu verwenden, dass eine Annäherung an die weichen Grenzen vermieden wird.

3.4. Anmerkungen

Externe Versätze gelten für Achsenkoordinatenbuchstaben (xyzabcuvw). Alle Gelenke müssen referenziert werden, bevor externe Achsenversätze berücksichtigt werden.

Wird ein axis.L.eoffset-enable-HAL-Pin zurückgesetzt, wenn sein Offset ungleich Null ist, wird der Offset beibehalten. Der Offset kann gelöscht werden durch:

  1. ein Umschalter "Maschine aus/Maschine an"

  2. Reaktivierung des Freigabe-Pins und Inkrementierung/Dekrementierung des HAL-Pins axis.L.eoffset-counts, um den Offset auf Null zu setzen.

  3. Pulsieren des HAL-Pins axis.L.eoffset-clear

Externe Offsets sind für die Verwendung mit "kleinen" Offsets vorgesehen, die innerhalb der Soft-Limit-Grenzen angewendet werden.

Softlimits werden sowohl beim Teleop-Jogging als auch bei der koordinierten Bewegung beachtet, wenn externe Offsets angewendet werden. Wenn jedoch während einer koordinierten Bewegung eine weiche Grenze erreicht wird, kann sich die Verringerung des externen Offsets nicht von der weichen Grenze entfernen, wenn die geplante Bewegung in dieselbe Richtung fortgesetzt wird. Dieser Umstand kann auftreten, da die Geschwindigkeit der Korrektur des Offsets (wie mit [AXIS_L]OFFSET_AV_RATIO eingestellt) geringer sein kann als die geplante Gegenbewegung. In solchen Fällen wird die geplante koordinierte Bewegung angehalten (oder gestoppt), um eine Bewegung weg von der weichen Grenze zu ermöglichen, wenn korrigierende Änderungen am externen Offset vorgenommen werden.

3.5. Warnung

The use of external offsets can alter machine motion in a significant manner. The control of external offsets with HAL components and connections and any associated user interfaces should be carefully designed and tested before deployment.

4.1. eoffset_per_angle.comp

Komponente zur Berechnung eines externen Offsets aus einer Funktion auf der Grundlage eines gemessenen Winkels (Drehkoordinate oder Spindel). Siehe die Manpage für Details ($ man eoffset_per_angle).

5. Testen

Der externe Achsenversatz wird durch Hinzufügen einer [AXIS_L]-Einstellung für jede Kandidatenachse aktiviert. Zum Beispiel:

[AXIS_Z]
OFFSET_AV_RATIO = 0.2

For testing, it is convenient to simulate a jog wheel interface using the sim_pin GUI. For example, in a terminal:

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

The use of external offsets is aided by displaying information related to the current offsets: the current eoffset value and the requested eoffset value, the axis pos-cmd, and (for an identity kinematics machine) the corresponding joint motor pos-cmd and motor-offset. The provided sim configuration (see below) demonstrates an example PyVCP panel for the AXIS GUI.

Wenn keine benutzerdefinierte Anzeige vorhanden ist, kann halshow als Hilfsanwendung mit einer benutzerdefinierten Überwachungsliste gestartet werden.

Example INI file settings to simulate the HAL pin eoffset connections and display eoffset information for the z axis (for identity kinematics with 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

Wo sich die Datei z.halshow (im Konfigurationsverzeichnis) befindet:

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

Die bereitgestellten Simulationskonfigurationen demonstrieren die Verwendung externer Offsets, um einen Ausgangspunkt für die Anpassung an die reale Hardware zu bieten.

The sim configurations utilize the INI setting [HAL]HALFILE = LIB:basic_sim.tcl to configure all routine HAL connections for the axes specified in the INI file [TRAJ]COORDINATES= setting. The HAL logic needed to demonstrate external offset functionality and the GUI HAL pin connections for a PyVCP panel are made in separate HAL files. A non-simulation configuration should replace the LIB:basic_sim.tcl item HALFILEs appropriate to the machine. The provided PyVCP files (.hal and .xml) could be a starting point for application-specific GUI interfaces.

6.1. eoffsets.ini

Die Sim-Konfiguration sim/configs/axis/external_offsets/eoffsets.ini demonstriert eine kartesische XYZ-Maschine mit Steuerelementen zur Aktivierung externer Offsets auf jeder Achse.

Alle wichtigen Positions- und Offsetwerte werden angezeigt.

Ein sim_pin GUI bietet Steuerelemente für die Achsen-Offset-Pins: eoffset-scale & eoffset-counts (über Signal e:<L>counts), eoffset-clear (über Signal e:clearall)

Ein Skript (eoffsets_monitor.tcl) wird verwendet, um die axis.L.counts-Pins beim Ausschalten der Maschine auf Null zu setzen.

6.2. jwp_z.ini

Die Sim-Konfiguration sim/configs/axis/external_offsets/jwp_z.ini demonstriert eine Jog-While-Pause-Funktion für eine einzelne (Z-)Koordinate:

Die LEDs auf dem Bedienfeld dienen zur Anzeige wichtiger Statusinformationen.

Es gibt Steuerelemente zum Einstellen des Skalierungsfaktors für den Eoffset und zum Erhöhen/Verringern/Löschen der Eoffset-Zähler.

6.3. dynamische_offsets.ini

Diese Sim-Konfiguration sim/configs/axis/external_offsets/dynamic_offsets.ini demonstriert dynamisch angewandte Offsets durch Anschluss einer Sinuswellenform an die externen Offset-Eingänge für die Z-Koordinate.

Die LEDs auf dem Bedienfeld dienen zur Anzeige wichtiger Statusinformationen.

Es gibt Steuerelemente zur Änderung der INI-Datei-Einstellungen für die maximale Geschwindigkeit und Beschleunigung der Z-Achse.

Die Parameter des Wellenformgenerators lassen sich mit Hilfe von Reglern einstellen.

Eine Halscope-App wird gestartet, um die angelegte Wellenform, die Offset-Antwort und die Motor-CMD-Antwort anzuzeigen.

Anmerkung
Änderungen an der z-Koordinate max-acceleration und max-velocity werden während der Ausführung eines Programms nicht bestätigt.

6.4. opa.ini (eoffset_per_angle)

The opa.ini configuration uses the INI component eoffset_per_angle ($ man eoffset_per_angle) to demonstrate an XZC machine with functional offsets computed from the C coordinate (angle) and applied to the transvers (X) coordinate. Offset computations are based on a specified reference radius typically set by a program (or MDI) M68 command to control a motion.analog-out-NN pin.

Die LEDs auf dem Bedienfeld dienen zur Anzeige wichtiger Statusinformationen.

Es werden Funktionen für Innen- und Außenpolygone (nsides >= 3), Sinuswellen und Rechteckwellen bereitgestellt. Die Funktionen können mit dem Stift fmul in der Frequenz multipliziert und mit dem Stift rfrac in der Amplitude verändert werden (Bruchteil des Referenzradius).

Es gibt Bedienelemente zum Starten/Stoppen von Offset-Wellenformen und zum Einstellen des Funktionstyps und seiner Parameter.