In diesem Abschnitt wird gezeigt, wie Sie kleine Änderungen für einen vorhandenen Postprozessor vornehmen.
Als Beispiel werden die folgenden 3 Änderungen am bestehenden KUKA KRC4 Postprozessor vorgenommen:
●Überschreiben Sie die maximale Geschwindigkeit auf 500 mm/s. Selbst wenn der Roboter so programmiert wird, dass er sich schneller bewegt, ist die Geschwindigkeit im Postprozessor somit auf 500 mm/s begrenzt.
●Generieren Sie jedes Programm als separate Datei und beschränken Sie die Programme auf maximal 3000 Codezeilen. Große Programme werden dadurch in kleinere Programme unterteilt und nacheinander aufgerufen
Der vorherige Abschnitt zeigt, wie Sie einen vorhandenen Postprozessor zur Bearbeitung öffnen:
1.Wählen Sie Program➔Postprozessor hinzufügen/ändern
2.Wählen Sie KUKA_KRC4
3.Wählen Sie OK. Der Postprozessor wird im IDLE-Editor von Python angezeigt.
In den folgenden Abschnitten wird gezeigt, wie Sie diese Änderungen im Texteditor vornehmen.
Machen Sie die folgenden Änderungen, um zu vermeiden, dass Sie mehr als ein Programm pro Datei hinzufügen und höchstens Programme mit 3000 Zeilen Code erstellen:
1.Setzen Sie die Variable MAX_LINES_X_PROG auf 3000
2.Setzen Sie die Variable INCLUDE_SUB_PROGRAMS auf False

Befolgen Sie diese Schritte, um eine Geschwindigkeitsbegrenzung von 500 mm/s festzulegen und unterbinden Sie die Einstellung höherer Geschwindigkeiten in RoboDK:
1.Suchen Sie die setSpeed Funktionsdefinition (def setSpeed)
2.Fügen Sie die folgende Zeile hinzu, bevor Sie die Ausgabe $VEL.CP erzeugen, die die Geschwindigkeit in m/s ändert:
speed_mms = min(speed_mms, 500)

Dieser Abschnitt zeigt, wie Sie das Festlegen des Bezugssystems eines bestehenden Postprozessors anpassen können. Zum Beispiel das Festlegen eines benutzerdefinierten Bezugssystems für einen KUKA-Roboter.
Sie können kompilierte Postprozessoren verwenden und dabei ganz einfach nur die notwendigen Funktionen neu implementieren (zum Beispiel setFrame, setTool oder setSpeed).
In diesem Beispiel gehen wir davon aus, dass wir anpassen möchten, wie die Basis für eine KUKA-Steuerung definiert wird. Wenn Sie zum Beispiel beim Festlegen des Bezugssystems die folgende Zeile ausgeben möchten:
BASE_DATA[8] = {FRAME: X:2000, Y:0, Z:0, A:0, B:0, C:0}
BAS (#BASE,8)
Sie müssen lediglich eine neue Datei mit dem Namen KUKA_Custom_Post.py im Ordner C:/RoboDK/Posts/ mit den folgenden wenigen Zeilen erstellen, die den Standard-Postprozessor KUKA_KRC2 verwendet und das Festlegen des Bezugssystems (Funktion setFrame) überschreibt:
from KUKA_KRC2 import RobotPost as MainPost
class RobotPost(MainPost):
def setFrame(self, pose, frame_id, frame_name):
"""Change the robot reference frame"""
self.addline('; BASE_DATA[8] = {FRAME: %s}' % (self.pose_2_str(pose)))
self.addline('BAS (#BASE,8)')
Wir könnten jedoch benutzerdefinierte Filter basierend auf bestimmten Kriterien hinzufügen, um zwischen dem Standardverhalten und einer benutzerdefinierten Implementierung zu unterscheiden. Die Postprozessor-Datei könnte dann wie folgt geändert werden:
from KUKA_KRC2 import RobotPost as MainPost
class RobotPost(MainPost):
def setFrame(self, pose, frame_id, frame_name):
"""Change the robot reference frame"""
if frame_name == "Frame 4": # Enter any condition here
# Trigger the call to the default method (same as not overriding the function)
super(MainPost, self).setFrame(pose, frame_id, frame_name)
return
# Implement a custom setFrame
self.addline('; ---- Setting reference: %s ----' % frame_name)
self.addline('; BASE_DATA[8] = {FRAME: %s}' % (self.pose_2_str(pose)))
self.addline('BAS (#BASE,8)')
self.addline('; --------------------------')
Beim Generieren von Programmen für KUKA-KRC-Steuerungen gibt es viele Möglichkeiten, das Koordinatensystem bzw. Bezugssystem festzulegen. Die folgende Definition von setFrame zeigt eine alternative Implementierung mit verschiedenen Optionen:
def setFrame(self, pose, frame_id, frame_name):
"""Change the robot reference frame"""
self.addline('; ---- Setting reference: %s ----' % frame_name)
# option 1: Build the kinematics based on the MACHINE_DEF array and the provided offset
#self.addline('$BASE = EK (MACHINE_DEF[2].ROOT, MACHINE_DEF[2].MECH_TYPE, { %s })' % self.pose_2_str(pose))
# option 2: Build the kinematics based on the EX_AX_DATA array and the provided offset
#self.addline('$BASE=EK(EX_AX_DATA[1].ROOT,EX_AX_DATA[1].EX_KIN, { %s })' % self.pose_2_str(pose))
# Option 3: Build the kinematics based on the EX_AX_DATA array and the pre-defined offset
#self.addline('; Using external axes')
#self.addline('; $BASE=EK(EX_AX_DATA[1].ROOT,EX_AX_DATA[1].EX_KIN,EX_AX_DATA[1].OFFSET)')
#self.addline('; $ACT_EX_AX= %i' % (self.nAxes - 6))
# Option 4: Use the BAS(#ex_BASE) init function from the BAS.src file
#self.addline('; BASE_DATA[%i] = {FRAME: %s}' % (self.BASE_ID, self.pose_2_str(pose)))
#self.addline('BAS(#ex_BASE,%i)' % self.BASE_ID)
# Option 5: Use the BAS(#BASE) init function from the BAS.src file
self.addline('; BASE_DATA[%i] = {FRAME: %s}' % (self.BASE_ID, self.pose_2_str(pose)))
self.addline('BAS (#BASE,%i)' % self.BASE_ID)
# Option 6: Directly take the base from the BASE_DATA array (usually what the BAS(#BASE) does)
# self.addline('$BASE=BASE_DATA[%i]' % self.BASE_ID)
self.addline('; --------------------------')
Dieser Abschnitt zeigt Ihnen, wie Sie einen bestehenden Postprozessor so anpassen können, dass eine Achsbewegung anhand von Achswerten anstelle von kartesischen Werten erzwungen wird.
In diesem Beispiel wenden wir diese Änderung auf eine ABB-IRC5-Robotersteuerung an.
1.Suchen Sie das Programmierhandbuch Ihrer Robotersteuerung. In diesem Beispiel verwenden wir das ABB-IRC5-RAPID-Programmierhandbuch.
2.Suchen Sie nach den Befehlen für Achsbewegungen. In diesem Fall lautet der Befehl für die absolute Achsbewegung bei ABB MoveAbsJ. Dieser Befehl benötigt eine jointtarget-Variable, die die Achsen definiert.

3.Wählen Sie Program→Add/Edit Post Processor und wählen Sie den Postprozessor aus, den Sie derzeit verwenden, um ihn zu bearbeiten. Wenn Sie derzeit einen anpassbaren Postprozessor verwenden, wird dieser standardmäßig ausgewählt.
4.Suchen Sie im Postprozessor nach der Funktion MoveJ. Diese Funktion legt fest, wie der Postprozessor die Befehle für Achsbewegungen erzeugt. Für lineare Bewegungen verwendet RoboDK stattdessen MoveL. Ändern Sie mithilfe von Python die Zeile, die der Programmdatei hinzugefügt wird, sodass sie die Achswinkelinformationen bereitstellt, wie im folgenden Bild gezeigt.

5.Abschließend müssen Sie möglicherweise anpassen, wie der Postprozessor die Achswinkel oder die Pose in eine Zeichenkette umwandelt. Die Funktionen angles_2_str und pose_2_str legen fest, wie die Achswinkel bzw. eine Pose in Text umgewandelt werden.

Die meisten RoboDK-Postprozessoren verwenden für Achsbewegungen Achsdaten und für lineare Bewegungen kartesische Koordinaten. Es wird empfohlen, den ersten Punkt einer Sequenz linearer Bewegungen stets als Achsbewegung mit Angabe von Achskoordinaten zu beginnen. Dadurch wird vermieden, dass ein Programm mit einer falschen Roboterkonfiguration startet und eine Singularität oder Achsgrenzen erreicht.