HAL Kategorie Bild

HAL

 

HAL ist der Software-Schaltschrank unter LinuxCNC und ein zentrales Werkzeug um alle Arten von Hardware mit LinuxCNC zu steuern.

 

Grundstruktur

 

LinuxCNC HAL Überblick

LinuxCNC bietet diverse Funktionen an um Hardware zu steuern. HAL übernimmt die Aufgabe interne Funktionen mit externen Anschlüssen des PC zu verbinden. 

 

Als Beispiel bietet LinuxCNC die Funktion der Referenzfahrt an. Die Referenzschalter müssen dazu mit dieser Referenzfahrt-Funktion verbunden werden was in HAL wie folgt aussieht.

net    HomeSwitch    axis.0.home-sw-in    parport.0.pin-11-in-not

 

Die Software Funktionen die von LinuxCNC bereit gestellt werden sind in verschiedene Module unterteilt die wiederum diverse Pin mit Funktionen zur Verfügung stellen. Die wichtigsten dieser Module sind iocontrol, axis, motion, halui und parport.

Für einige Module besteht dazu die Möglichkeit das diese in mehrfacher Ausführung vorhanden sind. Sind z.B. die 3 Achsen X,Y und Z vorhanden, ist das zugehörige Modul ebenso 3 mal vorhanden. Um die Module voneinander unterscheiden zu können werden diese fortlaufend nummeriert und erhalten so die Bezeichnung axis.0, axis.1 und axis.2.

 

Externe Hardware kann Standardgemäß nur über den Parallelport verbunden werden. Wer mehr Anschlüsse benötigt kann den PC mit weiteren Parallelport Steckkarten oder z.B. Mesakarten erweitern. Werden die Karten von Linux und LinuxCNC unterstützt können für die neuen Anschlüsse weitere Module in HAL geladen werden.

 

Neben direkten Verbindungen können darüber hinaus weitere Module in eine Verbindung eingebaut werden um die angeschlossene Hardware zu steuern. Solche Module können z.B. UND / ODER Glieder oder verschiedene Zähler sein.  

 

Um möglichst jede erdenkliche Hardware mit LinuxCNC zu verbinden bieteten, speziell die Module die direkt mit LinuxCNC verknüpft sind, sehr viel Pins mit Funktionen an.

 

Verbindungen

 

LinuxCNC HAL Net

Verbindungen sind das A und O in HAL und werden mit dem Befehl net durchgeführt. Nach dem net Befehl folgt die Bezeichnung der Verbindung (Signal-Kennzeichnung) und letztlich 1 oder 2 Pin-Bezeichnugen.

net    HomeSwitch    axis.0.home-sw-in    parport.0.pin-11-in-not

 

LinuxCNC HAL Überblick

Im nebenstehenden Bild ist ein Ausschnitt aus einer HAL Datei in der in der Sektion 1.03 zwei Spindelpins mit dem Signalen SpindleReady und SpindleOn verbunden.

 

Etwas weiter unten in Sektion 1.05 erfolgt dann in separaten Schritten die Verbindung der Signale mit den Parallelport Pins 13 und 14.

 

Das Ergebnis der beiden Verbindungen wird im Bild oben deutlich.  

 

Verbindungen durch Module erweitern

 

LinuxCNC HAL Kühlung

Um Module in Verbindungen einzufügen benötigen wir als erstes eine Vorstellung welche Module zur Verfügung stehen. Die aktuellste Infos dazu gibt es in den HAL-Components Doku.

 

LinuxCNC HAL Überblick LinuxCNC HAL Überblick

Der erste Schritt besteht darin die benötigten Module zu laden und auszuführen.

 

In folgenden Beispiel benötigen wir ein ODER Glied um eine Lüftung mit dem Start einer GCode Datei oder über einen Button der Benutzeroberfläche zu schalten.

 

ODER Glieder mit 2 Eingängen tragen den Modulnamen or2 und werden mit der Zeile

loadrt or2 count=1

einmal geladen.

Das kleine Modul bekommt folglich eine fortlaufende Nummer und kann mit der Zeile

addf or2.0 servo-thread

wiederholt ausgeführt werden.

 

Der base und servo-thread sind in LinuxCNC zwei Programmschleifen die viele male pro Sekunde wiederholt werden. Der base thread ist dabei für extrem schnelle Prozesse reserviert.

 

Im zweiten Schritt werden die Verbindungen wie beschrieben ausgeführt und führen zum Ergebnis wie es im obigen Bild zu sehen ist.

 

Um heraus zu bekommen welche Anschlüsse ein Modul bietet kann nach dem loadrt Befehl im LinuxCNC > Maschine > Hal anzeigen... Fenster eingesehen werden.

 

Verbindungen aufheben

 

Zum trennen von Verbindungen kann der Befehl unlinkp mit nachfolgender pin oder Signalbezeichnung genutzt werden.

unlinkp parport.0.pin-17-out

Wozu karputt machen was man aufgebaut hat? Der Befehl kann z.B. eingesetzt werden um Anschlüsse mit dem LinuxCNC > Maschine > Hal anzeigen... Fenster zu testen.

Im Hal anzeigen Fenster besteht die Möglichkeit einzelne HAL Befehle einzugeben. Soll hier ein Pin getestet werden müssen Verbindungen ggf. erst getrennt werden.

 

 

Pins und Parameter setzen

 

Komponenten wie Encoder werden nicht nur via HAL verbunden sondern auch konfiguriert. Hierzu stellt die HAL Komponente extra Pins zu Verfügung denen mit dem setp Befehl ein fester Wert zugewiesen werden kann.

Darüber hinaus kann setp auch genutzt werden um jeden anderen Pin setzen. So können z.B. Parallelports auf 1(0V) oder 0(3.3V) gesetzt werden.

setp parport.0.pin-01-out 1 

 

HAL Tipps

 

LinuxCNC HAL anzeigen Fenster

HAL macht es schwer den Überblick zu behalten. 

 

Das gewinnt speziell an Bedeutung wenn Komponenten in Verbindungen eingefügt werden und wenn etwas Zeit vergeht bis eine HAL Datei wieder begutachtet wird.

 

Eine Empfehlung lautet daher die HAL Dateien in kleine Sektionen mit Nummerierung und Überschrft zu teilen.

Eine Datei wird daurch zwar deutlich länger, bleibt aber dennoch für eigene und externe Zwecke gut nachvollziehbar.

 

Darüber hinaus lassen sich HAL Programme in unterschiedliche Dateien aufteilen, was ebenfalls der Übersicht zu Gute kommt.

 

Für die Fehlersuche ist das HAL anzeigen... Fenster unabdingbar. Hier werden alle HAL Bestandteile zusammengefasst dargestellt und können bei bedarf live im WATCH Fenster beobachtet werden.

 

Eigene HAL Module

 

Abschließend soll nicht unerwähnt bleiben das die Möglichkeit besteht HAL eigene HAL Module zu in der Programmier-Sprache C zu entwickeln.

 

LinuxCNC HAL C

Das Entwickeln eigener Module vereinfacht die HAL Nutzung deutlich erfordert aber zumindest grundlegende Kenntnisse der Programmiersprache C.

 

Mit C können auch komplexe und umfassende Prozesse wie sie bei Servo Maschinen üblich sind in übersichtlicher und zugleich kompakter Weise gesteuert werden.

 

Eine Einführung in die C Programmierung führt an dieser Stelle leider zu weit, für alle die aber über die nötigen Kenntnisse verfügen soll der Prozess der Einbindung hier kurz beschrieben werden.

 

Dateien sollten für eine deutliche Klassifizierung die Endung .comp tragen und können folglich mit einem Linux Terminal mit folgender Zeile (ab Live Image mit LinuxCNC 2.4) kompiliert werden.

sudo halcompile --install bp10.comp

 

Ist die Datei fehlerfrei wird eine neue Komponente names bp10.ko erstellt. Danach ist das neue Modul im LinuxCNC System verfügbar und kann auf normalem Wege geladen, ausgeführt und verbunden werden.

loadrt bp10 count=1

 

LinuxCNC > Hardware > Mesakarten