KRC Grundfunktionen
Diese Seite beschreibt den einfachen KRC-Editor – den allgemeinen Viewer für normale KUKA-Dateien .src/.dat, die nicht auf der festen VW/VKRC-Programmstruktur eines bestimmten Kunden aufbauen. Das Dokument wird laufend erweitert, sobald neue Funktionen im KRC-Viewer hinzukommen.





▲ Überblick

Anders als der VKRC-Editor setzt der KRC-Viewer kein bestimmtes Technologiepaket oder Programmlayout eines Kunden voraus. Stattdessen erkennt er die Struktur direkt im KRL-Text selbst: Daher heißt ein Punkt lokal, wenn seine Deklaration in der eigenen .dat-Datei des aktuellen Programms steht, und global (oder HOME), wenn er aus einem gemeinsamen Positionspool stammt, den mehrere Programme gleichzeitig nutzen (separat in den Einstellungen des Editors konfiguriert). Diese Unterscheidung ist für mehrere der folgenden Funktionen wichtig.




▲ Folds – Zuklappen, Aufklappen und ihre Grenzen

Jedes Paar ;FOLD / ;ENDFOLD kann, unabhängig davon, wie tief es in anderen Folds verschachtelt ist, durch Klicken auf das schwarze oder weiße Dreieck daneben zu- oder aufgeklappt werden, oder indem Sie den Cursor hineinsetzen und Ctrl+Q drücken.

Die schließende Zeile ;ENDFOLD eines Folds wird zusammen mit dem übrigen Inhalt des Folds ein- oder ausgeblendet – sie verhält sich genau wie jede andere Zeile im Fold, nicht wie eine separate, immer verborgene Markierung. Das entspricht KRL selbst, das für jeden Block ein explizites schließendes Schlüsselwort verlangt (IF/ENDIF, WHILE/ENDWHILE, SWITCH/ENDSWITCH, ...): Der Editor zeigt Ihnen das passende ;ENDFOLD, sobald der Fold geöffnet ist, sodass die schließende Grenze nie implizit bleibt oder erraten werden muss.

Ein neuer Fold lässt sich aus den markierten Zeilen mit KRC » Make FOLD from selected text erstellen; Bewegungspunkte sollten nicht in andere Folds gelegt werden – siehe Kommentare und Folds.




▲ Punkteditor

Der KRC-Editor hat einen integrierten Punkteditor für die drei grundlegenden Bewegungsarten PTP, LIN und CIRC. Er bearbeitet den Punkt selbst (Koordinaten, sowohl kartesisch als auch als Achswerte, mit 3D-Vorschau) und das Inline-Formular der Bewegung – Art, Geschwindigkeit, Überschleifen, Punktname, Werkzeug, Basis –, sodass eine vollständige Bewegung in einem Fenster geändert werden kann, ohne den rohen Fold-Text anzufassen.

Er öffnet sich per Doppelklick auf den Bewegungs-Fold, über Edit point coordinates im Kontextmenü des Editors oder per Doppelklick auf den Punkt in der Punkttabelle.

Insert motion point (Roboter-Werkzeugleiste) geht den umgekehrten Weg: Es fügt eine neue PTP-Bewegung in der Zeile des Cursors ein – mit Koordinaten null, Werkzeug 0 und Basis 0 und mit der nächsten freien Punktnummer als Vorschlag – und öffnet dasselbe Fenster dafür, sodass die neue Bewegung an einer Stelle fertiggestellt wird. Wird dieses Fenster ohne Apply geschlossen, wird das Einfügen rückgängig gemacht. Siehe Neue Bewegung einfügen.


Punkteditor – vollständige Beschreibung » (Koordinaten und Achsen, die Leiste der Bewegungsparameter, Umbenennen eines Punkts, Ändern der Bewegungsart, Achspunkte und kartesische Punkte, was Apply schreibt und wohin, sowie die Sicherheitsoptionen für globale Positionen)




▲ Punkttabelle

Die Tabelle unter dem Editor listet die Positionen des geöffneten Programms auf – kartesische Punkte und Achspunkte in zwei getrennten Tabellen, jeweils mit dem zugehörigen Werkzeug, der Basis und den Bewegungsparametern. Das Kontextmenü hat das Untermenü Path (TCP) mit den Path toolsn (Bahnlänge, Bewegungszeit, CIRC-Informationen, Prüfung von C_DIS und TRIGGER WHEN PATH, Einfügen eines Punkts auf der Bahn in einem vorgegebenen Abstand).


In der Abbildung oben werden XP1 bis XP4 von den im Programmtext sichtbaren Bewegungen verwendet, XP5 ist in derselben .dat-Datei deklariert, aber keine Bewegung verweist darauf, und die untere Tabelle enthält die beiden Achspositionen XHOME1/XHOME2 aus $config – einer globalen Datei, die alle Programme dieses Roboters gemeinsam nutzen.

▲ Spalten, Symbole und Farben


Der Streifen über jeder Tabelle zeigt die gewählte Position in der jeweils anderen Darstellung: Achswerte für einen kartesischen Punkt, kartesische Koordinaten für einen Achspunkt. Für eine Achsposition zeigt er außerdem S (Status) und T (Turn) dieser Stellung, berechnet aus den Achswerten – eine E6AXIS-Deklaration hat diese Felder nicht, sie werden aber jedes Mal benötigt, wenn die Position als E6POS geschrieben werden soll.
▲ Nicht verwendete Deklarationen anzeigen

Settings » KRC » Others » Show points declared in .dat but not used in the program (standardmäßig aktiviert) legt fest, ob die oben beschriebenen grau-kursiven Einträge überhaupt aufgelistet werden.

Mit eingeschalteter Option beantwortet die Tabelle die Frage „Gibt es diese Position noch?“ – nach einem Umbenennen, nach dem Löschen einer Bewegung oder wenn eine .dat-Datei von einem anderen Werkzeug geschrieben wurde. Mit ausgeschalteter Option listet die Tabelle nur Positionen, die tatsächlich von einer Bewegung verwendet werden – genau wie vor Einführung dieser Option.

Ein Doppelklick auf den Namen eines verwendeten Punkts setzt den Cursor des Editors auf seine Bewegung. Für einen nicht verwendeten Punkt gibt es keine Zeile, zu der gesprungen werden könnte; der Editor nennt dann die .dat-Datei, in der die Deklaration steht, statt nichts zu tun.

Die Option gilt auch für nicht verwendete globale/HOME-Positionen, und eine gemeinsame Positionsdatei enthält davon meist weit mehr, als das geöffnete Programm lokale Punkte hat. Wird die Tabelle in einer Zelle mit großem gemeinsamem Positionspool zu unübersichtlich, ist dies der Schalter, den Sie ausschalten sollten.

▲ Werte in der Tabelle bearbeiten

In der Tabelle können Sie bearbeiten:

Lokale und globale/HOME-Punkte werden sehr unterschiedlich gespeichert – das sollten Sie verstehen, bevor Sie einen davon bearbeiten:
  • eine Änderung an einem lokalen Punkt (deklariert in der eigenen .dat-Datei des aktuellen Programms) wird nur im Speicher gehalten und sofort in der Tabelle angezeigt – in die .dat-Datei geschrieben wird sie erst, wenn Sie das Programm speichern (mit derselben Speicheraktion wie für den Rest der Datei);
  • eine Änderung an einem globalen oder HOME-Punkt wird sofort nach Ihrer Bestätigung in dessen eigene gemeinsame .dat-Datei geschrieben – für diese Punkte gibt es keinen Zustand „ungespeicherte Änderungen“, und das Speichern (oder Nichtspeichern) des gerade geöffneten Programms hat überhaupt keinen Einfluss auf sie.

Da das Bearbeiten eines globalen/HOME-Punkts sofort eine mit anderen Programmen gemeinsam genutzte Datei ändert, zeigt der Editor beim ersten Mal in einer laufenden Sitzung einen Bestätigungsdialog, der genau dies erklärt, mit dem Kontrollkästchen "Don't show this message again" (es wird beim nächsten Programmstart zurückgesetzt, sodass die Warnung nie dauerhaft abgeschaltet ist). Antworten Sie in diesem Dialog mit "No" oder schlägt das Schreiben aus irgendeinem Grund fehl (z. B. weil die Zieldatei von einer anderen laufenden Instanz des Editors gesperrt ist), springt die Tabellenzelle auf den Wert zurück, der tatsächlich auf der Festplatte steht – sie zeigt also nie einen Wert an, dessen Speicherung unbemerkt fehlgeschlagen ist.

▲ Kontextmenü (Rechtsklick) der Punkttabelle

Was das Menü anbietet, hängt von der angeklickten Zelle und der Anzahl der gewählten Zeilen ab. Beide Tabellen – kartesisch und Achsen – haben dasselbe Menü, mit Ausnahme des Abstands.


Die Abbildung zeigt das Menü für zwei gewählte Punkte, geöffnet auf der Spalte Y.

Eintrag Angezeigt wenn Funktion
Jump to point definition Rechtsklick auf den Punktnamen oder auf die Spalte Module öffnet die .dat-Datei, in der die Deklaration steht, und springt direkt dorthin – für lokale, globale und nicht verwendete Punkte gleichermaßen. In der Spalte Module enthält das Menü außerdem Open file (siehe Spalte Module).
Set equal <column> value for selected points Rechtsklick auf eine Koordinatenspalte (X..C / A1..A6, E1..E6) fragt nach einem Wert und setzt ihn entweder in dieser Spalte jedes gewählten Punkts (Set new value) oder addiert ihn zu den aktuellen Werten (Add to the old value) – z. B. um eine Gruppe von Punkten um 10 mm in Z zu verschieben. Von der Änderung betroffene globale Punkte werden einmal pro gemeinsamer .dat-Datei geschrieben, nicht einmal pro Punkt.
Set equal Tool value / Base value for selected points Rechtsklick auf die Spalte Tool oder Base setzt für alle gewählten Punkte dieselbe Werkzeug- oder Basisnummer, mit einer gemeinsamen Frage, ob ihre Koordinaten für den neuen Frame neu berechnet werden sollen (siehe Werte in der Tabelle bearbeiten).
Cartesian distance genau zwei Punkte in der kartesischen Tabelle gewählt zeigt den TCP-Abstand der beiden Punkte und die Differenzen |X|, |Y|, |Z|, |A|, |B|, |C|. Verwenden die Punkte unterschiedliche Werkzeuge oder Basen, warnt das Fenster, dass das Ergebnis nur eine Differenz der rohen Koordinaten ist, kein echter physischer Abstand.
Copy <name> coordinates
Assign coordinates to <name>
genau ein Punkt gewählt; Assign nur, wenn die Zwischenablage eine kopierte Position enthält kopiert die Position eines Punkts zusammen mit Werkzeug und Basis und weist sie einem anderen zu – siehe Koordinaten kopieren und zuweisen unten.
Copy selected coordinates as plain text mindestens eine Zeile gewählt kopiert die gewählten Zeilen mit einer Kopfzeile als tabulatorgetrennten Text – bereit zum Einfügen in eine Tabellenkalkulation oder einen Bericht.
Select all die Tabelle ist nicht leer wählt alle Punkte der Tabelle aus, z. B. vor einem der Einträge "Set equal".


▲ Koordinaten kopieren und zuweisen

Copy coordinates und Assign coordinates to ... (Kontextmenü der Tabelle und des Programmtexts) übertragen eine vollständige Position von einem Punkt auf einen anderen. Übertragen wird die Position selbst zusammen mit Werkzeug und Basis – nicht die Bewegungsparameter. Beide Tabellen bieten diese Befehle an, die kartesische und die Achstabelle: Eine als Achswerte gespeicherte Position ist ein gewöhnlicher Punkt, und die Zwischenablage trägt die Speicherform mit, sodass die empfangende Seite immer weiß, welche der beiden sie erhalten hat.

Typische Anwendungen: Der Editor prüft drei Dinge, bevor er etwas schreibt: Ein Punkt, der deklariert, aber nicht verwendet wird (grau-kursiv in der Tabelle), kann ebenfalls Quelle und Ziel beider Befehle sein. Ein solcher Punkt hat keinen Bewegungs-Fold und daher auch kein explizites Werkzeug und keine Basis: Der Editor sucht seine Frame-Deklaration über den Namen (XP5 → FP5) und kopiert, falls es keine gibt, nur die Position.

Sind Werkzeug und Basis auf einer der beiden Seiten unbekannt, können sie nicht verglichen werden, und der Editor kann auch keine Neuberechnung der Position anbieten. Er weist darauf hin und fragt, ob die Zahlen genau so zugewiesen werden sollen, wie sie kopiert wurden – das ist richtig, wenn beide Punkte dasselbe Werkzeug und dieselbe Basis verwenden, und falsch, wenn nicht. Bei einem Achspunkt stellt sich die Frage nicht, weil Achswerte nicht von Werkzeug oder Basis abhängen.

▲ Spalte Module – Deklaration öffnen

Das Kontextmenü der Spalte Module bietet:



▲ Kopieren, Ausschneiden und Einfügen von Punkten und Folds

Markierungen können wie überall im Editor kopiert, ausgeschnitten und eingefügt werden (Ctrl+C / Ctrl+X / Ctrl+V), mit zwei Regeln, die sich aus der Fold-basierten Struktur von KRC ergeben:



▲ Protect Folds

Menü KRC » Protect Folds ist ein Kontrollkästchen, standardmäßig aktiviert. Solange es eingeschaltet ist, blockiert der Editor Tippen, Delete, Backspace, Enter und Ausschneiden/Einfügen innerhalb des Inhalts jedes Folds, einschließlich verschachtelter Unter-Folds – nur einfache Programmlogik außerhalb aller Folds kann weiterhin direkt als Text bearbeitet werden.

Folge: Um etwas zu ändern, das in einem Fold steht – z. B. die Koordinaten eines Bewegungspunkts oder die Parameter eines Technologiebefehls –, verwenden Sie die auf dieser Seite beschriebenen Werkzeuge (den Punkteditor, die Punkttabelle oder einen Doppelklick auf einen erkannten Befehls-Fold, um dessen Parameterdialog erneut zu öffnen), statt den rohen Text zu bearbeiten. Das ist beabsichtigt: Der Fold-Inhalt trägt meist Daten (Punkt-/Frame-/Bewegungsreferenzen oder die Parameter eines Technologiebefehls), die im reinen Text nicht vollständig sichtbar sind, sodass freie Textänderungen das Angezeigte unbemerkt vom tatsächlich Gemeinten entkoppeln könnten.

Protect Folds kann im selben Menü (oder in den Einstellungen des Editors, Seite KRC) ausgeschaltet werden, wenn Sie gezielt rohen Fold-Text von Hand bearbeiten müssen – z. B. um einen Fold zu reparieren, den der Editor überhaupt nicht erkennt. Das geschieht auf eigenes Risiko: Bei ausgeschaltetem Schutz kann eine Änderung, die die Struktur eines Folds inkonsistent hinterlässt, auch den Undo/Redo-Verlauf der Datei löschen (siehe Bekannte Einschränkungen unten).




▲ Befehle aus einem KRL-Befehlskatalog (.kop / .kfd) einfügen

Menü KRC » KRL Commands ist ein Untermenü, das aus einem KRL-Befehlskatalog erzeugt wird: einem Ordner mit .kfd-Dateien und/oder .kop-Paketen, die jeweils eine oder mehrere Befehlskategorien und die daraus einfügbaren Befehle ("InlineForms") beschreiben. Es ist dasselbe Dateiformat, das KUKAs eigenes smartHMI, WorkVisual und OrangeEdit für ihre Inline-Befehlsvorlagen verwenden – also kein von diesem Editor erfundenes Format.

Der Katalogordner wird einmalig unter Settings » KRC » General » KRL Command Catalog konfiguriert.

Der Katalog wird nur einmal beim Programmstart eingelesen. Ein in einer .kfd/.kop-Datei definierter Befehl erscheint erst im Menü KRL Commands, wenn:
  • die Datei tatsächlich im konfigurierten Katalogordner liegt, und
  • der Editor danach (neu) gestartet wurde – das bloße Hinzufügen, Bearbeiten oder Ersetzen einer Datei in diesem Ordner oder das Ändern des Ordnerpfads in den Einstellungen aktualisiert ein bereits geöffnetes Menü KRL Commands nicht.
Mit anderen Worten: Die Befehle eines Kunden oder eines Technologiepakets (z. B. eines bestimmten Punktschweiß- oder Klebepakets) müssen zuerst auf diese Weise importiert werden, bevor sie überhaupt aus dem Menü eingefügt werden können.

Die Auswahl eines Befehls im Menü öffnet einen Parameterdialog (sofern der Befehl konfigurierbare Parameter hat), in dem Sie die Werte wählen, bevor der Befehl an der Cursorposition eingefügt wird. Wird er in ein Programm eingefügt und als Bewegungspunkt erkannt, wird der erzeugte Text automatisch in einen eigenen zusammenklappbaren Block ;FOLD ... ;ENDFOLD eingeschlossen, und ein späterer Doppelklick auf diesen Fold öffnet erneut denselben Parameterdialog, vorbelegt mit den aktuellen Werten, sodass sie geändert werden können.

Eine einfache PTP/LIN/CIRC-Bewegung öffnet per Doppelklick immer den integrierten Punkteditor, auch wenn der geladene Katalog zufällig eine passende Befehlsvorlage enthält – der integrierte Editor bietet für diese drei Bewegungen mehr (Koordinaten, beide Darstellungen, 3D-Vorschau) als ein allgemeines Parameterformular.





▲ Syntaxprüfung – was "Check syntax" tatsächlich prüft

Menü KRC » Check syntax (F6) parst das Programm anhand der im Editor eingebauten KRL-Grammatik.

Diese Prüfung beschränkt sich auf die Sprachelemente, die tatsächlich im Editor programmiert sind. Sie erkennt die Struktur der KRL-Sprache selbst – Bewegungsbefehle, Kontrollfluss, Variablendeklarationen usw. –, kennt aber nicht die konkrete Form (Anzahl der Parameter, gültige Bereiche, zulässige Auswahlwerte) von kunden- oder herstellerspezifischen Technologiebefehlen.

Ein aus einem .kop/.kfd-Katalog (siehe oben) erzeugter Befehl wird zu gewöhnlichem KRL-Text, sobald er in das Programm geschrieben ist; "Check syntax" kann daher nicht prüfen, ob seine Parameter noch der Definition dieses Befehls entsprechen – diese Prüfung erfolgt nur einmal, nämlich beim Einfügen (oder erneuten Bearbeiten) des Befehls über seinen Parameterdialog. Ein von Hand getippter oder eingefügter Befehl oder einer aus einem Paket, das der Editor nie erhalten hat (nicht wie oben beschrieben importiert), wird von "Check syntax" nicht beanstandet, auch wenn er gegen die Regeln dieses Pakets verstößt, weil die Prüfung den Befehl schlicht nicht kennt.




▲ Go to definition und Find all references

Wenn die Konfiguration eines Roboterarchivs ($config.dat) geladen ist, erstellt der Editor im Hintergrund einen Index aller .src-, .sub- und .dat-Dateien dieses Archivs. Danach bietet das Kontextmenü auf einem Namen im Programm: Der Index gehört zu einem Archiv: In einer Datei eines anderen Roboters werden die Einträge nicht angeboten. Während der Index erstellt wird, zeigt das Menü deaktiviert Go to definition (building KRL symbol index...). Die Zeilennummern im Menü und in der Referenzliste sind die im Editor angezeigten Nummern.

  
Links: MsgQuit ist dreimal definiert – jeder Kandidat mit Datei und Zeile. Rechts: Find all references, die Definition fett.





▲ Bekannte Einschränkungen