- Punkttabelle
- Werte in der Tabelle bearbeiten
- IK/FK-Zeile und Liste der IK-Lösungen
- Nicht verwendete Punkte
- Kontextmenü der Punkttabelle
- Punkteditor
- Was Apply schreibt
- Einfügen eines neuen Bewegungspunktes
- Linearachse (E1)
- Werkzeug- und Werkobjektdaten
- Direkt in der Bewegungsanweisung geschriebene Targets
▲ Punkttabelle
Alle im aktuellen Modul deklarierten Variablen vom Typ robtarget und jointtarget werden in zwei Tabellen unterhalb des Programmtextes aufgelistet. Neben den Koordinaten zeigt die Tabelle den Namensraum (den Fold oder die Routine, zu der die Deklaration gehört) und ob die Variable LOCAL, CONST oder PERS ist.
Die Tabelle folgt dem Cursor: Steht der Cursor auf einem Punktnamen im Programm, wird dieser Punkt in der Tabelle ausgewählt. Ein Doppelklick auf einen Punktnamen in der Tabelle springt zu seiner Deklaration.
Quaternions as RPY angles schaltet die Orientierungsspalten zwischen Quaternion (q1..q4) und Roll-/Pitch-/Yaw-Winkeln um.
Zahlen werden mit der in den ABB-Einstellungen festgelegten Genauigkeit ohne nachgestellte Nullen angezeigt; eine nicht angeschlossene externe Achse wird als 9E+09 angezeigt.
▲ Werte in der Tabelle bearbeiten
Koordinaten, Orientierung und externe Achsen können per Doppelklick auf eine Zelle geändert werden. Die Konfigurationsspalten (cf1, cf4, cf6, cfx) sind schreibgeschützt – sie werden neu berechnet.
- Nur die geänderte Zahl wird neu geschrieben. Der Rest der Deklaration – die übrigen Zahlen in ihrer ursprünglichen Schreibweise, die Abstände, das Semikolon und ein Kommentar dahinter – bleibt genau wie zuvor, sodass ein Vergleich der Programmversionen nur die tatsächlichen Änderungen zeigt.
- Eine Quaternion-Komponente ändert die gesamte Orientierung: Nach der Bearbeitung werden die vier Komponenten normiert und gemeinsam geschrieben. Eine Quaternion aus Nullen wird abgelehnt.
- Ein Wert, der keine Zahl ist, wird abgelehnt; es wird nichts geschrieben.
- Nach einer Änderung der Koordinaten werden die confdata aus der inversen Kinematik neu berechnet, wobei die Armkonfiguration erhalten bleibt, in der der Punkt geteacht wurde (siehe unten).
Ist die Roboterkonfiguration des Projekts verfügbar (system.xml, MOC.cfg und die Kinematik des Roboters), zeigt die Zeile über der Tabelle die Achswerte des ausgewählten robtarget (inverse Kinematik) bzw. die kartesische Position des ausgewählten jointtarget (Vorwärtskinematik) zusammen mit Werkzeug und Werkobjekt der Bewegungsanweisung dieses Punktes.
Die Dropdown-Liste unter dieser Zeile enthält alle IK-Lösungen innerhalb der Achsgrenzen. Die Lösung mit den confdata des Punktes ist mit * markiert und ausgewählt. Die Achsen 4 und 6 benötigen eventuell eine volle Umdrehung (±360°), um den in den confdata gespeicherten Quadranten zu erreichen – eine solche Lösung wird ebenfalls in die Liste aufgenommen, sodass die markierte Lösung immer zur Zeile darüber passt.
Copy joints values im Kontextmenü kopiert die Achswerte in Grad.
▲ Nicht verwendete Punkte
Ein Punkt, der im Modul nirgends verwendet wird, erscheint in grauer Kursivschrift mit einem Warnsymbol; der Tooltip erklärt den Grund. Ein Punkt gilt als verwendet, sobald sein Name außerhalb seiner eigenen Deklaration, von Kommentaren und Zeichenketten vorkommt – in einer Bewegungsanweisung, in Offs() oder RelTool(), in einer Zuweisung oder als Prozedurargument.
Markiert werden nur LOCAL-Punkte: Ein Punkt ohne LOCAL kann von einem anderen Modul der Task verwendet werden, fehlende Referenzen in diesem Modul sagen darüber also nichts aus.
▲ Kontextmenü der Punkttabelle
- Go to <name> declaration – springt zur Deklaration im Programm.
- Copy <name> homogeneous matrix / Copy <name> joints values – kopiert die Position im RoboDK-Format.
- Copy <name> coordinates – kopiert die gesamte Deklaration, z. B. robtarget p10:=[[...]];, direkt aus dem Programmtext, sodass die Zahlen ihre Schreibweise behalten. Der kopierte Text kann auch direkt in ein Programm eingefügt werden.
- Assign coordinates to <name> – wird nur angezeigt, wenn die Zwischenablage
Koordinaten derselben Art enthält (robtarget zu robtarget, jointtarget zu jointtarget). Ersetzt wird nur
der Wert der Deklaration – das Präfix
(LOCAL CONST robtarget p10:=), das Semikolon und ein Kommentar
bleiben unverändert.
In RAPID hat eine Position nur im Zusammenhang mit einem bestimmten \Tool und \WObj eine Bedeutung, und die Werte werden ohne jede Umrechnung zugewiesen. Werden die beiden Punkte mit unterschiedlichem Werkzeug oder Werkobjekt verwendet – oder lässt sich das nicht feststellen, weil einer von ihnen in keiner Bewegungsanweisung verwendet wird –, warnt der Editor und fragt vor der Zuweisung nach. - Cartesian distance (zwei robtargets ausgewählt) – TCP-Abstand, die Differenzen |X|, |Y|, |Z|
und der Winkel zwischen den beiden Orientierungen. Verwenden die Punkte unterschiedliche
Werkzeuge oder Werkobjekte, ist das Ergebnis nur eine Differenz der Rohkoordinaten, und das Fenster
weist darauf hin.
Axes distance (zwei jointtargets ausgewählt) – die Differenz in jeder Achse. - Select all.
Die Werkzeug- und Werkobjektdaten (tooldata,
wobjdata) werden aus allen Modulen der Task gelesen – aus
Systemmodulen (*.sys) und Programmmodulen (*.mod). Sie werden für die Kinematik und
für die oben beschriebenen Vergleiche von Werkzeug/Werkobjekt benötigt.
▲ Punkteditor
Der Punkteditor wird geöffnet über:
- Edit point im Kontextmenü des Programmtextes, auf einer Zeile mit einer Bewegungsanweisung oder mit einer robtarget- / jointtarget-Deklaration,
- Doppelklick auf eine solche Zeile.
Previous und Next wechseln zu den benachbarten Punkten, ohne das Fenster zu schließen.
Die Registerkarte Cartesian zeigt Position und Orientierung (Quaternion und RPY-Winkel) sowie die confdata, die Registerkarte Joint die Achswerte mit Schiebereglern, die auf die Achsgrenzen des Roboters begrenzt sind. Eine Änderung auf einer Registerkarte berechnet die andere neu. Die 3D-Vorschau zeigt den Roboter in der berechneten Stellung.
▲ Was Apply schreibt
- Ersetzt werden nur die geänderten Zahlen – dieselbe Regel wie in der Punkttabelle. Ein in ein Feld eingegebener Wert wird so geschrieben, wie er eingegeben wurde (3506.33, nicht 3506.330078125), die Quaternion wird als Vierergruppe geschrieben, und der Rest der Zeile (die übrigen Zahlen, die Bewegungsparameter, \WObj, das Semikolon, ein Kommentar) bleibt unverändert.
- Eine über mehrere Zeilen verteilte Deklaration wird nicht neu geschrieben – der Editor meldet dies, statt die Deklaration zu zerstören.
- confdata: Der Editor sucht die IK-Lösung mit den confdata des Punktes (einschließlich einer vollen Umdrehung von Achse 4 oder 6), sodass die Vorschau die Armkonfiguration zeigt, in der der Punkt geteacht wurde, und Apply die confdata beibehält. Hat keine Lösung innerhalb der Achsgrenzen diese confdata, meldet der Editor dies, die Vorschau zeigt die nächstgelegene Konfiguration, und Apply behält dennoch die confdata des Punktes bei. Die Konfiguration ändert sich nur, wenn Sie die Achsen auf der Registerkarte Joint bewegen.
Insert motion point (Roboter-Symbolleiste, Menü ABB oder Kontextmenü des Programmtextes) öffnet den Editor für einen neuen Punkt. Vor Apply wird nichts in das Programm eingefügt – wird das Fenster ohne Apply geschlossen, bleibt das Programm unverändert.
- Wählen Sie, ob der Punkt als robtarget oder jointtarget deklariert wird. Die Auswahl wird für das nächste Mal gespeichert.
- Der neue Punkt geht von der benachbarten Bewegung aus – der nächstgelegenen Bewegungsanweisung oberhalb des Cursors oder, falls es oberhalb keine gibt, unterhalb – zusammen mit deren \Tool und \WObj. Ist der Nachbar in der anderen Form gespeichert, wird seine Position umgerechnet (IK/FK). Ein von einem robtarget kopiertes robtarget behält seine confdata. Der Editor zeigt an, aus welcher Bewegung die Werte stammen. Beim Umschalten zwischen robtarget und jointtarget werden die Werte erneut vom Nachbarn übernommen, in der neuen Form.
- Der Name wird aus der Vorlage für Punktnamen erzeugt (siehe Rename Point).
- Cursor innerhalb einer Routine (PROC, FUNC, TRAP): Die Bewegungsanweisung kommt in die Zeile des Cursors, mit der Einrückung der benachbarten Zeilen. Die Deklaration (LOCAL CONST robtarget ...) kommt auf Modulebene – hinter die letzte Punktdeklaration vor der ersten Routine oder, falls das Modul keine hat, direkt vor die erste Routine und deren Kopfkommentar. Eine Datendeklaration im Rumpf einer Routine wäre ein Syntaxfehler.
- Cursor außerhalb der Routinen: Nur die Deklaration wird am Cursor eingefügt. Eine Bewegungsanweisung ist dort nicht zulässig; der Editor weist darauf hin und lässt sie weg.
- Das gesamte Einfügen ist ein Undo-Schritt.
▲ Linearachse (E1)
Bei einem Roboter auf einer Linearachse (Fahrbahn) sind die E1-Felder und der Schieberegler auf die Grenzen der Fahrbahn begrenzt, die aus MOC.cfg (Abschnitt ARM der Fahrachse) gelesen werden, in mm. Dieselben Grenzen werden zum Zeichnen der Fahrbahn in der 3D-Vorschau verwendet.
Der Wert 9E+09 bedeutet Achse nicht angeschlossen. Er wird im E1-Feld als 9E+09 (not connected) angezeigt und als 9E+09 zurückgeschrieben.
- Roboter ohne Linearachse: 9E+09 ist der einzig korrekte Wert für E1, die E1-Felder sind ausgeblendet, und es wird nichts gemeldet.
- Roboter mit Linearachse: Ein Punkt ohne Position der Fahrachse – oder ein neuer Punkt, dessen benachbarte Bewegung keine hat – kann weder berechnet noch geschrieben werden. Der Editor zeigt eine Meldung, das E1-Feld bleibt aktiv, und Apply wartet, bis die Position der Fahrachse eingegeben ist. Es wird nichts geraten.
▲ Werkzeug- und Werkobjektdaten
Die Kinematik benötigt die Werkzeug- und Werkobjektdaten der Bewegung. Werden sie in der Task nicht gefunden, kann die andere Form des Punktes nicht berechnet werden und die 3D-Vorschau wird nicht aktualisiert, Apply wird jedoch nicht blockiert – was in das Programm geschrieben wird, hängt nicht von ihnen ab:
- bei einem jointtarget werden die Achswerte aus der Registerkarte Joint unverändert geschrieben,
- bei einem robtarget werden die Koordinaten aus der Registerkarte Cartesian und die confdata unverändert geschrieben.
Der Editor berechnet IK und FK auch für Punkte mit externem TCP, jedoch nur, wenn die im Bewegungsbefehl verwendete Werkzeug- und Basiskonfiguration gültig ist – die Werkzeugdaten werden NICHT vom Roboter gehalten, und die Basisdaten WERDEN vom Roboter gehalten.
▲ Direkt in der Bewegungsanweisung geschriebene Targets
Manche Bewegungsanweisungen enthalten die Koordinaten direkt, z. B. MoveJ [[3496.33,-491.6,570.9],[...],[-1,0,0,0],[9E+09,...]],v1000,z50,tool1\WObj:=wobj1;
- Edit point auf einer solchen Zeile bearbeitet diese Koordinaten direkt an Ort und Stelle; Apply ersetzt nur die geänderten Zahlen innerhalb der Klammern.
- Declare rob/joint target (Kontextmenü des Programmtextes) deklariert für jedes direkt im Modul geschriebene Target eine neue LOCAL CONST-Variable mit eindeutigem Namen und setzt den Namen in die Bewegungsanweisung ein. Der Rest der Anweisung bleibt unverändert. Die Namensvorlage wird in den Einstellungen des Plugins Rename Point festgelegt.