1. Übersicht

Die Referenzfahrt legt den Nullpunkt der G53-Maschinenkoordinaten fest. Softlimits werden relativ zum Maschinenursprung definiert. Eine korrekt konfigurierte und funktionierende Maschine bewegt sich nicht über die Soft(ware)-Grenzen hinaus und der Maschinenursprung ist so wiederholbar eingestellt wie der Referenzschalter/Indexmechanismus. Linuxcnc kann mit dem Auge (Ausrichtungsmarken), mit Schaltern, mit Schaltern und einem Encoder-Index oder mit Absolut-Encodern ausgerichtet werden. Homing scheint einfach genug - bewegen Sie einfach jedes Gelenk zu einer bekannten Position, und stellen Sie LinuxCNC’s interne Variablen entsprechend. Allerdings haben verschiedene Maschinen unterschiedliche Anforderungen, und Homing ist eigentlich ziemlich kompliziert.

Anmerkung
Es ist zwar möglich, LinuxCNC ohne Referenzschalter/Referenzfahrt oder Endschalter zu verwenden, aber die zusätzliche Sicherheit der Softlimits wird dadurch zunichte gemacht.

2. Voraussetzung

Die Durchführung der Referenzfahrt (engl. homing) beruht auf einigen grundlegenden Annahmen zur Maschine.

  • The negative and positive directions are based on Tool Movement which can be different from the actual machine movement. I.e., on a mill typically the table moves rather then the tool.

  • Alles wird vom Nullpunkt der G53-Maschine aus referenziert, der Ursprung kann überall liegen (auch außerhalb, wo man sich bewegen kann)

  • Der Nullpunkt der G53-Maschine liegt in der Regel innerhalb des Bereichs der weichen Grenzen, aber nicht zwingend.

  • Der Offset des Referenzschalters legt fest, wo sich der Ursprung befindet, aber auch er wird vom Ursprung aus referenziert.

  • Bei der Referenzfahrt mit Encoder-Index wird der Offset des Referenzschalters aus der Encoder-Referenzposition berechnet, nachdem der Referenzschalter ausgelöst wurde.

  • Die negativen Soft(ware)-Grenzen sind das Maximum, das Sie nach der Referenzfahrt in negativer Richtung bewegen können. (aber sie sind nicht unbedingt negativ im absoluten Sinne)

  • Die positiven Soft(ware)-Grenzen sind die maximale Bewegung, die Sie nach der Referenzfahrt in positiver Richtung ausführen können. (Sie sind jedoch nicht unbedingt positiv im absoluten Sinne, obwohl es üblich ist, sie als positive Zahl festzulegen)

  • Soft(ware)-Grenzwerte befinden sich innerhalb des Endschalterbereichs.

  • (Endgültige) Referenzpunktposition liegt innerhalb des weichen (engl. soft) Grenzbereichs

  • (Bei Verwendung einer schalterbasierten Referenzfahrt nutzen die Referenzschalter entweder die Endschalter (gemeinsame Referenzfahrt-/Endschalter) oder befinden sich bei Verwendung eines separaten Referenzschalters im Bereich der Endschalter.

  • If using a separate homing switch, it is possible to start homing on the wrong side of the home switch, which combined with HOME_IGNORE_LIMITS option will lead to a hard crash. You can avoid this by making the home switch toggle its state when the trip dog is on a particular side until it returns passed the trip point again. Said another way, the home switch state must represent the position of the dog relative to the switch (ie before or after the switch), and must stay that way even if the dog coasts past the switch in the same direction.

Anmerkung
While it is possible to use LinuxCNC with the G53 machine origin outside the soft machine limits, if you use G28 or G30 without setting the parameters it goes to the origin by default. This would trip the limit switches before getting to position.

3. Separater Home-Schalter Beispiel-Layout

Dieses Beispiel zeigt minimale und maximale Endschalter mit einem separaten Home-Schalter.

Beispiel Layout für einen Referenzschalter
Abbildung 1. Demonstratives separates Schalterlayout
  • A ist die negative weiche Grenze

  • B ist die Koordinate der G53-Maschinen-Ursprung

  • C ist der Auslösepunkt des Referenzschalters

  • D ist die positive weiche Grenze

  • H ist die finale Ausgangsposition (HOME) = 0 Einheiten

  • Die -L und +L sind die Auslösepunkte der Endschalter

  • A<->B ist die negative weiche Grenze (MIN_LIMITS) = -3 Einheiten

  • B<->C ist der Home_Offset (HOME_OFFSET) = -2,3 Einheiten

  • B<->D ist die positive weiche Grenze (MAX_LIMITS) = 7 Einheiten

  • A<->D ist der gesamte Weg = 10 Einheiten

  • Der Abstand zwischen den Endschaltern und Soft Limits (-L<->A und D<-+L) wird in diesem Beispiel vergrößert

  • Beachten Sie, dass zwischen den Endschaltern und dem tatsächlichen harten Kontakt für den Auslauf nach der Deaktivierung des Verstärkers ein Abstand besteht.

Anmerkung
Die Referenzfahrt legt das G53-Koordinatensystem fest. Der Maschinenursprung (Nullpunkt) kann an einer beliebigen Stelle liegen, aber wenn Sie den Nullpunkt auf die negative weiche Grenze setzen, werden alle G53-Koordinaten positiv, was wahrscheinlich am einfachsten zu merken ist. Dazu setzen Sie MIN_LIMIT = 0 und stellen sicher, dass MAX_LIMIT positiv ist.

4. Gemeinsamer End-/Hauptschalter Beispiel-Layout

Dieses Beispiel zeigt einen maximalen Endschalter und einen kombinierten minimalen End-/Referenzschalter.

Beispiel für ein gemeinsames Layout des Home- und Endschalters
Abbildung 2. Beispiel für ein Layout mit geteilten Schaltern
  • A ist die negative weiche Grenze.

  • B ist die Koordinate der G53-Maschinen-Ursprung.

  • C ist der Auslösepunkt des Referenzschalters, der gemeinsam mit dem (-L) minimalen Grenzwertauslöser verwendet wird.

  • D ist die positive weiche Grenze.

  • H ist die endgültige Ausgangsposition (HOME) = 3 Einheiten.

  • Die -L und +L sind die Auslösepunkte der Endschalter.

  • A<->B ist die negative weiche Grenze (MIN_LIMITS) = 0 Einheiten.

  • B<->C ist der Home_Offset (HOME_OFFSET) = -0,7 Einheiten.

  • B<->D ist die positive weiche Grenze (MAX_LIMITS) 10 Einheiten.

  • A<->D ist der gesamte Weg = 10 Einheiten.

  • Der Abstand zwischen den Endschaltern und den Soft Limits (-L<->A und D<->+L) wird in diesem Beispiel vergrößert.

  • Beachten Sie, dass zwischen den Endschaltern und dem tatsächlichen harten Kontakt für den Auslauf nach der Deaktivierung des Verstärkers ein Abstand besteht.

5. Referenzfahrt Abfolge

There are four possible homing sequences defined by the sign of HOME_SEARCH_VEL and HOME_LATCH_VEL, along with the associated configuration parameters as shown in the following table. Two basic conditions exist, HOME_SEARCH_VEL and HOME_LATCH_VEL are the same sign or they are opposite signs. For a more detailed description of what each configuration parameter does, see the following section.

Referenzfahrt-Abläufe
Abbildung 3. Referenzfahrt-Abläufe

6. Konfiguration

Im Folgenden wird genau festgelegt, wie sich die Stammfolge verhält. Sie werden in einem [JOINT_n]-Abschnitt der INI-Datei definiert.

Referenzfahrt Typ HOME_SEARCH_VEL HOME_LATCH_VEL HOME_USE_INDEX

Unmittelbar

0

0

NO

Nur-Index

0

ungleich Null

YES

Nur Schalter

ungleich Null

ungleich Null

NO

Schalter und Index

ungleich Null

ungleich Null

YES

Anmerkung
Alle anderen Kombinationen können zu einem Fehler führen.

6.1. HOME_SEARCH_VEL

Diese Variable hat die Einheit von Maschineneinheiten pro Sekunde.

Der Standardwert ist Null. Ein Wert von Null bewirkt, dass LinuxCNC davon ausgeht, dass es keine Home-Schalter gibt; die Suche Phase der Referenzfahrt wird übersprungen.

If HOME_SEARCH_VEL is non-zero, then LinuxCNC assumes that there is a home switch. It begins by checking whether the home switch is already tripped. If tripped it backs off the switch at HOME_SEARCH_VEL. The direction of the back-off is opposite the sign of HOME_SEARCH_VEL. Then it searches for the home switch by moving in the direction specified by the sign of HOME_SEARCH_VEL, at a speed determined by its absolute value. When the home switch is detected, the joint will stop as fast as possible, but there will always be some overshoot. The amount of overshoot depends on the speed. If it is too high, the joint might overshoot enough to hit a limit switch or crash into the end of travel. On the other hand, if HOME_SEARCH_VEL is too low, homing can take a long time.

6.2. HOME_LATCH_VEL

Diese Variable hat die Einheit von Maschineneinheiten pro Sekunde.

Specifies the speed and direction that LinuxCNC uses when it makes its final accurate determination of the home switch (if present) and index pulse location (if present). It will usually be slower than the search velocity to maximize accuracy. If HOME_SEARCH_VEL and HOME_LATCH_VEL have the same sign, then the latch phase is done while moving in the same direction as the search phase. (In that case, LinuxCNC first backs off the switch, before moving towards it again at the latch velocity.) If HOME_SEARCH_VEL and HOME_LATCH_VEL have opposite signs, the latch phase is done while moving in the opposite direction from the search phase. That means LinuxCNC will latch the first pulse after it moves off the switch. If HOME_SEARCH_VEL is zero (meaning there is no home switch), and this parameter is nonzero, LinuxCNC goes ahead to the index pulse search. If HOME_SEARCH_VEL is non-zero and this parameter is zero, it is an error and the homing operation will fail. The default value is zero.

6.3. HOME_FINAL_VEL

Diese Variable hat die Einheit von Maschineneinheiten pro Sekunde.

Sie gibt die Geschwindigkeit an, die LinuxCNC verwendet, wenn es seine Bewegung von HOME_OFFSET zur HOME-Position durchführt. Wenn die HOME_FINAL_VEL in der INI-Datei fehlt, dann wird die maximale Gelenkgeschwindigkeit verwendet, um diese Bewegung zu machen. Der Wert muss eine positive Zahl sein.

6.4. HOME_IGNORE_LIMITS

Can hold the values YES / NO. The default value for this parameter is NO. This flag determines whether LinuxCNC will ignore the limit switch input for this joint while homing. This setting will not ignore limit inputs for other joints. If you do not have a separate home switch set this to YES and connect the limit switch signal to the joint home switch input in HAL. LinuxCNC will ignore the limit switch input for this joint while homing. To use only one input for all homing and limits you will have to block the limit signals of the joints not homing in HAL and home one joint at a time.

6.5. HOME_USE_INDEX

Specifies whether or not there is an index pulse. If the flag is true (HOME_USE_INDEX = YES), LinuxCNC will latch on the rising edge of the index pulse. If false, LinuxCNC will latch on either the rising or falling edge of the home switch (depending on the signs of HOME_SEARCH_VEL and HOME_LATCH_VEL). The default value is NO.

Anmerkung
HOME_USE_INDEX requires connections in your HAL file to joint.n.index-enable from the encoder.n.index-enable.

6.6. HOME_INDEX_NO_ENCODER_RESET

Default is NO. Use YES if the encoder used for this joint does not reset its counter when an index pulse is detected after assertion of the joint index_enable HAL pin. Applicable only for HOME_USE_INDEX = YES.

6.7. HOME_OFFSET

Definiert die Lage des Ursprungsnullpunkts des G53-Maschinenkoordinatensystems. Es ist der Abstand (Offset), in gemeinsamen Einheiten, von der Maschine Ursprung auf die Referenzsschalter Auslösepunkt oder Index-Impuls. Nach der Erkennung der Schalter Auslösepunkt / Index-Impuls, setzt LinuxCNC die gemeinsame Koordinatenposition zu HOME_OFFSET, und damit die Definition der Ursprungs, von dem sich die weichen Grenzen ableiten. Der Standardwert ist Null.

Anmerkung
The home switch location, as indicated by the HOME_OFFSET variable, can be inside or outside the soft limits. They will be shared with or inside the hard limit switches.

6.8. HOME

The position that the joint will go to upon completion of the homing sequence. After detecting the home switch or home switch then index pulse (depending on configuration), and setting the coordinate of that point to HOME_OFFSET, LinuxCNC makes a move to HOME as the final step of the homing process. The default value is zero. Note that even if this parameter is the same as HOME_OFFSET, the joint will slightly overshoot the latched position as it stops. Therefore there will always be a small move at this time (unless HOME_SEARCH_VEL is zero, and the entire search/latch stage was skipped). This final move will be made at the joint’s maximum velocity unless HOME_FINAL_VEL has been set.

Anmerkung
Der Unterschied zwischen HOME_OFFSET und HOME besteht darin, dass HOME_OFFSET zunächst die Ursprungsposition und den Maßstab auf der Maschine festlegt, indem der HOME_OFFSET -Wert auf die Position angewendet wird, an der die Ausgangsposition gefunden wurde, und dann HOME angibt, wohin sich das Gelenk auf diesem Maßstab bewegen soll.

6.9. HOME_IS_SHARED

If there is not a separate home switch input for this joint, but a number of momentary switches wired to the same pin, set this value to 1 to prevent homing from starting if one of the shared switches is already closed. Set this value to 0 to permit homing even if the switch is already closed.

6.10. HOME_ABSOLUTE_ENCODER

Verwendung für absolute Encoder. In Reaktion auf eine Anforderung zur Referenzfahrt des Gelenks wird die aktuelle Gelenkposition auf den [JOINT_n]HOME_OFFSET Wert gesetzt.

Die abschließende Bewegung zur [JOINT_n]HOME Position ist entsprechend der HOME_ABSOLUTE_ENCODER Einstellung optional:

HOME_ABSOLUTE_ENCODER = 0 (Standard) Gelenk verwendet keinen Absolutwertgeber
HOME_ABSOLUTE_ENCODER = 1 Absolutwertgeber, endgültige Bewegung zu [JOINT_n]HOME
HOME_ABSOLUTE_ENCODER = 2 Absolutwertgeber, KEINE endgültige Bewegung zu [JOINT_n]HOME
Anmerkung
Eine HOME_IS_SHARED-Einstellung wird stillschweigend ignoriert.
Anmerkung
Eine Aufforderung, für ein Gelenk die Referenzfahrt zu wiederholen, wird stillschweigend ignoriert.

6.11. HOME_SEQUENCE

Used to define a multi-joint homing sequence HOME ALL and enforce homing order (e.g., Z may not be homed if X is not yet homed). A joint may be homed after all joints with a lower (absolute value) HOME_SEQUENCE have already been homed and are at the HOME_OFFSET. If two joints have the same HOME_SEQUENCE, they may be homed at the same time.

Anmerkung
Wenn HOME_SEQUENCE nicht angegeben ist, wird das Gelenk nicht durch die HOME ALL-Sequenz referenziert (sondern kann durch einzelne gelenkspezifische Referenzierungsbefehle referenziert werden).

Die anfängliche HOME_SEQUENCE-Nummer kann 0, 1 (oder -1) sein. Der absolute Wert der Sequenznummern muss um eins erhöht werden - das Überspringen von Sequenznummern wird nicht unterstützt. Wenn eine Sequenznummer weggelassen wird, stoppt HOME ALL die Referenzfahrt nach Abschluss der letzten gültigen Sequenznummer.

Negative HOME_SEQUENCE values indicate that joints in the sequence should synchronize the final move to [JOINT_n]HOME by waiting until all joints in the sequence are ready. If any joint has a negative HOME_SEQUENCE value, then all joints with the same absolute value (positive or negative) of the HOME_SEQUENCE item value will synchronize the final move.

Eine negative HOME_SEQUENCE gilt auch für das Ausführen einer Referenzfahrt eines einzelnen Gelenks. Wenn der HOME_SEQUENCE-Wert negativ ist, werden alle Gelenke, die den gleichen absoluten Wert dieser HOME_SEQUENCE haben, gemeinsam mit einer synchronisierten Endbewegung freigesetzt. Wenn der HOME_SEQUENCE-Wert Null oder positiv ist, wird nur das angegebene Gelenk in die Ausgangsstellung gebracht.

Das manualle Bewegen im "joint mode" von Gelenken mit einer negativen HOME_SEQUENCE ist nicht zulässig. Bei üblichen Portalanwendungen kann ein solches Verfahren zu einer Fehlausrichtung führen (Racking). Beachten Sie, dass das konventionelle Jogging in Weltkoordinaten immer verfügbar ist, sobald eine Maschine referenziert ist.

Beispiele für ein 3-Gelenk-System

Zwei Sequenzen (0,1), keine Synchronisation

[JOINT_0]HOME_SEQUENCE = 0
[JOINT_1]HOME_SEQUENCE = 1
[JOINT_2]HOME_SEQUENCE = 1

Zwei Sequenzen, Gelenke 1 und 2 synchronisiert

[JOINT_0]HOME_SEQUENCE =  0
[JOINT_1]HOME_SEQUENCE = -1
[JOINT_2]HOME_SEQUENCE = -1

Bei gemischten positiven und negativen Werten synchronisierten die Gelenke 1 und 2

[JOINT_0]HOME_SEQUENCE =  0
[JOINT_1]HOME_SEQUENCE = -1
[JOINT_2]HOME_SEQUENCE =  1

Eine Sequenz, keine Synchronisation

[JOINT_0]HOME_SEQUENCE =  0
[JOINT_1]HOME_SEQUENCE =  0
[JOINT_2]HOME_SEQUENCE =  0

Eine Sequenz, alle Gelenke synchronisiert

[JOINT_0]HOME_SEQUENCE = -1
[JOINT_1]HOME_SEQUENCE = -1
[JOINT_2]HOME_SEQUENCE = -1

6.12. VOLATILE_HOME

If this setting is true, this joint becomes unhomed whenever the machine transitions into the OFF state. This is appropriate for any joint that does not maintain position when the joint drive is off. Some stepper drives, especially microstep drives, may need this.

6.13. LOCKING_INDEXER

Handelt es sich bei diesem Gelenk um einen verriegelnden Drehindexer, wird es vor der Referenzfahrt entriegelt und danach verriegelt.

6.14. Immediate Homing

If a joint does not have home switches or does not have a logical home position like a rotary joint and you want that joint to home at the current position when the "Home All" button is pressed in the AXIS GUI, then the following INI entries for that joint are needed.

HOME_SEARCH_VEL = 0
HOME_LATCH_VEL = 0
HOME_USE_INDEX = NO
HOME_OFFSET = 0 (Or the home position offset (HOME))
HOME_SEQUENCE = 0 (or other valid sequence number)
Anmerkung
Die Standardwerte für nicht spezifizierte HOME_SEARCH_VEL, HOME_LATCH_VEL, HOME_USE_INDEX, HOME und HOME_OFFSET sind Null, so dass sie weggelassen werden können, wenn eine sofortige Referenzfahrt angefordert wird. Eine gültige HOME_SEQUENCE-Nummer sollte in der Regel angegeben werden, da das Weglassen einer HOME_SEQUENCE die Verbindung vom HOME ALL-Verhalten ausschließt (siehe oben).

6.15. Inhibiting Homing

Ein HAL -Pin (motion.homing-inhibit) ist vorgesehen, um die Einleitung der Referenzfahrt sowohl für "alle Achsen gleichzeitig (engl. "Home All") als auch für die Referenzfahrt einzelner Gelenke zu unterbinden.

Einige Systeme nutzen die Bestimmungen für die Synchronisierung der endgültigen Gelenkbewegungen, die werden durch negative [JOINT_N]HOME_SEQUENCE=INI-Dateielemente. Standardmäßig verbieten die Synchronisierungsbestimmungen ein Gelenk-Jogging vor der Referenzfahrt, um ein Gelenk-Jogging zu verhindern, das die Maschine falsch ausrichten könnte (z. B. Portalkreuzung).

Der Systemintegrator kann das Gelenk-Jogging vor der Referenzfahrt mit einer HAL-Logik erlauben, um die [JOINT_N]HOME_SEQUENCE-Elemente umzuschalten. Diese Logik sollte auch den Pin motion.homing-inhibit aktivieren, um sicherzustellen, dass die Referenzfahrt nicht versehentlich eingeleitet wird, wenn der Joint-Jogging-Modus aktiviert ist.

Beispiel: Synchronisierte Gelenke 0,1 mit negativer Sequenz (-1) für synchronisierte Referenzfahrt mit einem Schalter (allow_jjog), der eine positive Sequenz (1) für individuelles Gelenk-Jogging vor der Referenzfahrt wählt (partieller HAL-Code):

loadrt mux2 names=home_sequence_mux
loadrt conv_float_s32 names=heimat_sequenz_s32
setp home_sequenz_mux.in0 -1
setp home_sequenz_mux.in1 1
addf home_sequence_mux servo-thread
addf home_sequence_s32 servo-thread
...
net home_seq_float <= home_sequence_mux.out
net home_seq_float => home_sequence_s32.in
net home_seq_s32 <= home_sequence_s32.out
net home_seq_s32 => ini.0.home_sequence
net home_seq_s32 => ini.1.home_sequence
...
# allow_jjog: von einem virtuellen Bedienfeld oder Hardware-Schalter erzeugter Pin
net hsequence_select <= allow_jog
net hsequence_select => home_sequence_mux.sel
net hsequence_select => motion.homing-inhibit
Anmerkung
INI HAL-Pins (wie ini.N.home_sequence) sind nicht verfügbar, bis milltask startet, so dass die Ausführung der oben genannten HAL-Befehle mit Hilfe einer postgui HAL-Datei oder eines verzögerten [APPLICATION]APP=-Skripts verschoben werden sollte.
Anmerkung
Realtime synchronization of joint jogging for multiple joints requires additional HAL connections for the Manual-Pulse-Generator (MPG) type jog pins (joint.N.enable, joint.N.scale, joint.N.counts).

Eine Beispielsimulationskonfiguration (gantry_jjog.ini), die das Joggen der Gelenke bei Verwendung negativer Nullpunktsequenzen demonstriert, befindet sich im Verzeichnis: configs/sim/axis/gantry/.