Inhalt - Fräsen mit EMC
EMC 2 und HAL (Hardware-Abstraction-Layer) -Verbindungen

Das größte Spielzeug was EMC für die Anpassung zu bieten hat, nennt sich HAL. Die Software EMC2 besteht eigentlich aus einer ganzen Ansammlung von Einzelprogrammen und Modulen. Jedes dieser Module erfüllt bestimmte Funktionen und stellt die Ergebnisse dieser Funktionen an zahlreichen Ausgängen zur Verfügung. Um die Funktionen ausführen zu können werden Daten benötigt die wiederum über zahlreiche Eingänge am Modul eingelesen werden.
HAL ist deshalb so essentiell weil es die Verbindungen der einzelnen Module herstellt, damit diese ihre Arbeit auch tatsächlich verrichten und Ergebnisse sinnvoll weiterleiten können.
Ein Teil dieser Verbindungen wird automatisch z.B.  beim Abschluss einer Konfiguration mit dem Stepper Configuration Wizard erstellt, oder wenn eine Voreingestellte Konfiguration beim starten von EMC ausgewählt wird.
Diese Verbindungen können danach allerdings nach gutdünken abgewandelt werden.

Verbindungen modifizieren in HAL
Nehmen wir einmal an wir haben den Stepcon Wizard ausgeführt alles läuft super aber ich stelle fest ich habe die Referenzschalter für die X und Y-Achse beim eingeben der Anschlussbelegung vertauscht. Ich könnte den Wizard erneut öffnen um dieses Problem zu korrigieren .... *überlegt* aber da fällt mir gerade ein, das ich schon ein paar Einstellungen geändert habe und der Wizard diese wieder zurücksetzen würde. Hmmmm das hört sich nach viel Arbeit an.
Ahhh *eine Idee hat* da gibt es ja noch das gute HAL.
Um dem Problem Herr zu werden möchte ich gerne die Verbindung in HAL einfach tauschen. Das erste was ich dafür wissen muss ist, welche Verbindungen es denn bis jetzt schon bei den Referenzschaltern gibt. Dazu starten wir EMC2, so dass wir die Benutzeroberfläche AXIS zu sehen bekommen. Im Menü wählen wir wie im Bild links HAL anzeigen und bekommen Prompt ein Fenster wie in dem eine Liste wie im Bild rechts zu sehen ist.
Mit einem Klick auf das kleine + vor Pins bekommen wir alle Module aufgelistet die EMC2 benutzt.
Jedes dieser Module hat wie schon erwähnt diverse Ein- und Augänge die sichtbar werden wenn eines der Module angewählt wird. In der Liste der Pins taucht unter anderem das Modul Parport auf, damit ist der Parallelport gemeint. Da die Referenzschalter hier angeschlossen sein sollten, gucken wir uns diesen einmal an. Mit einem klick auf das + vor parport wird uns eine weitere Auswahl angeboten, wenn nur ein Parrallelport vorhanden ist, wählen wir die 0 und bekommen eine Ansicht auf der rechten Seite des Fensters wie im Bild unten.
In der Tabelle können wir auf der rechten Seite die einzelnen Pins des Parrellelports sehen, sie enthalten den Namen des Moduls (parport) die Nummer des Moduls für den Fall das es mehrere gibt (0) und danach die pinnummer und der Zusatz ob es sich dabei um einen Eingang (in) oder Ausgang (out) handelt. Einige der Pins sind hier doppelt vorhanden wie z.B. der Pin-10, der zweite ist als invertierter Eingang (not) gekennzeichnet.
Außerdem haben die ersten Pins einen Pfeil und eine weitere Kennzeichnung wie 
z.B. "<== spindle-on".
 
Diese Kennzeichnung benennt die Verbindung selbst oder man könnte sagen das "Kabel" das am 1. Ausgang des parports angeschlossen ist. Wir suchen hier nach dem Anschluss der Referenzschalter X und Y und werden auch fündig, denn an den invertierten Eingängen 12 und 13 ist ein "Kabel" mit der Bezeichnung home-x und home-y angeschlossen. Das sind die Kandidaten die wir gesucht haben und die wir ändern möchten.

Unterhalb der Liste befindet sich ein Eingabefenster zum Ausprobieren, welches mit folgenden Befehlen gefüttert werden soll:

unlinkp parport.0.pin-12-in-not
unlinkp parport.0.pin-13-in-not

mit dem Befehl unlinkp wird ein Pin von einer Verbindung getrennt. Mit einem erneuten Aufruf der Liste wird das auch sichtbar, die Verbindungsbezeichnung hinter den Eingängen des parports werden nicht mehr aufgeführt. Die "Kabel" selbst die in HAL als Signal bezeichnet werden existieren aber nach wie vor noch, lediglich die Verbindung der Signale zu den Eingängen wurde aufgehoben.   Mit den folgenden Befehlen werden nun die "Signale" umgetauscht wieder mit den Eingängen verbunden.

net home-x parport.0.pin-13-in-not
net home-y parport.0.pin-12-in-not

Net ist der Befehl zum Verbinden von Ein- und Ausgängen. Nach dem Befehl wird der Name des Signals und danach die Anschlussbezeichnung des Moduls erwartet.
Zum verbinden des Pins "motion.digital-out-00" mit dem freien Ausgang 9 des Parrallelports müsste der net Befehl wie folgt lauten:

net Digital-Ausgang-00 motion.digital-out-00 parport.0.pin-09-out

Fortan könnte man so z.B. mit dem Befehl M64 P00 in einem G-Code Pogramm den Ausgang 9 einschalten und mit M65 P00 wieder ausschalten. Die Bezeichnung "Digital-Ausgang-00" ist auch hier wieder der Signal-Name und frei erfunden. Existiert dieses Signal bis zu diesem Befehl noch nicht, wird es erstellt. Sollte der Signal-Name allerdings vergeben sein, werden die dahinter aufgeführten Anschlüsse mit dem bestehenden Signal zusätzlich verbunden, was natürlich zu Fehler führen würde. 
Ob ein Signal-Name bereits besteht kann in der schon bekannten Liste passender Weise im Bereich Signals eingesehen werden. Und damit nicht genug, die Pins die mit den Signalen Verbunden sind können dort ebenfalls angesehen werden.

Speichern von HAL-Befehlen
Jetzt haben wir unser Problem mit den vertauschten Referenzschaltern also schon gelöst und haben dazu sogar noch einen Digitalen Ausgang eingerichtet. Das Dilemma ist nun aber das wir mit einem Neustart von EMC2 diese Änderungen jedes mal wieder eingeben müssten, was uns aber viel zu umständlich ist. Und deshalb speichern wir das Ganze.
Die Datei die nur darauf wartet benutzt zu werden gibt es sogar schon, sie befindet sich im selben Ordner wie die ini-Datei und trägt den hübschen Namen custom_postgui.hal.
Die Befehle werden hier einfach  genauso wie oben eingegeben und untereinander aufgelistet.
EMC2 läd diese Datei dann bei jedem start und richtet so die Änderungen ein.
Die Verbindungen die im HAL erzeugt werden, müssen in unterschiedliche Typen eingeteilt werden. Für die Übermittlung von an (1) und aus (0) wie im Falle der Referenzschalter nennt sich dieser Typ bit.  Es können aber ebensogut auch Zahlen übertragen werden, allerdings nur wenn der Anschluss auch eine Zahl bereitstellt. Zahlen ihrerseits werden in nohmal in mehrer Typen unterteilt, die gebräuchlichsten sind: float, u32 un s32. Was jede dieser Bezeichnungen bedeutet, soll hier nicht erklärt werden weil es für den Umgang mit HAL kaum eine Rolle spielt. Was jedoch zu beachten ist, ist die tatsache das der Verbindungstyp mit dem Typen der Pins die verbunden werden zusammenpassen muss. Hat der Pin des Parports den Typ bit, dann muss auch der Pin auf der anderen Seite des Signals den Typ bit haben. Das Signal selbst hat automatisch den Typ des ersten Pins der mit ihm verbunden wird.
Um herauszufinden welchem Typ ein Pin entspricht, kann wieder die Liste mit der Tabelle zu Rate gezogen werden. Oder aber die Integrators Manual
in der ab Seite 43 alle Pins der wichtigen Module mit Erklärung und Typ aufgeführt sind.
>EMC2 Was brauche ich?<
>EMC2 testen<
>EMC2 installieren<
>EMC2 Stepcon Wizard<
>EMC2 Optionen<
>EMC2 HAL-Verbindungen<
>EMC2 HAL-Bausteine<
>EMC2 Python<
>EMC2 o-Words<