1. M-Code Kurzübersichts-Ttabelle

Code Beschreibung

M0 M1

Programm-Pause

M2 M30

Programmende

M60

Palettenwechsel Pause

M3 M4 M5

Spindelsteuerung

M6

Werkzeugwechsel

M7 M8 M9

Kühlmittelkontrolle

M19

Spindel ausrichten

M48 M49

Vorschub- und Spindel-Neufestsetzungen (engl. overrides) aktivieren/deaktivieren

M50

Kontrolle der Vorschub-Neufestsetzung (engl. override)

M51

Kontrolle der Spindel-Neufestsetzung (engl. Override)

M52

Adaptive Vorschubsteuerung

M53

Steuerung des Vorschub-Stopps

M61

Aktuelle Werkzeugnummer einstellen

m62-m65

Ausgangs-Steuerung (engl. output control)

M66

Eingabe-Steuerung (engl. input control)

M67

Steuerung des Analogausgangs

M68

Steuerung des Analogausgangs

:mcode:m70,M70>

Modalstatus speichern

M71

Gespeicherten Modalzustand ungültig machen

M72

Modalen Zustand wiederherstellen

M73

Modalzustand der automatischen Wiederherstellung (engl. autorestore) speichern

M98 M99

Aufruf und Rückkehr aus Unterprogramm

M100-M199

Anwender-definierte M-Codes

2. M0, M1 Program Pause

  • M0' - pausiert ein laufendes Programm vorübergehend. LinuxCNC bleibt im Auto-Modus, somit sind MDI und andere manuelle Aktionen sind nicht aktiviert. Durch Drücken der Taste Fortführen (engl. Resume) wird das Programm in der folgenden Zeile weiterlaufen.

  • M1' - pausiert ein laufendes Programm vorübergehend, wenn der optionale Stop-Schalter eingeschaltet ist. LinuxCNC bleibt im Auto-Modus so MDI und andere manuelle Aktionen sind nicht aktiviert. Durch Drücken der Resume-Taste wird das Programm in der folgenden Zeile neu gestartet.

Anmerkung
Es ist in Ordnung, M0 und M1 im MDI-Modus zu programmieren, aber der Effekt wird wahrscheinlich nicht spürbar sein, weil das normale Verhalten im MDI-Modus ohnehin darin besteht, nach jeder Eingabezeile anzuhalten.

3. M2, M30 Program End

  • M2 - Programm beenden. Durch Drücken von Zyklusstart (engl. Cycle Start, R im Axis-GUI) wird das Programm am Anfang der Datei neu gestartet.

  • M30 - tauschen Sie Paletten-Shuttles aus und beenden Sie das Programm. Wenn Sie auf Cycle Start klicken, wird das Programm am Anfang der Datei gestartet.

Diese beiden Befehle haben die folgenden Auswirkungen:

  • Wechsel vom Auto-Modus in den MDI-Modus.

  • Ursprungs-Offsets sind auf den Standard eingestellt (wie G54).

  • Die ausgewählte Ebene ist auf die XY-Ebene eingestellt (wie G17).

  • Der Abstandsmodus ist auf den absoluten Modus eingestellt (wie G90).

  • Der Vorschubmodus ist auf Einheiten pro Minute eingestellt (wie G94).

  • Vorschub- und Geschwindigkeits-Neufestsetzungen (engl. overrides) sind auf ON gesetzt (wie M48).

  • Fräserkompensation ist ausgeschaltet (wie G40).

  • Die Spindel wird angehalten (wie bei M5).

  • Der aktuelle Bewegungsmodus ist auf Vorschub eingestellt (wie G1).

  • Das Kühlmittel ist ausgeschaltet (wie M9).

Anmerkung
Codezeilen nach M2/M30 werden nicht ausgeführt. Durch Drücken von Zyklusstart wird das Programm am Anfang der Datei gestartet.
Warnung
Die Verwendung von % zum Einschließen des G-Codes bewirkt nicht dasselbe wie ein "Programmende". Siehe den Abschnitt zu Datei-Anforderungen (engl. file requirements) für weitere Informationen darüber, was die Verwendung von % nicht bewirkt.

4. M60 Pallet Change Pause

  • M60 - Palettenshuttle tauschen und dann ein laufendes Programm vorübergehend pausieren (unabhängig von der Einstellung des optionalen Stoppschalters). Durch Drücken der Zyklusstarttaste wird das Programm in der folgenden Zeile neu gestartet.

5. M3, M4, M5 Spindle Control

  • M3 [$n] - startet die ausgewählte Spindel im Uhrzeigersinn mit der Geschwindigkeit S.

  • M4 [$n] - startet die ausgewählte Spindel gegen den Uhrzeigersinn mit der Geschwindigkeit S.

  • M5 [$n] - stoppt die ausgewählte Spindel.

Verwenden Sie $, um auf bestimmte Spindeln zu wirken. Wenn $ weggelassen wird, arbeiten die Befehle standardmäßig an der Spindel 0. Verwenden Sie $-1, um an allen aktiven Spindeln zu arbeiten.

In diesem Beispiel werden die Spindeln 0, 1 und 2 gleichzeitig mit unterschiedlichen Drehzahlen gestartet:

S100 $0
S200 $1
S300 $2
M3 $-1

In diesem Beispiel wird die Spindel 1 umgekehrt, während die anderen Spindeln vorwärts laufen:

M4 $1

Dadurch wird Spindel 2 angehalten und die anderen Spindeln drehen sich weiter:

M5 $2

Wenn das $ weggelassen wird, ist das Verhalten genau wie bei einer Einspindelmaschine.

Es ist OK, M3 oder M4 zu verwenden, wenn die S Spindeldrehzahl auf Null gesetzt ist. In diesem Fall (oder wenn der Drehzahl-Neufestsetzungs (engl. override)-Schalter aktiviert und auf Null gesetzt ist), beginnt die Spindel nicht zu drehen. Wenn die Spindeldrehzahl später auf einen Wert über Null gesetzt wird (oder der Override-Schalter aktiviert wird), beginnt sich die Spindel zu drehen. Es ist in Ordnung, M3 oder M4 zu verwenden, wenn sich die Spindel bereits dreht, oder M5 zu verwenden, wenn die Spindel bereits angehalten ist.

6. M6 Tool Change

6.1. Manueller Werkzeugwechsel

Wenn die HAL-Komponente hal_manualtoolchange geladen ist, hält M6 die Spindel an und fordert den Benutzer auf, das Werkzeug auf der Grundlage der zuletzt programmierten 'T-'Nummer zu wechseln. Für weitere Informationen zu hal_manualtoolchange siehe den Abschnitt Manuelle Werkzeugwechsel.

6.2. Werkzeugwechsler

Um ein Werkzeug in der Spindel von dem Werkzeug, das sich gerade in der Spindel befindet, auf das zuletzt ausgewählte Werkzeug zu wechseln (mit einem T-Wort - siehe Abschnitt Werkzeug-Auswahl) (engl. Select Tool), programmieren Sie M6. Wenn der Werkzeugwechsel abgeschlossen ist:

  • Die Spindel wird angehalten.

  • Das Werkzeug, das (durch ein T-Wort in derselben Zeile oder in einer beliebigen Zeile nach dem letzten Werkzeugwechsel) ausgewählt wurde, befindet sich in der Spindel.

  • Wenn sich das ausgewählte Werkzeug vor dem Werkzeugwechsel nicht in der Spindel befand, wird das Werkzeug, das sich in der Spindel befand (falls vorhanden), wieder in das Magazin des Werkzeugwechslers eingesetzt.

  • Wenn in der INI-Datei konfiguriert, können sich einige Achsenpositionen bewegen, wenn ein M6 ausgegeben wird. Siehe EMCIO Abschnitt für weitere Informationen über Werkzeugwechseloptionen.

  • Es werden keine weiteren Änderungen vorgenommen. Beispielsweise fließt während des Werkzeugwechsels weiterhin Kühlmittel, es sei denn, es wurde durch ein M9 abgeschaltet.

Anmerkung
Das T--Wort ist eine ganze Zahl, welche die Werkzeugfachnummer (engl. tool pocket number) im Karussell bezeichnet (nicht seinen Index).
Warnung
Der Werkzeuglängen-Offset wird durch M6 nicht verändert, verwenden Sie G43 nach dem M6, um den Werkzeuglängen-Offset zu ändern.

Der Werkzeugwechsel kann eine Achsbewegung beinhalten. Es ist in Ordnung (aber nicht sinnvoll), einen Wechsel des Werkzeugs zu programmieren, das sich bereits in der Spindel befindet. Es ist in Ordnung, wenn sich kein Werkzeug auf dem gewählten Steckplatz befindet; in diesem Fall ist die Spindel nach dem Werkzeugwechsel leer. Wenn zuletzt der Steckplatz Null gewählt wurde, befindet sich nach einem Werkzeugwechsel definitiv kein Werkzeug in der Spindel. Der Werkzeugwechsler muss so eingestellt werden, dass er den Werkzeugwechsel in HAL und bevorzugt in ClassicLadder durchführt.

7. M7, M8, M9 Coolant Control

  • M7 - Kühlmittelnebel (engl. mist coolant) einschalten. M7 steuert den iocontrol.0.coolant-mist Pin.

  • M8 - Kühlmittelflutung (engl. flood cloolant) einschalten. M8 steuert iocontrol.0.coolant-flood Pin.

  • M9 - sowohl M7 als auch M8 ausschalten.

Verbindet einen oder beide Kühlmittelkontrollstifte in HAL, bevor M7 oder M8 einen Ausgang steuern. M7 und M8 können verwendet werden, um einen beliebigen Ausgang über G-Code einzuschalten.

Sie können jeden dieser Befehle verwenden, unabhängig vom aktuellen Kühlmittelzustand.

8. M19 Orient Spindle

M19 R- Q- [P-] [$-]
  • R Position zum Drehen von 0, gültiger Bereich ist 0-360 Grad

  • Q Anzahl der Sekunden, die gewartet werden müssen, bis die Ausrichtung abgeschlossen ist. Wenn spindle.N.is-oriented innerhalb des Q-Timeouts nicht wahr wird, tritt ein Fehler auf.

  • P Drehrichtung zur Position.

    • 0 drehen für kleinste Winkelbewegung (Standard)

    • 1 immer im Uhrzeigersinn drehen (wie M3-Richtung)

    • 2 immer gegen den Uhrzeigersinn drehen (wie M4-Richtung)

  • $' Die auszurichtende Spindel (bestimmt eigentlich nur, welche HAL-Stifte die Spindelpositionsbefehle tragen)

M19 ist ein Befehl der Modalgruppe 7, wie M3, M4 und M5. M19 wird durch einen der Befehle M3, M4, M5 gelöscht.

Für die Spindelausrichtung ist ein Quadratur-Encoder mit einem Index erforderlich, der die Position und die Drehrichtung der Spindelwelle erfasst.

INI-Einstellungen im Abschnitt [RS274NGC]:

  • ORIENT_OFFSET = 0-360 (fester Offset in Grad, der zum M19 R-Wort hinzugefügt wird)

  • HAL-Pins

    • spindle.N.orient-angle (out float) Gewünschte Spindelausrichtung für M19. Wert des M19 R-Wort-Parameters plus dem Wert des [RS274NGC]ORIENT_OFFSET INI-Parameters.

    • spindle.N.orient-mode (out s32) Gewünschter Spindeldrehungsmodus. Entspricht dem M19 P-Parameterwort, Voreinstellung = 0.

    • spindle.N.orient (out bit) Zeigt den Beginn des Spindelorientierungszyklus an. Wird von M19 gesetzt. Gelöscht durch einen der Befehle M3,M4,M5. Wenn spindle-orient-fault während spindle-orient true nicht Null ist, schlägt der Befehl M19 mit einer Fehlermeldung fehl.

    • spindle.N.is-oriented (in bit) Pin bestätigt die Spindelorientierung. Schließt den Orientierungszyklus ab. Wenn spindel-orient wahr war, als spindel-oriented überprüft wurde, wird der spindel-orient-Pin gelöscht und der spindle-locked Pin wird gesichert. Auch der spindle-brake Pin ist dann gesichert.

    • spindle.N.orient-fault (in s32) Eingang des Fehlercodes für den Orientierungszyklus. Jeder Wert ungleich Null führt zum Abbruch des Orientierungszyklus.

    • spindle.N.locked (out bit) Spindel Orientierung komplett-Pin. Wird durch einen der Parameter M3,M4,M5 gelöscht.

9. M48, M49 Speed and Feed Override Control

  • M48 - aktiviert die Neufestsetzungs-Steuerungen für Spindeldrehzahl und Vorschubgeschwindigkeit.

  • M49 - beide Steuerelemente deaktivieren.

Diese Befehle benötigen auch einen optionalen $-Parameter, um festzulegen, auf welcher Spindel sie arbeiten.

Es ist OK, die Kontrollen zu aktivieren oder zu deaktivieren, wenn sie bereits aktiviert oder deaktiviert sind. Siehe den Vorschubgeschwindigkeit Abschnitt für weitere Details.

Sie können auch einzeln mit M50 und M51 umgeschaltet werden, siehe unten.

10. M50 Feed Override Control

  • M50 <P1> - aktiviert die Vorschub-Override-Steuerung. Der P1 ist optional.

  • M50 P0 - Vorschubsteuerung deaktivieren.

Im deaktivierten Zustand hat der Vorschub-Neufestsetzung (engl. override) keinen Einfluss, und die Bewegung wird mit der programmierten Vorschubgeschwindigkeit ausgeführt. (es sei denn, es ist ein adaptiver Vorschub-Override aktiv).

11. M51 Spindle Speed Override Control

  • M51 <P1> <$->'- aktiviert die Spindeldrehzahlneufestsetzung für die ausgewählte Spindel. Die Angabe P1 ist optional.

  • M51 P0 <$->' - Deaktivieren Sie das Programm zur Neufestsetzung der Spindeldrehzahl.

Wenn diese Funktion deaktiviert ist, hat die Spindeldrehzahlneufestsetzung keinen Einfluss und die Spindeldrehzahl hat den exakten programmierten Wert des S-Wortes (beschrieben im Abschnitt zur Spindle Speed).

12. M52 Adaptive Feed Control

  • M52 <P1> - Verwendung eines adaptiven Vorschubs. Die Angabe P1 ist optional.

  • M52 P0 - Verwendung des adaptiven Feeds beenden.

Wenn der adaptive Vorschub aktiviert ist, wird ein externer Eingangswert zusammen mit dem Vorschub-Override-Wert der Benutzeroberfläche und der befohlenen Vorschubgeschwindigkeit verwendet, um die tatsächliche Vorschubgeschwindigkeit einzustellen. In LinuxCNC wird der HAL-Pin motion.adaptive-feed für diesen Zweck verwendet. Werte auf motion.adaptive-feed sollte im Bereich von -1 (programmierte Geschwindigkeit in umgekehrter Richtung) bis 1 (volle Geschwindigkeit). 0 ist gleichbedeutend mit feed-hold.

Anmerkung
Die Verwendung des negativen adaptiven Vorschubs für den Rückwärtslauf ist eine neue Funktion, die noch nicht sehr gut getestet wurde. Sie ist für Plasmaschneider und Drahterodiermaschinen vorgesehen, aber nicht auf diese Anwendungen beschränkt.

13. M53 Feed Stop Control

  • M53 <P1> - Aktivierung des Vorschubstoppschalters. Der P1 ist optional. Durch die Aktivierung des Vorschubstoppschalters kann die Bewegung mit Hilfe der Vorschubstoppsteuerung unterbrochen werden. In LinuxCNC wird der HAL-Pin motion.feed-hold für diesen Zweck verwendet. Ein true-Wert wird die Bewegung zu stoppen, wenn M53 aktiv ist.

  • M53 P0 - deaktiviert den Feed-Stop-Schalter. Der Zustand von motion.feed-hold hat keine Auswirkungen auf den Feed, wenn M53 nicht aktiv ist.

14. M61 Set Current Tool

  • M61 Q- - ändert die aktuelle Werkzeugnummer, während in MDI-oder Handbetrieb ohne einen Werkzeugwechsel. Wenn Sie LinuxCNC einschalten mit einem Werkzeug bereits in der Spindel, können Sie die Werkzeug-Nummer setzen ohne einen Werkzeugwechsel zu initiieren.

Warnung
Der Werkzeuglängen-Offset wird durch M61 nicht verändert, verwenden Sie G43 nach M61, um den Werkzeuglängen-Offset zu ändern.

Es ist ein Fehler, wenn:

  • Q- ist nicht 0 oder größer

15. M62 - M65 Digital Output Control

  • M62 P- - schaltet den digitalen Ausgang synchron zur Bewegung ein.

  • M63 P- - Ausschalten des mit der Bewegung synchronisierten digitalen Ausgangs.

  • M64 P- - Digitalausgang sofort einschalten.

  • M65 P- - digitale Ausgabe sofort abschalten.

Das P-Wort gibt die Anzahl der digitalen Ausgänge an. Das P-Wort reicht von 0 bis zu einem Standardwert von 3. Bei Bedarf kann die Anzahl der E/A durch Verwendung des Parameters num_dio beim Laden des Motion Controllers erhöht werden. Siehe Abschnitt zu Bewegungen für weitere Informationen.

Die Befehle M62 und M63 werden in eine Warteschlange gestellt. Nachfolgende Befehle, die sich auf dieselbe Ausgangsnummer beziehen, überschreiben die älteren Einstellungen. Mehr als eine Ausgangsänderung kann durch mehrere M62/M63-Befehle festgelegt werden.

Die tatsächliche Änderung der angegebenen Ausgänge erfolgt zu Beginn des nächsten Fahrbefehls. Wenn es keinen nachfolgenden Fahrbefehl gibt, werden die in der Warteschlange stehenden Ausgangsänderungen nicht ausgeführt. Es ist am besten, immer einen Bewegungs-G-Code (G0, G1, etc.) direkt nach dem M62/63 zu programmieren.

M64 und M65 treten sofort auf, wenn sie von der Bewegungssteuerung empfangen werden. Sie sind nicht mit der Bewegung synchronisiert und unterbrechen den Übergang.

Anmerkung
M62-65 funktionieren nur dann, wenn die entsprechenden motion.digital-out-nn-Pins in Ihrer HAL-Datei mit Ausgängen verbunden sind.

16. M66 Wait on Input

M66 P- | E- <L->
  • P- - gibt die digitale Eingangsnummer von 0 bis 3 an. (Einstellbar mit motmod Argument num_dio)

  • E- - gibt die Nummer des Analogeingangs von 0 bis 3 an (einstellbar über das motmod-Argument num_aio)

  • L- - legt den Wartemodus fest.

    • Mode 0: IMMEDIATE' - kein Warten, kehrt sofort zurück. Der aktuelle Wert des Eingangs wird in Parameter #5399 gespeichert

    • Mode 1: RISE - wartet darauf, dass die ausgewählte Eingabe ein RISE-Ereignis ausführt.

    • Mode 2: FALL - wartet darauf, dass die ausgewählte Eingabe ein Fallereignis ausführt.

    • Mode 3: HIGH - wartet darauf, dass die ausgewählte Eingabe in den HIGH-Zustand wechselt.

    • Mode 4: LOW - wartet, bis die ausgewählte Eingabe in den LOW-Zustand wechselt.

  • x’Q-' - gibt das Timeout in Sekunden für das Warten an. Wird das Timeout überschritten, so wird die Wartezeit unterbrochen, und die Variable #5399 enthält den Wert -1. Der Q-Wert wird ignoriert, wenn das L-Wort Null ist (SOFORT). Ein Q-Wert von Null ist ein Fehler, wenn das L-Wort ungleich Null ist.

  • Für einen Analogeingang ist nur der Modus 0 zulässig.

M66 Beispielzeilen
M66 P0 L3 Q5 (bis zu 5 Sekunden warten, bis der digitale Eingang 0 eingeschaltet wird)

M66 wartet auf eine Eingabe und stoppt die weitere Ausführung des Programms, bis das gewählte Ereignis (oder der programmierte Timeout) eintritt.

Es ist ein Fehler, M66 sowohl mit einem P-Wort als auch mit einem E-Wort zu programmieren (also sowohl einen analogen als auch einen digitalen Eingang zu wählen). In LinuxCNC sind diese Eingänge nicht in Echtzeit überwacht und sollte daher nicht für zeitkritische Anwendungen verwendet werden.

Die Anzahl der E/A kann durch Verwendung des Parameters num_dio oder num_aio beim Laden des Motion Controllers erhöht werden. Siehe den Abschnitt zu Bewegungen (engl. motion) für weitere Informationen.

Anmerkung
M66 funktioniert nur dann, wenn die entsprechenden motion.digital-in-nn-Pins oder motion.analog-in-nn-Pins in Ihrer HAL-Datei mit einem Eingang verbunden sind.
Beispiel einer HAL-Verbindung
net signal-name motion.digital-in-00 <= parport.0.pin10-in

17. M67 Analog Output, Synchronized

M67 E- Q-
  • M67 - stellt einen mit der Bewegung synchronisierten analogen Ausgang ein.

  • E- - Ausgangsnummer im Bereich von 0 bis 3 (einstellbar über das motmod-Argument num_aio)

  • Q- - ist der einzustellende Wert (zum Ausschalten auf 0 setzen).

Die tatsächliche Änderung der angegebenen Ausgänge erfolgt zu Beginn des nächsten Fahrbefehls. Wenn es keinen nachfolgenden Bewegungsbefehl gibt, werden die in der Warteschlange stehenden Ausgangsänderungen nicht durchgeführt. Am besten programmieren Sie immer einen Bewegungs-G-Code (G0, G1, etc.) direkt nach M67. M67 funktioniert genauso wie M62-63.

Die Anzahl der E/A kann durch Verwendung des Parameters num_dio oder num_aio beim Laden des Motion Controllers erhöht werden. Siehe den Abschnitt zu Bewegungen (engl. motion) für weitere Informationen.

Anmerkung
M67 funktioniert nur, wenn die entsprechenden motion.analog-out-nn Pins in Ihrer HAL-Datei mit Ausgängen verbunden sind.

18. M68 Analog Output, Immediate

M68 E-Q-
  • M68 - sofort einen analogen Ausgang einstellen.

  • E- - Ausgangsnummer im Bereich von 0 bis 3 (einstellbar über das motmod-Argument num_aio)

  • Q- - ist der einzustellende Wert (zum Ausschalten auf 0 setzen).

M68-Ausgaben erfolgen sofort, wenn sie vom Motion Controller empfangen werden. Sie sind nicht mit der Bewegung synchronisiert und unterbrechen das Blending. M68 funktioniert genauso wie M64-65.

Die Anzahl der E/A kann durch Verwendung des Parameters num_dio oder num_aio beim Laden des Motion Controllers erhöht werden. Siehe den Abschnitt zu Bewegungen (engl. motion) für weitere Informationen.

Anmerkung
M68 funktioniert nur dann, wenn die entsprechenden motion.analog-out-nn Pins in Ihrer HAL-Datei mit Ausgängen verbunden sind.

19. M70 Save Modal State

Um den modalen Zustand explizit auf der aktuellen Aufrufebene zu speichern, programmieren Sie M70. Sobald der modale Zustand mit M70 gespeichert wurde, kann er durch die Ausführung von M72 wieder in genau diesen Zustand versetzt werden.

Ein Paar von M70- und M72-Befehlen wird normalerweise verwendet, um ein Programm gegen unbeabsichtigte Modaländerungen innerhalb von Unterprogrammen zu schützen.

M70 Gespeicherter Zustand

Der gespeicherte Zustand besteht aus:

  • aktuelle G20/G21-Einstellungen (imperial/metrisch)

  • selected plane (G17/G18/G19 G17.1,G18.1,G19.1)

  • Status der Fräserkompensation (G40,G41,G42,G41.1,G42,1)

  • Distanzmodus relativ/absolut (G90/G91)

  • Vorschubmodus (G93/G94,G95)

  • aktuelles Koordinatensystem (G54-G59.3)

  • Status der Werkzeuglängenkompensation (G43,G43.1,G49)

  • Rückzieh-Modus (G98,G99)

  • Spindel-Modus (G96-css oder G97-RPM)

  • Bogendistanz-Modus (G90.1, G91.1)

  • Radius-/Durchmessermodus der Drehmaschine (G7,G8)

  • Pfadsteuerungsmodus (G61, G61.1, G64)

  • aktueller Vorschub und Geschwindigkeit (F- und S-Werte)

  • Spindelstatus (M3,M4,M5) - Ein/Aus und Richtung

  • Nebel- (M7) und Flut-Kühlung (M8) Status

  • Geschwindigkeitsneufestsetzung (M51) und Vorschubneufestsetzung (M50)

  • adaptive Vorschubeinstellung (M52)

  • Steuerung des Vorschub-Stopps (M53)

Beachten Sie, dass insbesondere der Bewegungsmodus (G1 usw.) NICHT wiederhergestellt wird.

aktuelle Aufruf-Ebene (engl. current call level) bedeutet entweder:

  • im Hauptprogramm ausgeführt zu werden. Es gibt einen einzigen Speicherplatz für den Zustand auf der Ebene des Hauptprogramms; wenn mehrere M70-Befehle nacheinander ausgeführt werden, wird bei der Ausführung eines M72 nur der zuletzt gespeicherte Zustand wiederhergestellt.

  • innerhalb eines G-Code-Unterprogramms ausgeführt zu werden. Der innerhalb eines Unterprogramms mit M70 gespeicherte Zustand verhält sich genau wie ein lokaler benannter Parameter - er kann nur innerhalb dieses Unterprogrammaufrufs mit einem M72 angesprochen werden, und wenn das Unterprogramm beendet wird, verschwindet der Parameter.

Ein rekursiver Aufruf eines Unterprogramms führt eine neue Aufrufebene ein.

20. M71 Invalidate Stored Modal State

Der mit einem M70 oder einem M73 auf der aktuellen Anrufebene gespeicherte Modalzustand wird ungültig (kann nicht mehr wiederhergestellt werden).

Ein nachfolgendes M72 auf der gleichen Aufrufebene schlägt fehl.

Wenn es in einem Unterprogramm ausgeführt wird, das den modalen Zustand durch ein M73 schützt, wird der modale Zustand durch eine anschließende Rückkehr oder endsub nicht wiederhergestellt.

Die Nützlichkeit dieser Funktion ist zweifelhaft. Man sollte sich nicht auf sie verlassen, da sie verschwinden könnte.

21. M72 Restore Modal State

Modaler Zustand Code gespeichert wurde, kann durch Ausführen eines M72 wiederhergestellt werden.

Die Handhabung von G20/G21 wird besonders behandelt, da Vorschübe je nach G20/G21 unterschiedlich interpretiert werden: Wenn die Längeneinheiten (mm/in) durch die Wiederherstellungsoperation geändert werden sollen, stellt M72 zuerst den Abstandsmodus wieder her und dann alle anderen Zustände einschließlich des Vorschubs, um sicherzustellen, dass der Vorschubwert in der richtigen Einheiteneinstellung interpretiert wird.

Es ist ein Fehler, einen M72 ohne vorherige M70-Speicheroperation auf dieser Ebene auszuführen.

Das folgende Beispiel demonstriert das Speichern und explizite Wiederherstellen des modalen Zustands bei einem Unterprogrammaufruf mit M70 und M72. Beachten Sie, dass das Unterprogramm "imperialsub" die M7x-Funktionen nicht "kennt" und unverändert verwendet werden kann:

O<showstate> sub
(DEBUG, imperial=#<_imperial> absolute=#<_absolute> feed=#<_feed> rpm=#<_rpm>)
O<showstate> endsub

O<imperialsub> sub
g20 (imperial)
g91 (relativer Modus)
F5 (niedriger Vorschub)
S300 (niedrige Drehzahl)
(Debug, im Unterprogramm, Zustand jetzt:)
o<showstate> Aufruf
O<imperialsub> endsub

; Hauptprogramm
G21 (metrisch)
G90 (absolut)
F200 (Schnelle Geschwindigkeit)
S2500 (hohe U/min)

(debug, in main, Zustand jetzt:)
o<showstate> call

M70 (Speichern des Anruferstatus auf globaler Ebene)
O<imperialsub> Aufruf
M72 (Zustand explizit wiederherstellen)

(Debug, zurück in Main, Zustand jetzt:)
o<showstate> Aufruf
m2

22. M73 Save and Autorestore Modal State

Um den modalen Zustand innerhalb eines Unterprogramms zu speichern und ihn bei endsub oder einem beliebigen Return-Pfad wiederherzustellen, programmieren Sie M73.

Der Abbruch eines laufenden Programms in einem Unterprogramm, das eine M73-Operation hat, stellt nicht den Zustand wieder her.

Auch das normale Ende (M2) eines Hauptprogramms, das ein M73 enthält, stellt den Zustand nicht wieder her.

Die empfohlene Verwendung ist am Anfang eines O-Wort-Unterprogramms wie im folgenden Beispiel. Die Verwendung von M73 auf diese Weise ermöglicht den Entwurf von Unterprogrammen, die den Modalzustand ändern müssen, schützt aber das aufrufende Programm vor versehentlichen Modaländerungen. Beachten Sie die Verwendung von Vordefinierte benannte Parameter im Unterprogramm "showstate".

O<showstate> sub
(DEBUG, imperial=#<_imperial> absolute=#<_absolute> feed=#<_feed> rpm=#<_rpm>)
O<showstate> endsub

O<imperialsub> sub
M73 (Zustand des Aufrufers im aktuellen Aufrufkontext speichern, bei Rückkehr oder Endsub wiederherstellen)
g20 (imperial)
g91 (relativer Modus)
F5 (niedriger Vorschub)
S300 (niedrige Drehzahl)
(debug, im Unterprogramm, Zustand jetzt:)
o<showstate> call

; Hinweis: Hier wird kein M72 benötigt - das folgende endsub oder ein
; explizites 'return' wird den Zustand des Aufrufers wiederherstellen
O<imperialsub> endsub

; Hauptprogramm
g21 (metrisch)
g90 (absolut)
f200 (schnelle Drehzahl)
S2500 (hohe Drehzahl)
(debug, in Hauptprogramm, Zustand jetzt:)
o<showstate> call
o<imperialsub> call
(debug, zurück im Hauptmenü, Status jetzt:)
o<showstate> call
m2

23. M98 und M99

Der Interpreter unterstützt Haupt- und Unterprogramme im Fanuc-Stil mit den M-Codes M98 und M99. Siehe Fanuc-Style Programme.

23.1. Selektive Wiederherstellung des modalen Zustands

Die Ausführung eines M72 oder die Rückkehr aus einer Unterroutine, die ein M73 enthält, stellt alle gesicherten modalen Zustände wieder her.

Wenn nur einige Aspekte des modalen Zustands erhalten bleiben sollen, ist eine Alternative die Verwendung von vordefinierten benannten Parametern, lokalen Parametern und bedingten Anweisungen. Die Idee ist, sich zu Beginn des Unterprogramms die wiederherzustellenden Modi zu merken und diese vor dem Verlassen des Programms wiederherzustellen. Hier ist ein Beispiel, das auf einem Ausschnitt aus nc_files/tool-length-probe.ngc basiert:

O<Maßnahme> sub (Referenzwerkzeug für Maßnahmen)
;
#<absolute> = #<_absolute> (in lokaler Variable speichern, wenn G90 gesetzt wurde)
;
g30 (über Schalter)
g38.2 z0 f15 (messen)
g91 g0z.2 (außerhalb des Schalters)
#1000=#5063 (Referenzlänge des Werkzeugs speichern)
(print, Referenzlänge ist #1000)
;
O<restore_abs> if [#<absolute>]
    g90 (G90 nur dann wiederherstellen, wenn es bei der Eingabe gesetzt wurde:)
O<restore_abs> endif
;
O<measure> endsub

24. M100-M199 User Defined Commands

M1-- <P- Q->
  • M1-- - eine ganze Zahl im Bereich von 100 - 199.

  • P- - eine Zahl, die als erster Parameter an die Datei übergeben wird.

  • Q- - eine Zahl, die als zweiter Parameter an die Datei übergeben wird.

Anmerkung
Nach dem Erstellen einer neuen M1nn-Datei müssen Sie die grafische Benutzeroberfläche neu starten, damit sie die neue Datei erkennt, sonst erhalten Sie die Fehlermeldung Unbekannter m-Code.

Das externe Programm mit den Namen M100 bis M199 (keine Erweiterung, ein großes M, das sich im Verzeichnis befindet, auf das der Parameter [DISPLAY] PROGRAM_PREFIX der INI-Datei verweist) wird mit den optionalen Werten P und Q als seinen beiden Argumenten ausgeführt.

Die Ausführung der G-Code-Datei wird angehalten, bis das externe Programm beendet wird. Es kann jede gültige ausführbare Datei verwendet werden. Die Datei muss sich in dem Suchpfad befinden, der in der Konfiguration der INI-Datei angegeben ist. Weitere Informationen zu Suchpfaden finden Sie im Abschnitt Display.

Nach dem Erstellen eines neuen M1nn-Programms sollte die GUI neu gestartet werden, damit das neue Programm berücksichtigt wird, da sonst ein Unbekantner M-Code-Fehler auftritt.

Warnung
Verwenden Sie kein Textverarbeitungsprogramm, um die Dateien zu erstellen oder zu bearbeiten. Ein Textverarbeitungsprogramm hinterlässt unsichtbare Codes, die Probleme verursachen und verhindern können, dass eine Bash- oder Python-Datei funktioniert. Verwenden Sie einen Texteditor wie Geany in Debian oder Notepad++ in anderen Betriebssystemen, um die Dateien zu erstellen oder zu bearbeiten.

Der Fehler "Unbekannter M-Code verwendet" bedeutet eine der folgenden Möglichkeiten:

  • Der angegebene benutzerdefinierte Befehl existiert nicht

  • Die Datei ist keine ausführbare Datei

  • Der Dateiname hat eine Erweiterung

  • Der Dateiname entspricht nicht diesem Format Mnnn, wobei nnn = 100 bis 199

  • Der Dateiname enthielt ein kleines M

Beispiel: Öffnen und Schließen eines Spannzangenverschlusses, der über einen Pin der parallelen Schnittstelle gesteuert wird, mit einer Bash-Skriptdatei unter Verwendung von M101 und M102. Erstellen Sie zwei Dateien mit den Namen M101 und M102. Setzen Sie sie als ausführbare Dateien (typischerweise Rechtsklick/Eigenschaften/Berechtigungen), bevor Sie LinuxCNC ausführen. Stellen Sie sicher, dass der Parallelport-Pin nicht mit irgendetwas in einer HAL-Datei verbunden ist.

M101-Beispieldatei
#!/bin/bash
# Datei zum Einschalten von Parport Pin 14, um die Spannzange näher zu öffnen
halcmd setp parport.0.pin-14-out True
exit 0
M102 Beispieldatei
#!/bin/bash
# Datei zum Ausschalten von Parport Pin 14, um die Spannzange näher zu öffnen
halcmd setp parport.0.pin-14-out False
exit 0

Um eine Variable an eine M1nn-Datei zu übergeben, verwenden Sie die Optionen P und Q wie folgt:

M100 P123.456 Q321.654
M100 Beispieldatei
#!/bin/bash
voltage=$1
feedrate=$2
halcmd setp thc.voltage $voltage
halcmd setp thc.feedrate $feedrate
exit 0

Um eine grafische Nachricht anzuzeigen und anzuhalten, bis das Meldungsfenster geschlossen wird, verwenden Sie ein grafisches Anzeigeprogramm wie Eye of Gnome, um die Grafikdatei anzuzeigen. Wenn Sie es schließen, wird das Programm fortgesetzt.

M110 Beispieldatei
#!/bin/bash
eog /home/john/linuxcnc/nc_files/message.png
exit 0

Um eine grafische Meldung anzuzeigen und die Bearbeitung der G-Code-Datei fortzusetzen, fügen Sie dem Befehl ein kaufmännisches Und hinzu.

M110 Beispielanzeige und Weiterfahrt
#!/bin/bash
eog /home/john/linuxcnc/nc_files/message.png &
exit 0