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:

  • Import the linuxcnc module.

  • Establish connections to the command, status and error NML channels as needed.

  • Poll the status channel, either periodically or as needed.

  • Before sending a command, determine from status whether it is in fact OK to do so (for instance, there is no point in sending a Run command if task is in the ESTOP state, or the interpreter is not idle)

  • Send the command by using one of the linuxcnc command channel methods.

Um Nachrichten aus dem Fehlerkanal abzurufen, rufen Sie den Fehlerkanal regelmäßig ab und verarbeiten alle abgerufenen Nachrichten.

  • Poll the status channel, either periodically or as needed.

  • Print any error message and explore the exception code.

The module linuxcnc also defines the error Python exception type to support error reporting.

3. Reading LinuxCNC status with the linuxcnc Python module

Here is a Python fragment to explore the contents of the linuxcnc.stat object which contains some 80+ values (run while LinuxCNC is running for typical values):

#!/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))

The linuxcnc module uses the default compiled-in path to the NML configuration file unless overridden, see ReadingINI file values for an example.

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 (Removed since version 2.9)

instead, 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)

(returns integer) - mask of axis available as defined by [TRAJ]COORDINATES in the INI file. Returns the sum of the axes X=1, Y=2, Z=4, A=8, B=16, C=32, U=64, V=128, W=256.

block_delete (engl. für Block löschen)

(returns boolean) - Status des Flags "Block löschen".

call_level (engl. für Aufrufebene)

(returns integer)` - current subroutine depth. - 0 If not in a subroutine, Depth if not otherwise specified.

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) - The serial number of the last completed command sent by a UI to task. All commands carry a serial number. Once the command has been executed, its serial number is reflected in echo_serial_number.

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

(returns tuple of integers) - Active G-codes for each modal group. G-code constants: 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

(returns tuple of integers) - currently homed joints, with 0 = not homed, 1 = homed.

id

(returns integer) - currently executing motion ID.

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, True if probe has tripped (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

(returns tuple of floats) - current interpreter settings:
settings[0] = sequence number,
settings[1] = feed rate, settings[2] = speed,
settings[3] = G64 P blend tolerance,
settings[4] = G64 Q naive CAM tolerance.

spindle

' (returns tuple of dicts) ' - returns the current spindle status, see The spindle dictionary.

spindles

(returns integer) - number of spindles. Reflects [TRAJ]SPINDLES INI value.

state

(returns integer) - current command execution status. One of RCS_DONE, RCS_EXEC, RCS_ERROR.

task_mode

(returns integer) - current task mode. One of MODE_MDI, MODE_AUTO, MODE_MANUAL.

task_paused

(gibt die ganze Zahl zurück) - Flag "Aufgabe angehalten".

task_state

(returns integer) - current task state. One of 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)

(returns dict of tooldata for toolno) - An initial stat.poll() is required to initialize. toolno must be greater than zero and less than or equal to the highest tool number in use. Dictionary items include all tooldata items: toolno, pocketno, diameter,frontangle,backangle,orientation, xoffset,yoffset, … woffset, comment.
As an example, the following script

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import linuxcnc
s = linuxcnc.stat()
s.poll()
toolno = 1
print(s.toolinfo(toolno))
produces the output:
': 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

The axis configuration and status values are available through a list of per-axis dictionaries. Here’s an example how to access an attribute of a particular axis: Note that many properties that were formerly in the axis dictionary are now in the joint dictionary, because on nontrivial kinematics machines these items (such as backlash) are not the properties of an axis.

max_position_limit

(returns float) - maximum limit (soft limit) for axis motion, in machine units.configuration parameter, reflects [JOINT___n__]MAX_LIMIT.

min_position_limit

(returns float) - minimum limit (soft limit) for axis motion, in machine units.configuration parameter, reflects [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) - Backlash in machine units. configuration parameter, reflects [JOINT___n__]BACKLASH.

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

(returns integer) - type of axis configuration parameter, reflects [JOINT___n__]TYPE with LINEAR=1, ANGULAR=2. See Joint INI configuration for details.

max_ferror

(returns float) - maximum following error. configuration parameter, reflects [JOINT___n__]FERROR.

max_hard_limit

(gibt ganze Zahlen zurück) - ungleich Null bedeutet, dass der maximale harte Grenzwert überschritten wird.

max_position_limit

(returns float) - maximum limit (soft limit) for joint motion, in machine units. configuration parameter, reflects [JOINT___n__]MAX_LIMIT.

max_soft_limit

ungleich Null bedeutet, dass max_position_limit überschritten wurde, int

min_ferror

(returns float) - configuration parameter, reflects [JOINT___n__]MIN_FERROR.

min_hard_limit

(gibt eine ganze Zahl zurück) - ungleich Null bedeutet, dass der minimale harte Grenzwert überschritten wird.

min_position_limit

(returns float) - minimum limit (soft limit) for joint motion, in machine units. configuration parameter, reflects [JOINT___n__]MIN_LIMIT.

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) - joint units per mm, or per degree for angular joints.
(joint units are the same as machine units, unless set otherwise by the configuration parameter [JOINT___n__]UNITS)

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) - rotational direction of the spindle with forward=1, reverse=-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.

Other commands may be sent only in appropriate state, and those tests can be a bit tricky. For instance, an MDI command can be sent only if:

  • 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

An appropriate test before sending an MDI command through linuxcnc.command.mdi() could be:

#!/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: [SPINDLE_FORWARD, SPINDLE_REVERSE, SPINDLE_OFF, SPINDLE_INCREASE, SPINDLE_DECREASE, or 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)

sends a operator text message to the screen (max 254 characters).

#!/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)

Set the machine state. Machine state should be STATE_ESTOP, STATE_ESTOP_RESET, STATE_ON, or STATE_OFF.

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)

Set trajectory mode. Mode is one of MODE_FREE, MODE_COORD, or MODE_TELEOP.

unhome(int)

Referenzpunkt eines bestimmten Gelenks auflösen (engl. unhome).

wait_complete([float])

Wait for completion of the last command sent. If timeout in seconds not specified, default is 5 seconds. Return -1 if timed out, return RCS_DONE or RCS_ERROR according to command execution status.

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.

Note that the NML channel for error messages has a queue (other than the command and status channels), which means that the first consumer of an error message deletes that message from the queue; whether your another error message consumer (e.g. AXIS) will see the message is dependent on timing. It is recommended to have just one error channel reader task in a setup.

#!/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