1. TWOPASS
This section describes an option to have multiple load-commands for multiple instances of the same component at different positions in the file or among different files. Internally, this requires to read the HAL file twice, hence the name TWOPASS. Supported since LinuxCNC version 2.5, the TWOPASS processing of LinuxCNC configuration files helps with their modularization and readability. To recall, LinuxCNC configuration files are specified in a LinuxCNC INI file as [HAL]HALFILE=filename
.
Normally, a set of one or more LinuxCNC configuration files must use a single, unique loadrt
line to load a realtime component, which may create multiple instances of the component. For example, if you use a two-input AND gate component (and2) in three different places in your setup, you would need to have a single line somewhere to specify:
and2.0
, and2.1
, and2.2
.loadrt and2 count=3
Configurations are more readable if you specify with the names=
option for components where it is supported, e.g.:
aa
, ab
, ac
.loadrt and2 names=aa,ab,ac
It can be a maintenance problem to keep track of the components and their names, since when you add (or remove) a component, you must find and update the single loadrt directive applicable to the component.
[HAL]
section, where "anystring" can be any non-null string.[HAL] TWOPASS = anystring
With TWOPASS enabled, you can have multiple specifications like:
loadrt and2 names=aa ... loadrt and2 names=ab,ac ... loadrt and2 names=ad
These commands can appear in different HAL files. The HAL files are processed in the order of their appearance in the INI file, in multiple HALFILE assignments.
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.
[HAL] TWOPASS = on,verbose,nodelete
With TWOPASS processing, all [HAL]HALFILES are first read and multiple appearances of loadrt directives for each module are accumulated. Non-realtime components (loadusr) are loaded in order but no other LinuxCNC commands are executed in the initial pass.
Anmerkung
|
Non-realtime components should use the wait (-W) option to ensure the component is ready before other commands are executed. |
After the initial pass, the realtime modules are loaded (loadrt) automatically
-
with a number equal to the total number when using the count= option or
-
with all of the individual names specified when using the names= option.
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.
Many comps supplied with the distribution are created with the halcompile utility and support the names= option. These include the common logic components that are the glue of many LinuxCNC configurations.
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.
Two-step processing occurs before the GUI is loaded. When using a [HAL]POSTGUI_HALFILE, it is convenient to place all the [HAL]POSTGUI_HALFILE loadrt declarations for the necessary components in a preloaded HAL file.
[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)
Some GUIs support HAL files that are processed after the GUI is started in order to connect LinuxCNC pins that are created by the GUI. When using a postgui HAL file with TWOPASS processing, include all loadrt items for components added by postgui HAL files in a separate HAL file that is processed before the GUI. The addf
commands can also be included in the file.
[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
TWOPASS processing converts .hal files to equivalent .tcl files and uses haltcl to find loadrt and addf commands in order to accumulate and consolidate their usage. Loadrt parameters that conform to the simple names=
(or count=
) parameters accepted by the HAL Component Generator (halcompile
) are expected. More complex parameter items included in specialized LinuxCNC components may not be handled properly.
A .hal file may be excluded from TWOPASS processing by including a magic comment line anywhere in the .hal file. The magic comment line must begin with the string: #NOTWOPASS
. Files specified with this magic comment are sourced by halcmd using the -k
(keep going if failure) and -v
(verbose) options.
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. |
$ 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
|
Case and whitespace within the magic comment are ignored. The loading of components that use names= or count= parameters (typically built by halcompile) should not be used in excluded files, as that would eliminate the benefits of TWOPASS processing. The LinuxCNC commands that create signals (net ) and commands that establish execution order (addf ) should not be placed in excluded files. This is especially true for addf commands since their ordering may be important. |
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/