Skip to main content

CNC-Beispiel 16: Restweg löschen (G31)

Sehen Sie hierzu das Beispielprojekt CNC16_G31.project im Installationsverzeichnis von CODESYS unter ..\CODESYS SoftMotion\Examples.

Das Beispielprojekt zeigt, wie die Funktion "Restweg Löschen" verwendet wird.

Im Beispiel fährt die Maschine in X-Richtung bis eine Lichtschranke bei X=50 durchfahren wird. Sowie die Lichtschranke erreicht ist, muss die Maschine anhalten. Der verbleibende G-Code wird von dieser Position aus weitergeführt.

Aufbau der Applikation

Der Aufbau ist für CNC-Applikationen typisch. In der Hintergrund-Task (PathTask) wird der G-Code eingelesen. In dieser Task findet auch die Bahnvorverarbeitung statt. In der Bustask (MainTask) wird die Interpolation ausgeführt.

Folgender G-Code wird verwendet. In Satz N10 wird per Eilgang nach X = 20 verfahren, dann wird mit G31 (Restweg löschen) nach X = 100 verfahren, anschließend in Satz N30 mit einer Linearbewegung nach X = 20, Y = 50.

N10 G0 X20 F100 E1000 E-1000
N20 G31 X100
N30 G1 X20 Y50

Für die Funktion "Restweg Löschen" ist insbesondere das Zusammenspiel zwischen Interpolator und Interpreter wichtig.

  1. Der Interpreter dekodiert den G-Code und erzeugt für Satz N20 eine Gerade von X=20 bis X=100. Danach stoppt er das Dekodieren.

  2. Der Interpolator führt die Linearbewegung aus und gibt gleichzeitig am Ausgang udiActProbe die Probe-Nummer aus. Für G31 ist die Probe-Nummer immer 1.

  3. In der Applikation wird der Interpolator mit bQuick_Stop gestoppt, sobald der Antrieb die Position X = 50 überfährt. (Dies simuliert die Lichtschranke.)

    _sm_img_example_cnc16_1.png
  4. In der Bustask wird die aktuelle Position der Maschine mit dem Funktionsbaustein SMC_SetInterpreterStartPosition laufend kopiert.

    _sm_img_example_cnc16_2.png
  5. In der Pathtask wird die Startposition dem Eingang SMC_NCInterpreter.piStartPosition zugewiesen:

    inter(
        sentences:= read.sentences,
        bExecute:= read.bExecute,
        nSizeOutQueue:= SIZEOF(bufIpo),
        pbyBufferOutQueue:= ADR(bufIpo),
        piStartPosition:= Main.setStart.StartPos);
  6. Sobald der Interpolator gestoppt ist, wird der G31-Befehl mithilfe des Eingangs bAcknProbe quittiert. In einer realen Applikation sollte an dieser Stelle noch zusätzlich geprüft werden, ob die Achsen auch tatsächlich an der Stop-Position angekommen sind. Dazu kann der Baustein SMC_InPosition verwendet werden.

    _sm_img_example_cnc16_4.png
  7. Dies führt dazu, dass der Interpreter die Dekodierung wieder aufnimmt, aber mit der aktualisierten Startposition, so dass der folgende Satz N30 von der Position X = 55.5 gestartet wird.

Im Trace lässt sich dieser Ablauf nachverfolgen. Die Zahlen in Klammern verweisen auf die jeweiligen Schritte im oben skizzierten Ablauf.

_sm_img_example_cnc16_5.png

Inbetriebnahme

  1. Übersetzen Sie die Applikation und laden Sie sie auf eine Steuerung.

  2. Öffnen Sie den Trace und laden ihn auf die Steuerung.

  3. Starten Sie die Applikation und öffnen Sie die Visualisierung.