1. Halcmd

halcmd ist ein Kommandozeilen-Tool für die Manipulation des HAL. Es gibt eine ziemlich vollständige Manpage für halcmd, die installiert wird, wenn Sie LinuxCNC entweder aus dem Quellcode oder einem Paket installiert haben. Die Manpage bietet Informationen zur Benutzung:

man halcmd

Wenn Sie LinuxCNC für "run-in-place" kompiliert haben, müssen Sie das rip-environment Skript als Quelle angeben, um die Manpage verfügbar zu machen:

cd toplevel_directory_for_rip_build
. scripts/rip-environment
man halcmd

Das HAL Tutorial enthält eine Reihe von Beispielen für die Verwendung von halcmd und ist ein gutes Tutorial für halcmd.

2. Halmeter

Halmeter ist ein "Voltmeter" für den HAL. Mit ihm können Sie einen Pin, ein Signal oder einen Parameter betrachten und den aktuellen Wert dieses Elements anzeigen. Es ist ziemlich einfach zu benutzen. Starten Sie es durch Eingabe von halmeter in einer X-Windows-Shell. Halmeter ist eine GUI-Anwendung. Es öffnet sich ein kleines Fenster mit zwei Schaltflächen, die mit "Select" und "Exit" beschriftet sind. Beenden ist einfach - es fährt das Programm herunter. Select öffnet ein größeres Fenster mit drei Registerkarten. Eine Registerkarte listet alle derzeit im HAL definierten Pins auf. Auf der nächsten Registerkarte sind alle Signale aufgelistet, und auf der letzten Registerkarte sind alle Parameter aufgeführt. Klicken Sie auf eine Registerkarte und dann auf einen Pin/Signal/Parameter. Klicken Sie dann auf "OK". Die Listen werden ausgeblendet, und das kleine Fenster zeigt den Namen und den Wert des ausgewählten Elements an. Die Anzeige wird etwa 10 Mal pro Sekunde aktualisiert. Wenn Sie anstelle von "OK" auf "Übernehmen" klicken, zeigt das kleine Fenster den Namen und den Wert des ausgewählten Elements an, aber das große Fenster bleibt auf dem Bildschirm. Dies ist praktisch, wenn Sie sich schnell eine Reihe verschiedener Elemente ansehen möchten.

Sie können viele Halbmesser gleichzeitig laufen lassen, wenn Sie mehrere Elemente überwachen möchten. Wenn Sie ein Halbmesser starten möchten, ohne ein Shell-Fenster zu kleben, geben Sie halmeter & `, um es im Hintergrund auszuführen. Sie können auch die Halmeter-Startanzeige sofort vornehmen, indem Sie `pin|sig|par[am] _<name>_ in die Befehlszeile einfügen. Es wird den Pin, das Signal oder den Parameter <name> angezeigt, sobald er beginnt - wenn es keinen solchen Artikel gibt, wird es einfach normal starten. Und schließlich, wenn Sie ein Element zum Anzeigen angeben, können Sie -s vor dem pinigsigparaparam hinzufügen, um Halmeter zu sagen, um ein kleines Fenster zu verwenden. Der Artikelname wird in der Titelleiste anstatt unter dem Wert angezeigt, und es wird keine Schaltflächen. Nützlich, wenn Sie eine Menge von Metern in einer kleinen Menge Bildschirm Raum wollen.

Weitere Informationen finden Sie im Abschnitt Halmeter Tutorial.

halmeter kann von einem Terminal oder von AXIS geladen werden. halmeter ist bei der Anzeige von Werten schneller als halshow. halmeter hat zwei Fenster, eines zur Auswahl des zu überwachenden Pins, Signals oder Parameters und eines zur Anzeige des Wertes. Mehrere halmeter können gleichzeitig geöffnet sein. Wenn man ein Skript benutzt, um mehrere halmeter zu öffnen, kann man die Position jedes einzelnen mit -g X Y relativ zur oberen linken Ecke des Bildschirms festlegen. Zum Beispiel:

loadusr halmeter pin hm2.0.stepgen.00.velocity-fb -g 0 500

Siehe die Manpage für weitere Optionen und den Abschnitt Halmeter.

Halmeter-Auswahlfenster
Abbildung 1. Halmeter-Auswahlfenster
Halmeter-Watch Fenster
Abbildung 2. Halmeter-Watch Fenster

3. Halshow

halshow (vollständige Beschreibung der Anwendung) kann von der Kommandozeile aus gestartet werden, um Details für ausgewählte Komponenten, Pins, Parameter, Signale, Funktionen und Threads einer laufenden HAL anzuzeigen. Die Registerkarte WATCH bietet eine kontinuierliche Anzeige der ausgewählten Pins, Parameter und Signale. Das Menü "Datei" enthält Schaltflächen zum Speichern der Watch-Elemente in einer Watch-Liste und zum Laden einer bestehenden Watch-Liste. Die Elemente der Überwachungsliste können auch automatisch beim Starten geladen werden. Für die Verwendung in der Befehlszeile:

halshow --help
Usage:
  halshow [Options] [watchfile]
  Options:
           --help    (this help)
           --fformat format_string_for_float
           --iformat format_string_for_int

Hinweise:
       Erstellen Sie einen watchfile in halshow mit: 'File/Save Watch List'.
       LinuxCNC muss für die Standalone-Nutzung ausgeführt werden.
Halshow Watch Tab
Abbildung 3. Halshow Watch Tab

Eine mit dem Menüpunkt File/Save Watch List erstellte Watchdatei wird als einzelne Zeile mit den Token "pin+", "param+", "sig=+", gefolgt vom entsprechenden Pin-, Param- oder Signalnamen formatiert. Die Token-Namen-Paare werden durch ein Leerzeichen getrennt.

Einzeiliges Watchfile-Beispiel
pin+joint.0.pos-hard-limit pin+joint.1.pos-hard-limit sig+estop-loop

Eine Überwachungsdatei, die mit dem Menüpunkt Datei/Beobachtungsliste speichern (mehrzeilig) erstellt wurde, wird mit separaten Zeilen für jedes Element formatiert, das wie oben beschrieben mit Token-Name-Paaren identifiziert wird.

Beispiel für eine Watchfile mit getrennten Zeilen
pin+joint.0.pos-hard-limit
pin+joint.1.pos-hard-limit
sig+estop-loop

Beim Laden einer Watchfile mit dem Menüpunkt File/Load Watch List können die Token-Namen-Paare als einzelne oder mehrere Zeilen erscheinen. Leerzeilen und Zeilen, die mit einem #-Zeichen beginnen, werden ignoriert.

4. Halscope

halscope ist ein Oszilloskop für den HAL. Damit können Sie den Wert von Pins, Signalen und Parametern als Funktion der Zeit aufzeichnen. Eine vollständige Bedienungsanleitung sollte hier zu finden sein. Für den Moment verweisen wir auf den Abschnitt [sec:tutorial-halscope] im Kapitel Tutorial, in dem die Grundlagen erklärt werden.

Das halscope "Datei"-Menü bietet Schaltflächen zum Speichern einer Konfiguration oder zum Öffnen einer zuvor gespeicherten Konfiguration. Nach dem Beenden von halscope wird die letzte Konfiguration in einer Datei namens autosave.halscope gespeichert.

Konfigurationsdateien können auch beim Start von halscope über die Kommandozeile angegeben werden. Verwendung der Kommandozeilenhilfe (-h):

halscope -h
Usage:
  halscope [-h] [-i infile] [-o outfile] [num_samples]

5. Sim-Pin

sim_pin ist ein Kommandozeilenprogramm zur Anzeige und Aktualisierung einer beliebigen Anzahl von beschreibbaren Pins, Parametern oder Signalen.

sim_pin Verwendung
Usage:
        sim_pin [Options] name1 [name2 ...] &

Options:
        --help                (this text)
        --title title_string  (window title, default: sim_pin)

Hinweis: LinuxCNC (oder eine eigenständige HAL-Anwendung) muss ausgeführt werden
        Ein benanntes Element kann einen Pin, einen Parameter oder ein Signal angeben.
        Das Element muss beschreibbar sein, z. B:
          Pin:    IN oder I/O (und nicht mit einem Signal mit einem Schreiber verbunden)
          param:  RW
          Signal: verbunden mit einem beschreibbaren Pin

        HAL item types bit,s32,u32,float werden unterstützt.

        Wird ein Bit-Element angegeben, so wird eine Drucktaste erstellt
        um das Element auf eine von drei Arten zu verwalten,
        durch Optionsfelder:
            toggle: Wert umschalten, wenn die Taste gedrückt wird
            pulse: Beim Drücken der Taste wird der Wert einmalig auf 1 gesetzt.
            hold:   Auf 1 setzen, solange die Taste gedrückt ist
        Das Bit "pushbutton" kann in der Befehlszeile angegeben werden,
        indem der Name des Elements formatiert wird:
            namei/mode=[toggle | pulse | hold]
        Wenn der Modus mit einem Großbuchstaben beginnt, werden die Optionsfelder
        zur Auswahl anderer Modi nicht angezeigt

Vollständige Informationen finden Sie in der Manpage:

man sim_pin
sim_pin Beispiel (mit laufendem LinuxCNC)
halcmd loadrt mux2 names=example; halcmd net sig_example example.in0
sim_pin example.sel example.in1 sig_example &
sim_pin Fenster
Abbildung 4. sim_pin-Fenster

6. simulate_probe (Sonde simulieren)

simulate_probe ist ein einfaches GUI, um die Aktivierung des Pins motion.probe-input zu simulieren. Verwendung:

simulate_probe &
simulieren_probe Fenster
Abbildung 5. Fenster simulieren_probe

7. HAL Histogramm

hal-histogram ist ein Kommandozeilenprogramm zur Anzeige von Histogrammen für HAL-Pins.

Nutzung:
   hal-histogram --help | -?
or
   hal-histogram [Optionen] [Pinname]
Tabelle 1. Optionen:
Option Wert Beschreibung

--minvalue

minvalue

minimum bin, Voreinstellung: 0

--binsize

binsize

binsize, Voreinstellung: 100

--nbins

nbins

Anzahl der Bins, Standard: 50

--logscale

0/1

y-Achse logarithmische Skala, Voreintellung: 1

--text

Hinweis

Textanzeige, Standard: ""

-show

Anzahl der nicht angezeigten nbins anzeigen, Voreinstellung aus

--verbose

Fortschritt und Fehlersuche, standardmäßig aus

Anmerkungen:
  1. LinuxCNC (oder eine andere HAL-Anwendung) muss laufen.

  2. Wenn kein Pinname angegeben wird, lautet die Vorgabe: motion-command-handler.time.

  3. Diese App kann für 5 Pins geöffnet werden.

  4. Unterstützt werden die Pintypen float, s32, u32, bit.

  5. Der Pin muss mit einem Thread verbunden sein, der Fließkomma unterstützt. Für einen Basis-Thread kann dies die Verwendung von loadrt motmod ... base_thread_fp=1 erfordern.

hal-histogram Fenster
Abbildung 6. hal-histogram-Fenster

8. Halreport

halreport ist ein Befehlszeilen-Dienstprogramm, das einen Bericht über HAL-Verbindungen für eine laufende LinuxCNC (oder andere HAL) Anwendung erzeugt. Der Bericht zeigt alle Signalverbindungen an und weist auf mögliche Probleme hin. Enthaltene Informationen:

  1. Systembeschreibung und Kernelversion.

  2. Signale und alle angeschlossenen Ausgangs-, E/A- und Eingangspins.

  3. Eines jeden Pin component_function, thread und addf-Reihenfolge.

  4. Nicht-Echtzeit-Komponentenpins mit nicht geordneten Funktionen.

  5. Identifizierung von unbekannten Funktionen für nicht behandelte Komponenten.

  6. Signals with no output.

  7. Signals with no inputs.

  8. Functions with no addf.

  9. Warning tags for components marked as deprecated/obsolete in docs.

  10. Real names for pins that use alias names.

Der Bericht kann über die Befehlszeile erstellt und in eine Ausgabedatei (oder stdout, wenn kein Ausgabedateiname angegeben ist) geleitet werden:

halreport Anwendung
Usage:
  halreport -h | --help (this help)
or
  halreport [outfilename]

Um den Bericht für jeden LinuxCNC-Start zu erzeugen, fügen Sie halreport und einen Ausgabedateinamen als [APPLICATIONS]APP-Eintrag in die INI-Datei ein.

halreport Beispiel
[APPLICATIONS]
APP = halreport /tmp/halreport.txt

Die Reihenfolge, in der die Funktionen addiert werden, kann für Servoschleifen wichtig sein, bei denen die Reihenfolge der in jeder Servoperiode berechneten Funktionen wichtig ist. Typischerweise ist die Reihenfolge:

  1. Eingangspins lesen,

  2. die Funktionen für die Bewegungssteuerung und die Bewegungssteuerung ausführen,

  3. PID-Berechnungen durchführen und schließlich

  4. Ausgabepins schreiben.

Für jedes Signal in einem kritischen Pfad sollte die addf-Ordnung des Ausgangspins numerisch niedriger sein als die addf-Ordnung der kritischen Eingangspins, mit denen es verbunden ist.

Bei Routine-Signalpfaden, die Schalteingänge, Nicht-Echtzeit-Pins usw. verarbeiten, ist die addf-Reihenfolge oft nicht kritisch. Außerdem kann das Timing der Wertänderungen von Nicht-Echtzeit-Pins nicht in den für HAL-Threads typischen Intervallen kontrolliert oder garantiert werden.

Beispiel für eine PID-Schleife für einen hostmot2-Stepgen, der im Geschwindigkeitsmodus auf einer Trivkins-Maschine betrieben wird, wobei joint.0 der X-Achsenkoordinate entspricht:

SIG:    pos-fb-0
  OUT:    h.00.position-fb                     hm2_7i92.0.read        servo-thread 001
          (=hm2_7i92.0.stepgen.00.position-fb)
    IN:     X_pid.feedback                     X_pid.do-pid-calcs     servo-thread 004
    IN:     joint.0.motor-pos-fb               motion-command-handler servo-thread 002
            ....................               motion-controller      servo-thread 003
...
SIG:    pos-cmd-0
  OUT:    joint.0.motor-pos-cmd                motion-command-handler servo-thread 002
          .....................                motion-controller      servo-thread 003
    IN:     X_pid.command                      X_pid.do-pid-calcs     servo-thread 004
...
SIG:    motor-cmd-0
  OUT:    X_pid.output                         X_pid.do-pid-calcs     servo-thread 004
    IN:     h.00.velocity-cmd                  hm2_7i92.0.write       servo-thread 008
            (=hm2_7i92.0.stepgen.00.velocity-cmd)

Im obigen Beispiel verwendet die HALFILE halcmd-Aliase, um die Pin-Namen für ein hostmot2-FPGA-Board mit Befehlen wie diesen zu vereinfachen:

alias pin hm2_7i92.0.stepgen.00.position-fb h.00.position-fb
Anmerkung

Eine fragwürdige Erkennung von Komponentenfunktionen kann auftreten bei

  1. nicht unterstützte (veraltete) Komponenten,

  2. vom Benutzer erstellte Komponenten, die mehrere Funktionen oder unkonventionelle Funktionsbezeichnungen verwenden, oder

  3. GUI-erstellte nicht-Echtzeit-Komponenten, denen Unterscheidungsmerkmale wie ein Präfix auf Basis des GUI-Programmnamens fehlen.

Fragwürdige Funktionen sind mit einem Fragezeichen "?" gekennzeichnet.

Anmerkung
Komponentenstifte, die nicht mit einer bekannten Gewindefunktion verbunden werden können, melden die Funktion als "Unbekannt".

halreport generiert einen Verbindungsbericht (ohne Pintypen und aktuelle Werte) für eine laufende HAL-Anwendung, um den Entwurf und die Überprüfung von Verbindungen zu erleichtern. Dies hilft zu verstehen, was die Quelle eines Pin-Wertes ist. Verwenden Sie diese Informationen mit Anwendungen wie halshow, halmeter, halscope oder dem Befehl halcmd show in einem Terminal.