Externe Achsen-Offsets werden bei Teleop (World) Jogs und koordinierten (G-Code) Bewegungen unterstützt. Externe Achsen-Offsets werden pro Achse durch INI-Datei-Einstellungen aktiviert und dynamisch durch HAL-Eingangsstifte gesteuert. Die HAL-Schnittstelle ähnelt der für das Joggen von Rädern verwendeten Schnittstelle. Diese Art von Schnittstelle wird typischerweise mit einem manuellen Impulsgenerator (MPG) implementiert, der mit einer Encoder-HAL-Komponente verbunden ist, die Impulse zählt.

1. INI-Datei Einstellungen

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

planning max acceleration    = (1-r) * MAX_ACCELERATION
external offset acceleration = (  r) * MAX_ACCELERATION

2. HAL-Pins

2.1. Pro-Achse Bewegungs (engl. Motion)-HAL Pins

Für jeden Achsenbuchstaben (L in xyzabcuvw)

  1. axis. L.eoffset-enable Eingang (Bit): Aktivieren

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

  3. axis.L.eoffset-counts Input(s32): Eingabe in das Zählregister

  4. axis.L.eoffset-clear Input(bit): angeforderten Offset löschen

  5. axis. L.eoffset Output(float): aktueller externer Offset

  6. axis.L.eoffset-request Output(float): angeforderter externer Offset

2.2. Andere Bewegungs(engl. Motion)-HAL Pins

  1. motion.eoffset-active Output(Bit): Externe Offsets ungleich Null angewendet

  2. motion.eoffset-limited Output(bit): Bewegung gesperrt durch Softlimit

3. Anwendung

Die Achseneingangs-HAL-Pins (enable, scale, counts) ähneln den Pins, die für das Wheel-Jogging verwendet werden.

3.1. Offset-Berechnung

In jeder Servoperiode wird der Pin axis.L.eoffset-counts mit seinem Wert in der vorherigen Periode verglichen. Die Zunahme oder Abnahme (positives oder negatives Delta) des Pins axis.L.eoffset-counts wird mit dem aktuellen Wert des Pins axis.L.eoffset-scale multipliziert. Dieses Produkt wird in einem internen Register akkumuliert und an den HAL-Pin axis.L.eoffset-request exportiert. Das Akkumulationsregister wird bei jedem Einschalten der Maschine auf Null zurückgesetzt.

Der angeforderte Offset-Wert wird verwendet, um die Bewegung für den Offset zu planen, der auf die L-Koordinate angewendet und durch den HAL-Pin axis.L.eoffset dargestellt wird. Die geplante Bewegung berücksichtigt die zugewiesenen Geschwindigkeits- und Beschleunigungsbeschränkungen und kann begrenzt werden, wenn die Nettobewegung (Offset plus Teleop-Jogging oder koordinierte Bewegung) eine weiche Grenze für die L-Koordinate erreicht.

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.

Bei jedem Start (Einschalten der Maschine) wird das interne Zählregister für jeden HAL-Pin axis.L.eoffset-counts auf Null gesetzt und der entsprechende HAL-Ausgangspin axis.L.eoffset wird auf Null zurückgesetzt.

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

Die Verwendung von externen Offsets kann die Maschinenbewegung erheblich verändern. Die Steuerung von externen Offsets mit HAL-Komponenten und Verbindungen sowie alle zugehörigen Benutzerschnittstellen sollten vor dem Einsatz sorgfältig entworfen und getestet werden.

4. Verwandte HAL-Komponenten

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

Zum Testen ist es praktisch, eine Jogwheel-Schnittstelle mit der sim_pin-GUI zu simulieren. Zum Beispiel in einem Terminal:

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

Die Verwendung externer Offsets wird durch die Anzeige von Informationen zu den aktuellen Offsets unterstützt: der aktuelle E-Offset-Wert und der angeforderte E-Offset-Wert, der Achsen-Pos-Cmd und (für eine Identitätskinematik-Maschine) der entsprechende Gelenkmotor-Pos-Cmd und Motor-Offset. Die mitgelieferte Sim-Konfiguration (siehe unten) demonstriert ein Beispiel für ein PyVCP-Panel für die AXIS GUI.

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

Beispiel für INI-Datei-Einstellungen zur Simulation der HAL-Pin-Eoffset-Verbindungen und zur Anzeige von E-Offset-Informationen für die Z-Achse (für Identitätskinematik mit 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.

Die Sim-Konfigurationen verwenden die INI-Einstellung [HAL]HALFILE = LIB:basic_sim.tcl, um alle Routine-HAL-Verbindungen für die in der INI-Datei [TRAJ]COORDINATES= angegebenen Achsen. Die HAL-Logik, die zur Demonstration der externen Offset-Funktionalität benötigt wird und die GUI HAL Pin Verbindungen für ein PyVCP Panel sind in getrennten HAL Dateien. Eine Nicht-Simulations-Konfiguration sollte den Eintrag LIB:basic_sim.tcl für den Maschine in den HALFILEs ersetzen. Die mitgelieferten PyVCP-Dateien (.hal und .xml) können ein Ausgangspunkt für anwendungsspezifische Benutzeroberflächen sein.

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)

Die opa.ini-Konfiguration verwendet die INI-Komponente eoffset_per_angle ($ man eoffset_per_angle), um eine XZC-Maschine mit funktionalen Offsets zu demonstrieren, die aus der C-Koordinate (Winkel) berechnet und auf die Transversalkoordinate (X) angewendet werden. Die Offset-Berechnungen basieren auf einem bestimmten Referenzradius, der in der Regel durch einen M68-Befehl eines Programms (oder MDI) zur Steuerung eines motion.analog-out-NN-Pins festgelegt wird.

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.