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.
Der Interpreter dekodiert den G-Code und erzeugt für Satz
N20eine Gerade vonX=20bisX=100. Danach stoppt er das Dekodieren.Der Interpolator führt die Linearbewegung aus und gibt gleichzeitig am Ausgang
udiActProbedie Probe-Nummer aus. Für G31 ist die Probe-Nummer immer 1.In der Applikation wird der Interpolator mit
bQuick_Stopgestoppt, sobald der Antrieb die PositionX = 50überfährt. (Dies simuliert die Lichtschranke.)
In der Bustask wird die aktuelle Position der Maschine mit dem Funktionsbaustein
SMC_SetInterpreterStartPositionlaufend kopiert.
In der
Pathtaskwird die Startposition dem EingangSMC_NCInterpreter.piStartPositionzugewiesen:inter( sentences:= read.sentences, bExecute:= read.bExecute, nSizeOutQueue:= SIZEOF(bufIpo), pbyBufferOutQueue:= ADR(bufIpo), piStartPosition:= Main.setStart.StartPos);
Sobald der Interpolator gestoppt ist, wird der G31-Befehl mithilfe des Eingangs
bAcknProbequittiert. 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.
Dies führt dazu, dass der Interpreter die Dekodierung wieder aufnimmt, aber mit der aktualisierten Startposition, so dass der folgende Satz
N30von der PositionX = 55.5gestartet wird.
Im Trace lässt sich dieser Ablauf nachverfolgen. Die Zahlen in Klammern verweisen auf die jeweiligen Schritte im oben skizzierten Ablauf.

Inbetriebnahme
Übersetzen Sie die Applikation und laden Sie sie auf eine Steuerung.
Öffnen Sie den Trace und laden ihn auf die Steuerung.
Starten Sie die Applikation und öffnen Sie die Visualisierung.