1. TWOPASS

Dieser Abschnitt beschreibt eine Möglichkeit, mehrere Ladebefehle für mehrere Instanzen der gleichen Komponente an verschiedenen Positionen in der Datei oder zwischen verschiedenen Dateien zu haben. Intern erfordert dies, die HAL-Datei zweimal zu lesen, daher der Name TWOPASS. Unterstützt seit LinuxCNC Version 2.5, hilft die TWOPASS Verarbeitung von LinuxCNC Konfigurationsdateien durch eine leichtere Modularisierung und verbesserte Lesbarkeit. Zur Erinnerung, LinuxCNC Konfigurationsdateien sind in einem LinuxCNC INI-Datei als [HAL]HALFILE=filename angegeben.

Normalerweise muss ein Satz von einem oder mehreren LinuxCNC-Konfigurationsdateien eine einzige, eindeutige loadrt-Zeile verwenden, um eine Echtzeitkomponente zu laden, die mehrere Instanzen der Komponente erzeugen kann. Zum Beispiel, wenn Sie eine Zwei-Eingang UND-Gatter-Komponente (and2) in drei verschiedenen Orten in Ihrem Setup verwenden, müssten Sie eine einzige Zeile irgendwo zu spezifizieren:

Beispiel, das zu Echtzeitkomponenten mit den Standardnamen and2.0, and2.1, and2.2 führt.
loadrt and2 count=3

Konfigurationen sind besser lesbar, wenn Sie die Option names= für Komponenten angeben, bei denen sie unterstützt wird, z. B.:

Beispiel für einen Ladebefehl, der zu explizit benannten Komponenten aa, ab, ac führt.
loadrt and2 names=aa,ab,ac

Es kann ein Wartungsproblem sein, den Überblick über die Komponenten und ihre Namen zu behalten, denn wenn Sie eine Komponente hinzufügen (oder entfernen), müssen Sie die einzelne loadrt-Anweisung für die Komponente finden und aktualisieren.

Die TWOPASS-Verarbeitung wird aktiviert, indem ein INI-Dateiparameter in den [HAL]-Abschnitt aufgenommen wird, wobei "anystring" eine beliebige Zeichenkette sein kann, die nicht null ist.
[HAL]

TWOPASS = anystring

Wenn TWOPASS aktiviert ist, können Sie mehrere Angaben machen:

loadrt and2 names=aa
...
loadrt and2 names=ab,ac
...
loadrt and2 names=ad

Diese Befehle können in verschiedenen HAL-Dateien vorkommen. Die HAL-Dateien werden in der Reihenfolge ihres Auftretens in der INI-Datei abgearbeitet, bei Mehrfachzuweisungen von HALFILE.

Die Option TWOPASS kann mit Optionen angegeben werden, um Ausgaben für die Fehlersuche hinzuzufügen (verbose) und um das Löschen temporärer Dateien zu verhindern (nodelete). Die Optionen werden durch Kommata getrennt.

Beispiel
[HAL]
TWOPASS = on,verbose,nodelete

Bei der TWOPASS-Verarbeitung werden zunächst alle [HAL]HALFILES gelesen und die mehrfachen Auftritte der loadrt-Anweisungen für jedes Modul kumuliert. Nicht-Echtzeit-Komponenten (loadusr) werden der Reihe nach geladen, aber keine anderen LinuxCNC-Befehle werden im ersten Durchgang ausgeführt.

Anmerkung
Nicht-Echtzeit-Komponenten sollten die Option wait (-W) verwenden, um sicherzustellen, dass die Komponente bereit ist, bevor andere Befehle ausgeführt werden.

Nach dem ersten Durchlauf werden die Echtzeitmodule automatisch geladen (loadrt)

  • mit einer Zahl, die gleich der Gesamtzahl ist, wenn die Option »count=« verwendet wird, oder

  • mit allen einzelnen Namen, die bei Verwendung der Option „names=“ angegeben werden.

In einem zweiten Durchlauf werden dann alle anderen in den HALFILES angegebenen LinuxCNC-Befehle ausgeführt. Die addf-Befehle verknüpfen die Funktionen einer Komponente mit der Thread-Ausführung und werden in diesem zweiten Durchgang in der Reihenfolge ihres Erscheinens zusammen mit anderen Befehlen ausgeführt.

Die Optionen "count=" und "names=" können zwar verwendet werden, schließen sich aber gegenseitig aus - für ein bestimmtes Modul kann nur ein Typ angegeben werden.

Die TWOPASS-Verarbeitung ist am effektivsten, wenn die Option "names=" verwendet wird. Mit dieser Option können Sie eindeutige Namen vergeben, die als Gedächtnisstütze dienen oder anderweitig für die Konfiguration relevant sind. Wenn Sie z. B. eine Ableitungskomponente zur Schätzung der Geschwindigkeiten und Beschleunigungen an jeder (x,y,z)-Koordinate verwenden, führt die Verwendung der count=-Methode zu obskuren Komponentennamen wie ddt.0, ddt.1, ddt.2, usw.

Alternativ können Sie auch die Option names= verwenden:

loadrt ddt names=xvel,yvel,zvel
...
loadrt ddt names=xaccel,yaccel,zaccel

führt zu Komponenten mit den sinnvollen Namen xvel, yvel, zvel, xaccel, yaccel, zaccel.

Viele Comps, die mit der Distribution geliefert werden, wurden mit dem halcompile Dienstprogramm erstellt und unterstützen die Option names=. Dazu gehören die gemeinsamen Logik-Komponenten, die der Klebstoff von vielen LinuxCNC-Konfigurationen sind.

Vom Benutzer erstellte Kompilate, die das Dienstprogramm halcompile verwenden, unterstützen automatisch auch die Option names=. Neben den mit dem Dienstprogramm halcompile erstellten Comps unterstützen auch zahlreiche andere Comps die Option names=. Zu den Comps, welche die Option names= unterstützen, gehören: at_pid, encoder, encoder_ratio, pid, siggen und sim_encoder.

Die Verarbeitung erfolgt in zwei Schritten, bevor das GUI geladen wird. Bei Verwendung einer [HAL]POSTGUI_HALFILE ist es zweckmäßig, alle [HAL]POSTGUI_HALFILE-Loadrt-Deklarationen für die erforderlichen Komponenten in einer vorgeladenen HAL-Datei unterzubringen.

Beispiel für einen HAL-Abschnitt bei Verwendung einer POSTGUI_HALFILE
[HAL]

TWOPASS = on
HALFILE = core_sim.hal
HALFILE = sim_spindle_encoder.hal
HALFILE = axis_manualtoolchange.hal
HALFILE = simulated_home.hal
HALFILE = load_for_postgui.hal <- loadrt-Zeilen für Komponenten in postgui.hal

POSTGUI_HALFILE = postgui.hal
HALUI = halui

2. Post GUI (lat. für nach dem GUI auszuführen)

Einige GUIs unterstützen HAL-Dateien, die verarbeitet werden, nachdem die GUI gestartet wurde, um LinuxCNC-Pins zu verbinden, die von der GUI erzeugt wurden. Wenn Sie eine Postgui-HAL-Datei mit TWOPASS-Verarbeitung verwenden, fügen Sie alle loadrt-Elemente für Komponenten, die durch Postgui-HAL-Dateien hinzugefügt wurden, in ein separates HAL-Dateien ein, das vor der GUI verarbeitet wird. Die addf-Befehle können ebenfalls in diese Datei aufgenommen werden.

Beispiel
[HAL]
TWOPASS = on
HALFILE = file_1.hal
...
HALFILE = file_n.hal
HALFILE = file_with_all_loads_for_postgui.hal
...
POSTGUI_HALFILE = the_postgui_file.hal

3. Ausschließen von HAL-Dateien

Die TWOPASS-Verarbeitung konvertiert .hal-Dateien in äquivalente .tcl-Dateien und verwendet haltcl, um loadrt- und addf-Befehle zu finden, um ihre Nutzung zu akkumulieren und zu konsolidieren. Loadrt-Parameter, die den einfachen Parametern names= (oder count=) entsprechen, wie sie der HAL Component Generator (halcompile) akzeptiert, werden erwartet. Komplexere Parameterelemente, die in spezialisierten LinuxCNC-Komponenten enthalten sind, werden möglicherweise nicht ordnungsgemäß behandelt.

Eine HAL-Datei kann von der TWOPASS-Verarbeitung ausgeschlossen werden, indem man eine magische Kommentarzeile an beliebiger Stelle in die HAL-Datei einfügt. Die magische Kommentarzeile muss beginnen mit der Zeichenfolge #NOTWOPASS beginnen. Die mit diesem magischen Kommentar bedachten Dateien werden von halcmd unter Verwendung der Optionen -k (bei Fehlschlag weitermachen) und -v (verbose) gelesen.

Diese Ausschlussbestimmung kann verwendet werden, um Probleme zu isolieren oder um spezielle LinuxCNC-Komponenten zu laden, die keine TWOPASS-Verarbeitung benötigen oder davon profitieren.

Normalerweise ist die loadrt-Reihenfolge von Echtzeit-Komponenten nicht kritisch, aber die loadrt-Reihenfolge für spezielle Komponenten kann erzwungen werden, indem man die entsprechenden loadrt-Direktiven in einer ausgeschlossenen Datei platziert.

Anmerkung
Während die Reihenfolge der loadrt-Direktiven in der Regel unkritisch ist, so ist die Reihenfolge der addf-Direktiven oft sehr wichtig für den ordnungsgemäßen Betrieb von Servo-Regelkreis-Komponenten.
Beispiel einer ausgeschlossenen HAL-Datei
$ cat twopass_excluded.hal
# Der folgende magische Kommentar bewirkt, dass diese Datei
# von der twopass-Verarbeitung ausgeschlossen wird:
# NOTWOPASS

# Komponente mit komplexen Optionen debuggen:
loadrt mycomponent parm1="abc def" parm2=ghi
show pin mycomponent

# Ordnen spezieller Komponenten
loadrt Bauteil_1
loadrt Bauteil_2
Anmerkung
Groß- und Kleinschreibung sowie Leerzeichen innerhalb des magischen Kommentars werden ignoriert. Das Laden von Komponenten, die names= oder count= Parameter verwenden (typischerweise von halcompile erstellt) sollte nicht in ausgeschlossenen Dateien verwendet werden, da dies die Vorteile der TWOPASS-Verarbeitung eliminieren würde. Die LinuxCNC-Befehle, die Signale erzeugen (net) und Befehle, welche die Ausführungsreihenfolge festlegen (addf), sollten nicht in ausgeschlossenen Dateien platziert werden. Dies gilt insbesondere für addf-Befehle, da ihre Reihenfolge wichtig sein kann.

4. Beispiele

Beispiele für die Verwendung von TWOPASS für einen Simulator sind in den Verzeichnissen enthalten:

configs/sim/axis/twopass/
configs/sim/axis/simtcl/