Diese Dokumentation beschreibt das linuxcnc
Python-Modul, das eine Python-API für die Kommunikation mit LinuxCNC bereithält.
1. Einführung
Benutzeroberflächen steuern LinuxCNC-Aktivitäten durch Senden von NML-Nachrichten an die LinuxCNC-Task-Controller, und überwachen die Ergebnisse durch die Beobachtung der LinuxCNC-Status-Struktur, sowie des Fehlerberichterstattung Kanals.
Der programmatische Zugriff auf NML erfolgt über eine C++-API; die wichtigsten Teile der NML-Schnittstelle zu LinuxCNC sind jedoch auch für Python-Programme über das Modul linuxcnc
verfügbar.
Neben der NML-Schnittstelle zu den Befehls-, Status- und Fehlerkanälen enthält das Modul linuxcnc
auch:
-
Unterstützung für das Lesen von Werten aus INI-Dateien
2. Verwendungsmuster für die LinuxCNC NML-Schnittstelle
Das allgemeine Muster für die Verwendung von linuxcnc
ist in etwa wie folgt:
-
das Modul
linuxcnc
importieren -
bei Bedarf Verbindungen zu den Befehls-, Status- und Fehler-NML-Kanälen herstellen
-
den Statuskanal abfragen, entweder regelmäßig oder nach Bedarf
-
vor dem Senden eines Befehls anhand des Status feststellen, ob dies tatsächlich zulässig ist (z. B. hat es keinen Sinn, einen Ausführen Befehl zu senden, wenn sich die Aufgabe im NOTAUS (engl. ESTOP)-Zustand befindet oder der Interpreter nicht im Leerlauf ist)
-
den Befehl mit einer der Methoden des Befehlskanals
linuxcnc
senden
Um Nachrichten aus dem Fehlerkanal abzurufen, rufen Sie den Fehlerkanal regelmäßig ab und verarbeiten alle abgerufenen Nachrichten.
-
den Statuskanal abfragen, entweder regelmäßig oder nach Bedarf
-
Drucken Sie eine Fehlermeldung aus, und untersuchen Sie den Ausnahme (engl. exception)-Code
linuxcnc" definiert auch den Python-Ausnahmetyp "error", um Fehlerberichte zu unterstützen.
3. Lesen des LinuxCNC-Status
Hier ist ein Python-Fragment, um den Inhalt des Objekts linuxcnc.stat
zu untersuchen, das mehr als 80 Werte enthält (führen Sie es aus, während linuxcnc läuft, um typische Werte zu erhalten):
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import sys import linuxcnc try: s = linuxcnc.stat() # erstellt Verbindung zu Status-Kanal s.poll() # erhält aktuelle Werte except linuxcnc.error, detail: print("Fehler", detail) sys.exit(1) for x in dir(s): if not x.startswith("_"): print(x, getattr(s,x))
LinuxCNC verwendet den standardmäßig einkompilierten Pfad zur NML-Konfigurationsdatei, sofern er nicht überschrieben wird, siehe Lesen von INI-Datei Werten für ein Beispiel.
3.1. linuxcnc.stat-Attribute
- acceleration (engl. für Beschleunigung)
-
(returns float) - Standardbeschleunigung, spiegelt den INI-Eintrag [TRAJ]DEFAULT_ACCELERATION wider.
- active_queue (engl. für aktive Queue)
-
(returns integer) - Anzahl der geplanten ineinander übergehenden Bewegungen.
- actual_position (engl. für Ist-Position)
-
(gibt ein Tupel von Floats zurück) - aktuelle Position der Flugbahn (x y z a b c u v w) in Maschineneinheiten.
- adaptive_feed_enabled (engl. für Adaptiver Vorschub aktiviert)
-
(returns boolean) - Status der adaptiven Vorschubüberschreibung (0/1).
- ain
-
(gibt ein Tupel von Floats zurück) - aktueller Wert der analogen Eingangspins.
- actual_position (engl. für *Winkeleinheiten)
-
(gibt Float zurück) - Maschinenwinkeleinheiten pro Grad, entspricht dem [TRAJ]ANGULAR_UNITS INI Eintrag.
- aout
-
(gibt ein Tupel von Floats zurück) - aktueller Wert der analogen Ausgangspins.
- axes (engl. für Achsen)
-
Removed since version 2.9 use axis_mask.bit_count() to get the number of axes configured
- axis (engl. für Achse)
-
(gibt ein Tupel von Dicts zurück) - spiegelt die aktuellen Achsenwerte wider. Siehe Das Achsen-Wörterbuch.
- axis_mask (engl. für Achsen-Maske)
-
(gibt ganze Zahl zurück) - Maske der verfügbaren Achsen, wie durch [TRAJ]COORDINATES in der INI-Datei definiert. Gibt die Summe der Achsen X=1, Y=2, Z=4, A=8, B=16, C=32, U=64, V=128, W=256 zurück.
- block_delete (engl. für Block löschen)
-
(returns boolean) - Status des Flags "Block löschen".
- call_level (engl. für Aufrufebene)
-
(gibt ganze Zahl zurück)` - aktuelle Tiefe des Unterprogramms. - 0 Wenn nicht in einem Unterprogramm, Tiefe, wenn nicht anders angegeben
- command (engl. für Befehl)
-
(returns string) - aktuell ausgeführter Befehl.
- current_line (engl. für aktuelle Zeile)
-
(returns integer) - aktuell ausgeführte Zeile.
- current_vel (engl. für aktuelle Geschwindigkeit)
-
(returns float) - aktuelle Geschwindigkeit in Benutzereinheiten pro Sekunde.
- cycle_time (engl. für Zyklus-Zeit)
-
(returns float) - Thread-Periode
- debug
-
(returns integer) - Debug-Flag aus der INI-Datei.
- delay_left (engl. für verbleibende Verzögerung)
-
(returns float) - verbleibende Zeit des Verweilzeitbefehls (G4), Sekunden.
- din
-
(gibt ein Tupel von Ganzzahlen zurück) - aktueller Wert der digitalen Eingangspins.
- distance_to_go (engl. für verbleibende Entfernung)
-
(returns float) - verbleibende Entfernung der aktuellen Bewegung, wie vom Trajektorienplaner gemeldet.
- dout
-
(gibt ein Tupel von Ganzzahlen zurück) - aktueller Wert der digitalen Ausgangspins.
- dtg
-
(returns tuple of floats) - verbleibende Entfernung der aktuellen Bewegung für jede Achse, wie vom Trajektorienplaner gemeldet.
- echo_serial_number
-
(returns integer) – Die Seriennummer des letzten abgeschlossenen Befehls, der von einer Benutzeroberfläche an die Aufgabe gesendet wurde. Alle Befehle tragen eine fortlaufende Nummer. Sobald der Befehl ausgeführt wurde, wird seine Seriennummer in
echo_serial_number
widergespiegelt. - enabled (engl. für aktiviert)
-
(returns boolean) - Trajektorienplaner aktiviert Flag.
- estop (engl. für Notaus)
-
(returns integer) - Gibt entweder STATE_ESTOP zurück oder nicht.
- exec_state
-
(gibt ganze Zahl zurück) - Status der Aufgabenausführung. Einer von EXEC_ERROR, EXEC_DONE, EXEC_WAITING_FOR_MOTION, EXEC_WAITING_FOR_MOTION_QUEUE, EXEC_WAITING_FOR_IO, EXEC_WAITING_FOR_MOTION_AND_IO, EXEC_WAITING_FOR_DELAY, EXEC_WAITING_FOR_SYSTEM_CMD, EXEC_WAITING_FOR_SPINDLE_ORIENTED.
- feed_hold_enabled
-
(returns boolean) - Flag für Feed-Hold aktivieren.
- feed_override_enabled
-
(returns boolean) - Flag für Feed-Override aktivieren.
- Vorschubrate
-
(returns float) - aktuelle Überschreibung der Vorschubrate, 1,0 = 100 %.
- Datei
-
(returns string) - aktuell geladener G-Code-Dateiname mit Pfad.
- Flut
-
(gibt ganze Zahl zurück) - Flutungsstatus, entweder FLOOD_OFF oder FLOOD_ON.
- g5x_index
-
(gibt eine ganze Zahl zurück) - derzeit aktives Koordinatensystem, G54=1, G55=2 usw.
- g5x_offset
-
(gibt ein Tupel von Floats zurück) - Offset des aktiven Koordinatensystems.
- g92_offset
-
(returns tuple of floats) - Pose des aktuellen g92-Offsets.
- gcodes
-
(gibt Tupel von ganzen Zahlen zurück) - Aktive G-Codes für jede modale Gruppe. G-Code-Konstanten G_0, G_1, G_2, G_3, G_4, G_5, G_5_1, G_5_2, G_5_3, G_7, G_8, G_100, G_17, G_17_1, G_18, G_18_1, G_19, G_19_1, G_20, G_21, G_28, G_28_1, G_30, G_30_1, G_33, G_33_1, G_38_2, G_38_3, G_38_4, G_38_5, G_40, G_41, G_41_1, G_42, G_42_1, G_43, G_43_1, G_43_2, G_49, G_50, G_51, G_53, G_54, G_55, G_56, G_57, G_58, G_59, G_59_1, G_59_2, G_59_3, G_61, G_61_1, G_64, G_73, G_76, G_80, G_81, G_82, G_83, G_84, G_85, G_86, G_87, G_88, G_89, G_90, G_90_1, G_91, G_91_1, G_92, G_92_1, G_92_2, G_92_3, G_93, G_94, G_95, G_96, G_97, G_98, G_99
- homed
-
(gibt ein Tupel von ganzen Zahlen zurück) - aktuell referenzierte Gelenke, 0 = nicht referenziert, 1 = referenziert.
- id
-
(gibt ganze Zahl zurück) - aktuell ausgeführte Bewegungskennung.
- ini_filename
-
(returns string) - Pfad zur INI-Datei, die an linuxcnc übergeben wird.
- inpos
-
(gibt einen booleschen Wert zurück) - Maschine-in-Position-Flag.
- input_timeout
-
(returns boolean) - Flag für M66-Timer läuft.
- interp_state
-
(gibt ganze Zahl zurück) - aktueller Zustand des RS274NGC-Interpreters. Einer von INTERP_IDLE, INTERP_READING, INTERP_PAUSED, INTERP_WAITING.
- interpreter_errcode
-
(gibt ganze Zahl zurück) - aktueller RS274NGC-Interpreter-Rückgabecode. Einer von INTERP_OK, INTERP_EXIT, INTERP_EXECUTE_FINISH, INTERP_ENDFILE, INTERP_FILE_NOT_OPEN, INTERP_ERROR. siehe src/emc/nml_intf/interp_return.hh
- joint
-
(gibt ein Tupel von dicts zurück) - spiegelt die aktuellen Gelenkwerte wider. Siehe Das gemeinsame Wörterbuch.
- joint_actual_position
-
(gibt ein Tupel von Floats zurück) - tatsächliche Gelenkpositionen.
- joint_position
-
(gibt Tupel von Floats zurück) - Gewünschte gemeinsame Positionen.
- joints
-
(returns integer) - Anzahl der Joints. Reflektiert [KINS]JOINTS INI-Wert.
- kinematics_type
-
(returns integer) - Der Typ der Kinematik. Einer von:
-
KINEMATICS_IDENTITY
-
KINEMATIKEN_FORWARD_ONLY
-
KINEMATICS_INVERSE_ONLY
-
KINEMATICS_BOTH
-
- limit
-
(gibt Tupel von ganzen Zahlen zurück) - Achsengrenzwertmasken. minHardLimit=1, maxHardLimit=2, minSoftLimit=4, maxSoftLimit=8.
- linear_units
-
(returns float) - Maschine lineare Einheiten pro mm, spiegelt [TRAJ]LINEAR_UNITS INI-Wert wider.
- max_acceleration
-
(returns float) - maximale Beschleunigung. Reflektiert [TRAJ]MAX_ACCELERATION.
- max_velocity
-
(returns float) - maximale Geschwindigkeit. Gibt die aktuelle maximale Geschwindigkeit wieder. Wenn es nicht durch halui.max-velocity oder ähnliches modifiziert wird, sollte es [TRAJ]MAX_VELOCITY widerspiegeln.
- mcodes
-
(gibt ein Tupel von 10 ganzen Zahlen zurück) - derzeit aktive M-Codes.
- mist
-
(gibt ganze Zahl zurück) - Nebelzustand, entweder MIST_OFF oder MIST_ON
- motion_line
-
(gibt die ganze Zahl zurück) - Die Quellzeilennummernbewegung wird derzeit ausgeführt. Zusammenhang mit id unklar.
- motion_mode
-
(returns integer) - Dies ist der Modus des Motion Controllers. Einer von TRAJ_MODE_COORD, TRAJ_MODE_FREE, TRAJ_MODE_TELEOP.
- motion_type
-
(returns integer) - Der Typ der aktuell ausgeführten Bewegung. Einer von:
-
MOTION_TYPE_TRAVERSE
-
MOTION_TYPE_FEED
-
MOTION_TYPE_ARC
-
MOTION_TYPE_TOOLCHANGE
-
MOTION_TYPE_PROBING
-
MOTION_TYPE_INDEXROTARY
-
Oder 0, wenn gerade keine Bewegung stattfindet.
-
- optional_stop
-
(gibt die ganze Zahl zurück) - Option Stopp-Flag.
- paused
-
(gibt einen booleschen Wert zurück) - Bewegung pausiert-Flag.
- pocket_prepped
-
(gibt eine ganze Zahl zurück) - Ein Tx-Befehl wurde ausgeführt, und diese Tasche ist vorbereitet. -1 wenn keine vorbereitete Tasche.
- poll()
-
-(eingebaute Funktion) Methode zur Aktualisierung der aktuellen Statusattribute.
- position
-
(gibt das Tupel von Floats zurück) - Trajektorienposition.
- probe_tripped
-
(returns boolean) - Flag, wahr, wenn die Sonde ausgelöst hat (Latch)
- probe_val
-
(returns integer) - spiegelt den Wert des Pins motion.probe-input wider.
- probed_position
-
(gibt ein Tupel von Floats zurück) - Position, an der die Sonde ausgelöst wurde.
- probiert
-
(returns boolean) - flag, true, wenn ein Prüfpunktvorgang ausgeführt wird.
- program_units
-
(gibt ganze Zahl zurück) - eine von CANON_UNITS_INCHES=1, CANON_UNITS_MM=2, CANON_UNITS_CM=3
- queue
-
(gibt ganze Zahl zurück) - aktuelle Größe der Warteschlange des Trajektorienplaners.
- queue_full
-
(returns boolean) - Die Trajektorienplaner-Warteschlange ist voll.
- rapidrate
-
(returns float) - Eilgang Übersteuerungs-Faktor.
- read_line
-
(returns integer) - Zeile, die der RS274NGC-Interpreter gerade liest.
- rotation_xy
-
(returns float) - aktueller XY-Rotationswinkel um die Z-Achse.
- settings
-
(gibt ein Tupel von Floats zurück) - aktuelle Interpretereinstellungen. settings[0] = Sequenznummer, settings[1] = Vorschubgeschwindigkeit, settings[2] = Geschwindigkeit, settings[3] =
G64 P
Blendtoleranz, settings[4] =G64 Q
naive CAM Toleranz. - spindle
-
' (gibt Tupel von Dicts zurück) ' - gibt den aktuellen Spindelstatus zurück, siehe das <sec:the-spindle-dictionary,Spindel-Wörterbuch>>
- spindles
-
(returns integer) - Anzahl der Spindeln. Reflektiert den INI-Wert von [TRAJ]SPINDLES.
- state
-
(returns integer) - aktueller Status der Befehlsausführung. Einer von RCS_DONE, RCS_EXEC, RCS_ERROR.
- task_mode
-
(returns integer) - aktueller Aufgabenmodus. einer von MODE_MDI, MODE_AUTO, MODE_MANUAL.
- task_paused
-
(gibt die ganze Zahl zurück) - Flag "Aufgabe angehalten".
- task_state
-
(returns integer) - aktueller Aufgabenzustand. einer von STATE_ESTOP, STATE_ESTOP_RESET, STATE_ON, STATE_OFF.
- tool_in_spindle
-
(gibt ganze Zahl zurück) - aktuelle Werkzeugnummer.
- tool_from_pocket
-
(liefert eine ganze Zahl) - Platznummer für das aktuell geladene Werkzeug (0, wenn kein Werkzeug geladen ist).
- tool_offset
-
(returns tuple of floats) - Versatzwerte des aktuellen Werkzeugs.
- tool_table
-
(gibt ein Tupel von tool_results zurück) - Liste der Werkzeugeinträge. Jeder Eintrag ist eine Folge der folgenden Felder: id, xoffset, yoffset, zoffset, aoffset, boffset, coffset, uoffset, voffset, woffset, Durchmesser, Vorderwinkel, Rückwinkel, Orientierung. Bei id und orientation handelt es sich um Ganzzahlen, bei den übrigen um Fließkommazahlen.
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import linuxcnc s = linuxcnc.stat() s.poll() # das geladene Werkzeug befindet es sich in der Werkzeugtabelle an Index 0 if s.tool_table[0].id != 0: # ein Werkzeug ist geladen print(s.werkzeug_tabelle[0].zoffset) else: print("Kein Werkzeug geladen")
- toolinfo(toolno)
-
(gibt ein Diktat der Werkzeugdaten für toolno zurück)' - Eine anfängliche stat.poll() ist zur Initialisierung erforderlich. toolno muss größer als Null und kleiner oder gleich der höchsten verwendeten Werkzeugnummer sein. Die Wörterbucheinträge umfassen alle tooldata-Einträge: toolno, pocketno, diameter,frontangle,backangle,orientation, xoffset,yoffset, … woffset, Kommentar
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import linuxcnc s = linuxcnc.stat() s.poll() toolno = 1 print(s.toolinfo(toolno))
: 0, 'xoffset: 0.0, yoffset: 0.0, zoffset: 0.18, aoffset: 0.0, boffset: 0.0, coffset: 0.0, uoffset: 0.0, voffset: 0.0, woffset: 0.0, comment: Tool_18 28Jan23:18.53.25}
- velocity
-
(returns float) - Diese Eigenschaft ist definiert, hat aber keine sinnvolle Interpretation.
3.2. Das "Achsen"-Wörterbuch
Die Achsenkonfiguration und die Statuswerte sind über eine Liste von Wörterbüchern pro Achse verfügbar. Hier ein Beispiel, wie man auf ein Attribut einer bestimmten Achse zugreifen kann: Beachten Sie, dass viele Eigenschaften, die früher im "Achsen"-Wörterbuch standen, jetzt im "Gelenk"-Wörterbuch zu finden sind, da diese Elemente (wie z. B. das Spiel) auf nichttrivialen Kinematikmaschinen nicht zu den Eigenschaften einer Achse gehören.
- max_position_limit
-
(returns float) - maximale Grenze (weiche Grenze) für Achsenbewegung, in Maschineneinheiten. Konfigurationsparameter, spiegelt [JOINT_n]MAX_LIMIT wider.
- min_position_limit
-
(returns float) - minimale Grenze (weiche Grenze) für Achsenbewegung, in Maschineneinheiten. Konfigurationsparameter, reflektiert [JOINT_n]MIN_LIMIT.
- velocity
-
(returns float) - aktuelle Geschwindigkeit.
3.3. Das Gelenk
(engl. joint) Wörterbuch
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import linuxcnc s = linuxcnc.stat() s.poll() print("Joint 1 auf Referenzposition: ", s.joint[1]["homed"])
Für jedes Gelenk sind die folgenden Wörterbuchschlüssel verfügbar:
- backlash (engl. für Umkehrspiel)
-
(returns float) - Spiel in Maschineneinheiten. Konfigurationsparameter, spiegelt [JOINT_n]BACKLASH wider.
- enabled (engl. für aktiviert)
-
(gibt eine ganze Zahl zurück) - ein Wert ungleich Null bedeutet aktiviert.
- fault (engl. für Fehler)
-
(gibt eine ganze Zahl zurück) - ein Wert ungleich Null bedeutet einen Achsverstärkerfehler.
- ferror_current
-
(returns float) - aktueller Schleppfehler.
- ferror_highmark
-
(returns float) - Größe des maximalen Schleppfehlers.
- homed
-
(returns integer) - Nicht-Null bedeutet, dass die Referenzposition eingenommen wurde.
- homing
-
(returns integer) - ungleich Null bedeutet Referenfahrt im Gange.
- inpos
-
(gibt ganze Zahl zurück) - ungleich Null bedeutet in Position.
- input
-
(returns float) - aktuelle Eingabeposition.
- jointType
-
(gibt ganze Zahl zurück) - Typ des Achsenkonfigurationsparameters, entspricht [JOINT_n]TYPE. LINEAR=1, ANGULAR=2. Siehe Gelenk INI Konfiguration für Details.
- max_ferror
-
(returns float) - maximaler Schleppfehler. Konfigurationsparameter, reflektiert [JOINT_n]FERROR.
- max_hard_limit
-
(gibt ganze Zahlen zurück) - ungleich Null bedeutet, dass der maximale harte Grenzwert überschritten wird.
- max_position_limit
-
(gibt Float zurück) - maximaler Grenzwert (soft limit) für die Gelenkbewegung, in Maschineneinheiten. Konfigurationsparameter, spiegelt [JOINT_n]MAX_LIMIT.
- max_soft_limit
-
ungleich Null bedeutet, dass
max_position_limit
überschritten wurde, int - min_ferror
-
(returns float) - Konfigurationsparameter, spiegelt [JOINT_n]MIN_FERROR wider.
- min_hard_limit
-
(gibt eine ganze Zahl zurück) - ungleich Null bedeutet, dass der minimale harte Grenzwert überschritten wird.
- min_position_limit
-
(returns float) - Mindestgrenze (weiche Grenze) für Gelenkbewegung, in Maschineneinheiten. Konfigurationsparameter, spiegelt [JOINT_n]MIN_LIMIT wider.
- min_soft_limit
-
(returns integer) - ungleich Null bedeutet, dass
min_position_limit
überschritten wurde. - output
-
(returns float) - befohlene Ausgabeposition.
- override_limits
-
(gibt eine ganze Zahl zurück) - ein Wert ungleich Null bedeutet, dass die Grenzen außer Kraft gesetzt werden.
- units (engl. für Einheiten)
-
(returns float) - Gelenkeinheiten pro mm oder pro Grad für Winkelgelenke.
(Gelenkeinheiten sind dasselbe wie Maschineneinheiten, sofern nicht anders durch den Konfigurationsparameter [JOINT_n]UNITS festgelegt) - velocity
-
(returns float) - aktuelle Geschwindigkeit.
3.4. Das Spindel
-Wörterbuch
- brake (engl. für Bremse)
-
(gibt ganze Zahl zurück) - Wert des Spindelbremsflags.
- direction (engl. für Richtung)
-
(returns integer) - Drehrichtung der Spindel. vorwärts=1, rückwärts=-1.
- enabled (engl. für aktiviert)
-
(gibt ganze Zahl zurück) - Wert des Flags "Spindel aktiviert".
- homed
-
(derzeit nicht implementiert)
- increasing (engl. für zunehmend)
-
(gibt ganze Zahl zurück) - unklar.
- orient_fault
-
(gibt ganze Zahl zurück)
- orient_state
-
(gibt ganze Zahl zurück)
- override
-
(returns float) - Spindel Geschwindigkeits-Neufestsetzungs-Skala.
- override_enabled
-
(returns boolean) - Wert der Spindel-Neufestsetzungs-flag (engl. spindle override).
- speed
-
(returns float) - Spindeldrehzahlwert, U/min, > 0: im Uhrzeigersinn, < 0: gegen den Uhrzeigersinn.
4. Vorbereitung des Sendens von Befehlen
Einige Befehle können immer gesendet werden, unabhängig von Modus und Zustand; zum Beispiel kann die Methode linuxcnc.command.abort()
immer aufgerufen werden.
Andere Befehle können nur in einem geeigneten Zustand gesendet werden, und diese Tests können etwas knifflig sein. Zum Beispiel kann ein MDI-Befehl nur gesendet werden, wenn:
-
NOTAUS (engl. ESTOP) nicht ausgelöst wurde und
-
die Maschine eingeschaltet ist und
-
Referenzfahrten an den Achsen durchgeführt wurden
-
der Interpreter nicht läuft und
-
der Modus ist auf "MDIModus" eingestellt ist
Ein geeigneter Test vor dem Senden eines MDI-Befehls durch linuxcnc.command.mdi()
könnte also sein:
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import linuxcnc s = linuxcnc.stat() c = linuxcnc.command() def ok_for_mdi(): s.poll() return not s.estop and s.enabled and (s.homed.count(1) == s.joints) and (s.interp_state == linuxcnc.INTERP_IDLE) if ok_for_mdi(): c.mode(linuxcnc.MODE_MDI) c.wait_complete() # warte bis mode Wechsel ausgeführt c.mdi("G0 X10 Y20 Z30")
5. Senden von Befehlen über linuxcnc.command
Initialisieren Sie vor dem Senden eines Befehls einen Befehlskanal wie folgt:
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import linuxcnc c = linuxcnc.command() # Anwendungsbeispiele für einige der unten aufgeführten Befehle: c.abort() c.auto(linuxcnc.AUTO_RUN, program_start_line) c.auto(linuxcnc.AUTO_STEP) c.auto(linuxcnc.AUTO_PAUSE) c.auto(linuxcnc.AUTO_RESUME) c.brake(linuxcnc.BRAKE_ENGAGE) c.brake(linuxcnc.BRAKE_RELEASE) c.flood(linuxcnc.FLOOD_ON) c.flood(linuxcnc.FLOOD_OFF) c.home(2) c.jog(linuxcnc.JOG_STOP, jjogmode, joint_num_or_axis_index) c.jog(linuxcnc.JOG_CONTINUOUS, jjogmode, joint_num_or_axis_index, velocity) c.jog(linuxcnc.JOG_INCREMENT, jjogmode, joint_num_or_axis_index, velocity, increment) c.load_tool_table() c.maxvel(200.0) c.mdi("G0 X10 Y20 Z30") c.mist(linuxcnc.MIST_ON) c.mist(linuxcnc.MIST_OFF) c.mode(linuxcnc.MODE_MDI) c.mode(linuxcnc.MODE_AUTO) c.mode(linuxcnc.MODE_MANUAL) c.override_limits() c.program_open("foo.ngc") c.reset_interpreter() c.tool_offset(toolno, z_offset, x_offset, diameter, frontangle, backangle, orientation)
5.1. linuxcnc.command
Attribute
-
serial
-
die Seriennummer des aktuellen Befehls
5.2. linuxcnc.command
Methoden:
-
abort()
-
EMC_TASK_ABORT-Meldung senden.
-
auto(int[, int])
-
Ausführen, Einzelschritte ausführen, Anhalten oder Fortsetzen eines Programms.
-
brake(int)
-
Spindelbremse aktivieren oder lösen.
-
debug(int)
-
die Debug-Stufe über die Meldung EMC_SET_DEBUG einstellen.
-
display_msg(string)
-
sendet eine Bedienermeldung auf den Bildschirm. (max. 254 Zeichen)
-
error_msg(string)
-
sendet eine Bedienerfehlermeldung auf den Bildschirm. (max. 254 Zeichen)
-
feedrate(float)
-
den Vorschub-Override setzen, 1.0 = 100%.
-
flood(int)
-
Ein-/ausschalten der Kühlmittel-Flut.
- Syntax
-
flood(command)
flood(linuxcnc.FLOOD_ON)
flood(linuxcnc.FLOOD_OFF) - Konstanten
-
FLOOD_ON
FLOOD_OFF
-
home(int)
-
ein bestimmtes Gelenk zu Referenzpunkt fahren.
-
jog(command-constant, bool, int[, float[, float]])
-
- Syntax
-
jog(command, jjogmode, joint_num_or_axis_index, velocity[, distance])
jog(linuxcnc.JOG_STOP, jjogmode, joint_num_or_axis_index)
jog(linuxcnc.JOG_CONTINUOUS, jjogmode, joint_num_or_axis_index, velocity)
jog(linuxcnc.JOG_INCREMENT, jjogmode, joint_num_or_axis_index, velocity, distance) - Befehlskonstanten
-
linuxcnc.JOG_STOP
linuxcnc.JOG_CONTINUOUS
linuxcnc.JOG_INCREMENT - jjogmode
-
- True
-
Einzelne Gelenkbewegungen anfordern (erfordert teleop_enable(0))
- False
-
Abfrage der kartesischen Achsenkoordinaten (erfordert teleop_enable(1))
- joint_num_or_axis_index
-
- Für gemeinsames Joggen (Jogmode=1)
-
joint_number
- Für kartesisches Joggen der Achse (jjogmode=0)
-
Nullbasierter Index der Achsenkoordinate in Bezug auf die bekannten Koordinatenbuchstaben XYZABCUVW (x=>0,y=>1,z=>2,a=>3,b=>4,c=>5,u=>6,v=>7,w=>8)
-
load_tool_table()
-
die Werkzeugtabelle neu laden.
-
maxvel(float)
-
set maximum velocity
-
mdi(string)
-
einen MDI-Befehl senden. Maximal 254 Zeichen.
-
mist(int)
-
Kühlnebel ein-/ausschalten.
- Syntax
-
mist(command)
mist(linuxcnc.MIST_ON)
mist(linuxcnc.MIST_OFF)
- Konstanten
-
MIST_ON
MIST_OFF
-
mode(int)
-
Modus einstellen (MODE_MDI, MODE_MANUAL, MODE_AUTO).
-
override_limits()
-
Flag für die Überschreitung der Achsengrenzen setzen.
-
program_open(string)
-
eine NGC-Datei öffnen.
-
rapidrate()
-
set rapid override factor
-
reset_interpreter()
-
den RS274NGC-Interpreter zurücksetzen
-
set_adaptive_feed(int)
-
adaptiven Vorschub (engl. adaptive feed)-Flag setzen
-
set_analog_output(int, float)
-
Wert auf analogen Ausgangs-Pin legen
-
set_block_delete(int)
-
setze Block-löschen-Markierung (engl. flag)
-
set_digital_output(int, int)
-
Digitalen Ausgangspin auf Wert setzen
-
set_feed_hold(int)
-
Vorschubfreigabe ein/auseinstellen
-
set_feed_override(int)
-
Vorschub-Neufestsetzung ein/ausschalten
-
set_max_limit(int, float)
-
Einstellung der maximalen Positionsgrenze für eine bestimmte Achse
-
set_min_limit()
-
Legen Sie die minimale Positionsgrenze für eine bestimmte Achse fest
-
set_optional_stop(int)
-
optionalen Stopp ein-/ausschalten
-
set_spindle_override(int [, int])
-
Spindel-Neufestsetzung (engl. override) einstellen aktiviert. Standardmäßig ist die Spindel 0 eingestellt.
-
spindle(direction: int, speed: float=0, spindle: int=0, wait_for_speed: int=0)
-
-
Direction (engl. für Richtung): [SPINDLE_FORWARD, SPINDLE_REVERSE, SPINDLE_OFF, SPINDLE_INCREASE, SPINDLE_DECREASE, oder SPINDLE_CONSTANT]
-
Speed: Drehzahl in U/min (engl. RPM), Standardwert ist 0.
-
Spindle: Spindelnummer für den Befehl ist standardmäßig 0.
-
Wait_for_speed: wenn auf 1 gesetzt warten Bewegung auf die Geschwindigkeit bevor sie fortgesetzt werden, die Standardeinstellung verlang dies nicht.
-
Warnung
|
MDI-Befehle ignorieren dies. "S1000" danach schaltet die Spindel aus. |
-
text_msg(string)
-
sendet eine Betreiber-Textnachricht auf den Bildschirm. (max. 254 Zeichen)
#!/usr/bin/env python3 import linuxcnc c = linuxcnc.command() # Erhöhen Sie die Drehzahl der Spindel 0 um 100 Umdrehungen pro Minute. Die Spindel muss zuerst eingeschaltet werden. c.spindle(linuxcnc.INCREASE) # Erhöhen Sie die Drehzahl von Spindel 2 um 100 Umdrehungen pro Minute. Die Spindel muss zuerst eingeschaltet werden. c.spindle(linuxcnc.SPINDLE_INCREASE, 2) # Set speed of spindle 0 to 1024 U/min. c.spindle.(linuxcnc.SPINDLE_FORWARD, 1024) # Drehzahl der Spindel 1 auf -666 U/min setzen. c.spindle.(linuxcnc.SPINDLE_REVERSE, 666, 1) # Spindel 0 stoppen. c.spindle.(linuxcnc.SPINDLE_OFF) # Spindel 0 explizit stoppen. c.spindle.(linuxcnc.SPINDLE_OFF, 0)
-
spindleoverride(float [, int])
-
Spindel-Neufestsetzung (engl. override)-Faktor einstellen. Bezieht sich wenn nicht anders angegeben auf Spindel 0.
-
state(int)
-
Setzt den Maschinenzustand. Der Maschinenzustand sollte STATE_ESTOP, STATE_ESTOP_RESET, STATE_ON, oder STATE_OFF sein.
-
task_plan_sync()
-
Nach Beendigung dieses Aufrufs wird die VAR-Datei auf der Festplatte mit den aktuellen Werten des Interpreters aktualisiert.
-
teleop_enable(int)
-
Teleop-Modus aktivieren/deaktivieren (für gemeinsames Joggen deaktivieren).
-
tool_offset(int, float, float, float, float, float, int)
-
Den Werkzeugversatz einstellen. Siehe Anwendungsbeispiel oben.
-
traj_mode(int)
-
Trajektorienmodus einstellen. Der Modus ist einer von MODE_FREE, MODE_COORD oder MODE_TELEOP.
-
unhome(int)
-
Referenzpunkt eines bestimmten Gelenks auflösen (engl. unhome).
-
wait_complete([float])
-
Auf die Beendigung des letzten gesendeten Befehls warten. Wenn die Zeitüberschreitung in Sekunden nicht angegeben wird, ist der Standardwert 5 Sekunden. Rückgabe -1 bei Zeitüberschreitung, Rückgabe RCS_DONE oder RCS_ERROR je nach Status der Befehlsausführung.
6. Lesen des Fehlerkanals
Um Fehlermeldungen zu behandeln, stellen Sie eine Verbindung zum Fehlerkanal her und pollen (durch Aufruf von poll() ) Sie ihn regelmäßig.
Beachten Sie, dass der NML-Kanal für Fehlermeldungen über eine Warteschlange verfügt (anders als die Befehls- und Statuskanäle), was bedeutet, dass der erste Empfänger einer Fehlermeldung diese aus der Warteschlange löscht; ob ein anderer Empfänger einer Fehlermeldung (z. B. Axis) die Meldung sieht, hängt vom Timing ab. Es wird empfohlen, nur eine Fehlerkanal-Leser-Task in einem Setup zu haben.
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import linuxcnc e = linuxcnc.error_channel() error = e.poll() if error: kind, text = error if kind in (linuxcnc.NML_ERROR, linuxcnc.OPERATOR_ERROR): typus = "error" else: typus = "info" print(typus, text)
7. Lesen von INI-Datei Werten
Hier ist ein Beispiel für das Lesen von Werten aus einer INI-Datei durch das Objekt linuxcnc.ini
:
#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Ausführen wie folgt: # python3 ini-example.py ~/emc2-dev/configs/sim/axis/axis_mm.ini import sys import linuxcnc inifile = linuxcnc.ini(sys.argv[1]) # inifile.find() returns None if the key wasn't found - the # following idiom is useful for setting a default value: machine_name = inifile.find("EMC", "MACHINE") or "unknown" print("machine name: ", machine_name) # inifile.findall() gibt eine Liste von Übereinstimmungen oder eine leere Liste zurück # falls der Schlüssel nicht gefunden wurde: extensions = inifile.findall("FILTER", "PROGRAM_EXTENSION") print("extensions: ", extensions) # Standard-NML-Datei durch INI-Parameter neufestsetzen, falls angegeben nmlfile = inifile.find("EMC", "NML_FILE") if nmlfile: linuxcnc.nmlfile = os.path.join(os.path.dirname(sys.argv[1]), nmlfile)
Oder für die selbe INI-Datei wie LinuxCNC:
#!/usr/bin/env python3 # -*- coding: utf-8 -*- # starten mit: # python3 ini-example2.py import linuxcnc stat = linuxcnc.stat() stat.poll() inifile = linuxcnc.ini(stat.ini_filename) # Siehe obiges Beispiel für die Verwendung des 'inifile' Objekts
8. Der Typ linuxcnc.positionlogger
Einige Verwendungshinweise können von src/emc/usr_intf/gremlin/gremlin.py entnommen werden.
8.1. Members
-
npts
-
Anzahl der Punkte.
8.2. Methoden
-
start(float)
-
den Positionslogger starten und alle ARG-Sekunden ausführen
-
clear()
-
den Positionslogger löschen
-
stop()
-
den Positionslogger anhalten
-
call()
-
Plotte jetzt den Backplot.
-
last([int])
-
Gibt den letzten Punkt auf dem Plot oder keinen (als Python Ausdruck
None
) zurück