1. Einführung
Die Konfiguration geht von der Theorie zum Gerät über - dem HAL-Gerät. Für diejenigen, die nur ein wenig Erfahrung mit Computerprogrammierung haben, ist dieser Abschnitt das "Hello World" des HAL.
halrun
kann verwendet werden, um ein funktionierendes System zu erstellen. Es ist ein Kommandozeilen- oder Textdateiwerkzeug für Konfiguration und Tuning.
2. Halcmd
halcmd
ist ein Befehlszeilentool zum Manipulieren von HAL. Eine vollständigere Manpage existiert für halcmd und wird zusammen mit LinuxCNC installiert, aus dem Quellcode oder aus einem Paket. Wenn LinuxCNC als run-in-place kompiliert wurde, wird die Manpage nicht installiert, ist aber im LinuxCNC-Hauptverzeichnis mit dem folgenden Befehl zugänglich:
$ man -M docs/man halcmd
2.1. Notation
In dieser Einführung werden die Befehle für das Betriebssystem in der Regel ohne die Eingabeaufforderung der UNIX-Shell gezeigt, d.h. typischerweise mit einem Dollarzeichen ($) oder einer Raute/Doppelkreuz (#). Bei der direkten Kommunikation mit dem HAL über halcmd
oder halrun
werden die Eingabeaufforderungen in den Beispielen gezeigt. Das Terminal-Fenster befindet sich unter "Anwendungen/Zubehör" in der Ubuntu-Menüleiste.
me@computer:~linuxcnc$ halrun
(wird wie die folgende Zeile angezeigt)
halrun
(die halcmd: Eingabeaufforderung wird beim Ausführen von HAL angezeigt)
halcmd: loadrt Zähler
halcmd: pin anzeigen
2.2. Befehl-Vervollständigung durch Tabulator-Taste
Ihre Version von halcmd
enthält möglicherweise die Tabulator-Vervollständigung. Anstatt Dateinamen zu vervollständigen, wie es eine Shell tut, werden Befehle mit HAL-Kennungen vervollständigt. Sie müssen genügend Buchstaben eingeben, um eine eindeutige Übereinstimmung zu erzielen. Versuchen Sie, nach dem Start eines HAL-Befehls die Tabulatortaste zu drücken:
halcmd: loa<TAB>
halcmd: load
halcmd: loadrt
halcmd: loadrt cou<TAB>
halcmd: loadrt counter
2.3. Die RTAPI-Umgebung
RTAPI steht für Real Time Application Programming Interface. Viele HAL-Komponenten arbeiten in Echtzeit, und alle HAL-Komponenten speichern Daten im gemeinsamen Speicher, damit Echtzeitkomponenten darauf zugreifen können. Das normale Linux unterstützt keine Echtzeitprogrammierung oder die Art von gemeinsamem Speicher, die HAL benötigt. Glücklicherweise gibt es Echtzeitbetriebssysteme (RTOS) mit den notwendigen Erweiterungen für Linux. Leider geht jedes RTOS die Dinge ein wenig anders an.
Um diese Unterschiede zu beseitigen, hat das LinuxCNC-Team die RTAPI entwickelt, die einen einheitlichen Weg für Programme bietet, um mit dem RTOS zu kommunizieren. Wenn Sie ein Programmierer sind, der an den Interna von LinuxCNC arbeiten will, sollten Sie vielleicht linuxcnc/src/rtapi/rtapi.h studieren, um die API zu verstehen. Aber wenn Sie eine normale Person sind, ist alles, was Sie über RTAPI wissen müssen, dass es (und das RTOS) in den Speicher Ihres Computers geladen werden muss, bevor Sie etwas mit HAL machen.
3. Ein einfaches Beispiel
3.1. Laden einer Komponente
Für dieses Tutorial gehen wir davon aus, dass Sie die Live-CD erfolgreich installiert haben und, falls Sie eine RIP footnote: [Run In Place, wenn die Quelldateien in ein Benutzerverzeichnis heruntergeladen wurden und direkt von dort aus kompiliert und ausgeführt werden] Installation verwenden, das Skript "rip-environment" aufrufen, um Ihre Shell vorzubereiten. In diesem Fall müssen Sie nur noch die erforderlichen RTOS- und RTAPI-Module in den Speicher laden. Führen Sie einfach den folgenden Befehl in einem Terminalfenster aus:
cd linuxcnc
halrun
halcmd:
Nachdem das Echtzeitbetriebssystem und die RTAPI geladen sind, können wir mit dem ersten Beispiel beginnen. Beachten Sie, dass die Eingabeaufforderung jetzt als "halcmd:" angezeigt wird. Das liegt daran, dass die nachfolgenden Befehle als HAL-Befehle und nicht als Shell-Befehle interpretiert werden.
Für das erste Beispiel werden wir eine HAL-Komponente namens siggen verwenden, die ein einfacher Signalgenerator ist. Eine vollständige Beschreibung der Komponente siggen finden Sie im Abschnitt SigGen dieses Handbuchs. Es handelt sich um eine Echtzeit-Komponente. Um die Komponente "siggen
" zu laden, verwenden Sie den HAL-Befehl loadrt
.
halcmd: loadrt siggen
3.2. Untersuchung der HAL
Nun, nach dem Laden des Moduls, ist es an der Zeit, halcmd
vorzustellen, das Kommandozeilenwerkzeug, das zur Konfiguration der HAL verwendet wird. Dieses Tutorial wird nur eine Auswahl der Funktionen von halcmd vorstellen. Eine ausführlichere Beschreibung finden Sie unter man halcmd
oder in der Referenz im Abschnitt HAL Befehle (engl. commands) dieses Dokuments. Die erste halcmd-Funktion ist der show-Befehl. Dieser Befehl zeigt Informationen über den aktuellen Zustand der HAL an. Um alle installierten Komponenten anzuzeigen:
halrun
/halcmd
anzeigenhalcmd: show comp
Loaded HAL Components:
ID Type Name PID State
3 RT siggen ready
2 User halcmd2177 2177 ready
Da halcmd selbst auch eine HAL-Komponente ist, wird sie immer in der Liste erscheinen. Die Zahl hinter "`halcmd" in der Komponentenliste ist die UNIX-Prozess-ID. Da es möglich ist, mehr als eine Kopie von halcmd gleichzeitig laufen zu lassen (z.B. in verschiedenen Terminalfenstern), wird die PID an das Ende des Namens angehängt, um ihn eindeutig zu machen. Die Liste zeigt auch die Komponente "siggen", die wir im vorherigen Schritt installiert haben. Das "RT" unter "Typ" zeigt an, dass "siggen" eine Echtzeitkomponente ist. Das "User" unter "Type" zeigt an, dass es sich um eine nicht-Echtzeit-Komponente handelt.
Als Nächstes wollen wir sehen, welche Pins siggen
zur Verfügung stellt:
halcmd: show pin
Component Pins:
Owner Type Dir Value Name
3 float IN 1 siggen.0.amplitude
3 bit OUT FALSE siggen.0.clock
3 float OUT 0 siggen.0.cosine
3 float IN 1 siggen.0.frequency
3 float IN 0 siggen.0.offset
3 float OUT 0 siggen.0.sawtooth
3 float OUT 0 siggen.0.sine
3 float OUT 0 siggen.0.square
3 float OUT 0 siggen.0.triangle
Dieser Befehl zeigt alle Pins im aktuellen HAL an. Ein komplexes System könnte Dutzende oder Hunderte von Pins haben. Aber im Moment gibt es nur neun Pins. Von diesen Pins sind acht Gleitkomma-Pins und einer ist ein Bit (boolesch). Sechs führen Daten aus der siggen-Komponente heraus, und drei werden verwendet, um Einstellungen in die Komponente zu übertragen. Da de in den Komponente enthaltene Code noch nicht ausgeführt wurde, haben einige der Pins den Wert Null.
Der nächste Schritt ist die Betrachtung der Parameter:
halcmd: show param
Parameters:
Owner Type Dir Value Name
3 s32 RO 0 siggen.0.update.time
3 s32 RW 0 siggen.0.update.tmax
Der Befehl "show param" zeigt alle Parameter im HAL an. Im Moment hat jeder Parameter den Standardwert, der ihm beim Laden der Komponente zugewiesen wurde. Beachten Sie die Spalte mit der Aufschrift Dir. Die mit -W gekennzeichneten Parameter sind beschreibbare Parameter, die niemals von der Komponente selbst geändert werden, sondern vom Benutzer geändert werden sollen, um die Komponente zu steuern. Wir werden später sehen, wie man das macht. Die mit R- gekennzeichneten Parameter sind schreibgeschützt. Sie können nur von der Komponente geändert werden. Parameter mit der Bezeichnung RW schließlich sind Schreib-Lese-Parameter. Das bedeutet, dass sie von der Komponente geändert werden, aber auch vom Benutzer geändert werden können. Hinweis: Die Parameter siggen.0.update.time
und siggen.0.update.tmax
sind für Debugging-Zwecke und werden in diesem Abschnitt nicht behandelt.
Die meisten Echtzeitkomponenten exportieren eine oder mehrere Funktionen, um den in ihnen enthaltenen Echtzeitcode tatsächlich auszuführen. Schauen wir uns an, welche Funktion(en) siggen exportiert hat:
halcmd
halcmd: show funct
Exported Functions:
Owner CodeAddr Arg FP Users Name
00003 f801b000 fae820b8 YES 0 siggen.0.update
Die Komponente siggen exportierte eine einzige Funktion. Sie benötigt Fließkomma. Sie ist derzeit mit keinem Thread verknüpft, daher ist users gleich Null
[Die Felder CodeAddr und Arg wurden während der Entwicklung verwendet und sollten wahrscheinlich verschwinden.]
.
3.3. Echtzeitcode zum Laufen bringen
Um den in der Funktion siggen.0.update
enthaltenen Code tatsächlich auszuführen, benötigen wir einen Echtzeit-Thread. Die Komponente namens threads wird zum Erstellen eines neuen Threads verwendet. Erstellen wir einen Thread namens "test-thread" mit einer Periode von 1 ms (1.000 µs oder 1.000.000 ns):
halcmd: loadrt threads name1=test-thread period1=1000000
Mal sehen, ob das funktioniert:
halcmd: show thread
Realtime Threads:
Period FP Name ( Time, Max-Time )
999855 YES test-thread ( 0, 0 )
Das tat es. Der Zeitraum beträgt aufgrund von Hardwarebeschränkungen nicht genau 1.000.000 ns, aber wir haben einen Thread, der ungefähr mit der richtigen Rate läuft und Gleitkommafunktionen verarbeiten kann. Der nächste Schritt besteht darin, die Funktion mit dem Thread zu verbinden:
halcmd: addf siggen.0.update test-thread
Bis jetzt haben wir halcmd
nur benutzt, um die HAL zu betrachten. Dieses Mal haben wir jedoch den Befehl addf
(add function) verwendet, um tatsächlich etwas in der HAL zu ändern. Wir haben halcmd angewiesen, die Funktion siggen.0.update
zum Thread test-thread hinzuzufügen, und wenn wir uns die Thread-Liste noch einmal ansehen, sehen wir, dass dies gelungen ist:
halcmd: show thread
Realtime Threads:
Period FP Name ( Time, Max-Time )
999855 YES test-thread ( 0, 0 )
1 siggen.0.update
Bevor die Komponente siggen mit der Erzeugung von Signalen beginnt, ist noch ein weiterer Schritt erforderlich. Wenn die HAL zum ersten Mal gestartet wird, laufen die Threads noch nicht. Dies soll Ihnen ermöglichen, das System vollständig zu konfigurieren, bevor der Echtzeitcode startet. Sobald Sie mit der Konfiguration zufrieden sind, können Sie den Echtzeitcode wie folgt starten:
halcmd: start
Jetzt läuft der Signalgenerator. Schauen wir uns seine Ausgangspins an:
halcmd: show pin
Komponenten-Pins:
Owner Type Dir Value Name
3 float IN 1 siggen.0.amplitude
3 bit OUT FALSE siggen.0.clock
3 float OUT -0.1640929 siggen.0.cosine
3 float IN 1 siggen.0.frequency
3 float IN 0 siggen.0.offset
3 float OUT -0.4475303 siggen.0.sawtooth
3 float OUT 0.9864449 siggen.0.sine
3 float OUT -1 siggen.0.square
3 float OUT -0.1049393 siggen.0.triangle
Und schauen wir noch einmal hin:
halcmd: show pin
Komponenten Pins:
Owner Type Dir Value Name
3 float IN 1 siggen.0.amplitude
3 bit OUT FALSE siggen.0.clock
3 float OUT 0.0507619 siggen.0.cosine
3 float IN 1 siggen.0.frequency
3 float IN 0 siggen.0.offset
3 float OUT -0.516165 siggen.0.sawtooth
3 float OUT 0.9987108 siggen.0.sine
3 float OUT -1 siggen.0.square
3 float OUT 0.03232994 siggen.0.triangle
Wir haben zwei show pin
-Befehle kurz hintereinander ausgeführt, und Sie können sehen, dass die Ausgänge nicht mehr Null sind. Die Ausgänge für Sinus, Kosinus, Sägezahn und Dreieck ändern sich ständig. Der quadratische Ausgang funktioniert auch, aber er wechselt einfach bei jedem Zyklus von +1,0 auf -1,0.
3.4. Ändern von Parametern
Die eigentliche Stärke von HAL ist, dass man Dinge ändern kann. Wir können zum Beispiel den Befehl setp
verwenden, um den Wert eines Parameters einzustellen. Ändern wir die Amplitude des Signalgenerators von 1,0 auf 5,0:
halcmd: setp siggen.0.amplitude 5
halcmd: show param
Parameter:
Owner Type Dir Value Name
3 s32 RO 1754 siggen.0.update.time
3 s32 RW 16997 siggen.0.update.tmax
halcmd: show pin
Komponenten-Pins:
Owner Type Dir Value Name
3 float IN 5 siggen.0.amplitude
3 bit OUT FALSE siggen.0.clock
3 float OUT 0.8515425 siggen.0.cosine
3 float IN 1 siggen.0.frequency
3 float IN 0 siggen.0.offset
3 float OUT 2.772382 siggen.0.sawtooth
3 float OUT -4.926954 siggen.0.sine
3 float OUT 5 siggen.0.square
3 float OUT 0.544764 siggen.0.triangle
Beachten Sie, dass sich der Wert des Parameters siggen.0.amplitude
auf 5 geändert hat und dass die Stifte nun größere Werte haben.
3.5. Speichern der HAL-Konfiguration
Das meiste, was wir bisher mit halcmd
gemacht haben, war einfach das Anzeigen von Dingen mit dem show-Befehl. Zwei der Befehle haben jedoch tatsächlich Dinge verändert. Wenn wir komplexere Systeme mit HAL entwerfen, werden wir viele Befehle verwenden, um die Dinge genau so zu konfigurieren, wie wir sie haben wollen. HAL hat ein Gedächtnis wie ein Elefant und behält diese Konfiguration bei, bis wir es abschalten. Aber was ist beim nächsten Mal? Wir wollen nicht jedes Mal, wenn wir das System benutzen wollen, eine Reihe von Befehlen manuell eingeben.
halcmd: save
# Komponenten
loadrt threads name1=test-thread period1=1000000
loadrt siggen
# Pin-Aliase
# Signale
# Netze
# Parameterwerte
setp siggen.0.update.tmax 14687
# Echtzeit-Thread/Funktions-Verknüpfungen
addf siggen.0.update test-thread
Die Ausgabe des Befehls save
ist eine Folge von HAL-Befehlen. Wenn Sie mit einer leeren HAL beginnen und alle diese Befehle ausführen, erhalten Sie die Konfiguration, die zum Zeitpunkt der Ausgabe des Befehls save bestand. Um diese Befehle zur späteren Verwendung zu speichern, leiten wir die Ausgabe einfach in eine Datei um:
halcmd
halcmd: save all saved.hal
3.6. Halrun beenden
Wenn Sie mit Ihrer HAL-Sitzung fertig sind, geben Sie an der Eingabeaufforderung halcmd:`das Kommando `exit
ein. Damit kehren Sie zur System-Eingabeaufforderung zurück und beenden die HAL-Sitzung. Schließen Sie nicht einfach das Terminalfenster, ohne die HAL-Sitzung zu beenden.
halcmd: exit
3.7. Wiederherstellung der HAL-Konfiguration
Um die in der Datei "saved.hal" gespeicherte HAL-Konfiguration wiederherzustellen, müssen wir alle diese HAL-Befehle ausführen. Dazu verwenden wir "-f <Dateiname>'
" das die Befehle aus einer Datei liest, und "-I
" (Großbuchstabe i), das die halcmd-Eingabeaufforderung nach Ausführung der Befehle anzeigt:
halrun -I -f saved.hal
Beachten Sie, dass das Kommando "start" in saved.hal nicht vorhanden ist. Sie müssen dies erneut erteilen (oder die Datei saved.hal bearbeiten, um dies dort hinzuzufügen).
3.8. HAL aus dem Speicher entfernen
Wenn eine HAL-Sitzung unerwartet beendet wird, müssen Sie möglicherweise HAL entladen, bevor eine neue Sitzung beginnen kann. Geben Sie dazu den folgenden Befehl in ein Terminalfenster ein.
halrun -U
4. Halmeter
Sie können sehr komplexe HAL-Systeme erstellen, ohne jemals eine grafische Oberfläche zu verwenden. Es hat jedoch etwas Befriedigendes, das Ergebnis seiner Arbeit zu sehen. Das erste und einfachste GUI-Werkzeug für HAL ist Halmeter. Es ist ein sehr einfaches Programm, das ein HAL-Äquivalent eines handlichen Multimeters darstellt.
Es ermöglicht die Beobachtung von Pins, Signalen oder Parametern, indem es den aktuellen Wert dieser Einheiten anzeigt. Es ist eine sehr einfach zu bedienende Anwendung für grafische Umgebungen. In einer Konsole geben Sie ein:
halmeter
Es erscheinen zwei Fenster. Das Auswahlfenster ist das größte und enthält drei Registerkarten:
-
In der einen werden alle derzeit in HAL definierten Pins aufgelistet,
-
eine Liste aller Signale,
-
eine listet alle Parameter auf,
Klicken Sie auf eine Registerkarte und dann auf eines der Elemente, um es auszuwählen. In dem kleinen Fenster werden der Name und der Wert des ausgewählten Elements angezeigt. Die Anzeige wird etwa 10 Mal pro Sekunde aktualisiert. Um Platz auf dem Bildschirm zu schaffen, kann das Auswahlfenster mit der Schaltfläche Close geschlossen werden. Im kleinen Fenster, das beim Programmstart unter dem Auswahlfenster verborgen ist, öffnet die Schaltfläche Auswählen das Auswahlfenster erneut, und die Schaltfläche Beenden beendet das Programm und schließt beide Fenster.
Es ist möglich, mehrere Halmeter gleichzeitig laufen zu lassen, was die gleichzeitige Visualisierung mehrerer Elemente ermöglicht. Um ein Halmeter zu öffnen und die Konsole freizugeben, indem es im Hintergrund ausgeführt wird, führen Sie den folgenden Befehl aus:
halmeter &
Es ist möglich, halmeter zu starten und sofort ein Element anzeigen zu lassen. Fügen Sie dazu pin|sig|par[am] name Argumente in die Befehlszeile ein. Es wird das Signal, den Pin oder den Parameter name anzeigen, sobald es startet. Wenn das angegebene Element nicht vorhanden ist, wird es normal gestartet.
Wenn ein Element für die Anzeige angegeben wird, kann man -s vor pin|sig|param hinzufügen, um Halmeter anzuweisen, ein noch kleineres Fenster zu verwenden. Der Name des Elements wird dann in der Titelleiste statt unter dem Wert angezeigt, und es gibt keine Schaltfläche. Dies ist nützlich, wenn viele Halmeter auf kleinem Raum angezeigt werden sollen.
Wir werden erneut die Komponente siggen verwenden, um halmeter zu überprüfen. Wenn Sie das vorherige Beispiel gerade beendet haben, können Sie siggen mit der gespeicherten Datei laden. Wenn nicht, können wir es genauso laden wie zuvor:
halrun
halcmd: loadrt siggen
halcmd: loadrt threads name1=test-thread period1=1000000
halcmd: addf siggen.0.update test-thread
halcmd: start
halcmd: setp siggen.0.amplitude 5
Zu diesem Zeitpunkt ist die Komponente siggen geladen und läuft. Es ist an der Zeit, halmeter zu starten.
halcmd: loadusr halmeter
Das erste Fenster, das Sie sehen, ist das Fenster "Zu untersuchendes Element auswählen" (engl. select Item to probe).
Dieser Dialog hat drei Registerkarten. Auf der ersten Registerkarte werden alle HAL-Pins des Systems angezeigt. Auf der zweiten Registerkarte werden alle Signale angezeigt, und auf der dritten alle Parameter. Wir möchten uns zuerst den Pin siggen.0.cosine
ansehen, also klicken Sie darauf und dann auf die Schaltfläche "Schließen" (engl. close). Das Dialogfeld für die Sondenauswahl wird geschlossen, und das Messgerät sieht ungefähr so aus wie in der folgenden Abbildung.
Um zu ändern, was das Messgerät anzeigt, drücken Sie auf die Schaltfläche "Auswählen", wodurch das Fenster "Zu messendes Element auswählen" wieder angezeigt wird.
Sie sollten sehen, wie sich der Wert ändert, wenn siggen seine Kosinuswelle erzeugt. Das Halmeter aktualisiert seine Anzeige etwa 5 Mal pro Sekunde.
Zum Beenden von Halmeter klicken Sie einfach auf die Schaltfläche Beenden.
Wenn Sie mehr als einen Pin, ein Signal oder einen Parameter auf einmal betrachten wollen, können Sie einfach mehrere Halmeter starten. Das Halmeter-Fenster wurde absichtlich sehr klein gehalten, damit Sie viele davon gleichzeitig auf dem Bildschirm haben können.
5. Stepgen Example
Bis jetzt haben wir nur eine HAL-Komponente geladen. Die Idee hinter HAL ist jedoch, dass Sie eine Reihe von einfachen Komponenten laden und verbinden können, um ein komplexes System zu bilden. Das nächste Beispiel wird zwei Komponenten verwenden.
Bevor wir mit der Erstellung dieses neuen Beispiels beginnen können, wollen wir einen Neuanfang machen. Wenn Sie gerade eines der vorherigen Beispiele beendet haben, müssen wir alle Komponenten entfernen und die RTAPI- und HAL-Bibliotheken neu laden.
halcmd: exit
5.1. Installieren der Komponenten
Jetzt laden wir die Komponente Schrittimpulsgenerator. Eine detaillierte Beschreibung dieser Komponente finden Sie im Abschnitt stepgen des Integrator-Handbuchs. In diesem Beispiel verwenden wir den Steuertyp velocity von StepGen. Für den Moment können wir die Details überspringen und einfach die folgenden Befehle ausführen.
In diesem Beispiel wird der Kontrolltyp velocity aus der Komponente stepgen
verwendet.
halrun
halcmd: loadrt stepgen step_type=0,0 ctrl_type=v,v
halcmd: loadrt siggen
halcmd: loadrt threads name1=fast fp1=0 period1=50000 name2=slow period2=1000000
Der erste Befehl lädt zwei Schrittgeneratoren, die beide so konfiguriert sind, dass sie den Schritttyp 0 erzeugen. Der zweite Befehl lädt unseren alten Freund siggen, und der dritte Befehl erzeugt zwei Threads, einen schnellen mit einer Periode von 50 Mikrosekunden (µs) und einen langsamen mit einer Periode von 1 Millisekunde (ms). Der schnelle Thread unterstützt keine Fließkommafunktionen.
Wie zuvor können wir halcmd show
verwenden, um einen Blick auf die HAL zu werfen. Diesmal haben wir viel mehr Pins und Parameter als zuvor:
halcmd: show pin
Component Pins:
Owner Type Dir Value Name
4 float IN 1 siggen.0.amplitude
4 bit OUT FALSE siggen.0.clock
4 float OUT 0 siggen.0.cosine
4 float IN 1 siggen.0.frequency
4 float IN 0 siggen.0.offset
4 float OUT 0 siggen.0.sawtooth
4 float OUT 0 siggen.0.sine
4 float OUT 0 siggen.0.square
4 float OUT 0 siggen.0.triangle
3 s32 OUT 0 stepgen.0.counts
3 bit OUT FALSE stepgen.0.dir
3 bit IN FALSE stepgen.0.enable
3 float OUT 0 stepgen.0.position-fb
3 bit OUT FALSE stepgen.0.step
3 float IN 0 stepgen.0.velocity-cmd
3 s32 OUT 0 stepgen.1.counts
3 bit OUT FALSE stepgen.1.dir
3 bit IN FALSE stepgen.1.enable
3 float OUT 0 stepgen.1.position-fb
3 bit OUT FALSE stepgen.1.step
3 float IN 0 stepgen.1.velocity-cmd
halcmd: show param
Parameters:
Owner Type Dir Value Name
4 s32 RO 0 siggen.0.update.time
4 s32 RW 0 siggen.0.update.tmax
3 u32 RW 0x00000001 stepgen.0.dirhold
3 u32 RW 0x00000001 stepgen.0.dirsetup
3 float RO 0 stepgen.0.frequency
3 float RW 0 stepgen.0.maxaccel
3 float RW 0 stepgen.0.maxvel
3 float RW 1 stepgen.0.position-scale
3 s32 RO 0 stepgen.0.rawcounts
3 u32 RW 0x00000001 stepgen.0.steplen
3 u32 RW 0x00000001 stepgen.0.stepspace
3 u32 RW 0x00000001 stepgen.1.dirhold
3 u32 RW 0x00000001 stepgen.1.dirsetup
3 float RO 0 stepgen.1.frequency
3 float RW 0 stepgen.1.maxaccel
3 float RW 0 stepgen.1.maxvel
3 float RW 1 stepgen.1.position-scale
3 s32 RO 0 stepgen.1.rawcounts
3 u32 RW 0x00000001 stepgen.1.steplen
3 u32 RW 0x00000001 stepgen.1.stepspace
3 s32 RO 0 stepgen.capture-position.time
3 s32 RW 0 stepgen.capture-position.tmax
3 s32 RO 0 stepgen.make-pulses.time
3 s32 RW 0 stepgen.make-pulses.tmax
3 s32 RO 0 stepgen.update-freq.time
3 s32 RW 0 stepgen.update-freq.tmax
5.2. Verbinden von Pins mit Signalen
Wir haben also zwei Schrittimpulsgeneratoren und einen Signalgenerator. Nun ist es an der Zeit, einige HAL-Signale zu erzeugen, um die beiden Komponenten zu verbinden. Wir tun so, als ob die beiden Schrittimpulsgeneratoren die X- und Y-Achse einer Maschine antreiben würden. Wir wollen den Tisch im Kreis bewegen. Dazu senden wir ein Kosinussignal an die X-Achse und ein Sinussignal an die Y-Achse. Das siggen-Modul erzeugt den Sinus und den Cosinus, aber wir brauchen "Drähte", um die Module miteinander zu verbinden. Im HAL werden diese "Drähte" Signale genannt. Wir müssen zwei davon erstellen. Wir können sie nennen, wie wir wollen, in diesem Beispiel werden sie X-vel und Y-vel heißen. Das Signal "X-vel" soll vom Cosinus-Ausgang des Signalgenerators zum Geschwindigkeitseingang des ersten Schrittimpulsgenerators führen. Der erste Schritt besteht darin, das Signal mit dem Ausgang des Signalgenerators zu verbinden. Um ein Signal mit einem Pin zu verbinden, verwenden wir den Netzbefehl.
halcmd: net X-vel <= siggen.0.cosine
Um die Wirkung des Befehls net
zu sehen, zeigen wir die Signale erneut.
halcmd: show sig
Signals:
Type Value Name (linked to)
float 0 X-vel <== siggen.0.cosine
Wenn ein Signal mit einem oder mehreren Pins verbunden ist, listet der Befehl show die Pins unmittelbar nach dem Signalnamen auf. Der "Pfeil" zeigt die Richtung des Datenflusses an - in diesem Fall fließen die Daten vom Pin siggen.0.cosine
zum Signal X-vel
. Schließen wir nun das Signal X-vel
an den Geschwindigkeitseingang eines Schrittimpulsgenerators an.
halcmd: net X-vel => stepgen.0.velocity-cmd
Wir können auch das Signal der Y-Achse Y-vel
anschließen. Es soll vom Sinusausgang des Signalgenerators zum Eingang des zweiten Schrittimpulsgenerators laufen. Der folgende Befehl erreicht in einer Zeile, was zwei net
-Befehle für X-vel
erreicht haben.
halcmd: net Y-vel siggen.0.sine => stepgen.1.velocity-cmd
Werfen wir nun einen letzten Blick auf die Signale und die mit ihnen verbundenen Pins.
halcmd: show sig
Signals:
Type Value Name (linked to)
float 0 X-vel <== siggen.0.cosine
==> stepgen.0.velocity-cmd
float 0 Y-vel <== siggen.0.sine
==> stepgen.1.velocity-cmd
Der Befehl show sig macht deutlich, wie genau die Daten durch den HAL fließen. Zum Beispiel kommt das X-vel-Signal von Pin siggen.0.cosine
und geht zu Pin stepgen.0.velocity-cmd
.
5.3. Einrichten der Echtzeitausführung - Threads und Funktionen
Wenn man sich vorstellt, dass Daten durch "Drähte" fließen, sind Pins und Signale recht einfach zu verstehen. Threads und Funktionen sind da schon etwas schwieriger. Funktionen enthalten die Computeranweisungen, welche die eigentliche Arbeit erledigen. Threads sind die Methode, mit der diese Anweisungen ausgeführt werden, wenn sie benötigt werden. Schauen wir uns zunächst die Funktionen an, die uns zur Verfügung stehen.
halcmd: show funct
Exported Functions:
Owner CodeAddr Arg FP Users Name
00004 f9992000 fc731278 YES 0 siggen.0.update
00003 f998b20f fc7310b8 YES 0 stepgen.capture-position
00003 f998b000 fc7310b8 NO 0 stepgen.make-pulses
00003 f998b307 fc7310b8 YES 0 stepgen.update-freq
Im Allgemeinen müssen Sie in der Dokumentation der einzelnen Komponenten nachschlagen, um zu erfahren, was ihre Funktionen bewirken. In diesem Fall wird die Funktion siggen.0.update
verwendet, um die Ausgänge des Signalgenerators zu aktualisieren. Jedes Mal, wenn sie ausgeführt wird, berechnet sie die Werte der Sinus-, Kosinus-, Dreieck- und Quadratausgänge. Um glatte Signale zu erzeugen, muss sie in bestimmten Intervallen ausgeführt werden.
Die anderen drei Funktionen beziehen sich auf die Schrittimpulsgeneratoren.
Die erste, stepgen.capture_position
, wird für die Positionsrückmeldung verwendet. Sie erfasst den Wert eines internen Zählers, der die Schrittimpulse zählt, während sie erzeugt werden. Unter der Annahme, dass keine Schritte ausgelassen werden, zeigt dieser Zähler die Position des Motors an.
Die Hauptfunktion für den Schrittimpulsgenerator ist stepgen.make_pulses
. Jedes Mal, wenn make_pulses läuft, entscheidet es, ob es Zeit ist, einen Schritt zu machen, und wenn ja, setzt es die Ausgänge entsprechend. Um gleichmäßige Schrittimpulse zu erhalten, sollte er so oft wie möglich laufen. Weil es so schnell laufen muss, ist make_pulses stark optimiert und führt nur wenige Berechnungen durch. Im Gegensatz zu den anderen Programmen benötigt es keine Fließkommaberechnungen.
Die letzte Funktion, stepgen.update-freq
, ist für die Skalierung und einige andere Berechnungen zuständig, die nur durchgeführt werden müssen, wenn sich der Frequenzbefehl ändert.
Für unser Beispiel bedeutet dies, dass wir siggen.0.update
mit einer moderaten Rate ausführen wollen, um die Sinus- und Kosinuswerte zu berechnen. Unmittelbar nachdem wir siggen.0.update
ausgeführt haben, wollen wir stepgen.update_freq
ausführen, um die neuen Werte in den Schrittimpulsgenerator zu laden. Schließlich müssen wir stepgen.make_pulses
so schnell wie möglich ausführen, um gleichmäßige Impulse zu erhalten. Da wir keine Positionsrückmeldung verwenden, brauchen wir stepgen.capture_position
überhaupt nicht auszuführen.
Wir führen Funktionen aus, indem wir sie zu Threads hinzufügen. Jeder Thread läuft mit einer bestimmten Geschwindigkeit. Schauen wir uns an, welche Threads wir zur Verfügung haben.
halcmd: show thread
Realtime Threads:
Period FP Name ( Time, Max-Time )
996980 YES slow ( 0, 0 )
49849 NO fast ( 0, 0 )
Die beiden Threads wurden erstellt, als wir threads
geladen haben. Der erste, slow, läuft jede Millisekunde und ist in der Lage, Gleitkommafunktionen auszuführen. Wir werden ihn für siggen.0.update
und stepgen.update_freq
verwenden. Der zweite Thread ist "schnell" (engl. fast), der alle 50 Mikrosekunden (µs) läuft und keine Fließkommafunktionen unterstützt. Wir werden ihn für stepgen.make_pulses
verwenden. Um die Funktionen mit dem richtigen Thread zu verbinden, verwenden wir den Befehl addf
. Wir geben zuerst die Funktion und dann den Thread an.
halcmd: addf siggen.0.update slow
halcmd: addf stepgen.update-freq slow
halcmd: addf stepgen.make-pulses fast
Nachdem wir diese Befehle gegeben haben, können wir den Befehl show thread
erneut ausführen, um zu sehen, was passiert ist.
halcmd: show thread
Realtime Threads:
Period FP Name ( Time, Max-Time )
996980 YES slow ( 0, 0 )
1 siggen.0.update
2 stepgen.update-freq
49849 NO fast ( 0, 0 )
1 stepgen.make-pulses
Nun folgen auf jeden Thread die Namen der Funktionen in der Reihenfolge, in der sie ausgeführt werden sollen.
5.4. Parameter einstellen
Wir sind fast bereit, unser HAL-System zu starten. Allerdings müssen wir noch ein paar Parameter anpassen. Standardmäßig erzeugt die siggen-Komponente Signale, die von +1 bis -1 schwanken. Für unser Beispiel ist das in Ordnung, denn wir wollen, dass die Tischgeschwindigkeit zwischen +1 und -1 Zoll pro Sekunde schwankt. Die Skalierung des Schrittimpulsgenerators ist jedoch nicht ganz richtig. Standardmäßig erzeugt er eine Ausgangsfrequenz von 1 Schritt pro Sekunde bei einem Eingang von 1,0. Es ist unwahrscheinlich, dass ein Schritt pro Sekunde eine Tischbewegung von einem Zoll pro Sekunde ergibt. Nehmen wir stattdessen an, dass wir eine Leitspindel mit 5 Umdrehungen pro Zoll haben, die an einen Schrittmotor mit 200 Schritten pro Umdrehung und 10-fachem Mikroschritt angeschlossen ist. Eine Umdrehung der Spindel erfordert also 2000 Schritte und 5 Umdrehungen, um einen Zoll zu bewegen. Das bedeutet, dass die Gesamtskalierung 10000 Schritte pro Zoll beträgt. Wir müssen die Geschwindigkeitseingabe für den Schrittimpulsgenerator mit 10000 multiplizieren, um die richtige Ausgabe zu erhalten. Genau dafür ist der Parameter stepgen.n.velocity-scale
gedacht. In diesem Fall haben sowohl die X- als auch die Y-Achse die gleiche Skalierung, also setzen wir die Skalierungsparameter für beide auf 10000.
halcmd: setp stepgen.0.position-scale 10000
halcmd: setp stepgen.1.position-scale 10000
halcmd: setp stepgen.0.enable 1
halcmd: setp stepgen.1.enable 1
Diese Geschwindigkeitssskalierung bedeutet, dass der Schrittgenerator 10000 Impulse pro Sekunde (10 kHz) erzeugt, wenn der Stift stepgen.0.velocity-cmd
1.0 beträgt. Bei der oben beschriebenen Motor- und Vortriebsschraube führt dies dazu, dass sich die Achse mit genau 1,0 Zoll pro Sekunde bewegt. Dies zeigt ein wichtiges, grundlegendes HAL-Konzept - Dinge wie Skalierung werden auf möglichst niedrigem Niveau durchgeführt, in diesem Fall im Schrittimpulsgenerator. Das interne Signal X-vel
ist die Geschwindigkeit der Tabelle in Zoll pro Sekunde, und andere Komponenten wie siggen
wissen überhaupt nicht (oder kümmern) über die Skalierung. Wenn wir die Leadcrew oder den Motor ändern, würden wir nur den Skalierungsparameter des Schrittimpulsgenerators ändern.
5.5. Ausführen!
Wir haben nun alles konfiguriert und können es starten. Genau wie im ersten Beispiel verwenden wir den Befehl start
.
halcmd: start
Obwohl scheinbar nichts passiert, gibt der Schrittimpulsgenerator im Computer jede Sekunde Schrittimpulse aus, die von 10 kHz vorwärts bis 10 kHz rückwärts und wieder zurück reichen. Später in diesem Lernprogramm werden wir sehen, wie man diese internen Signale ausgibt, um Motoren in der realen Welt zu betreiben, aber zuerst wollen wir uns die Signale ansehen und sehen, was passiert.
6. Halscope
Das vorherige Beispiel erzeugt einige sehr interessante Signale. Aber vieles von dem, was passiert, ist viel zu schnell, um es mit dem Halmeter zu sehen. Um einen genaueren Blick auf die Vorgänge im Inneren des HAL zu werfen, brauchen wir ein Oszilloskop. Glücklicherweise verfügt HAL über ein solches, genannt halscope.
Halscope besteht aus zwei Teilen - einem Echtzeit-Teil, der die HAL-Signale liest, und einem Nicht-Echtzeit-Teil, der die grafische Benutzeroberfläche und die Anzeige bereitstellt. Sie müssen sich jedoch nicht darum kümmern, da der Nicht-Echtzeit-Teil den Echtzeit-Teil bei Bedarf automatisch lädt.
Wenn LinuxCNC in einem Terminal läuft, können Sie halscope mit dem folgenden Befehl starten.
halcmd loadusr halscope
Wenn LinuxCNC nicht läuft oder die Datei autosave.halscope nicht mit den Pins übereinstimmt, die im aktuell laufenden LinuxCNC verfügbar sind, öffnet sich das Scope-GUI-Fenster, unmittelbar gefolgt von einem Dialog Realtime function not linked, der wie die folgende Abbildung aussieht. Um die Abtastrate zu ändern, klicken Sie mit der linken Maustaste auf das Feld Samples.
In diesem Dialogfeld stellen Sie die Abtastrate für das Oszilloskop ein. Für den Moment wollen wir einmal pro Millisekunde abtasten, also klicken wir auf den 989 µs-Thread slow und lassen den Multiplikator bei 1. Wir werden auch die Aufzeichnungslänge bei 4000 Abtastungen belassen, so dass wir bis zu vier Kanäle auf einmal verwenden können. Wenn Sie einen Thread auswählen und dann auf "OK" klicken, verschwindet das Dialogfeld, und das Scope-Fenster sieht ungefähr so aus wie in der folgenden Abbildung.
6.1. Anschließen der Oszilloskop-Sonden
An diesem Punkt ist Halscope einsatzbereit. Wir haben bereits eine Abtastrate und eine Aufzeichnungslänge gewählt, so dass der nächste Schritt darin besteht, zu entscheiden, was wir uns ansehen wollen. Dies ist gleichbedeutend mit dem Anschließen von "virtuellen Oszilloskop-Sonden" an den HAL. Halscope verfügt über 16 Kanäle, aber die Anzahl, die Sie gleichzeitig verwenden können, hängt von der Aufzeichnungslänge ab - mehr Kanäle bedeuten kürzere Aufzeichnungen, da der für die Aufzeichnung verfügbare Speicher auf etwa 16.000 Samples festgelegt ist.
Die Kanalschaltflächen befinden sich am unteren Rand des Halskop-Bildschirms. Wenn Sie auf die Schaltfläche "1" klicken, wird das Dialogfeld "Select Channel Source" (Kanalquelle auswählen) angezeigt, wie in der folgenden Abbildung dargestellt. Dieser Dialog ist dem von Halmeter verwendeten Dialog sehr ähnlich. Wir möchten uns die Signale ansehen, die wir zuvor definiert haben, also klicken wir auf die Registerkarte "Signale", und der Dialog zeigt alle Signale im HAL an (in diesem Beispiel nur zwei).
Um ein Signal auszuwählen, klicken Sie es einfach an. In diesem Fall möchten wir, dass auf Kanal 1 das Signal "X-vel" angezeigt wird. Klicken Sie auf die Registerkarte "Signale" und dann auf "X-vel". Das Dialogfeld schließt sich und der Kanal ist nun ausgewählt.
Die Taste für Kanal 1 wird gedrückt, und die Kanalnummer 1 und die Bezeichnung "X-vel" erscheinen unter der Tastenreihe. Diese Anzeige zeigt immer den ausgewählten Kanal an - Sie können mehrere Kanäle auf dem Bildschirm haben, aber der ausgewählte Kanal ist hervorgehoben, und die verschiedenen Steuerelemente wie vertikale Position und Skalierung funktionieren immer für den ausgewählten Kanal.
Um ein Signal zu Kanal 2 hinzuzufügen, klicken Sie auf die Schaltfläche "2". Wenn der Dialog angezeigt wird, klicken Sie auf die Registerkarte "Signale" und dann auf "Y-vel". Wir wollen uns auch die Rechteck- und Dreieckswellenausgänge ansehen. Es sind keine Signale mit diesen Pins verbunden, daher verwenden wir stattdessen die Registerkarte "Pins". Für Kanal 3 wählen Sie siggen.0.triangle
und für Kanal 4 siggen.0.square
.
6.2. Erfassen unserer ersten Wellenformen
Nachdem wir nun mehrere Sonden an den HAL angeschlossen haben, ist es an der Zeit, einige Wellenformen zu erfassen. Zum Starten des Oszilloskops klicken Sie auf die Schaltfläche "Normal" im Abschnitt "Run Mode" des Bildschirms (oben rechts). Da wir eine Aufzeichnungslänge von 4000 Samples haben und 1000 Samples pro Sekunde erfassen, wird halscope etwa 2 Sekunden brauchen, um die Hälfte seines Puffers zu füllen. Während dieser Zeit zeigt ein Fortschrittsbalken direkt über dem Hauptbildschirm an, dass der Puffer gefüllt ist. Sobald der Puffer halb voll ist, wartet das Scope auf einen Trigger. Da wir noch keinen konfiguriert haben, wird es ewig warten. Um es manuell auszulösen, klicken Sie auf die Schaltfläche "Erzwingen" im Abschnitt "Auslöser" oben rechts. Sie sollten sehen, wie sich der Rest des Puffers füllt, und dann werden die erfassten Wellenformen auf dem Bildschirm angezeigt. Das Ergebnis sieht ungefähr so aus wie in der folgenden Abbildung.
Das Feld Ausgewählter Kanal am unteren Rand zeigt an, dass die violette Kurve die aktuell ausgewählte Kurve ist, Kanal 4, der den Wert des Pins siggen.0.square
anzeigt. Klicken Sie auf die Kanalschaltflächen 1 bis 3, um die anderen drei Spuren zu markieren.
6.3. Vertikale Anpassungen
Die Spuren sind nur schwer zu unterscheiden, da alle vier übereinander liegen. Um dies zu beheben, verwenden wir die "Vertikal"-Steuerungen in der Box auf der rechten Seite des Bildschirms. Diese Regler wirken sich auf den aktuell ausgewählten Kanal aus. Bei der Einstellung der Verstärkung ist zu beachten, dass sie einen riesigen Bereich abdeckt - im Gegensatz zu einem echten Oszilloskop kann dieses Gerät Signale von sehr kleinen (Pico-Einheiten) bis zu sehr großen (Tera-Einheiten) anzeigen. Mit dem Positionsregler wird die angezeigte Kurve nur über die Höhe des Bildschirms nach oben und unten bewegt. Für größere Einstellungen sollte die Offset-Taste verwendet werden.
Die große Schaltfläche Ausgewählter Kanal am unteren Rand zeigt an, dass Kanal 1 der aktuell ausgewählte Kanal ist und dass er mit dem X-vel-Signal übereinstimmt. Versuchen Sie, auf die anderen Kanäle zu klicken, um ihre Spuren sichtbar zu machen und sie mit dem Pos-Cursor verschieben zu können.
6.4. Triggering (automatisches Auslösen)
Die Verwendung des Button "Erzwingen" ist eine eher unbefriedigende Art, das Oszilloskop auszulösen. Um eine echte Triggerung einzurichten, klicken Sie auf die Schaltfläche "Quelle" unten rechts. Daraufhin wird das Dialogfeld "Trigger Source" (Triggerquelle) angezeigt, das einfach eine Liste aller derzeit angeschlossenen Sonden enthält. Wählen Sie eine Sonde für die Triggerung aus, indem Sie auf sie klicken. In diesem Beispiel verwenden wir Kanal 3, die Dreieckswelle, wie in der folgenden Abbildung dargestellt.
Nachdem Sie die Triggerquelle eingestellt haben, können Sie den Triggerpegel und die Triggerposition mit den Schiebereglern im Feld "Trigger" am rechten Rand einstellen. Der Pegel kann vom oberen bis zum unteren Rand des Bildschirms eingestellt werden und wird unter den Schiebereglern angezeigt. Die Position ist die Lage des Auslösepunkts innerhalb der gesamten Aufzeichnung. Ist der Schieberegler ganz unten, befindet sich der Auslösepunkt am Ende der Aufzeichnung, und halscope zeigt an, was vor dem Auslösepunkt passiert ist. Wenn der Schieberegler ganz nach oben geschoben ist, befindet sich der Auslösepunkt am Anfang des Datensatzes und es wird angezeigt, was nach dem Auslösen passiert ist. Der Triggerpunkt ist als vertikale Linie in der Fortschrittsanzeige über dem Bildschirm sichtbar. Die Triggerpolarität kann durch Klicken auf die Schaltfläche direkt unter der Triggerpegelanzeige geändert werden. Sie wird dann absteigend. Beachten Sie, dass die Änderung der Triggerposition das Oszilloskop anhält, sobald die Position angepasst wurde, starten Sie das Oszilloskop erneut, indem Sie auf die Schaltfläche Normal des Run-Modus der Gruppe klicken.
Nachdem wir nun die vertikalen Regler und die Triggerung eingestellt haben, sieht die Anzeige des Oszilloskops etwa wie in der folgenden Abbildung aus.
6.5. Horizontale Anpassungen
Um einen Teil einer Wellenform genauer zu betrachten, können Sie den Zoom-Schieberegler am oberen Rand des Bildschirms verwenden, um die Wellenformen horizontal zu erweitern, und den Positionsschieberegler, um zu bestimmen, welcher Teil der gezoomten Wellenform sichtbar ist. Manchmal reicht es jedoch nicht aus, die Wellenformen einfach zu vergrößern, und Sie müssen die Abtastrate erhöhen. Wir möchten uns zum Beispiel die tatsächlichen Schrittimpulse ansehen, die in unserem Beispiel erzeugt werden. Da die Schrittimpulse möglicherweise nur 50 µs lang sind, ist eine Abtastrate von 1 kHz nicht schnell genug. Um die Abtastrate zu ändern, klicken Sie auf die Schaltfläche, welche die Anzahl der Abtastungen und die Abtastrate anzeigt, um das Dialogfeld "Abtastrate auswählen" aufzurufen, Abbildung . In diesem Beispiel klicken wir auf den 50 µs-Thread "schnell", wodurch wir eine Abtastrate von etwa 20 kHz erhalten. Statt 4 Sekunden Daten anzuzeigen, besteht ein Datensatz nun aus 4000 Samples bei 20 kHz, also etwa 0,20 Sekunden.
6.6. Weitere Kanäle
Schauen wir uns nun die Schrittimpulse an. Halscope hat 16 Kanäle, aber für dieses Beispiel verwenden wir nur 4 auf einmal. Bevor wir weitere Kanäle auswählen, müssen wir ein paar ausschalten. Klicken Sie auf die Schaltfläche für Kanal 2 und dann auf die Schaltfläche "Kanal aus" am unteren Rand des Feldes "Vertikal". Klicken Sie dann auf Kanal 3, schalten Sie ihn aus, und tun Sie dasselbe für Kanal 4. Auch wenn die Kanäle ausgeschaltet sind, wissen sie immer noch, womit sie verbunden sind, und wir werden weiterhin Kanal 3 als Triggerquelle verwenden. Um neue Kanäle hinzuzufügen, wählen Sie Kanal 5 und den Pin stepgen.0.dir
, dann Kanal 6 und stepgen.0.step
. Klicken Sie dann auf den Ausführungsmodus Normal, um das Oszilloskop zu starten, und stellen Sie den horizontalen Zoom auf 5 ms pro Teilung ein. Sie sollten sehen, dass sich die Schrittimpulse verlangsamen, wenn sich der Geschwindigkeitsbefehl (Kanal 1) dem Wert Null nähert, dann ändert der Richtungspin seinen Zustand und die Schrittimpulse werden wieder schneller. Erhöhen Sie die Verstärkung von Kanal 1 auf etwa 20 Milli pro Division, um die Änderung des Geschwindigkeitsbefehls besser zu erkennen. Das Ergebnis sollte wie in der folgenden Abbildung aussehen.
6.7. Weitere Samples
Wenn Sie mehr Samples auf einmal aufnehmen wollen, starten Sie realtime neu und laden Sie halscope mit einem numerischen Argument, das die Anzahl der Samples angibt, die Sie aufnehmen wollen.
halcmd loadusr halscope 80000
Wenn die Komponente scope_rt noch nicht geladen war, lädt halscope sie und fordert 80000 Gesamtsamples an, so dass bei der Abtastung von 4 Kanälen gleichzeitig 20000 Samples pro Kanal zur Verfügung stehen. (Wenn scope_rt bereits geladen war, hat das numerische Argument für halscope keine Auswirkungen).