MCodes sehen im GCode folgendermaßen aus und können direkt aus dem ablaufenden Programm heraus zum steuern von Hardware wie Werkzeugwechslern oder Absaug-Anlagen helfen.
M100 P90 Q18000
Eigene MCodes dürfen die Nummern 100 bis 199 tragen und dürfen maximal zwei Parameter übergeben welche mit P und Q gekennzeichnet sind.
Beim erreichen der Zeile im GCode wird folglich eine Datei aufgerufen die aus den Namen und der Nummer des MCodes besteht.
M100
Der Dateiname darf darüber hinaus keine Dateiendung wie .txt enthalten.
Der Speicherort der Datei wird im einfachsten Fall mit dem Parameter USER_M_PATH in der [RS274NGC] Sektion der INI Datei angegeben.
Um einen "unknown mcode" Error zu vermeiden muss letztlich noch das Programm Häckchen im Berechtigungstab der Dateieigenschaften gesetzt werden (siehe Bild).
Ein wichtiges Detail hierbei ist die Tatsache das dieses Häckchen ggf. erneut gesetzt werden müssen, wenn die Datei zum bearbeiten auf einem Windows PC kopiert wurde, da Windows keine Möglichkeiten zum speichern dieser Linux-Option bietet.
MCodes nutzen das so genannte Bash-Scripting als Programmiersprache und können demnach weit mehr als nur HAL Kommandos ausführen.
Das ausführen von HAL Kommandos kann uns in Zusammenhang mit LinuxCNC jedoch die größten Dienste leisten.
Damit Linux beim Aufruf der Datei weiß das es sich beim Inhalt der Datei um ein Bash-Script handelt bekommt die Datei eine passende Kennung in der ersten Zeile
#!/bin/bash
Das Ende des Scriptes wird ebenfalls gekennzeichnet und veranlasst so die Ausführung des nachfolgenden GCodes.
exit 0
Ausgänge
Das schalten von Ausgängen erfolgt aus dem Bash-Script heraus mit dem Befehl halcmd gefolgt von einer beliebigen Zeile wie sie aus der HAL Programmierung bekannt ist.
halcmd setp parport.0.pin-17-out 1
Paramter
Möchten wir beispielsweise eine Drehzahl beim einschalten einer Nutsäge übergeben können dem MCode bis zu zwei Parameter angehängt werden die mit P oder Q Bezeichnet werden.
Um den Parameter aus der GCode Zeile M101 P15000 an einen analogen Ausgang einer Mesakarte weiter zu geben benötigen wir folgend Zeilen:
P=$1
halcmd setp hm2_5i25.0.7i77.0.1.analogout0 $P
IF Anweisungen
Mit If Anweisungen können HAL Kommandos an Bedingungen geknüpft werden.
Dabei besteht eine Anweisung im einfachsten Fall aus den Bereichen if und then sowie einem abschließendem fi.
Dabei gilt: Ist der Ausdruck in der eckigen Klammer wahr, werden die Kommandos die dem then folgen ausgeführt.
Mit einem optionalen else Bereich können darüber hinaus Kommandos festgelegt werden die ausgeführt werden wenn eine Bedingung falsch ist.
ELIF Anweisungen
Sollen mehrere Bedingungen geprüft werden kann die if Anweisung mit diversen elif Bereichen wie im bebenstehenden Bild erweitert werden.