RAPID Referenzhandbuch
RAPID Referenzhandbuch
RAPID Referenzhandbuch
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
<strong>RAPID</strong> <strong>Referenzhandbuch</strong><strong>RAPID</strong>-ÜberblickSteuerungssoftware IRC5RobotWare 5.0
<strong>RAPID</strong> <strong>Referenzhandbuch</strong>3HAC 16580-3Revision ASteuerungssoftware IRC5<strong>RAPID</strong>-ÜberblickInhaltRobotWare 5.0Einleitung<strong>RAPID</strong> ZusammenfassungGrundlegende EigenschaftenBewegung und E/A-PrinzipienOffline-ProgrammierungVordefinierte Daten und ProgrammeGlossarIndex<strong>RAPID</strong>-Überblick
Inhalt6.4 Aktivieren von Ausgängen oder Interrupts an bestimmten Positionen.......................... 216.5 Steuerung des analogen Ausgangssignals proportional zum aktuellen TCP.................. 216.6 Bewegungssteuerung bei einem Fehler/Interrupt........................................................... 226.7 Abrufen von Roboterdaten in ein MultiMove-System................................................... 226.8 Steuern externer Achsen................................................................................................. 226.9 Unabhängige Achsen...................................................................................................... 236.10 Korrektur der Bahn....................................................................................................... 246.11 Bahnaufzeichnung ........................................................................................................ 246.12 Förderer-Tracking.........................................................................................................256.13 Synchronisierung des Sensors ...................................................................................... 256.14 Lastidentifikation und Kollisionserkennung ................................................................ 256.15 Positionierfunktionen ................................................................................................... 266.16 Prüfen der unterbrochenen Bahn nach Stromausfall .................................................... 266.17 Statusfunktionen........................................................................................................... 266.18 Bewegungsdaten........................................................................................................... 276.19 Basisdaten für Bewegungen ......................................................................................... 277 Eingangs- und Ausgangssignale............................................................................................. 297.1 Grundsätze der Programmierung.................................................................................... 297.2 Ändern eines Signalwerts............................................................................................... 297.3 Ablesen eines Eingangssignalwerts................................................................................ 297.4 Fehlerbehandlung ...........................................................................................................307.5 Ablesen eines Ausgangssignalwerts............................................................................... 307.6 Testen von Eingangs- und Ausgangssignalen ................................................................ 307.7 Deaktivieren und Aktivieren von E/A-Modulen ............................................................ 307.8 Definieren von Eingangs- und Ausgangssignalen.......................................................... 317.9 Abrufen des Status der E/A-Einheit ............................................................................... 318 Kommunikation ...................................................................................................................... 338.1 Grundsätze der Programmierung.................................................................................... 338.2 Kommunikation mithilfe des FlexPendants ................................................................... 348.3 Lesen/Schreiben auf zeichenbasierten seriellen Kanälen/Dateien ................................. 348.4 Kommunikation mithilfe binärer serieller Kanäle/Dateien/Feldbusse........................... 358.5 Konvertierung................................................................................................................. 358.6 Daten für serielle Kanäle................................................................................................ 369 Interrupts................................................................................................................................. 379.1 Grundsätze der Programmierung.................................................................................... 379.2 Verbinden von Interrupts mit Interrupt-Routinen........................................................... 379.3 Anfordern von Interrupts................................................................................................ 389.4 Abbrechen von Interrupts............................................................................................... 38II<strong>RAPID</strong>-Überblick
Inhalt9.5 Freigeben/Blockieren von Interrupts.............................................................................. 389.6 Interruptdaten.................................................................................................................. 389.7 Datentyp von Interrupts.................................................................................................. 3910 Fehlerbehandlung ................................................................................................................. 4110.1 Grundsätze der Programmierung.................................................................................. 4110.2 Erzeugen einer Fehlersituation innerhalb des Programms ........................................... 4110.3 Vergeben einer Fehlernummer...................................................................................... 4110.4 Neustart/Rückkehr von der Fehlerbehandlung............................................................. 4210.5 Benutzerdefinierte Fehler und Warnungen................................................................... 4210.6 Generieren eines Prozessfehlers ................................................................................... 4210.7 Daten für Fehlerbehandlung ......................................................................................... 4210.8 Konfiguration für Fehlerbehandlung............................................................................ 4311 System und Zeit ..................................................................................................................... 4511.1 Grundsätze der Programmierung.................................................................................. 4511.2 Zeitliches Festlegen eines Ereignisses mit einer Uhr ................................................... 4511.3 Ablesen der aktuellen Uhrzeit und des aktuellen Datums ............................................ 4511.4 Abrufen der Zeitinformationen aus einer Datei............................................................ 4611.5 Abrufen der Größe des freien Programmspeichers ...................................................... 4612 Mathematik............................................................................................................................ 4712.1 Grundsätze der Programmierung.................................................................................. 4712.2 Einfache Berechnungen mit numerischen Daten.......................................................... 4712.3 Komplexere Berechnungen .......................................................................................... 4712.4 Arithmetische Funktionen ............................................................................................ 4812.5 Bit-Funktionen.............................................................................................................. 4913 Kommunikation mit einem externen Computer ................................................................ 5113.1 Grundsätze der Programmierung.................................................................................. 5113.2 Senden einer programmgesteuerten Meldung vom Roboter an einen Computer......... 5114 Funktionen für Dateioperationen ........................................................................................ 5315 Instruktionen zur Unterstützung von <strong>RAPID</strong>.................................................................... 5515.1 Abrufen von Systemdaten ............................................................................................ 5515.2 Abrufen von Informationen über das System............................................................... 5515.3 Abrufen von Informationen über den Speicher ............................................................ 5615.4 Lesen von Konfigurationsdaten ................................................................................... 5615.5 Schreiben von Konfigurationsdaten ............................................................................ 5615.6 Führen Sie einen Neustart der Steuerung durch. .......................................................... 5615.7 Triggerfunktionen .........................................................................................................5615.8 Instruktionen für Texttabellen ...................................................................................... 5715.9 Abrufen von Objektnamen ........................................................................................... 57<strong>RAPID</strong>-ÜberblickIII
Inhalt15.10 Abrufen von Tasknamen............................................................................................. 5715.11 Suche nach Symbolen................................................................................................. 5816 Instruktionen für Kalibrierung und Service ...................................................................... 5916.1 Kalibrierung des Werkzeugs......................................................................................... 5916.2 Verschiedene Kalibrierungsmethoden.......................................................................... 5916.3 Wertzuweisung an das Prüfsignal des Robotersystems................................................ 5916.4 Aufzeichnen einer Abarbeitung.................................................................................... 6017 Zeichenfolgenfunktionen...................................................................................................... 6117.1 Grundlegende Abläufe ................................................................................................. 6117.2 Vergleich und Suche..................................................................................................... 6117.3 Konvertierung............................................................................................................... 6218 Multitasking........................................................................................................................... 6318.1 Grundlagen ................................................................................................................... 6318.2 Allgemeine Instruktionen und Funktionen................................................................... 6318.3 MultiMove-System mit koordinierten Robotern.......................................................... 6419 Zusammenfassung der Syntax ............................................................................................. 6519.1 Instruktionen................................................................................................................. 6519.2 Funktionen.................................................................................................................... 7820 Grundlegende Elemente .......................................................................................................8520.1 Bezeichner .................................................................................................................... 8520.2 Leerzeichen und Zeilenvorschub.................................................................................. 8620.3 Numerische Werte ........................................................................................................ 8620.4 Logische Werte............................................................................................................. 8620.5 Zeichenfolgenwerte ...................................................................................................... 8620.6 Kommentare ................................................................................................................. 8720.7 Platzhalter..................................................................................................................... 8720.8 Dateivorspann............................................................................................................... 8820.9 Syntax........................................................................................................................... 8821 Module ................................................................................................................................... 9121.1 Programmmodule ......................................................................................................... 9121.2 Systemmodule ..............................................................................................................9221.3 Moduldeklarationen...................................................................................................... 9221.4 Syntax........................................................................................................................... 9322 Routinen................................................................................................................................. 9522.1 Gültigkeitsbereich von Routinen.................................................................................. 9522.2 Parameter...................................................................................................................... 9622.3 Routinenbeendigung..................................................................................................... 9722.4 Routinendeklarationen.................................................................................................. 97IV<strong>RAPID</strong>-Überblick
Inhalt22.5 Prozeduraufruf.............................................................................................................. 9822.6 Syntax ........................................................................................................................... 9923 Datentypen........................................................................................................................... 10323.1 Datentypen ohne einen Wert (non-value)................................................................... 10323.2 Gleiche Datentypen (Alias) ........................................................................................ 10423.3 Syntax ......................................................................................................................... 10424 Daten..................................................................................................................................... 10524.1 Gültigkeitsbereich von Daten ..................................................................................... 10524.2 Variablendeklaration................................................................................................... 10624.3 Persistentendeklaration............................................................................................... 10724.4 Konstantendeklaration................................................................................................ 10724.5 Initialisieren von Daten .............................................................................................. 10824.6 Speicherklasse ............................................................................................................10924.7 Syntax ......................................................................................................................... 11025 Instruktionen ........................................................................................................................11125.1 Syntax ......................................................................................................................... 11126 Ausdrücke ............................................................................................................................ 11326.1 Arithmetische Ausdrücke ........................................................................................... 11326.2 Logische Ausdrücke ................................................................................................... 11426.3 Zeichenfolgenausdrücke............................................................................................. 11526.4 Verwendung von Daten in Ausdrücken...................................................................... 115Datenfelder................................................................................................................... 115Datensätze .................................................................................................................... 11526.5 Verwendung von Aggregaten in Ausdrücken............................................................. 11626.6 Verwendung von Funktionsaufrufen in Ausdrücken.................................................. 11626.7 Priorität zwischen Operatoren .................................................................................... 117Beispiel: ....................................................................................................................... 11826.8 Syntax ......................................................................................................................... 118Ausdrücke .................................................................................................................... 118Operatoren.................................................................................................................... 118Konstante Werte ........................................................................................................... 118Daten ............................................................................................................................ 119Aggregate..................................................................................................................... 119Funktionsaufrufe .......................................................................................................... 119Spezialausdrücke.......................................................................................................... 120Parameter ..................................................................................................................... 12027 Fehlerbehandlung ............................................................................................................... 12127.1 Fehlerbehandlungen.................................................................................................... 121<strong>RAPID</strong>-ÜberblickV
InhaltSystem-Fehlerbehandlung............................................................................................ 122Vom Programm gemeldete Fehler ............................................................................... 122Das Ereignisprotokoll .................................................................................................. 12228 UNDO................................................................................................................................... 12328.1 Definitionen/Terminologie: ........................................................................................ 12328.2 Verwendung von UNDO ............................................................................................ 12328.3 UNDO-Verhalten im Einzelnen.................................................................................. 12328.4 Einschränkungen ........................................................................................................ 12428.5 Beispiel:...................................................................................................................... 12529 Interrupts............................................................................................................................. 12729.1 Handhabung von Interrupts ........................................................................................ 12729.2 Interrupt-Routinen ...................................................................................................... 12830 Rückwärtsabarbeitung ....................................................................................................... 12930.1 Rückwärtsbehandlung ................................................................................................ 12930.2 Beschränkungen bei Bewegungsinstruktionen in der Rückwärtsbehandlung............ 13030.3 Verhalten der Rückwärtsabarbeitung.......................................................................... 131MoveC- und nostepin-Routinen................................................................................... 131Ziel, Bewegungsart und Geschwindigkeit ................................................................... 131Beispiel: ....................................................................................................................... 13231 Multitasking......................................................................................................................... 13531.1 Synchronisieren der Tasks.......................................................................................... 136Synchronisierung mithilfe des Abfragebetriebs........................................................... 136Synchronisierung mithilfe eines Interrupts.................................................................. 13731.2 Kommunikation zwischen den Tasks ......................................................................... 13731.3 Tasktypen.................................................................................................................... 13831.4 Prioritäten ................................................................................................................... 13931.5 TrustLevel................................................................................................................... 14031.6 Gesichtspunkte, die berücksichtigt werden sollten .................................................... 14131.7 Programmierschema................................................................................................... 141Startphase..................................................................................................................... 141Wiederholungsphase .................................................................................................... 141Endphase...................................................................................................................... 14232 Koordinatensysteme ........................................................................................................... 14332.1 Der Werkzeugarbeitspunkt (TCP) des Roboters ........................................................ 14332.2 Koordinatensysteme zur Bestimmung der TCP-Position........................................... 143Basis-Koordinatensystem ............................................................................................ 143Welt-Koordinatensystem.............................................................................................. 144Anwender-Koordinatensystem..................................................................................... 145VI<strong>RAPID</strong>-Überblick
InhaltObjekt-Koordinatensystem .......................................................................................... 145Verschiebungs-Koordinatensystem.............................................................................. 146Koordinierte externe Achsen ....................................................................................... 14732.3 Koordinatensysteme zur Bestimmung der Werkzeugrichtung ................................... 149Handgelenk-Koordinatensystem.................................................................................. 149Werkzeug-Koordinatensystem ..................................................................................... 149Stationäre TCPs............................................................................................................ 15032.4 Weitere Informationen................................................................................................ 15233 Positionierung während der Abarbeitung von Programmen ......................................... 15333.1 Allgemeines................................................................................................................ 15333.2 Interpolation der Position und Orientierung des Werkzeugs...................................... 153Achsenweise Interpolation........................................................................................... 153Lineare Interpolation.................................................................................................... 154Kreisförmige Interpolation........................................................................................... 155SingArea\Wrist............................................................................................................. 15633.3 Interpolation der Zonenbahnen................................................................................... 157Achsenweise Interpolation in Zonenbahnen ................................................................ 158Lineare Interpolation einer Position in Zonenbahnen.................................................. 158Lineare Interpolation der Orientierung in Zonenbahnen ............................................. 159Interpolation von externen Achsen in Zonenbahnen ................................................... 160Zonenbahnen beim Wechseln der Interpolationsmethode ........................................... 160Interpolation beim Wechsel des Koordinatensystems.................................................. 160Zonenbahnen mit überlagernden Zonen ...................................................................... 161Planung der Zeit für Fly-By-Punkte............................................................................. 16233.4 Unabhängige Achsen.................................................................................................. 162Programmabarbeitung.................................................................................................. 162Schrittweise Abarbeitung............................................................................................. 163Bewegen.......................................................................................................................163Arbeitsbereich .............................................................................................................. 163Geschwindigkeit und Beschleunigung......................................................................... 164Roboterachsen.............................................................................................................. 16433.5 Softservo..................................................................................................................... 16533.6 Stopp und Neustart ..................................................................................................... 16533.7 Weitere Informationen................................................................................................ 16634 Synchronisierung mit logischen Instruktionen ................................................................ 16734.1 Sequenzielle Programmabarbeitung an Stopppunkten ............................................... 16734.2 Sequenzielle Programmabarbeitung an Fly-By-Punkten ........................................... 16734.3 Simultane Abarbeitung von Programmen .................................................................. 168<strong>RAPID</strong>-ÜberblickVII
Inhalt34.4 Synchronisierung der Bahn ........................................................................................ 17134.5 Weitere Informationen................................................................................................ 17235 Roboterkonfiguration ......................................................................................................... 17335.1 Verschiedene Arten der Roboterkonfiguration........................................................... 17335.2 Festlegen der Roboterkonfiguration........................................................................... 17535.3 Konfigurationsprüfung ............................................................................................... 17535.4 Weitere Informationen................................................................................................ 17636 Kinematisches Modell des Roboters.................................................................................. 17736.1 Roboterkinematik ....................................................................................................... 177Master-Roboter ............................................................................................................ 177Externer Roboter.......................................................................................................... 17836.2 Allgemeine Kinematik ............................................................................................... 17936.3 Weitere Informationen................................................................................................ 18137 Bewegungsüberwachung/Kollisionserkennung................................................................ 18337.1 Einleitung ................................................................................................................... 18337.2 Einstellen der Stufe für die Kollisionserkennung....................................................... 18337.3 Dialogfeld für die Bewegungsüberwachung .............................................................. 18537.4 Digitale Ausgänge ...................................................................................................... 18537.5 Einschränkungen ........................................................................................................ 18537.6 Weitere Informationen................................................................................................ 18638 Singularität .......................................................................................................................... 187Singularitätspunkte des IRB140 .................................................................................. 18838.1 Programmabarbeitung durch Singularitäten............................................................... 18838.2 Manuelle Bewegung durch Singularitäten ................................................................. 18938.3 Weitere Informationen................................................................................................ 18939 Optimierte Beschleunigungsbegrenzung .......................................................................... 19140 Weltzonen............................................................................................................................. 19340.1 Verwenden globaler Zonen......................................................................................... 19340.2 Verwenden von Weltzonen ......................................................................................... 19340.3 Definition von Weltzonen im Welt-Koordinatensystem ............................................ 19340.4 Überwachung des Roboter-TCP................................................................................. 194Stationäre TCPs ........................................................................................................... 19440.5 Aktion......................................................................................................................... 195Setzen eines digitalen Ausgangs, wenn der TCP in einer Weltzone ist....................... 195Setzen eines digitalen Ausgangs, bevor der TCP eine Weltzone erreicht ................... 195Stoppen des Roboters, bevor der TCP eine Weltzone erreicht .................................... 19540.6 Mindestgröße von Weltzonen..................................................................................... 19640.7 Maximale Anzahl an Weltzonen ................................................................................ 196VIII<strong>RAPID</strong>-Überblick
Inhalt40.8 Stromausfall, Neustart und Motoren ein..................................................................... 19640.9 Weitere Informationen................................................................................................ 19741 E/A-Prinzipien..................................................................................................................... 19941.1 Signaleigenschaften.................................................................................................... 19941.2 Signale für Interrupts.................................................................................................. 20041.3 Systemsignale .............................................................................................................20141.4 Querverbindungen ...................................................................................................... 20141.5 Einschränkungen ........................................................................................................ 20241.6 Weitere Informationen................................................................................................ 20242 Offline-Programmierung.................................................................................................... 20342.1 Dateiformat................................................................................................................. 20342.2 Editieren...................................................................................................................... 20342.3 Syntaxprüfung ............................................................................................................ 20342.4 Beispiele ..................................................................................................................... 20442.5 Erstellen von eigenen Instruktionen ........................................................................... 20543 Systemmodul Anwender..................................................................................................... 20743.1 Inhalt........................................................................................................................... 20743.2 Erstellen neuer Daten in diesem Modul ..................................................................... 20743.3 Löschen dieser Daten.................................................................................................. 20844 Glossar.................................................................................................................................. 209<strong>RAPID</strong>-ÜberblickIX
Einleitung1 EinleitungDas vorliegende <strong>Referenzhandbuch</strong> enthält eine ausführliche Erläuterung derProgrammiersprache sowie aller Datentypen, Instruktionen und Funktionen. Für dieOffline-Programmierung ist dieses Handbuch besonders nützlich.Wenn Sie beginnen, den Roboter zu programmieren, empfiehlt sich die Verwendungdes Benutzerhandbuchs „IRC5 mit FlexPendant“, bis Sie mit dem System vertrautsind.1.1 Andere HandbücherBevor Sie den Roboter das erste Mal benutzen, sollten Sie Grundlegende Bedienunglesen. Dort erfahren Sie die Grundlagen des Betriebs des Roboters.Das Benutzerhandbuch - IRC5 mit FlexPendant bietet schrittweise Anleitungen fürzahlreiche Tasks, z. B. manuelles Bewegen des Roboters, Programmieren oder Starteneines Programms bei der Produktion.Das Produkthandbuch beschreibt die Installation des Roboters sowieWartungsprozeduren und Fehlerbehebung. Dieses Handbuch enthält auch eineProduktspezifikation, die einen Überblick über die Merkmale und die Leistung desRoboters bietet.1.2 Benutzung dieses HandbuchsInformationen zur Beantwortung von Fragen wie Welche ist die geeignete Instruktion?oder Was bedeutet diese Instruktion? finden Sie im <strong>RAPID</strong> Überblick, Kapitel 3:<strong>RAPID</strong> Zusammenfassung. Dieses Kapitel beschreibt kurz alle Instruktionen,Funktionen und Datentypen gruppiert nach den Instruktionsauswahllisten, die Sie fürdie Programmierung verwenden. Es enthält auch eine Zusammenfassung der Syntax,die besonders nützlich für die Offline-Programmierung ist.<strong>RAPID</strong> Überblick, Kapitel 4: Grundlegende Eigenschaften erläutert die internenDetails der Sprache. Dieses Kapitel ist nur für erfahrene Programmierer von Interesse.<strong>RAPID</strong> Überblick, Kapitel 5: Bewegung und E/A-Prinzipien beschreibt verschiedeneKoordinatensysteme des Roboters, seine Geschwindigkeit und andereBewegungseigenschaften bei den verschiedenen Arten der Abarbeitung.<strong>RAPID</strong> <strong>Referenzhandbuch</strong>, Teil I und II, Teil 1 beschreibt alle Instruktionen und Teil IIbeschreibt alle Funktionen und Datentypen. Für schnelles Auffinden werden sie inalphabetischer Reihenfolge aufgeführt.Vorliegendes Handbuch beschreibt alle Daten und Programme, die mit dem Robotergeliefert werden. Zusätzlich wird eine Reihe vordefinierter Daten und Programme mitdem Roboter entweder auf Diskette oder manchmal bereits geladen zur Verfügunggestellt.<strong>RAPID</strong> Überblick, Kapitel 7: Vordefinierte Daten und Programme beschreibt dieVorgänge beim Laden der Daten und Programme in den Roboter.<strong>RAPID</strong>-Überblick 1
EinleitungFür die Offline-Programmierung finden sich einige Tipps in <strong>RAPID</strong> Überblick, Kapitel6: Offline-Programmierung.Für das leichtere Auffinden und besseres Verständnis des Inhalts enthält <strong>RAPID</strong>Überblick, Kapitel 8 einen Index und ein Glossar. Das <strong>RAPID</strong>-<strong>Referenzhandbuch</strong>, TeilI und II enthält jeweils einen Index am Ende.Vereinbarungen zur SchreibweiseDie Befehle unter jedem der fünf Menütasten am oberen Fensterrand des FlexPendantsind in der Form Menü: Befehl geschrieben. Um z. B. den Befehl „Drucken“ aus demMenü „Datei“ zu aktivieren, wählen Sie Datei: Drucken.Die Namen auf den Funktionstasten und in den Eingabefeldern werden in fetterKursivschrift angegeben, z. B. KorPos.Wörter der Programmiersprache, etwa Instruktionsnamen, werden kursiv geschrieben,z. B. MoveL.Beispiele von Programmen werden immer im selben Format dargestellt wie sie aufDiskette oder Drucker ausgegeben werden. Dies unterscheidet sich wie folgt von derAnzeige am FlexPendant:- Bestimmte Steuerungswörter, die für die Anzeige am FlexPendant ausgeblendetsind, werden gedruckt, z. B. die Kennzeichnung von Anfang und Ende einerRoutine.- Daten- und Routinendeklarationen werden im formellen Format gedruckt,beispielsweise VAR num reg1;.SyntaxregelnInstruktionen und Funktionen werden mit vereinfachter und formeller Syntaxbeschrieben. Wenn Sie mit dem FlexPendant programmieren, müssen Sie nur dievereinfachte Syntax kennen, da der Roboter automatisch dafür sorgt, dass die korrekteSyntax benutzt wird.2 <strong>RAPID</strong>-Überblick
EinleitungVereinfachte SyntaxBeispiel:TPWriteString [\Num] | [\Bool] | [\Pos] | [\Orient]InstruktionErforderlichesArgumentOptionalesArgumentSich gegenseitigausschließendeArgumenteFormelle Syntax- Optionale Argumente sind in eckige Klammern [ ] eingeschlossen. DieseArgumente können weggelassen werden.- Argumente, die sich gegenseitig ausschließen, d. h. nicht gleichzeitig in einerInstruktion vorhanden sein können, werden durch einen vertikalen Strich |voneinander getrennt.- Argumente, die beliebig oft wiederholbar sind, werden in geschweifteKlammern { } eingeschlossen.Beispiel:TPWrite[String’:=’] [’\’Num’:=’ ] |[’\’Bool’:=’ ] |[’\’Pos’:=’ ] |[’\’Orient’:=’ ]’;’- Der Text in den eckigen Klammern [ ] kann weggelassen werden.- Argumente, die sich gegenseitig ausschließen, d. h. nicht gleichzeitig in einerInstruktion vorhanden sein können, werden durch einen vertikalen Strich |voneinander getrennt.- Argumente, die beliebig oft wiederholbar sind, werden in geschweifteKlammern { } eingeschlossen.- Symbole, die für die korrekte Syntax erforderlich sind, werden zwischeneinfachen Anführungszeichen (Apostrophen) ’ ’ geschrieben.- Der Datentyp des Arguments (kursiv) und andere Eigenschaften sind in spitzeKlammern < > eingeschlossen. Ausführliche Informationen erhalten Sie in derBeschreibung der Parameter von Routinen.Die grundlegenden Elemente der Sprache und bestimmte Instruktionen werden ineiner speziellen Syntax, EBNF, geschrieben. Diese beruht auf denselben Regeln,jedoch mit einigen Zusätzen.Beispiel:GOTO ’;’ ::= | ::= { | | ’_’}- Das Symbol ::= bedeutet wird definiert als.- In spitze Klammern < > eingeschlossener Text wird in einer separaten Zeiledefiniert.<strong>RAPID</strong>-Überblick 3
Einleitung4 <strong>RAPID</strong>-Überblick
Struktur der Sprache2 Struktur der SpracheDas Programm besteht aus einer Reihe von Instruktionen, die die Arbeit des Robotersbeschreiben. Daher gibt es bestimmte Instruktionen für die zahlreichen Befehle, z. B.eine zur Bewegung des Roboters, eine für das Setzen eines Ausgangs usw.Zu den Instruktionen gehört gewöhnlich eine Reihe von Argumenten, die definieren,welche Aktion in einer bestimmten Instruktion stattfinden soll. Die Instruktion für dasZurücksetzen eines Ausgangs beispielsweise enthält ein Argument, das definiert,welcher Ausgang zurückgesetzt werden soll, z. B. Reset do5. Diese Argumente könnenauf eine der folgenden Arten angegeben werden:- als numerischer Wert, z. B. 5 oder 4,6- als Verweis auf Daten, z. B. reg1- als ein Ausdruck, z. B. 5+reg1*2- als Funktionsaufruf, z. B. Abs(reg1)- als Zeichenfolgenwert, z. B. "Herstellung von Teil A"Es gibt drei Arten von Routinen – Prozeduren, Funktionen und Interrupt-Routinen.- Eine Prozedur wird als Unterprogramm verwendet.- Eine Funktion gibt einen Wert eines bestimmten Typs zurück und wird alsArgument einer Instruktion verwendet.- Interrupt-Routinen dienen der Behandlung von Interrupts (Unterbrechungen).Eine Interrupt-Routine kann einem bestimmten Interrupt zugewiesen werden,z. B. wird sie beim Setzen eines Eingangs automatisch ausgeführt, wenn dieserInterrupt auftritt.Informationen können auch als Daten gespeichert werden, z. B. Werkzeugdaten (diesämtliche Informationen über ein Werkzeug umfassen, wie TCP und Gewicht) undnumerische Daten (die etwa zum Zählen der zu verarbeitenden Werkstücke verwendetwerden können). Daten werden in verschiedene Datentypen gruppiert, dieverschiedene Arten von Informationen beschreiben, z. B. Werkzeuge, Positionen undLasten. Da diese Daten erzeugt und mit beliebigen Namen versehen werden können,gibt es keine Begrenzung für die Menge der Daten (außer der Speicherkapazität).Diese Daten können global im Programm oder lokal in einer Routine vorhanden sein.Es gibt drei Arten von Daten: Konstanten, Variablen und Persistenten.- Eine Konstante stellt einen statischen Wert dar. Ihr kann ein neuer Wert nurmanuell zugewiesen werden.- Einer Variablen kann auch bei der Programmabarbeitung ein neuer Wertzugewiesen werden.- Eine Persistente kann als „speichernde“ Variable beschrieben werden. BeimSpeichern eines Programms entspricht der Initialisierungswert dem aktuellenWert der Persistenten.<strong>RAPID</strong>-Überblick 5
Struktur der SpracheWeitere Merkmale der Sprache:- Routineparameter- Arithmetische und logische Ausdrücke- Automatische Fehlerbehandlung- Modulare Programme- Multitasking6 <strong>RAPID</strong>-Überblick
Steuern des Programmablaufs3 Steuern des ProgrammablaufsDas Programm läuft in der Regel sequenziell ab, d. h. eine Instruktion nach deranderen. Gelegentlich sind Instruktionen erforderlich, die diese sequenzielleAbarbeitung unterbrechen und eine andere Instruktion aufrufen, um verschiedeneSituationen abzudecken, die bei einer Abarbeitung eintreten können.3.1 Grundsätze der ProgrammierungDer Programmablauf kann nach fünf verschiedenen Prinzipien gesteuert werden:- Durch Aufruf einer anderen Routine (Prozedur) und nach deren AbarbeitungFortfahren mit der Instruktion, die auf den Routineaufruf folgt.- Durch Abarbeiten verschiedener Instruktionen, je nachdem, ob eine bestimmteVoraussetzung erfüllt ist.- Durch Wiederholen der Instruktionsfolge, bis eine bestimmte Voraussetzungerfüllt ist.- Durch Sprung auf ein Label innerhalb derselben Routine.- Durch Stoppen der Programmabarbeitung.3.2 Aufruf einer anderen RoutineInstruktionProcCallCallByVarRETURNAnwendung:Aufruf einer anderen Routine (Sprung auf die Routine)Aufruf von Prozeduren mit bestimmten NamenRückkehr zur ursprünglichen Routine<strong>RAPID</strong>-Überblick 7
Steuern des Programmablaufs3.3 Programmsteuerung innerhalb der RoutineInstruktionCompact IFIFFORWHILETESTGOTOlabelAnwendung:Ausführen einer Instruktion nur dann, wenn eineVoraussetzung erfüllt istAbarbeiten einer Sequenz aus verschiedenen Instruktionen, jenachdem, ob eine Voraussetzung erfüllt istBestimmte Anzahl an Wiederholungen einesProgrammabschnittsWiederholen einer Sequenz aus verschiedenen Instruktionen,solange eine bestimmte Voraussetzung erfüllt istAusführen verschiedener Instruktionen abhängig vom Werteines AusdrucksSprung auf ein LabelAngabe eines Labels (Zeilenname)3.4 Stoppen der ProgrammabarbeitungInstruktionStopEXITBreakAnwendung:Stoppen der ProgrammabarbeitungStoppen der Programmabarbeitung, wenn ein Neustart nichterlaubt istTemporäres Stoppen der Programmabarbeitung zuTestzwecken3.5 Stoppen des aktuellen ZyklusInstruktionExitCycleAnwendung:Stoppen des aktuellen Zyklus und setzen des Programmzeigersauf die erste Instruktion in der Hauptroutine. Wenn derAbarbeitungsmodus CONT gewählt ist, fährt die Abarbeitungmit dem nächsten Programmzyklus fort.8 <strong>RAPID</strong>-Überblick
Verschiedene Instruktionen4 Verschiedene InstruktionenVerschiedene Instruktionen werden verwendet, um:- Datenwerte zuzuweisen,- eine vorgegebene Zeit oder bis zur Erfüllung einer Voraussetzung zu warten,- einen Kommentar in das Programm einzufügen,- Programmmodule zu laden.4.1 Zuweisen eines DatenwertsDaten können beliebige Werte zugewiesen werden. Beispielsweise können Daten miteinem konstanten Wert (z. B. 5) initialisiert oder mit einem arithmetischen Ausdruck(z. B. reg1+5*reg3) aktualisiert werden.InstruktionAnwendung::= Zuweisen eines Datenwerts4.2 WartenDie Programmierung eines Roboters kann Wartezeiten oder das Warten bis zurErfüllung einer Voraussetzung vorsehen, z. B. bis ein Eingang gesetzt ist.InstruktionWaitTimeWaitUntilWaitDIWaitDOAnwendung:Vorgegebene Wartezeit oder warten, bis sich der Roboter nichtmehr bewegtWarten, bis eine Voraussetzung erfüllt istWarten, bis ein digitaler Eingang gesetzt istWarten, bis ein digitaler Ausgang gesetzt ist4.3 KommentareKommentare werden nur zur besseren Verständlichkeit in das Programm eingefügt.Die Programmabarbeitung beeinflusst ein Kommentar nicht.InstruktioncommentAnwendung:Kommentar zum Programm<strong>RAPID</strong>-Überblick 9
Verschiedene Instruktionen4.4 Laden von ProgrammmodulenProgrammmodule können aus dem Massenspeicher geladen oder aus demProgrammspeicher gelöscht werden. Auf diese Weise lassen sich umfangreicheProgramme mit nur wenig Speicher verwalten.InstruktionLoadUnLoadStart LoadWait LoadCancelLoadSaveEraseModuleDatentyploadsessionAnwendung:Programmmodul in den Programmspeicher ladenProgrammmodul aus dem Programmspeicher entladenProgrammmodul bei der Abarbeitung in denProgrammspeicher ladenDas Modul mit der Programmtask verbinden, wenn es mitStartLoad geladen wurdeDas Laden eines Moduls abbrechen, das mit der InstruktionStartLoad geladen wirdEin Programmmodul speichernEin Modul aus dem Programmspeicher löschenAnwendung:Programmieren eines Ladevorgangs4.5 Verschiedene FunktionenFunktionOpModeRunModeNonMotionModeDimPresentIsPersIsVarAnwendung:Aktuelle Betriebsart des Roboters lesenAktuellen Programmabarbeitungsmodus des Roboters lesenAktuellen Nichtbewegungs-Abarbeitungsmodus derProgrammtask lesenDimension eines Datenfelds abrufenErmitteln, ob beim Aufruf einer Routine ein optionalerParameter vorhanden warPrüfen, ob ein Parameter persistent istPrüfen, ob ein Parameter eine Variable ist4.6 BasisdatenDatentypboolnumsymnumstringswitchDefiniert:Logische Daten (mit den Werten „true“ oder „false“)Numerische Werte (Dezimalzahlen oder Ganzzahlen)Numerische Daten mit einem symbolischen WertZeichenfolgenRoutineparameter ohne einen Wert10 <strong>RAPID</strong>-Überblick
Verschiedene Instruktionen4.7 KonvertierungsfunktionFunktionStrToByteByteToStrAnwendung:Konvertiert eine Zeichenfolge mit einem definierten Byte-Datenformat in den Datentyp Byte.Konvertiert einen Byte-Datentyp in eine Zeichenfolge miteinem definierten Byte-Datenformat.<strong>RAPID</strong>-Überblick 11
Verschiedene Instruktionen12 <strong>RAPID</strong>-Überblick
Bewegungseinstellungen5 BewegungseinstellungenEinige Bewegungseigenschaften des Roboters werden durch logische Instruktionenbestimmt, die für alle Bewegungen gelten:- TCP-Höchstgeschwindigkeit- Höchstgeschwindigkeit und Geschwindigkeitsoverride- Beschleunigung- Verwaltung verschiedener Roboterkonfigurationen- Nutzlast- Verhalten in der Nähe von singulären Punkten- Programmverschiebung- Softservo- Abstimmungswerte5.1 Grundsätze der ProgrammierungDie grundlegenden Eigenschaften der Roboterbewegung werden durch Datenbestimmt, die für jede Positionierinstruktion angegeben werden. Einige Daten werdenjedoch in separaten Instruktionen festgelegt, die für alle Bewegungen gelten, bis sichdiese Daten ändern.Die allgemeinen Bewegungseinstellungen werden mit einer Reihe von Instruktionenangegeben, können aber auch mithilfe der Systemvariablen C_MOTSET oderC_PROGDISP abgelesen werden.Standardwerte werden automatisch eingestellt (durch Abarbeiten der RoutineSYS_RESET in Systemmodul BASE)- bei einem Kaltstart,- beim Laden eines neuen Programms,- wenn das Programm vom Anfang gestartet wird.5.2 TCP-HöchstgeschwindigkeitFunktionMaxRobSpeedAnwendung:Gibt die TCP-Höchstgeschwindigkeit für den verwendetenRobotertyp zurück.<strong>RAPID</strong>-Überblick 13
Bewegungseinstellungen5.3 Definieren der GeschwindigkeitDie absolute Geschwindigkeit wird als Argument in der Positionierinstruktionprogrammiert. Zusätzlich kann die Höchstgeschwindigkeit und derGeschwindigkeitsoverride (ein Prozentsatz der programmierten Geschwindigkeit)definiert werden.InstruktionVelSetDefiniert:Höchstgeschwindigkeit und Geschwindigkeitsoverride5.4 Definieren der BeschleunigungWenn z. B. zerbrechliche Werkstücke gehandhabt werden, kann die Beschleunigungfür einen Teil des Programms verringert werden.InstruktionAccSetWorldAccLimPathAccLimAnwendung:Definiert die Höchstbeschleunigung.Beschränken die Beschleunigung/Verzögerung des Werkzeugs(und der Greiferlast) im Welt-Koordinatensystem.Setzen oder Zurücksetzen von Beschränkungen für TCP-Beschleunigung und/oder TCP-Verzögerung entlang derBewegungsbahn.5.5 Definieren der KonfigurationsverwaltungDie Konfiguration des Roboters wird gewöhnlich während der Bewegung überprüft.Bei achsenweiser Bewegung wird die korrekte Konfiguration erzielt. Bei linearer undkreisförmiger Bewegung bewegt sich der Roboter stets in die nächstmöglicheKonfiguration, aber anhand einer Prüfung wird untersucht, ob diese Konfiguration mitder programmierten übereinstimmt. Dies lässt sich aber auch ändern.InstruktionConfJConfLDefiniert:Konfigurationssteuerung ein/aus während achsenweiserBewegungKonfigurationssteuerung ein/aus während linearer Bewegung5.6 Definieren der NutzlastUm die beste Roboterleistung zu erzielen, muss die korrekte Nutzlast definiert werden.InstruktionGripLoadDefiniert:Die Nutzlast des Greifers14 <strong>RAPID</strong>-Überblick
Bewegungseinstellungen5.7 Definieren des Verhaltens in der Nähe von singulären PunktenDer Roboter kann so programmiert werden, dass er singuläre Punkte meidet, indem erautomatisch die Werkzeugorientierung ändert.InstruktionSingAreaDefiniert:Die Interpolationsmethode durch singuläre Punkte5.8 Verschieben eines ProgrammsWenn ein Teil eines Programms verschoben werden muss, z. B. nach einer Suche, kanneine Programmverschiebung hinzugefügt werden.InstruktionPDispOnPDispSetPDispOffEOffsOnEOffsSetEOffsOffFunktionDefDFrameDefFrameORobTDefAccFrameAnwendung:Aktiviert die ProgrammverschiebungAktiviert eine Programmverschiebung durch Angeben einesWertsDeaktiviert die ProgrammverschiebungAktiviert einen externen Achsen-OffsetAktiviert einen externen Achsen-Offset durch Angeben einesWertsDeaktiviert einen externen Achsen-OffsetAnwendung:Berechnet eine Programmverschiebung von drei Positionen.Berechnet eine Programmverschiebung von sechs Positionen.Entfernt eine Programmverschiebung von einer Position.Definiert ein Koordinatensystem aus Originalpositionen undverschobenen Positionen.5.9 SoftservoEine oder mehrere Roboterachsen können „soft“ eingestellt werden. Bei Verwendungdieser Funktion kann der Roboter z. B. eine Federzange wechseln.InstruktionSoftActSoftDeactDitherAct 1DitherDeact 1Anwendung:Aktiviert Softservo für eine oder mehrere Achsen.Deaktiviert Softservo.Aktiviert Dither-Funktionalität für Softservo.Deaktiviert Dither-Funktionalität für Softservo.1. Nur für IRB 7600<strong>RAPID</strong>-Überblick 15
Bewegungseinstellungen5.10 Anpassen der Roboter-AbstimmungswerteGenerell wird die Leistung des Roboters automatisch optimiert, in einigen extremenFällen kann beispielsweise ein Überfahren einer Position vorkommen. Sie können dieAbstimmungswerte des Roboters nachstellen, um die gewünschte Leistung zu erzielen.InstruktionTuneServoTuneResetPathResolCirPathModeDatentyptunetypeAnwendung:Roboter-Abstimmungswerte anpassenAbstimmung auf Normal zurücksetzenGeometrische Bahnauflösung anpassenArt der Werkzeugumorientierung bei kreisförmigerInterpolation.Anwendung:Stellt die Art der Abstimmung als symbolische Konstante dar.16 <strong>RAPID</strong>-Überblick
Bewegungseinstellungen5.11 WeltzonenBis zu 10 verschiedene Volumen können im Arbeitsraum des Roboters definiertwerden. Diese können verwendet werden für:- Anzeige, dass der TCP des Roboters einen definierten Teil des Arbeitsraumsdarstellt,- Beschränkung des Arbeitsbereichs des Roboters, um eine Kollision mit demWerkzeug zu vermeiden,- Definieren eines gemeinsamen Arbeitsraums für zwei Roboter. DerArbeitsraum steht dann nur jeweils einem Roboter zur Verfügung.InstruktionWZBoxDef 1WZCylDef 1WZSphDefWZHomeJointDefWZLimJointDefWZLimSup 1WZDOSet 1WZDisable 1WZEnable 1WZFree 1Anwendung:Definiert eine globale Zone in der Form eines Quaders.Definiert eine globale Zone in der Form eines Zylinders.Definiert eine globale Zone in der Form einer Kugel.Definiert eine globale Zone in Achsenkoordinaten.Definiert eine globale Zone in Achsenkoordinaten zurBeschränkung des Arbeitsraums.Aktiviert Grenzüberwachung für eine globale Zone.Aktiviert das Setzen von digitalen Ausgängen in einerglobalen Zone.Deaktiviert die Überwachung einer temporären globalen Zone.Aktiviert die Überwachung einer temporären globalen Zone.Löscht die Überwachung einer temporären globalen Zone.Datentypwztemporarywzstationary 1shapedata 1Anwendung:Identifiziert eine temporäre globale Zone.Identifiziert eine stationäre globale Zone.Beschreibt die Geometrie einer globalen Zone.5.12 Daten für BewegungseinstellungenDatentypmotsetdataprogdispDefiniert:Bewegungseinstellungen außer ProgrammverschiebungProgrammverschiebung1. Nur wenn das Robotersystem mit der Option „World Zones“ (Weltzonen) ausgestattet ist.<strong>RAPID</strong>-Überblick 17
Bewegungseinstellungen18 <strong>RAPID</strong>-Überblick
Bewegung6 BewegungDie Roboterbewegungen werden als Bewegungen von einer Position zur anderenprogrammiert, d. h. „Bewegung von der aktuellen Position an eine neue Position“. DieBahn zwischen diesen beiden Positionen berechnet das Robotersystem automatisch.6.1 Grundsätze der ProgrammierungDie grundlegenden Bewegungseigenschaften, wie z. B. die Art der Bahn, werdendurch die Wahl der geeigneten Positionierinstruktionen angegeben.Die übrigen Bewegungseigenschaften werden durch Daten definiert, die dieArgumente der Instruktion darstellen:- Positionsdaten (Endposition für Roboter und externe Achsen)- Geschwindigkeitsdaten (gewünschte Geschwindigkeit)- Zonendaten (Positionsgenauigkeit)- Werkzeugdaten (z. B. TCP-Position)- Werkobjektdaten (z. B. das aktuelle Koordinatensystem)Einige Bewegungseigenschaften des Roboters werden durch logische Instruktionenbestimmt, die für alle Bewegungen gelten (siehe Bewegungseinstellungen aufSeite 13):- Höchstgeschwindigkeit und Geschwindigkeitsoverride- Beschleunigung- Verwaltung verschiedener Roboterkonfigurationen- Nutzlast- Verhalten in der Nähe von singulären Punkten- Programmverschiebung- Softservo- AbstimmungswerteDer Roboter und die externen Achsen werden mit denselben Instruktionen positioniert.Die externen Achsen werden in konstanter Geschwindigkeit bewegt und erreichen dieEndposition gleichzeitig mit dem Roboter.<strong>RAPID</strong>-Überblick 19
Bewegung6.2 PositionierinstruktionenInstruktionMoveCMoveJMoveLMoveAbsJMoveExtJMoveCDOMoveJDOMoveLDOMoveCSync 1MoveJSync 1MoveLSync 1Art der Bewegung:Der TCP bewegt sich auf einer kreisförmigen Bahn.AchsenbewegungDer TCP bewegt sich auf einer linearen Bahn.Absolute AchsenbewegungBewegt eine lineare oder drehende externe Achse ohne TCP.Bewegt den Roboter kreisförmig und setzt einen digitalenAusgang in der Mitte der Zonenbahn.Bewegt den Roboter durch Achsenbewegung und setzt einendigitalen Ausgang in der Mitte der Zonenbahn.Bewegt den Roboter linear und setzt einen digitalen Ausgangin der Mitte der Zonenbahn.Bewegt den Roboter kreisförmig und arbeitet eine <strong>RAPID</strong>-Prozedur ab.Bewegt den Roboter durch Achsenbewegung und arbeitet eine<strong>RAPID</strong>-Prozedur ab.Bewegt den Roboter linear und arbeitet eine <strong>RAPID</strong>-Prozedurab.6.3 SuchenWährend der Bewegung kann der Roboter z. B. die Position des Werkobjekts suchen.Die gesuchte Position (durch ein Sensorsignal angegeben) wird gespeichert und kannspäter zur Positionierung des Roboters oder zur Berechnung einerProgrammverschiebung verwendet werden.InstruktionSearchCSearchLArt der Bewegung:Der TCP bewegt sich auf einer kreisförmigen Bahn.Der TCP bewegt sich auf einer linearen Bahn.1. Nur wenn das Robotersystem mit der Option „Fixed Position Events“ (Positionsabhängige Ereignisse)ausgestattet ist.20 <strong>RAPID</strong>-Überblick
Bewegung6.4 Aktivieren von Ausgängen oder Interrupts an bestimmten PositionenGewöhnlich werden logische Instruktionen beim Übergang von einerPositionierinstruktion zu einer anderen abgearbeitet. Falls jedoch spezielleBewegungsinstruktionen verwendet werden, können diese stattdessen ausgeführtwerden, wenn der Roboter eine bestimmte Position einnimmt.InstruktionTriggIO 1TriggInt 1TriggCheckIO 1TriggEquip 1TriggC 1TriggJ 1TriggL 1StepBwdPath 2TriggStopProc 2Datentyptriggdata 1aiotrigg 3restartdata 2Anwendung:Definiert eine Triggerbedingung für das Setzen einesAusgangs an einer vorgegebenen PositionDefiniert eine Triggerbedingung für das Abarbeiten einerInterrupt-Routine an einer vorgegebenen PositionDefiniert eine E/A-Prüfung an einer vorgegebenen PositionDefiniert eine Triggerbedingung für das Setzen einesAusgangs an einer vorgegebenen Position mit derMöglichkeit, die Verzögerung in der externen Ausrüstungzeitlich zu kompensierenBewegt den Roboter (TCP) kreisförmig mit einer aktiviertenTriggerbedingung.Bewegt den Roboter (TCP) achsenweise mit einer aktiviertenTriggerbedingung.Bewegt den Roboter (TCP) linear mit einer aktiviertenTriggerbedingung.Rückwärtsbewegung auf der Bahn mit einer NEUSTART-EreignisroutineErstellt einen internen Überwachungsprozess im System, umbei jedem Programmstopp (STOP) oder Notstopp (QSTOP) imSystem angegebene Prozesssignale auf Null zu setzen undNeustartdaten in einer angegebenen persistenten Variablen zuerzeugen.Definiert:TriggerbedingungenAnaloge E/A-TriggerbedingungDaten für TriggStopProc6.5 Steuerung des analogen Ausgangssignals proportional zum aktuellen TCPTriggSpeed 2Definiert Bedingungen und Aktionen zur Steuerung einesanalogen Ausgangssignals mit einem Wert, der proportionalzur aktuellen TCP-Geschwindigkeit ist.1. Nur wenn das Robotersystem mit der Option „Fixed Position Events“ (Positionsabhängige Ereignisse)ausgestattet ist.2. Nur wenn das Robotersystem mit der Option „Advanced <strong>RAPID</strong>“ (Erweiterte <strong>RAPID</strong>-Funktionen)ausgestattet ist.3. Nur wenn das Robotersystem mit der Option „Analog Signal Interrupt“ (Analogsignal-Interrupt)ausgestattet ist.<strong>RAPID</strong>-Überblick 21
Bewegung6.6 Bewegungssteuerung bei einem Fehler/InterruptUm einen Fehler oder einen Interrupt zu korrigieren, kann die Bewegung temporärgestoppt und dann wieder neu gestartet werden.InstruktionStopMoveStartMoveStartMoveRetryStopMoveResetStorePath 1RestoPath 1ClearPathAnwendung:Stoppt die Roboterbewegungen.Startet die Roboterbewegungen neu.Startet die Roboterbewegungen und unternimmt einen neuenVersuch in einer unteilbaren Sequenz.Setzt den Stopp des Bewegungsstatus zurück, startet aber dieRoboterbewegungen nicht.Speichert die zuletzt erzeugte Bahn.Erzeugt wieder eine Bahn, die früher gespeichert wurde.Löscht die ganze Bewegungsbahn auf der Ebene der aktuellenBewegungsbahn.6.7 Abrufen von Roboterdaten in ein MultiMove-SystemVerwendet, um Name oder Verweis auf den Roboter in der aktuellen Programmtaskabzurufen.FunktionRobNameDatenROB_IDAnwendung:Ruft den Namen des gesteuerten Roboters in der aktuellenProgrammtask ab, falls vorhanden.Anwendung:Ruft Daten ab, die einen Verweis auf den gesteuerten Roboterin der aktuellen Programmtask enthalten, falls vorhanden.6.8 Steuern externer AchsenDer Roboter und die externen Achsen werden mit denselben Instruktionen positioniert.Einige Instruktionen beeinflussen jedoch nur die Bewegungen der externen Achsen.InstruktionDeactUnitActUnitMechUnitLoadFunktionGetNextMechUnitIsMechUnitActiveAnwendung:Deaktiviert eine externe mechanische Einheit.Aktiviert eine externe mechanische Einheit.Definiert eine Nutzlast für eine mechanische Einheit.Anwendung:Ruft den Namen von mechanischen Einheiten imRobotersystem ab.Prüft, ob eine mechanische Einheit aktiviert ist.1. Nur wenn das Robotersystem mit der Option „Path recovery“ (Bahnwiederherstellung) ausgestattet ist.22 <strong>RAPID</strong>-Überblick
Bewegung6.9 Unabhängige AchsenRoboterachse 6 (und 4 am IRB 2400/4400) oder eine externe Achse kann unabhängigvon anderen Bewegungen bewegt werden. Der Arbeitsraum einer Achse kann auchzurückgesetzt werden, wodurch sich die Zyklusdauer verringert.FunktionIndAMove 1IndCMove 1IndDMove 1IndRMove 1IndReset 1IndInpos 1IndSpeed 1InstruktionHollowWristReset 2Anwendung:Ändert den Modus einer Achse in „unabhängig“ und bewegtsie an eine absolute Position.Ändert den Modus einer Achse in „unabhängig“ und beginntdie kontinuierliche Bewegung der Achse.Ändert den Modus einer Achse in „unabhängig“ und bewegtdie Achse um einen Delta-Abstand.Ändert den Modus einer Achse in „unabhängig“ und bewegtdie Achse an eine relative Position (innerhalb derAchsendrehung).Ändert den Modus einer Achse in „unabhängig“ und/oder setztden Arbeitsraum zurück.Prüft, ob eine unabhängige Achse in Position ist.Prüft, ob eine unabhängige Achse die programmierteGeschwindigkeit erreicht hat.Anwendung:Setzt die Position von Handgelenkachsen an Manipulatorenmit Hohlgelenken (wie z. B. IRB 5402 und IRB 5403) zurück.1. Nur wenn das Robotersystem mit der Option „Independent Movement“ (Unabhängige Bewegung)ausgestattet ist.2. Nur wenn das Robotersystem mit der Option „Independent movement“ (Unabhängige Bewegung)ausgestattet ist. Die Instruktion HollowWristReset kann nur für Robotermodell IRB 5402 und IRB 5403verwendet werden.<strong>RAPID</strong>-Überblick 23
Bewegung6.10 Korrektur der BahnInstruktionCorrCon 1CorrWrite 1CorrDiscon 1CorrClear 1FunktionCorrRead 1Datentypcorrdescr 1Anwendung:Baut eine Verbindung zu einem Korrekturgenerator auf.Schreibt Offsets in das Bahn-Koordinatensystem an einenKorrekturgenerator.Trennt die Verbindung zu einem früher verbundenenKorrekturgenerator.Trennt alle Verbindungen zu Korrekturgeneratoren.Anwendung:Liest die gesamten Korrekturen, die von allen verbundenenKorrekturgeneratoren geliefert werden.Anwendung:Fügt dem Bahn-Koordinatensystem geometrische Offsetshinzu.6.11 BahnaufzeichnungInstruktionPathRecStart 2PathRecStop 2PathRecMoveBwd 2PathRecMoveFwd 2FunktionPathRecValidBwd 2PathRecValidFwd 2DatentyppathrecidAnwendung:Beginnt die Aufzeichnung der Roboterbahn.Stoppt die Aufzeichnung der Roboterbahn.Bewegt den Roboter rückwärts entlang einer aufgezeichnetenBahn.Bewegt den Roboter zurück an die Position, an derPathRecMoveBwd abgearbeitet wurdeAnwendung:Prüft, ob die Bahnaufzeichnung aktiv und eine aufgezeichneteRückwärtsbahn verfügbar ist.Prüft, ob die Bahnaufzeichnung zur Vorwärtsbewegungbenutzt werden kann.Anwendung:Identifiziert einen Stopppunkt für die Bahnaufzeichnung.1. Nur wenn das Robotersystem mit der Option „Path offset“ oder „RobotWare-Arc Sensor“ ausgestattet ist.2. Nur wenn das Robotersystem mit der Option „Path recovery“ (Bahnwiederherstellung) ausgestattet ist.24 <strong>RAPID</strong>-Überblick
Bewegung6.12 Förderer-TrackingInstruktionWaitWObj 1DropWObj 1Anwendung:Warten auf Werkobjekt am FördererAblegen des Werkobjekts am Förderer6.13 Synchronisierung des SensorsSensorsynchronisierung ist die Funktion, durch die sich die Robotergeschwindigkeitnach einem Sensor richtet, der an einem Förderer oder einer Motorachse montiertwerden kann.InstruktionWaitSensor 2SyncToSensor 2DropSensor 2Anwendung:Verbinden zu einem Objekt im Startfenster an einersensormechanischen Einheit.Startet oder stoppt die Synchronisierung derRoboterbewegung nach der Sensorbewegung.Trennt die Verbindung zum aktuellen Objekt.6.14 Lastidentifikation und KollisionserkennungInstruktionMotionSup 3ParIdPosValidParIdRobValidLoadIdManLoadIdDatentyploadidnumparidnumparidvalidnumAnwendung:Deaktiviert/aktiviert die Bewegungsüberwachung.Gültige Roboterposition für ParameteridentifikationGültiger Robotertyp für ParameteridentifikationLastidentifikation des Werkzeugs oder der NutzlastLastidentifikation des externen ManipulatorsAnwendung:Ganzzahl mit einer symbolischen Konstanten darstellenGanzzahl mit einer symbolischen Konstanten darstellenGanzzahl mit einer symbolischen Konstanten darstellen1. Nur wenn das Robotersystem mit der Option „Conveyor tracking“ (Förderer-Tracking) ausgestattet ist.2. Nur wenn das Robotersystem mit der Option „Sensor Synchronization“ (Sensorsynchronisierung)ausgestattet ist.3. Nur wenn das Robotersystem mit der Option „Collision Detection“ (Kollisionserkennung) ausgestattet ist.<strong>RAPID</strong>-Überblick 25
Bewegung6.15 PositionierfunktionenFunktionOffsRelToolCalcRobTCPosCRobTCJointTReadMotorCToolCWObjORobTMirPosCalcJointTDistanceAnwendung:Addiert einen Offset zu einer Roboterposition, ausgedrückt inRelation zum Werkobjekt.Addiert einen Offset, ausgedrückt im Werkzeug-Koordinatensystem.Berechnet robtarget (Roboterziel) aus jointtarget (Achsenziel).Liest die aktuelle Position (nur x, y, z des Roboters).Liest die aktuelle Position (das vollständige Roboterziel)Liest die aktuellen Achsenwinkel.Liest die aktuellen Motorwinkel.Liest den aktuellen Werkzeugdatenwert.Liest den aktuellen Werkobjektdatenwert.Entfernt eine Programmverschiebung von einer Position.Spiegelt eine Position.Berechnet Achsenwinkel vom Roboterziel.Der Abstand zwischen zwei Positionen6.16 Prüfen der unterbrochenen Bahn nach StromausfallFunktionPFRestart 1Anwendung:Prüft, ob die Bahn beim Stromausfall unterbrochen wurde.6.17 StatusfunktionenFunktionCSpeedOverrideAnwendung:Liest den Geschwindigkeitsoverride, den der Bediener imFenster „Programm“ oder „Produktion“ festgelegt hat.1. Nur wenn das Robotersystem mit der Option „Advanced <strong>RAPID</strong>“ (Erweiterte <strong>RAPID</strong>-Funktionen)ausgestattet ist.26 <strong>RAPID</strong>-Überblick
Bewegung6.18 BewegungsdatenBewegungsdaten werden als Argument in den Positionierinstruktionen verwendet.DatentyprobtargetjointtargetspeeddatazonedatatooldatawobjdatastoppointdataidentnoDefiniert:Die EndpositionDie Endposition für eine MoveAbsJ-oder MoveExtJ-Instruktion.Die GeschwindigkeitDie Genauigkeit der Position (Stopppunkt oder Fly-By-Punkt)Das Werkzeug-Koordinatensystem und die Last desWerkzeugsDas Werkobjekt-KoordinatensystemDas Erreichen der PositionEine Zahl, anhand der die Synchronisierung von zwei odermehr koordinierten Synchronbewegungen gesteuert wird6.19 Basisdaten für BewegungenDatentypDefiniert:pos Eine Position (x, y, z)orientEine OrientierungposeEin Koordinatensystem (Position + Orientierung)confdataDie Konfiguration der RoboterachsenextjointDie Position der externen AchsenrobjointDie Position der Roboterachseno_robtarget Ursprüngliche Roboterposition, an der Limit ModPosverwendet wirdo_jointtarget Ursprüngliche Roboterposition, an der „Limit ModPos“ fürMoveAbsJ verwendet wird.loaddataEine LastmecunitEine externe mechanische Einheit<strong>RAPID</strong>-Überblick 27
Bewegung28 <strong>RAPID</strong>-Überblick
Eingangs- und Ausgangssignale7 Eingangs- und AusgangssignaleDer Roboter kann mit einer Anzahl von digitalen und analogen Benutzersignalenausgestattet werden, die sich im Programm ablesen und ändern lassen.7.1 Grundsätze der ProgrammierungDie Signalnamen werden in den Systemparametern definiert. Diese Namen stehen imProgramm stets zum Lesen oder Setzen von E/A-Operationen zur Verfügung.Der Wert eines analogen Signals oder einer digitalen Signalgruppe wird alsnumerischer Wert angegeben.7.2 Ändern eines SignalwertsInstruktionAnwendung:InvertDOInvertieren des Werts eines digitalen AusgangssignalsPulseDOErzeugen eines Impulses auf einem digitalen AusgangssignalReset Zurücksetzen eines digitalen Ausgangssignals (auf 0)Set Setzen eines digitalen Ausgangssignals (auf 1)SetAOÄndern des Werts eines analogen AusgangssignalsSetDOÄndern des Werts eines digitalen Ausgangssignals(symbolischer Wert, z. B. high/low)InvertDOÄndern des Werts einer Gruppe von digitalenAusgangssignalen7.3 Ablesen eines EingangssignalwertsDer Wert eines Eingangssignals kann direkt im Programm gelesen werden, z. B.:! Digitaler EingangIF di1 = 1 THEN ...! Digitaler GruppeneingangIF gi1 = 5 THEN ...! Analoger EingangIF ai1 > 5.2 THEN ...<strong>RAPID</strong>-Überblick 29
Eingangs- und Ausgangssignale7.4 FehlerbehandlungDer folgende behebbare Fehler kann erzeugt werden. Der Fehler kann dann in einerFehlerbehandlung behoben werden. Die Systemvariable ERRNO wird auf folgendenWert gesetzt:ERR_NORUNUNIT, wenn kein Kontakt mit der Einheit besteht7.5 Ablesen eines AusgangssignalwertsFunktionAOutputDOutputGOutputAnwendung:Lesen des aktuellen Werts von einem analogen AusgangssignalLesen des aktuellen Werts von einem digitalen AusgangssignalLesen des aktuellen Werts von einer Gruppe digitalerAusgangssignale7.6 Testen von Eingangs- und AusgangssignalenInstruktionWaitDIWaitDOFunktionTestDIAnwendung:Warten, bis ein digitaler Eingang gesetzt oder zurückgesetztwirdWarten, bis ein digitaler Ausgang gesetzt oder zurückgesetztwirdAnwendung:Testen, ob ein digitaler Eingang gesetzt ist7.7 Deaktivieren und Aktivieren von E/A-ModulenE/A-Module werden automatisch beim Start aktiviert, aber sie können während derProgrammabarbeitung deaktiviert und später wieder aktiviert werden.InstruktionIODisableIOEnableAnwendung:Deaktivieren eines E/A-ModulsAktivieren eines E/A-Moduls30 <strong>RAPID</strong>-Überblick
Eingangs- und Ausgangssignale7.8 Definieren von Eingangs- und AusgangssignalenDatentypDefiniert:dionumSymbolischer Wert eines digitalen Signalssignalai Name eines analogen Eingangssignals *signalao Name eines analogen Ausgangssignals *signaldi Name eines digitalen Eingangssignals *signaldo Name eines digitalen Ausgangssignals *signalgi Name einer Gruppe digitaler Eingangssignale *signalgo Name einer Gruppe digitaler Ausgangssignale *InstruktionAliasIO 1Anwendung:Definieren eines Signals mit einem Aliasnamen* Kann nur mithilfe der Systemparameter definiert werden.7.9 Abrufen des Status der E/A-EinheitDatentypiounit_stateFunktionIOUnitStatusDefiniert:Der Status der E/A-EinheitAnwendung:Gibt den aktuellen Status der E/A-Einheit zurück.1. Nur wenn das Robotersystem mit der Option „Advanced <strong>RAPID</strong>-Alias I/O signals“ (Alias E/A-Signale)ausgestattet ist.<strong>RAPID</strong>-Überblick 31
Eingangs- und Ausgangssignale32 <strong>RAPID</strong>-Überblick
Kommunikation8 KommunikationEs gibt vier Möglichkeiten der Kommunikation über serielle Kanäle:- Meldungen können an das FlexPendant ausgegeben werden und der Anwenderkann Fragen beantworten, z. B. über die Anzahl der zu verarbeitendenWerkstücke.- Zeichenbasierte Informationen können in Textdateien im Massenspeichergeschrieben oder aus diesen gelesen werden. So lassen sich z. B.Produktionsstatistiken speichern und später an einem PC verarbeiten.Informationen können auch direkt auf einem an das Robotersystemangeschlossenen Drucker ausgegeben werden.- Binärdaten können zwischen dem Robotersystem und beispielsweise einemSensor übertragen werden.- Binärdaten können zwischen dem Robotersystem und einem anderenComputer z. B. mit Hilfe eines Verbindungsprotokolls übertragen werden.8.1 Grundsätze der ProgrammierungDie Entscheidung über die Verwendung von zeichenbasierten oder binären Datenhängt davon ab, wie die Ausstattung, mit der der Roboter kommuniziert, dieseInformationen verarbeitet. Eine Datei kann z. B. Daten enthalten, die inzeichenbasiertem oder binärem Format gespeichert werden.Wenn gleichzeitige Kommunikation in beide Richtungen erforderlich ist, mussBinärübertragung gewählt werden.Jeder verwendete serielle Kanal bzw. jede verwendete Datei muss zuerst geöffnetwerden. Dabei erhält der Kanal/die Datei einen Deskriptor, der dann beim Lesen/Schreiben als Referenz dient. Das FlexPendant kann jederzeit benutzt werden undmuss nicht geöffnet werden.Text und der Wert bestimmter Datentypen kann gedruckt werden.<strong>RAPID</strong>-Überblick 33
Kommunikation8.2 Kommunikation mithilfe des FlexPendantsInstruktionTPEraseTPWriteErrWriteTPReadFKTPReadNumTPShowDatentyptpnumAnwendung:Inhalt der Anzeige am FlexPendant löschenAuf die Anzeige am FlexPendant schreibenText auf die Anzeige des FlexPendant schreiben undgleichzeitig diese Meldung im Fehlerprotokoll des Programmsspeichern.Funktionstasten beschriften und betätigte FunktionstasteablesenNumerischen Wert am FlexPendant ablesenAm FlexPendant ein Fenster von <strong>RAPID</strong> wählenAnwendung:Fenster des FlexPendants mit einer symbolischen Konstantendarstellen8.3 Lesen/Schreiben auf zeichenbasierten seriellen Kanälen/DateienInstruktionOpen 1Write 1Close 1FunktionReadNum 1ReadStr 1Anwendung:Kanal/Datei zum Lesen oder Schreiben öffnenText in Kanal/Datei schreibenKanal/Datei schließenAnwendung:Numerischen Wert lesenTextfolge lesen1. Nur wenn das Robotersystem mit der Option „File and Serial Channel Handling“ (Handhabung von Dateienund seriellen Kanälen) ausgestattet ist.34 <strong>RAPID</strong>-Überblick
Kommunikation8.4 Kommunikation mithilfe binärer serieller Kanäle/Dateien/FeldbusseInstruktionOpen 1WriteBin 1WriteAnyBin 1WriteStrBin 1Rewind 1Close 1ClearIOBuff 1ReadAnyBin 1WriteRawBytes 1ReadRawBytes 1FunktionReadBin 1ReadStrBin 1Anwendung:Serielle/n Kanal/Datei für binäre Datenübertragung öffnenIn binäre/n serielle/n Kanal/Datei schreibenIn beliebige/n binäre/n serielle/n Kanal/Datei schreibenZeichenfolge in binäre/n serielle/n Kanal/Datei schreibenDateizeiger an Beginn der Datei setzenKanal/Datei schließenEingangspuffer eines seriellen Kanals löschenAus beliebigem binärem seriellem Kanal lesenDaten des Typs „Rawbytes“ in binäre/n serielle/n Kanal/Datei/Feldbus schreibenDaten des Typs „Rawbytes“ aus binärem seriellem Kanal/Datei/Feldbus lesenAnwendung:Aus binärem seriellem Kanal lesenZeichenfolge aus binärem seriellem Kanal/Datei lesen8.5 KonvertierungInstruktionClearRawBytes 1CopyRawBytes 1PackRawBytes 1UnPackRawBytes 1PackDNHeader 2FunktionRawBytesLen 1VariablenAnwendung:Rawbytes-Variable auf null setzenVon einer Rawbytes-Variablen in eine andere kopierenInhalt einer Variablen in einen Container des Typs „rawbytes“packenInhalt eines Containers des Typs „rawbytes“ in eine VariableentpackenHeader einer DeviceNet-Meldung in einen Container mitRawbytes packenAnwendung:Abrufen der aktuellen Länge gültiger Bytes in einer Rawbyte-1. Nur wenn das Robotersystem mit der Option „File and Serial Channel Handling“ (Handhabung vonDateien und seriellen Kanälen) ausgestattet ist.2. Nur wenn das Robotersystem mit der Option „Fieldbus Command Interface“ (Feldbus-Befehlsschnittstelle) ausgestattet ist.<strong>RAPID</strong>-Überblick 35
Kommunikation8.6 Daten für serielle KanäleDatentypiodev 1Definiert:Verweis auf einen seriellen Kanal/Datei, der/die zum Lesenund Schreiben verwendet werden kannrawbytes 1 Allgemeiner „Datencontainer“ für die Kommunikation mit E/A-Geräten36 <strong>RAPID</strong>-Überblick
Interrupts9 InterruptsInterrupts werden im Programm verwendet, um ein Ereignis direkt zu behandeln,unabhängig davon, welche Instruktion gerade abgearbeitet wird.Das Programm wird z. B. unterbrochen, wenn ein bestimmter Eingang auf 1 gesetztwird. Das normale Programm wird dann unterbrochen und eine spezielle Interrupt-Routine wird abgearbeitet. Nach deren Abschluss wird die Programmabarbeitung ander Stelle fortgesetzt, an der sie unterbrochen wurde.9.1 Grundsätze der ProgrammierungJedem Interrupt wird eine Interrupt-Identität zugewiesen. Er erhält seine Identitätdurch Erstellen einer Variablen (mit dem Datentyp intnum) und der Verbindung derVariablen mit einer Interrupt-Routine.Die Interrupt-Identität (Variable) wird dann verwendet, um einen Interruptanzufordern, d. h. die Ursache des Interrupts anzugeben. Dies kann eines der folgendenEreignisse sein:- Ein Eingang oder Ausgang wurde auf 1 oder 0 gesetzt.- Eine vorgegebene Zeitdauer läuft ab, nachdem ein Interrupt angefordert wurde.- Eine bestimmte Position wird erreicht.Ein angeforderter Interrupt wird automatisch aktiviert, kann jedoch vorübergehenddeaktiviert werden. Dies ist auf zwei Arten möglich:- Alle Interrupts können blockiert werden. Alle Interrupts, die in dieserZeitspanne auftreten, werden in eine Warteschlange eingereiht und dannautomatisch erzeugt, wenn Interrupts wieder freigegeben werden.- Einzelne Interrupts können deaktiviert werden. Alle Interrupts, die in dieserZeitspanne auftreten, werden ignoriert.9.2 Verbinden von Interrupts mit Interrupt-RoutinenInstruktionCONNECTAnwendung:Verbinden einer Variablen (Interrupt-Identität) mit einerInterrupt-Routine<strong>RAPID</strong>-Überblick 37
Interrupts9.3 Anfordern von InterruptsInstruktionISignalDIISignalDOISignalAI 1ISignalAO 1ITimerTriggInt 2IPersIError 3Für Anforderung von:Interrupt von einem digitalen EingangssignalInterrupt von einem digitalen AusgangssignalInterrupt von einem analogen EingangssignalInterrupt von einem analogen AusgangssignalZeitgesteuerter InterruptPositionsbedingter Interrupt (aus der Bewegungsauswahlliste)Ein Interrupt beim Ändern einer Persistenten.Anfordern und Freigeben eines Interrupts, wenn ein Fehlerauftritt9.4 Abbrechen von InterruptsInstruktionIDeleteAnwendung:Abbrechen (Löschen) eines Interrupts9.5 Freigeben/Blockieren von InterruptsInstruktionISleepIWatchIDisableIEnableAnwendung:Deaktivieren eines einzelnen InterruptsAktivieren eines einzelnen InterruptsBlockieren aller InterruptsFreigeben aller Interrupts9.6 InterruptdatenInstruktionGetTrapData 3ReadErrData 3Anwendung:Bezieht in einer Interrupt-Routine alle Informationen über denInterrupt, der die Abarbeitung der Interrupt-Routine verursachthat.Bezieht in einer Interrupt-Routine numerische Informationen(Domäne, Typ und Nummer) über einen Fehler, eineStatusänderung oder eine Warnung, die die Abarbeitung derInterrupt-Routine verursacht hat.1. Nur wenn das Robotersystem mit der Option „Analog Signal Interrupt“ (Analogsignal-Interrupt)ausgestattet ist.2. Nur wenn das Robotersystem mit der Option „Fixed Position Events“ (Positionsabhängige Ereignisse)ausgestattet ist.3. Nur wenn das Robotersystem mit der Option „Advanced <strong>RAPID</strong>“ (Erweiterte <strong>RAPID</strong>-Funktionen)ausgestattet ist.38 <strong>RAPID</strong>-Überblick
Interrupts9.7 Datentyp von InterruptsDatentypintnumtrapdataerrtypeerrdomainAnwendung:Definiert die Identität eines Interrupts.Enthält die Interruptdaten, die die Abarbeitung der aktuellenInterrupt-Routine ausgelöst haben.Gibt einen Fehlertyp an (Schwere des Fehlers).Gibt eine Fehlerdomäne an.<strong>RAPID</strong>-Überblick 39
Interrupts40 <strong>RAPID</strong>-Überblick
Fehlerbehandlung10 FehlerbehandlungViele bei der Abarbeitung eines Programms auftretende Fehler können im Programmbehoben werden, d. h. die Programmabarbeitung muss nicht unterbrochen werden.Diese Fehler werden entweder durch das System erkannt (z. B. Division durch Null)oder durch das Programm (z. B. Fehler wie das Einlesen eines falschen Werts durcheinen Strichcodeleser).10.1 Grundsätze der ProgrammierungWenn ein Fehler auftritt, wird die Fehlerbehandlungsroutine (falls vorhanden)aufgerufen. Es ist auch möglich, einen Fehler innerhalb des Programms zu erzeugenund dann auf die Fehlerbehandlungsroutine zu springen.In einer Fehlerbehandlungsroutine können Fehler mithilfe normaler Instruktionenbehandelt werden. Anhand der Systemdaten ERRNO kann der Typ des aufgetretenenFehlers bestimmt werden. Eine Rückkehr von der Fehlerbehandlungsroutine ist dannauf verschiedene Arten möglich (RETURN, RETRY, TRYNEXT und RAISE).Wenn die aktuelle Routine keine Fehlerbehandlungsroutine umfasst, wird direkt an dieFehlerbehandlungsroutine des Robotersystems übergeben. Die interneFehlerbehandlungsroutine gibt eine Fehlermeldung aus und stoppt dieProgrammabarbeitung mit dem Programmzeiger auf der fehlerhaften Instruktion.10.2 Erzeugen einer Fehlersituation innerhalb des ProgrammsInstruktionRAISEAnwendung:Einen Fehler „erzeugen“ und die Fehlerbehandlungsroutineaufrufen10.3 Vergeben einer FehlernummerInstruktionBookErrNo 1Anwendung:Eine neue <strong>RAPID</strong>-Systemfehlernummer vergeben1. Nur wenn das Robotersystem mit der Option „Advanced <strong>RAPID</strong>“ (Erweiterte <strong>RAPID</strong>-Funktionen)ausgestattet ist.<strong>RAPID</strong>-Überblick 41
Fehlerbehandlung10.4 Neustart/Rückkehr von der FehlerbehandlungInstruktionEXITRAISERETRYTRYNEXTRETURNRaiseToUserStartMoveRetrySkipWarnAnwendung:Programmabarbeitung stoppen, wenn ein schwerwiegenderFehler auftrittFehlerbehandlung von der Routine aufrufen, die die aktuelleRoutine aufgerufen hatErneut die Instruktion abarbeiten, die den Fehler verursacht hatInstruktion nach der Instruktion abarbeiten, die den Fehlerverursacht hatZu der Routine zurückkehren, die die aktuelle Routineaufgerufen hatVon einer NOSTEPIN-Routine wird der Fehler aufBenutzerebene an die Fehlerbehandlung gemeldet.Eine Instruktion, welche die beiden Instruktionen StartMoveund RETRY ersetzt. Sie nimmt die Bewegung wieder auf undführt erneut die Instruktion aus, die den Fehler verursacht hat.Zuletzt angeforderte Warnmeldung überspringen10.5 Benutzerdefinierte Fehler und WarnungenInstruktionErrLogErrRaiseAnwendung:Eine Fehlermeldung am Programmiergerät anzeigen und imMeldungsprotokoll des Roboters speichern.Einen Fehler innerhalb des Programms erzeugen und dann dieFehlerbehandlung der Routine aufrufen.10.6 Generieren eines ProzessfehlersInstruktionProcerrRecovery 1Anwendung:Prozessorfehler während der Roboterbewegung generieren.10.7 Daten für FehlerbehandlungDatentyperrnumerrstrDefiniert:Ursache des FehlersText in einer Fehlermeldung42 <strong>RAPID</strong>-Überblick
Fehlerbehandlung10.8 Konfiguration für FehlerbehandlungSystemparameterNo Of RetryDefiniert:Anzahl der Wiederholungen einer fehlgeschlagenenInstruktion, wenn die Fehlerbehandlung RETRY verwendet.No of Retry gehört zum Typ System Misc in derParametergruppe Steuerung.<strong>RAPID</strong>-Überblick 43
Fehlerbehandlung44 <strong>RAPID</strong>-Überblick
System und Zeit11 System und ZeitSystem- und Zeitinstruktionen gestatten dem Anwender, Zeit zu messen, zukontrollieren und aufzuzeichnen.11.1 Grundsätze der ProgrammierungClock-Instruktionen ermöglichen dem Anwender, Uhren als Stoppuhren zuverwenden. Auf diese Weise kann das Roboterprogramm jedes gewünschte Ereigniszeitlich steuern.Aktuelle Zeit und aktuelles Datum können als Zeichenfolge abgerufen werden. DieseZeichenfolge lässt sich dann dem Bediener am FlexPendant anzeigen oder als ZeitundDatumsstempel in Protokolldateien verwenden.Es ist auch möglich, Komponenten der aktuellen Systemzeit als numerischen Wertabzurufen. Damit kann das Roboterprogramm eine Aktion an einem bestimmtenZeitpunkt oder Wochentag ausführen.11.2 Zeitliches Festlegen eines Ereignisses mit einer UhrInstruktionClkResetClkStartClkStopFunktionClkReadDatentypclockAnwendung:Zurückstellen einer Uhr, die für die Zeitnahme verwendet wirdStarten einer Uhr, die für die Zeitnahme verwendet wirdStoppen einer Uhr, die für die Zeitnahme verwendet wirdAnwendung:Ablesen einer Uhr, die für die Zeitnahme verwendet wirdAnwendung:Zeitnahme – speichert eine gemessene Dauer in Sekunden11.3 Ablesen der aktuellen Uhrzeit und des aktuellen DatumsFunktionCDateCTimeGetTimeAnwendung:Lesen des aktuellen Datums als ZeichenfolgeLesen der aktuellen Uhrzeit als ZeichenfolgeLesen der aktuellen Zeit als numerischer Wert<strong>RAPID</strong>-Überblick 45
System und Zeit11.4 Abrufen der Zeitinformationen aus einer DateiFunktionFileTimeModTimeAnwendung:Abrufen des letzten Zeitpunkts einer DateiänderungAbrufen des Zeitpunkts, an dem ein bestimmtes Modul geladenwurde11.5 Abrufen der Größe des freien ProgrammspeichersFunktionProgMemFreeAnwendung:Abrufen der Größe des freien Programmspeichers46 <strong>RAPID</strong>-Überblick
Mathematik12 MathematikMathematische Instruktionen und Funktionen dienen der Berechung und dem Änderndes Werts von Daten.12.1 Grundsätze der ProgrammierungBerechnungen erfolgen normalerweise mithilfe der Zuweisungsinstruktion, z. B.reg1:= reg2 + reg3 / 5. Es gibt auch einige Instruktionen für einfache Berechnungen,z. B. das Löschen einer numerischen Variablen.12.2 Einfache Berechnungen mit numerischen DatenInstruktionAnwendung:ClearLöscht den Wert.AddAddiert oder subtrahiert einen Wert.Incr Erhöht den Wert um 1.Decr Verringert den Wert um 1.12.3 Komplexere BerechnungenInstruktionAnwendung::= Durchführen von Berechnungen mit beliebigen Datentypen<strong>RAPID</strong>-Überblick 47
Mathematik12.4 Arithmetische FunktionenFunktionAnwendung:AbsBerechnet den absoluten Wert.RoundRundet einen numerischen Wert.TruncSchneidet einen numerischen Wert ab.SqrtBerechnet die Quadratwurzel.Exp Berechnet den Exponentialwert zur Basis e.PowBerechnet den Exponentialwert zu einer beliebigen Basis.ACosBerechnet den Cosinus.ASinBerechnet den Arcussinus.ATan Berechnet den Arcustangens im Bereich [-90,90].ATan2 Berechnet den Arcustangens im Bereich [-180,180]ACosBerechnet den Cosinus.SinBerechnet den Sinus.TanBerechnet den Tangens.EulerZYXBerechnet Eulersche Winkel aus einer Orientierung.OrientZYXBerechnet die Orientierung aus Eulerschen Winkeln.PoseInvInvertiert eine Koordinatenverschiebung.PoseMultMultipliziert KoordinatenverschiebungenPoseVectMultipliziert eine Koordinatenverschiebung mit einem Vektor.VectmagnBerechnet die Länge eines pos-Vektors.DotProdBerechnet das Skalarprodukt von zwei pos-Vektoren.NOrientNormalisiert eine nichtnormalisierte Orientierung(Quarternion).48 <strong>RAPID</strong>-Überblick
Mathematik12.5 Bit-FunktionenInstruktionBitClear 1BitSet 1Anwendung:Löscht ein angegebenes Bit in definierten byte-Daten.Setzt ein angegebenes Bit in definierten byte-Daten.FunktionAnwendung:BitCheck 1 Prüft, ob ein angegebenes Bit in definierten byte-Daten auf 1gesetzt ist.BitAnd 1Arbeitet eine logische bitweise AND-Operation an byte-Datentypen ab.BitNeg 1Arbeitet eine logische bitweise NEGATION-Operation anbyte-Datentypen ab.BitOr 1Arbeitet eine logische bitweise OR-Operation an byte-Datentypen ab.BitXOr 1Arbeitet eine logische bitweise XOR-Operation an byte-Datentypen ab.BitLSh 1Arbeitet eine logische bitweise LINKSSHIFT-Operation anbyte-Datentypen ab.BitRSh 1Arbeitet eine logische bitweise RECHTSSHIFT-Operation anbyte-Datentypen ab.Datentypbyte 1Anwendung:Mit Instruktionen und Funktionen zur Bitmanipulationbenutzt.1. Nur wenn das Robotersystem mit der Option „Advanced <strong>RAPID</strong> - Bit Functions“ (Bit-Funktionen)ausgestattet ist.<strong>RAPID</strong>-Überblick 49
Mathematik50 <strong>RAPID</strong>-Überblick
Kommunikation mit einem externen Computer13 Kommunikation mit einem externen ComputerDer Roboter kann durch einen übergeordneten Computer gesteuert werden. In diesemFall wird ein spezielles Kommunikationsprotokoll für die Übertragung vonInformationen benutzt.13.1 Grundsätze der ProgrammierungDie Informationen zwischen Roboter und Computer werden über ein gemeinsamesKommunikationsprotokoll übertragen. Der Roboter und der Computer könneneinander ohne Programmierung verstehen. Der Computer kann z. B. Werte in denProgrammdaten ändern, ohne dass eine Programmierung erforderlich ist (außer zurDefinition dieser Daten). Eine Programmierung ist nur nötig, wennprogrammgesteuerte Informationen vom Robotersystem an den übergeordnetenComputer gesendet werden müssen.13.2 Senden einer programmgesteuerten Meldung vom Roboter an einenComputerInstruktionSCWrite 1Anwendung:Senden einer Meldung an den übergeordneten Computer1. Nur wenn das Robotersystem mit der Option „PC Interface/Backup“ (PC-Schnittstelle/Backup)ausgestattet ist.<strong>RAPID</strong>-Überblick 51
Kommunikation mit einem externen Computer52 <strong>RAPID</strong>-Überblick
Funktionen für Dateioperationen14 Funktionen für DateioperationenInstruktionMakeDir 1RemoveDir 1OpenDir 1CloseDir 1RemoveFile 1RenameFile 1CopyFile 1FunktionISFile 1FSSize 1FileSize 1ReadDir 1Datentypdir 1Anwendung:Erstellt ein neues Verzeichnis.Entfernt ein Verzeichnis.Öffnet ein Verzeichnis und zeigt dessen Inhalt an.Schließt ein Verzeichnis, das mit OpenDir geöffnet wurde.Entfernt eine Datei.Benennt eine Datei um.Kopiert eine Datei.Anwendung:Überprüft den Typ einer Datei.Ruft die Größe eines Dateisystems ab.Ruft die Größe einer angegebenen Datei ab.Liest den nächsten Eintrag in einem Verzeichnis.Anwendung:Durchläuft Verzeichnisstrukturen.1. Nur wenn das Robotersystem mit der Option „File and serial channel handling - File operation functions“(Handhabung von Dateien und seriellen Kanälen - Funktionen für Dateioperationen) ausgestattet ist.<strong>RAPID</strong>-Überblick 53
Funktionen für Dateioperationen54 <strong>RAPID</strong>-Überblick
Instruktionen zur Unterstützung von <strong>RAPID</strong>15 Instruktionen zur Unterstützung von <strong>RAPID</strong>Verschiedene Funktionen zur Unterstützung der Programmiersprache <strong>RAPID</strong>:- Abrufen von Systemdaten- Lesen von Konfigurationsdaten- Schreiben von Konfigurationsdaten- Neustart der Steuerung- Testen von Systemdaten- Abrufen von Objektnamen- Abrufen von Tasknamen- Suche nach Symbolen15.1 Abrufen von SystemdatenDiese Instruktion ruft den Wert und (optional) den Symbolnamen für die aktuellenSystemdaten des angegebenen Typs ab.InstruktionGetSysDataSetSysData 1FunktionIsSysIDIsStopStateEvent 2RobOSAnwendung:Bezieht Daten und Name des derzeit aktiven Werkzeugs oderWerkobjekts.Aktiviert einen angegebenen Systemdatennamen für einenangegebenen Datentyp.Anwendung:Testet die Systemidentität.Bezieht Informationen über die Bewegung desProgrammzeigers.Prüft, ob die Abarbeitung am Robot Controller RC oderVirtual Controller VC erfolgt.15.2 Abrufen von Informationen über das SystemFunktion zum Abrufen von Information über Seriennummer, Software-Version oderRobotertyp.FunktionGetSysInfoAnwendung:Abrufen von Informationen über das System.1. Nur wenn das Robotersystem mit der Option „Advanced <strong>RAPID</strong>-Data search“ (Datensuche) ausgestattet ist.2. Nur wenn das Robotersystem mit der Option „Advanced <strong>RAPID</strong> - Miscellaneous functions“ (VerschiedeneFunktionen) ausgestattet ist.<strong>RAPID</strong>-Überblick 55
Instruktionen zur Unterstützung von <strong>RAPID</strong>15.3 Abrufen von Informationen über den SpeicherFunktionProgMemFreeAnwendung:Abrufen der Größe des freien Programmspeichers15.4 Lesen von KonfigurationsdatenDiese Instruktion liest ein Attribut eines angegebenen Systemparameters.InstruktionReadCfgData 1Anwendung:Liest ein Attribut eines angegebenen Systemparameters.15.5 Schreiben von KonfigurationsdatenDiese Instruktion schreibt ein Attribut eines angegebenen Systemparameters.InstruktionWriteCfgData 1Anwendung:Schreibt ein Attribut eines angegebenen Systemparameters.15.6 Führen Sie einen Neustart der Steuerung durch.InstruktionWarmStart 1Anwendung:Führt einen Warmstart der Steuerung durch, wenn SieSystemparameter von <strong>RAPID</strong> geändert haben.15.7 TriggerfunktionenDiese Instruktionen setzen Ausgangssignale und/oder führen Interrupt-Routinen anfesten Positionen durch, während sich der Roboter bewegt.InstruktionTriggC 2TriggJ 2TriggL 2Anwendung:Definiert Roboterbewegungen und Ereignisse auf einerKreisbahn.Definiert Roboterbewegungen und Ereignisse in einernichtlinearen Bewegung von einem Punkt zu einem anderen.Definiert Roboterbewegungen und Ereignisse bei einerlinearen Bewegung.1. Nur wenn das Robotersystem mit der Option „Advanced <strong>RAPID</strong>“ (Erweiterte <strong>RAPID</strong>-Funktionen) ausgestattetist.2. Nur wenn das Robotersystem mit der Option „Fixed Position Events“ (Positionsabhängige Ereignisse)ausgestattet ist.56 <strong>RAPID</strong>-Überblick
Instruktionen zur Unterstützung von <strong>RAPID</strong>15.8 Instruktionen für TexttabellenMit diesen Instruktionen werden Texttabellen im System verwaltet.InstruktionTextTabInstall 1FunktionTextTabGet 1TextGet 1TextTabFreeToUse 1Anwendung:Installiert eine Texttabelle im System.Anwendung:Bezieht die Nummer einer anwenderdefinierten Texttabelle.Bezieht eine Zeichenfolge aus den Systemtexttabellen.Testet, ob der Name der Texttabelle (Textressourcen-Zeichenfolge) verwendet werden kann.15.9 Abrufen von ObjektnamenDiese Instruktion ruft den Namen eines originalen Datenobjekts für ein aktuellesArgument oder aktuelle Daten ab.FunktionArgName 2Anwendung:Gibt den Namen des originalen Datenobjekts zurück.15.10 Abrufen von TasknamenFunktionGetTaskNameAnwendung:Ruft die Identität der aktuellen Programmtask samt ihremNamen und ihrer Nummer ab.1. Nur wenn das Robotersystem mit der Option „Advanced <strong>RAPID</strong> -Text handling“ (Textfunktionen) ausgestattetist.2. Nur wenn das Robotersystem mit der Option „Advanced <strong>RAPID</strong> - Miscellaneous functions“ (VerschiedeneFunktionen) ausgestattet ist.<strong>RAPID</strong>-Überblick 57
Instruktionen zur Unterstützung von <strong>RAPID</strong>15.11 Suche nach SymbolenMit diesen Instruktionen werden Datenobjekte im System gesucht.InstruktionSetAllDataVal 1SetDataSearch 1GetDataVal 1SetDataVal 1FunktionGetNextSym 1Datentypdatapos 1Anwendung:Setzt einen neuen Wert für alle Datenobjekte eines bestimmtenTyps, die einer vorgegebenen Grammatik entsprechen.Zusammen mit GetNextSym können Datenobjekte aus demSystem abgerufen werden.Ruft einen Wert von einem Datenobjekt ab, das mit einerZeichenfolgenvariablen angegeben ist.Setzt einen Wert für ein Datenobjekt, das mit einerZeichenfolgenvariablen angegeben ist.Anwendung:Zusammen mit SetDataSearch können Datenobjekte aus demSystem abgerufen werden.Anwendung:Enthält Informationen darüber, wo ein bestimmtes Objekt imSystem definiert ist.1. Nur wenn das Robotersystem mit der Option „Advanced <strong>RAPID</strong>-Data search“ (Datensuche) ausgestattet ist.58 <strong>RAPID</strong>-Überblick
Instruktionen für Kalibrierung und Service16 Instruktionen für Kalibrierung und ServiceEine Reihe von Instruktionen stehen für Kalibrierung und Test des Robotersystems zurVerfügung. Weitere Informationen finden Sie im Kapitel über Hilfsmittel zurFehlerbehebung im Produkthandbuch.16.1 Kalibrierung des WerkzeugsInstruktionMToolRotCalibMToolTCPCalibSToolRotCalibSToolTCPCalibAnwendung:Drehung eines sich bewegenden Werkzeugs kalibrierenWerkzeugarbeitspunkt (TCP) eines sich bewegendenWerkzeugs kalibrierenTCP und Drehung eines stationären Werkzeugs kalibrierenWerkzeugarbeitspunkt (TCP) eines stationären Werkzeugskalibrieren16.2 Verschiedene KalibrierungsmethodenFunktionCalcRotAxisFrameCalcRotAxFrameZDefAccFrameAnwendung:Anwender-Koordinatensystem für eine RotationsachseberechnenAnwender-Koordinatensystem für eine Rotationsachseberechnen, wenn sich der Master-Roboter und die externeAchse in unterschiedlichen <strong>RAPID</strong>-Tasks befinden.Ein Koordinatensystem aus Originalpositionen undverschobenen Positionen definieren.16.3 Wertzuweisung an das Prüfsignal des RobotersystemsEin Referenzsignal wie eine Motordrehzahl kann einem analogen Ausgangssignal ander Rückwand des Robotersystems zugewiesen werden.InstruktionTestSignDefineTestSignDefineFunktionTestSignReadDatentyptestsignalAnwendung:Prüfsignal definierenAlle Prüfsignaldefinitionen zurücksetzenAnwendung:Prüfsignalwert lesenAnwendung:Für Programminstruktion TestSignDefine<strong>RAPID</strong>-Überblick 59
Instruktionen für Kalibrierung und Service16.4 Aufzeichnen einer AbarbeitungDie aufgezeichneten Daten werden zur späteren Analyse in einer Datei gespeichert undsind zur Fehlersuche in <strong>RAPID</strong>-Programmen insbesondere für Multitasking-Systemegedacht.InstruktionSpyStartSpyStopAnwendung:Aufzeichnung von Instruktions- und Zeitdaten während derAbarbeitung startenAufzeichnung von Instruktions- und Zeitdaten während derAbarbeitung stoppen60 <strong>RAPID</strong>-Überblick
Zeichenfolgenfunktionen17 ZeichenfolgenfunktionenZeichenfolgefunktionen werden für Vorgänge mit Zeichenfolgen verwendet, z. B.Kopieren, Verketten, Vergleichen, Suchen, Konvertieren usw.17.1 Grundlegende AbläufeDatentypstringDefiniert:Zeichenfolge. Vordefinierte Konstanten STR_DIGIT,STR_UPPER, STR_LOWER und STR_WHITEInstruktion/Operator Anwendung::= Zuweisen eines Werts (Kopie der Zeichenfolge)+ ZeichenfolgenverkettungFunktionStrLenStrPartAnwendung:Länge der Zeichenfolge abrufenTeil der Zeichenfolge abrufen17.2 Vergleich und SucheOperatorAnwendung:= Prüfen, wenn gleich Prüfen, wenn ungleichFunktionStrMembStrFindStrMatchStrOrderAnwendung:Prüfen, ob Zeichen einer Zeichenmenge angehörtSuchen nach Zeichen in einer ZeichenfolgeSuchen nach einem Muster in einer ZeichenfolgePrüfen, ob Zeichenfolgen geordnet sind<strong>RAPID</strong>-Überblick 61
Zeichenfolgenfunktionen17.3 KonvertierungFunktionAnwendung:NumToStrNumerischen Wert in eine Zeichenfolge konvertierenValToStrWert in eine Zeichenfolge konvertierenStrToValZeichenfolge in einen Wert konvertierenStrMapZeichenfolge zuordnenStrToByteZeichenfolge in ein Byte konvertierenByteToStrByte in Zeichenfolgendaten konvertierenDecToHex Zahl, die in einer lesbaren Zeichenfolge mit der Basis 10angegeben ist, in die Basis 16 konvertierenHexToDec Zahl, die in einer lesbaren Zeichenfolge mit der Basis 16angegeben ist, in die Basis 10 konvertieren62 <strong>RAPID</strong>-Überblick
Multitasking18 MultitaskingMultitasking <strong>RAPID</strong> ist eine Möglichkeit, Programme (pseudo-) parallel zumnormalen Programm abzuarbeiten. Ein paralleles Programm kann in den Vordergrundoder Hintergrund eines anderen Programms gestellt werden. Es kann sich auch auf dergleichen Ebene wie ein anderes Programm befinden. (Weitere Informationen hierzufinden Sie unter „Grundlegende Eigenschaften, Multitasking“.)18.1 GrundlagenZur Nutzung dieser Funktion muss das Robotersystem mit einer zusätzlichen TASKfür jedes Hintergrundprogramm konfiguriert werden.Bis zu zehn verschiedene Tasks können pseudoparallel ablaufen. Jede Task besteht wiedas normale Programm aus einer Reihe von Modulen. Alle Module in einer Task sindlokal.In jeder Task sind Variablen und Konstanten lokal, jedoch nicht Persistenten. EinePersistente mit demselben Namen und Typ ist in allen Tasks erreichbar. Wenn zweiPersistenten denselben Namen, aber unterschiedlichen Typ oder Größe(Datenfelddimension) aufweisen, tritt ein Laufzeitfehler auf.Eine Task verfügt über ihre eigene Interrupt-Behandlung, und die Ereignisroutinenwerden nur für ihren eigenen Systemstatus (z. B. Start/Stopp/Neustart...) ausgelöst.18.2 Allgemeine Instruktionen und FunktionenInstruktionWaitSyncTask 1FunktionTestAndSetTaskRunMecTaskRunRobDatentypentaskidsyncidenttasksAnwendungSynchronisieren mehrerer Programmtasks an einembestimmten Punkt in jedem ProgrammAnwendung:Exklusive Rechte für spezielle Bereiche des <strong>RAPID</strong>-Codesoder Systemressourcen einstellenPrüfen, ob die Programmtask eine mechanische Einheitsteuert.Prüfen, ob die Programmtask einen TCP-Roboter steuert.AnwendungVerfügbare Programmtasks im System identifizieren.Name eines Synchronisierungspunkts angebenMehrere <strong>RAPID</strong>-Programmtasks angeben1. Nur wenn das Robotersystem mit der Option „Multitasking“ ausgestattet ist.<strong>RAPID</strong>-Überblick 63
Multitasking18.3 MultiMove-System mit koordinierten RoboternInstruktionSyncMoveOn 1SyncMoveOff 1SyncMoveUndoFunktionIsSyncMoveOnDatentypensyncidenttasksAnwendungSequenz von synchronisierten Bewegungen starten.Synchronisierte Bewegungen beendenSynchronisierte Bewegungen zurücksetzenAnwendung:Mitteilen, ob die aktuelle Task in synchronisiertem Modus istAnwendungName eines Synchronisierungspunkts angebenMehrere <strong>RAPID</strong>-Programmtasks angeben1. Nur wenn das Robotersystem mit der Option „Coordinated Robots“ (Koordinierte Roboter) ausgestattetist.64 <strong>RAPID</strong>-Überblick
Zusammenfassung der Syntax19 Zusammenfassung der Syntax19.1 InstruktionenData := ValueAccSet Acc RampActUnit MecUnitAdd Name AddValueAliasIOFromSignal ToSignalArcRefreshArcKillBitClearBitData BitPosBitSetBitData BitPosBookErrNoErrorNameBreakCallByVarName NumberCancelLoad LoadNoCirPathMode[\PathFrame] | [\ObjectFrame] | [\CirPointOri]ClearNameClearIOBuffIODeviceClearPathClearRawBytesRawData [\FromIndex]ClkResetClkStartClkStopClockClockClock<strong>RAPID</strong>-Überblick 65
Zusammenfassung der SyntaxClose IODeviceCloseDirDev! KommentarConfJ [\On] | [\Off]ConfL[\On] | [\Off]CONNECT Interrupt WITH Trap routineCopyFileOldPath NewPathCopyRawBytesFromRawData FromIndex ToRawData ToIndex66 <strong>RAPID</strong>-Überblick
Zusammenfassung der Syntax[\NoOfBytes]CorrClearCorrConDescrCorrDisconDescrCorrWriteCorrWriteDescr DataCorrClearDeactUnitMecUnitDecrNameDitherAct[\MechUnit] Axis [\Level]DitherDeactDropSensorDropWObjMecuntWObjEOffsOffEOffsOnEOffsSet[\ExeP] ProgPointEAxOffsEraseModuleModuleNameErrLog ErrorID [\W] Argument1 Argument2 Argument3Argument4 Argument5<strong>RAPID</strong>-Überblick 67
Zusammenfassung der SyntaxErrRaise ErrorName ErrorID Argument1 Argument2 Argument3Argument4 Argument5ErrWrite[\W] Header Reason [\RL2] [\RL3] [\RL4]BeendenExitCycleFOR Loopcounter FROM Startvalue TO Endvalue [STEP Stepvalue] DO ... ENDFORGetDataValGetSysDataGetTrapDataObject [\Block] ValueDestObject [\ObjectName]TrapEventGOTOLabelGripLoadLoadIDeleteInterruptIDisableIEnableIErrorErrorDomain [\ErrorId] ErrorType InterruptIF Condition ...IF Condition THEN ... {ELSEIF Condition THEN ...} [ELSE ...]ENDIFIncrNameIndAMove[\Ramp]IndCMoveIndDMoveMecUnit Axis [\ToAbsPos] | [\ToAbsNum] SpeedMecUnit Axis Speed [\Ramp]MecUnit Axis Delta Speed [\Ramp]IndReset MecUnit Axis[\RefPos] | [\RefNum] | [\Short] | [\Fwd] | [\Bwd] | [\Old]68 <strong>RAPID</strong>-Überblick
Zusammenfassung der SyntaxIndRMove MecUnit Axis [\ToRelPos] | [\ToRelNum] | [\Short] |[\Fwd] | [\Bwd] Speed [\Ramp]InvertDOIODisableIOEnableSignalUnitName MaxTimeUnitName MaxTimeIPersName InterruptISignalAI [\Single] Signal Condition HighValue LowValueDeltaValue [\DPos] | [\DNeg] InterruptISignalAO [\Single] Signal Condition HighValue LowValueDeltaValue [\DPos] | [\DNeg] InterruptISignalDIISignalDO[\Single] Signal TriggValue Interrupt[\Single] Signal TriggValue InterruptISleepInterruptITimer [\Single] Time InterruptIVarValueVarNo Value InterruptIWatch Interrupt ParIdType LoadIdType Tool [\PayLoad][\WObj] [\ConfAngle] [\SlowTest] [\Accuracy]Load[\Dynamic] FilePath [\File]LoadId ParIdType LoadIdType Tool [\PayLoad] [\WObj][\ConfAngle] [\SlowTest] [\Accuracy]MakeDirPathManLoadIdProc [\ParIdType] [\MechUnit] [\MechUnitName][\AxisNumber] [\PayLoad] [\ConfigAngle] [\DeactAll][\AlreadyActive] [\DefinedFlag]MechUnitLoadMechUnit AxisNo LoadMotionSupMoveAbsJ[\On] | [\Off] [\TuneValue][\Conc] ToJointPos [\ID] Speed [\V] | [\T] Zone<strong>RAPID</strong>-Überblick 69
Zusammenfassung der Syntax[\Z] Tool [\WObj]MoveC [\Conc] CirPoint ToPoint [\ID] Speed [\V] | [\T] Zone[\Z] Tool [\WObj]70 <strong>RAPID</strong>-Überblick
Zusammenfassung der SyntaxMoveCDO CirPoint ToPoint [\ID] Speed [\T] Zone Tool[\WObj] Signal ValueMoveCSync CirPoint ToPoint [\ID] Speed [\T] Zone Tool[\WObj] ProcNameMoveExtJ[\Conc] ToJointPos [\ID] Speed [\T] Zone [\Inpos]MoveJ[\WObj][\Conc] ToPoint [\ID] Speed [\V] | [\T] Zone [\Z] ToolMoveJDO ToPoint [\ID] Speed [\T] Zone Tool [\WObj]Signal ValueMoveJSyncProcNameToPoint [\ID] Speed [\T] Zone Tool [\WObj]MoveL [\Conc] ToPoint [\ID] Speed [\V] | [\T] Zone [\Z]Tool [\WObj]MoveLDO ToPoint [\ID] Speed [\T] Zone Tool [\WObj]Signal ValueMoveLSyncProcNameToPoint [\ID] Speed [\T] Zone Tool [\WObj]MToolRotCalibMToolTCPCalibRefTip ZPos [\XPos] ToolPos1 Pos2 Pos3 Pos4 Tool MaxErr MeanErrOpen Object [\File] IODevice[\Read] | [\Write] | [\Append] | [\Bin]OpenDirDev PathPackDNHeaderService Path RawDataPackRawBytes Value RawData [\Network] StartIndex[\Hex1] | [\IntX] | [\Float4] | [\ASCII]PathAccLimAccLim [\AccMax] DecelLim [\DecelMax]PathRecMoveBwdPathRecMoveFwd[\ID] [\ToolOffs] [\Speed][\ID] [\ToolOffs] [\Speed]<strong>RAPID</strong>-Überblick 71
Zusammenfassung der SyntaxPathRecStartIDPathRecStop [\Clear]PathResolValuePDispOffPDispOnPDispSet[\Rot] [\ExeP] ProgPoint Tool [\WObj]DispFrameProcedure { Argument }ProcerrRecovery[\SyncOrgMoveInst] | [\SyncLastMoveInst]PulseDO[\PLength] SignalRAISE [ Error no ]RaiseToUserReadAnyBinReadCfgData[\Continue] | [\BreakOff] [\ErrorNumber]IODevice Data [\Time]InstancePath Attribute CfgDataReadErrData TrapEvent ErrorDomain ErrorId ErrorType [\Str1][\Str2] [\Str3] [\Str4] [\Str5]ReadRawBytesIODevice RawData NoOfBytes[\Time]RemoveDirRemoveFileRenameFilePathPathOldPath NewPathResetSignalRestoPathRETURN [ Return value ]RewindIODeviceSave[\TaskRef] ModuleName [\FilePath] [\File]SearchC [\Stop] | [\PStop] | [\Sup] Signal SearchPoint CirPointToPoint [\ID] Speed [\V] | [\T] Tool [\WObj]72 <strong>RAPID</strong>-Überblick
Zusammenfassung der SyntaxSearchL [\Stop] | [\PStop] | [\Sup] Signal SearchPoint ToPoint[\ID] Speed [\V] | [\T] Tool [\WObj]Set SignalSetAllDataValType [\TypeMod] [\Object] [\Hidden] ValueSetAOSignal ValueSetDataSearch Type [\TypeMod] [\Object] [\PersSym] [\VarSym][\ConstSym] [\InTask] | [\InMod] [\InRout][\GlobalSym] | [\LocalSym]SetDataValObject [\Block] ValueSetDOSetGO[\SDelay] Signal ValueSignal ValueSetSysDataSingAreaSourceObject [\ObjectName][\Wrist] | [\Arm] | [\Off]SkipWarnSoftAct Axis Softness [\Ramp]SoftDeact[\Ramp]SpcCon Descr Status [\GrpSize] [\Teach] [\Strict] [\Header][\BackupFile]SpcDiscon DescrSpcDumpSpcReadSpcStatSpotJSpotL ToPoint Speed Spot [\InPos] [\NoConc] [\Retract] GunTool [\WObj]SpotMLSpyStartFile<strong>RAPID</strong>-Überblick 73
Zusammenfassung der SyntaxSpyStopStartLoad [\Dynamic] FilePath [\File] LoadNoStartMove [\AllMotionTasks]StartMoveRetryStepBwdPathSToolRotCalibSToolTCPCalibStepLength StepTimeRefTip ZPos XPos ToolPos1 Pos2 Pos3 Pos4 Tool MaxErr MeanErrStop[\NoRegain]StopMove[\Quick][\AllMotionTasks]StorePathSyncMoveOffSyncMoveOnSyncID [\TimeOut]SyncID TaskList [\TimeOut]SyncMoveUndoSyncToSensorMecunt [On/Off]TEST Test data {CASE Test value {, Test value} : ...} [ DEFAULT: ...]ENDTESTTestSignDefineChannel SignalId MechUnit Axis SampleTimeTestSignResetTextTabInstallFileTPEraseTPWriteString [\Num] | [\Bool] | [\Pos] | [\Orient]TPReadFKAnswer String FK1 FK2 FK3 FK4 FK574 <strong>RAPID</strong>-Überblick
Zusammenfassung der Syntax[\MaxTime] [\DIBreak] [\BreakFlag]TPReadNumAnswer String [\MaxTime] [\DIBreak] [\BreakFlag]TPShowTPWriteWindowString [\Num] | [\Bool] | [\Pos] | [\Orient]TriggC CirPoint ToPoint [\ID] Speed [\T] Trigg_1 [\T2] [\T3][\T4] Zone Tool [\WObj]TriggCheckIO TriggData Distance [\Start] | [\Time] SignalRelation CheckValue [\StopMove] InterruptTriggEqipTriggIntTriggData Distance [\Start] | [\Time] InterruptTriggIO TriggData Distance[\Start] | [\Time] [\DOp] | [\GOp] | [\AOp] SetValue[\DODelay] | [\AORamp]TriggJ ToPoint [\ID] Speed [\T] Trigg_1 [\T2] [\T3] [\T4]Zone Tool [\WObj]TriggL ToPoint [\ID] Speed [\T] Trigg_1 [\T2] [\T3] [\T4]Zone Tool [\WObj]TriggSpeed TriggData Distance [\Start] ScaleLag AOScaleValue [\DipLag] [\ErrDO] [\Inhib]TriggStopProc RestartRef [\DO1] [\GO1] [\GO2] [\GO3] [\GO4]ShadowDOTuneResetTuneServoMecUnit Axis TuneValue [\Type]UnLoadFilePath [\File]UnpackRawBytesRawData [\Network] StartIndex Value<strong>RAPID</strong>-Überblick 75
Zusammenfassung der Syntax[\Hex1] | [\IntX] | [\Float4] | [\ASCII]WaitDIWaitDOSignal Value [\MaxTime] [\TimeFlag]Signal Value [\MaxTime] [\TimeFlag]WaitLoadWaitSensor[\TimeFlag][\UnloadPath] [\UnloadFile] LoadNoMecunt[ \RelDist ] [ \PredTime] [\MaxTime]WaitSyncTaskSyncID TaskList [\TimeOut]WaitTimeWaitUntil[\InPos] Time[\InPos] Cond [\MaxTime] [\TimeFlag]76 <strong>RAPID</strong>-Überblick
Zusammenfassung der SyntaxWaitWObj WObj [\RelDist]WarmStartVelSetOverride MaxWHILE Condition DO ...ENDWHILEWorldAccLim [\On] | [\Off]Write IODeviceString [\Num] | [\Bool] | [\Pos] | [\Orient] [\NoNewLine]WriteAnyBin IODevice DataWriteBinIODevice Buffer NCharWriteCfgData InstancePath Attribute CfgDataWriteRawBytesIODevice RawData [\NoOfBytes]WriteStrBinWZBoxDefIODevice Str[\Inside] | [\Outside] Shape LowPoint HighPointWZCylDef [\Inside] | [\Outside] Shape CentrePoint Radius HeightWZDisableWorldZoneWZDOSet [\Temp] | [\Stat] WorldZone [\Inside] | [\Before] ShapeSignal SetValueWZEnableWorldZoneWZFreeWorldZoneWZHomeJointDefDeltaJointValWZLimJointDefHighJointVal[\Inside] | [\Outside] Shape MiddleJointVal[\Inside] | [\Outside] Shape LowJointValWZLimSupWZSphDef[\Temp] | [\Stat] WorldZone Shape[\Inside] | [\Outside] Shape CentrePoint Radius<strong>RAPID</strong>-Überblick 77
Zusammenfassung der Syntax19.2 FunktionenAbsACos(Input)(Value)AOutputArgName(Signal)(Parameter)ASinATan(Value)(Value)ATan2 (Y X)BitAnd (BitData1 BitData2)BitCheckBitLSh(BitData BitPos)(BitData ShiftSteps)BitNegBitOr(BitData1)(BitData1 BitData2)BitRSh (BitData1 ShiftSteps)BitXOr(BitData1 BitData2)ByteToStr(ByteData [\Hex] | [\Okt] | [\Bin] | [\Char])CalcJointT (Rob_target Tool [\WObj])CalcRobT(Joint_target Tool [\WObj])CalcRotAxisFrameMaxErr MeanErr)CalcRotAxFrameZ(MechUnit [\AxisNo] TargetList TargetsInList(TargetList TargetsInList PositiveZPoint78 <strong>RAPID</strong>-Überblick
Zusammenfassung der SyntaxMaxErr MeanErr)CDateCJointTClkRead(Clock)CorrRead<strong>RAPID</strong>-Überblick 79
Zusammenfassung der SyntaxCosCPos(Angle)([\Tool] [\WObj])CRobT([\Tool] [\WObj])CSpeedOverrideCTimeCToolCWObjDecToHex(Str)DefAccFrame (TargetListOne TargetListTwo TargetsInListMaxErr MeanErr)DefDFrameDefFrame(OldP1 OldP2 OldP3 NewP1 NewP2 NewP3)(NewP1 NewP2 NewP3 [\Origin])Dim(ArrPar DimNo)DistanceDOutputDotProd(Point1 Point2)(Signal)(Vector1 Vector2)EulerZYX ([\X] | [\Y] | [\Z]Rotation)Exp(Exponent)FileSizeFileTimeFSSize(Path)(Path [\ModifyTime] | [\AccessTime] | [\StatCTime])(Name [\Total] | [\Free])GetNextMechUnit(ListNumber UnitName)GetNextSymGetSysInfo(Object Block [\Recursive])([\SerialNo] | [\SWVersion] | [\RobotType])GetTaskName([\TaskNo])80 <strong>RAPID</strong>-Überblick
Zusammenfassung der SyntaxGetTimeGOutputHexToDecIndInposIndSpeed([\WDay] | [\Hour] | [\Min] | [\Sec])(Signal)(Str)(MecUnit Axis)(MecUnit Axis [\InSpeed] | [\ZeroSpeed])IOUnitState(UnitName)IsFile)(Path[\Directory] [\Fifo] [\RegFile] [\BlockSpec] [\CharSpec]IsMechUnitActive(MechUnit)IsPers(DatObj)IsStopStateEvent([\PPMoved] | [\PPToMain])IsSyncMoveOnIsSysIdIsVar(SystemId)(DatObj)MaxRobSpeedMirPos(Point MirPlane [\WObj] [\MirY])ModTime ( Object )NonMotionMode([\Main])NOrientNumToStr(Rotation)(Val Dec [\Exp])Offs(Point XOffset YOffset ZOffset)<strong>RAPID</strong>-Überblick 81
Zusammenfassung der SyntaxOpModeOrientZYX(ZAngle YAngle XAngle)ORobT(OrgPoint [\InPDisp] | [\InEOffs])ParIdPosValid (ParIdType Pos AxValid [\ConfAngle])ParIdRobValid(ParIdType)PathRecValidBwd([\ID])82 <strong>RAPID</strong>-Überblick
Zusammenfassung der SyntaxPathRecValidFwd([\ID])PFRestart ([\Base] | [\Irpt])PoseInvPoseMultPoseVect(Pose)(Pose1 Pose2)(Pose Pos)Pow(Base Exponent)Present(OptPar)ProgMemFreeRawBytesLen(RawData)ReadBinReadDir(IODevice [\Time])(Dev FileName)ReadMotorReadNum([\MecUnit] Axis)(IODevice [\Time])ReadStr(IODevice [\Time])ReadStrBin(IODevice NoOfChars [\Time])RelTool(Point Dx Dy Dz [\Rx] [\Ry] [\Rz])RobOSRound( Val [\Dec])RunMode([\Main])Sin (Angle)Sqrt(Value)StrFindStrLen(Str ChPos Set [\NotInSet])(Str)StrMap (Str FromMap ToMap)StrMatch(Str ChPos Pattern)<strong>RAPID</strong>-Überblick 83
Zusammenfassung der SyntaxStrMembStrOrderStrPart(Str ChPos Set)(Str1 Str2 Order)(Str ChPos Len)StrToByteStrToVal(ConStr [\Hex] | [\Okt] | [\Bin] | [\Char])(Str Val)Tan(Angle)TaskRunMecTaskRunRobTestAndSet(Object)TestDI(Signal)TestSignRead(Channel)TextGet(Table Index)TextTabFreeToUse(TableName)TextTabGet (TableName)Trunc(Val [\Dec])ValToStrVectMagn(Val)(Vector)84 <strong>RAPID</strong>-Überblick
Grundlegende Elemente20 Grundlegende Elemente20.1 BezeichnerBezeichner werden verwendet, um Modulen, Routinen, Daten und Labels einenNamen zu geben;Beispiel:MODULE module_namePROC routine_name()VAR pos data_name;label_name:Ein Bezeichner muss mit einem Buchstaben beginnen. Die übrigen Zeichen könnenBuchstaben, Ziffern oder Unterstriche „_“ sein.Die maximale Länge jedes Bezeichners beträgt 16 Zeichen, von denen jedes Zeichensignifikant ist. Groß- und Kleinschreibung wird bei Bezeichnern nicht unterschieden.Reservierte WörterDie nachstehend aufgeführten Wörter sind reserviert. Sie haben eine besondereBedeutung in der Programmiersprache <strong>RAPID</strong> und dürfen daher nicht als Bezeichnerbenutzt werden.Es gibt auch eine Reihe vordefinierter Namen für Datentypen, Systemdaten,Anweisungen und Funktionen, die ebenfalls nicht als Bezeichner verwendet werdendürfen. Weitere Informationen hierzu finden Sie in den Kapiteln 7, 8, 9, 10, 13, 14 und15 in diesem Handbuch.ALIAS AND BACKWARD CASECONNECT CONST DEFAULT DIVDO ELSE ELSEIF ENDFORENDFUNC ENDIF ENDMODULE ENDPROCENDRECORD ENDTEST ENDTRAP ENDWHILEERROR EXIT FALSE FORFROM FUNC GOTO IFINOUT LOCAL MOD MODULENOSTEPIN NOT NOVIEW ORPERS PROC RAISE READONLYRECORD RETRY RETURN STEPSYSMODULE TEST THEN TOTRAP TRUE TRYNEXT VARVIEWONLY WHILE WITH XOR<strong>RAPID</strong>-Überblick 85
Grundlegende Elemente20.2 Leerzeichen und ZeilenvorschubDie Programmiersprache <strong>RAPID</strong> kann frei formatiert werden, d. h. Sie könnenLeerzeichen beliebig verwenden, außer in:- Bezeichnern- reservierten Wörtern- numerischen Werten- PlatzhalternZeilenvorschub, Tabulator und Seitenvorschub können an allen Stellen, an denen einLeerzeichen vorkommt, verwendet werden, außer in Kommentaren.Bezeichner, reservierte Wörter und numerische Werte müssen voneinander durch einLeerzeichen, eine neue Zeile, einen Tabulator oder einen Seitenvorschub getrennt sein.Überflüssige Leerzeichen und Zeilenvorschübe werden automatisch aus einem in denProgrammspeicher geladenen Programm gelöscht. Deshalb sind Programme, die vonDiskette geladen und dann wieder gespeichert werden, eventuell nicht identisch.20.3 Numerische WerteEin numerischer Wert lässt sich ausdrücken als:- eine Ganzzahl, z. B. 3, -100, 3E2- eine Dezimalzahl, z. B. 3,5, -0,345, -245E-2Der Wert muss innerhalb des Bereichs liegen, der durch das Gleitkommazahlen-Standardformat ANSI IEEE 754-1985 festgelegt ist.20.4 Logische WerteEin logischer Wert lässt sich als TRUE oder FALSE ausdrücken.20.5 ZeichenfolgenwerteEin Zeichenfolgenwert entspricht einer Folge von Zeichen (ISO 8859-1) undSteuerzeichen (Nicht-ISO 8859-1 im numerischen Codebereich 0-255). Zeichencodeskönnen enthalten sein, wodurch sich auch nicht druckbare Zeichen (Binärdaten) in dieZeichenfolge eingeben lassen. Die Länge der Zeichenfolge beträgt maximal 80Zeichen.86 <strong>RAPID</strong>-Überblick
Grundlegende ElementeBeispiel:"Dies ist eine Zeichenfolge""Diese Zeichenfolge endet mit dem BEL-Steuerzeichen \07"Wenn ein umgekehrter Schrägstrich (der einen Zeichencode kennzeichnet) oderdoppelte Anführungszeichen eingegeben werden sollen, müssen diese zweimalgeschrieben werden.Beispiel:"Diese Zeichenfolge enthält ein ??-Zeichen""Diese Zeichenfolge enthält ein \\-Zeichen"20.6 KommentareDurch Kommentare wird ein Programm leichter verständlich. Kommentare habenkeinerlei Einfluss auf das Programm.Ein Kommentar beginnt mit einem Ausrufezeichen (!) und endet mit einemZeilenvorschub. Er nimmt eine vollständige Zeile ein und kann nicht zwischen zweiModulen eingefügt werden;Beispiel! KommentarIF reg1 > 5 THEN! commentreg2 := 0;ENDIF20.7 PlatzhalterPlatzhalter können temporär eingesetzt werden, um „noch nicht definierte“ Teile einesProgramms darzustellen. Ein Programm mit Platzhaltern ist syntaktisch korrekt undkann in den Programmspeicher geladen werden.PlatzhalterRepräsentiert:DatentypdefinitionDatendeklarationRoutinendeklarationformeller, optionaler, alternativer Parameteroptionaler formeller Parameterformelle (konforme) DatenfelddimensionInstruktionVerweis auf Datenobjekt (Variable, Speichernde oderParameter)ELSE-IF-Klausel einer IF-InstruktionFallklausel einer TestinstruktionAusdruckArgument für ProzeduraufrufBezeichner<strong>RAPID</strong>-Überblick 87
Grundlegende Elemente20.8 DateivorspannEine Programmdatei beginnt mit dem folgenden Vorspann:%%%VERSION:1(Programmversion M94 oder M94A)LANGUAGE:ENGLISH(oder eine andere Sprache:%%% GERMAN oder FRENCH)20.9 SyntaxBezeichner ::=| ::= { | | ’_’}Numerische Werte ::= [ ]| ’.’ [ ] [ ]| [ ] ’.’ [ ] ::= {} ::= (’E’ | ’e’) [’+’ | ’-’] Logische Werte ::= TRUE | FALSEZeichenfolgenwerte ::= ’"’ { | } ’"’ ::= ’\’ ::= | A | B | C | D | E | F | a | b | c | d | e | fKommentare ::=’!’ { | } 88 <strong>RAPID</strong>-Überblick
Grundlegende ElementeZeichen ::= -- ISO 8859-1 -- ::= -- newline control character -- ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 ::=| ::=A | B | C | D | E | F | G | H | I | J| K | L | M | N | O | P | Q | R | S | T| U | V | W | X | Y | Z | À | Á | Â | Ã| Ä | Å | Æ | Ç | È | É | Ê | Ë | Ì | Í| Î | Ï | 1) | Ñ | Ò | Ó | Ô | Õ | Ö | Ø| Ù | Ú | Û | Ü | 2) | 3) | ß ::=a | b | c | d | e | f | g | h | i | j| k | l | m | n | o | p | q | r | s | t| u | v | w | x | y | z | ß | à | á | â| ã| ä | å | æ | ç | è | é | ê | ë | ì| í | î | ï | 1) | ñ | ò | ó | ô | õ | ö| ø | ù | ú | û | ü | 2) | 3) | ÿ1) Isländischer Buchstabe eth.2) Buchstabe Y mit Akzent.3) Isländischer Buchstabe thorn.<strong>RAPID</strong>-Überblick 89
Grundlegende Elemente90 <strong>RAPID</strong>-Überblick
Module21 ModuleDas Programm ist in Programm- und Systemmodule gegliedert. Es lässt sich auch inModule zerlegen (siehe Abbildung 1).ProgrammspeicherProgrammProgrammdatenHauptmodulModul1Modul2Modul3Modul4HauptroutineRoutine1Routine2Routine3ProgrammdatenRoutine4Routine5Systemmodul1ProgrammdatenSystemmodul2Routine6Routine7Abbildung 1Das Programm lässt sich in Module gliedern.21.1 ProgrammmoduleEin Programmmodul kann aus verschiedenen Daten und Routinen bestehen. JedesModul oder das ganze Programm kann auf Diskette, RAM-Disk usw. kopiert werdenoder von dort geladen werden.Eines der Module enthält die Einstiegsprozedur, eine globale Prozedur, die haupt(main) genannt wird. Die Abarbeitung des Programms bedeutet eigentlich dasAbarbeiten der Hauptprozedur. Das Programm kann viele Module umfassen, aber nureines davon enthält eine Hauptprozedur.Ein Modul kann z. B. die Schnittstelle mit einem Peripheriegerät definieren odergeometrische Daten enthalten, die entweder durch CAD-Systeme oder online perDigitalisierung (Teach-in-Programmierung) erstellt werden.Während kleine Installationen häufig nur ein Modul enthalten, können größereInstallationen über ein Hauptmodul verfügen, das auf Routinen und/oder Datenverweist, die sich in einem oder mehreren anderen Modulen befinden.<strong>RAPID</strong>-Überblick 91
Module21.2 SystemmoduleSystemmodule werden verwendet, um gemeinsame, systemspezifische Daten undRoutinen wie z. B. Werkzeuge zu definieren. Sie werden nicht zusammen mit einemProgramm gespeichert, d. h. jede Aktualisierung eines Systemmoduls beeinflusst allevorhandenen oder später in den Programmspeicher geladenen Programme.21.3 ModuldeklarationenEine Moduldeklaration gibt den Namen und die Attribute dieses Moduls an. DieseAttribute können offline ohne FlexPendant hinzugefügt werden. Nachstehend einigeBeispiele für die Attribute eines Moduls:AttributSYSMODULENOSTEPINVIEWONLYREADONLYNOVIEWBeispiel:Wenn angegeben, gilt für das Modul:Systemmodul, sonst ein Programmmodulkann nicht bei schrittweiser Abarbeitung ausgeführt werdenkann nicht geändert werdenkann geändert werden, aber das Attribut lässt sich nicht löschenkann nicht angezeigt, nur abgearbeitet werden. GlobaleRoutinen können von anderen Modulen aus erreicht werdenund laufen stets als NOSTEPIN ab. Die aktuellen Werte fürglobale Daten können von anderen Modulen oder vomDatenfenster des FlexPendant aus abgerufen werden. EinModul oder ein Programm mit dem Attribut NOVIEW kannnicht gespeichert werden. Daher sollte NOVIEW in ersterLinie in Systemmodulen Anwendung finden. NOVIEW lässtsich nur offline an einem PC definieren.MODULE module_name (SYSMODULE, VIEWONLY)!Datentypdefinition!Datendeklarationen!RoutinendeklarationenENDMODULEEin Modul darf nicht denselben Namen wie ein anderes Modul oder eine globaleRoutine oder Daten haben.92 <strong>RAPID</strong>-Überblick
Module21.4 SyntaxModuldeklaration ::=MODULE [ ]ENDMODULE ::= ::= ‘(‘ { ‘,’ } ‘)’ ::= SYSMODULE| NOVIEW| NOSTEPIN | VIEWONLY | READONLY(Hinweis:Bei Verwendung von zwei oder mehr Attributen müssen Sie die obigeReihenfolge einhalten; das Attribut NOVIEW kann nur allein oder gemeinsam mitdem Attribut SYSMODULE angegeben werden.) ::= { } ::= {} ::= { }<strong>RAPID</strong>-Überblick 93
Module94 <strong>RAPID</strong>-Überblick
Routinen22 RoutinenEs gibt drei Arten von Routinen (Unterprogramme): Prozeduren, Funktionen undInterrupts.- Prozeduren geben keinen Wert zurück und werden im Kontext vonInstruktionen verwendet.- Funktionen geben einen Wert eines bestimmten Typs zurück und werden imKontext von Instruktionen verwendet.- Interrupt-Routinen dienen der Behandlung von Unterbrechungen. EineInterrupt-Routine kann mit einem bestimmten Interrupt verknüpft werden.Wenn dann dieser Interrupt in einer späteren Phase auftritt, wird die Routineautomatisch ausgeführt. Eine Interrupt-Routine lässt sich nicht explizit vomProgramm aus aufrufen.22.1 Gültigkeitsbereich von RoutinenDer Gültigkeitsbereich einer Routine entspricht dem Bereich, in dem die Routinesichtbar ist. Der optionale local-Befehl einer Routinendeklaration definiert eineRoutine als lokal (innerhalb des Moduls), andernfalls ist sie global.Beispiel:LOCAL PROC local_routine (...PROC global_routine (...Für Routinen gelten die folgenden Gültigkeitsbereichsregeln (siehe Beispiel inAbbildung 2):- Der Gültigkeitsbereich einer globalen Routine kann ein beliebiges Modulumfassen.- Der Gültigkeitsbereich einer lokalen Routine umfasst das Modul, in dem sieenthalten ist.- Innerhalb ihres Gültigkeitsbereichs verdeckt eine lokale Routine jede globaleRoutine oder Daten mit demselben Namen.- Innerhalb ihres Gültigkeitsbereichs verdeckt eine Routine Instruktionen undvordefinierte Routinen und Daten mit demselben Namen.Modul1Lokale Routine aLokale Routine bRoutine cRoutine dRoutine eModul2Lokale Routine aLokale Routine eRoutine fRoutine gRoutine hAbbildung 2Beispiel: Die folgenden Routinen können von Routine h aufgerufen werden:Modul1 – Routine c, d.Modul2 – Alle Routinen.<strong>RAPID</strong>-Überblick 95
RoutinenEine Routine darf nicht denselben Namen wie eine andere Routine oder andere Datenim selben Modul haben. Eine globale Routine darf nicht denselben Namen wie einModul oder eine globale Routine oder globale Daten in einem anderen Modul haben.22.2 ParameterDie Parameterliste einer Routinendeklaration gibt die Argumente (aktuelle Parameter)an, die beim Aufruf einer Routine angegeben werden müssen/können.Es gibt vier verschiedene Arten von Parametern (im Zugriffsmodus):- Normalerweise dient ein Parameter nur als Eingabe und wird alsRoutinenvariable behandelt. Durch Ändern dieser Variablen ändert sich dasentsprechende Argument nicht.- Ein INOUT-Parameter gibt an, dass ein entsprechendes Argument eine Variable(insgesamt, als Element oder Komponente) oder eine vollständige Persistentesein muss, die durch die Routine geändert werden kann.- Ein VAR-Parameter gibt an, dass ein entsprechendes Argument eine Variable(insgesamt, als Element oder Komponente) sein muss, die durch die Routinegeändert werden kann.- Ein PERS-Parameter gibt an, dass ein entsprechendes Argument einevollständige Persistente sein muss, die durch die Routine geändert werdenkann.Wenn ein INOUT-, VAR- oder PERS-Parameter aktualisiert wird, bedeutet dies, dass daseigentliche Argument aktualisiert wird, d. h. mithilfe von Argumenten lassen sich Werte andie aufrufende Routine übergeben.Beispiel:PROC routine1 (num in_par, INOUT num inout_par, VAR num var_par, PERS num pers_par)Ein Parameter kann optional sein und darf aus der Argumentliste eines Routinenaufrufsweggelassen werden. Ein optionaler Parameter wird durch einen vorangestelltenumgekehrten Schrägstrich „\“ gekennzeichnet.Beispiel:PROC routine2 (num required_par \num optional_par)Auf den Wert eines optionalen Parameters, der aus einem Routinenaufruf weggelassenwird, kann nicht verwiesen werden. Dies bedeutet, dass ein Routinenaufruf aufoptionale Parameter getestet werden muss, bevor ein optionaler Parameter verwendetwird.Zwei oder mehr optionale Parameter können sich gegenseitig ausschließen (fürgegenseitigen Ausschluss deklariert sein), d. h. nur einer von beiden darf in einemRoutinenaufruf vorhanden sein. Dies wird durch einen senkrechten Strich „|“ zwischenden betreffenden Parametern angegeben.Beispiel:PROC routine3 (\num exclude1 | num exclude2)Der Spezialtyp switch, darf (nur) optionalen Parametern zugewiesen werden. Er bietetdie Möglichkeit, Argumente zu wechseln, die nur durch Namen (nicht Werte)angegeben sind. Auf einen switch-Parameter kann kein Wert übertragen werden. Einswitch-Parameter kann nur verwendet werden, wenn sein Vorhandensein über dievordefinierte Funktion Present geprüft wird.96 <strong>RAPID</strong>-Überblick
RoutinenBeispiel:PROC routine4 (\switch on | switch off)...IF Present (off ) THEN...ENDPROCDatenfelder können als Argumente übergeben werden. Der Grad einesDatenfeldarguments muss mit dem Grad des entsprechenden formellen Parametersübereinstimmen. Die Dimension eines Datenfeldparameters ist „konform“ (mit „*“markiert). Die tatsächliche Dimension hängt daher von der Dimension desentsprechenden Arguments in einem Routinenaufruf ab. Eine Routine kann dietatsächliche Dimension eines Parameters mithilfe der vordefinierten Funktion Dimbestimmen.Beispiel:PROC routine5 (VAR num pallet{*,*})22.3 RoutinenbeendigungDie Ausführung einer Prozedur wird entweder explizit durch eine RETURN-Instruktion beendet oder implizit, wenn das Ende (ENDPROC, BACKWARD oderERROR) der Prozedur erreicht wird.Die Auswertung einer Funktion muss durch eine RETURN-Instruktion beendetwerden.Die Ausführung einer Interrupt-Routine wird entweder explizit durch eine RETURN-Instruktion beendet oder implizit, wenn das Ende (ENDTRAP oder ERROR) dieserInterrupt-Routine erreicht wird. Die Ausführung fährt an dem Punkt fort, an dem derInterrupt aufgetreten ist.22.4 RoutinendeklarationenEine Routine kann Routinendeklarationen (einschließlich Parametern), Daten, einenHauptteil, eine Rückwärtsbehandlung (nur Prozeduren) und eine Fehlerbehandlungenthalten (siehe Abbildung 3). Routinendeklarationen können nicht verschachteltwerden, d. h. es kann keine Routine in einer Routine deklariert werden.ModulDatendeklarationenRoutine aRoutine bRoutine cRoutine dRoutine eRoutinendeklarationDatendeklarationenHauptteil (Instruktionen)RückwärtsbehandlungFehlerbehandlungAbbildung 3Eine Routine kann Deklarationen, Daten, einen Hauptteil, eineRückwärtsbehandlung und eine Fehlerbehandlung enthalten.<strong>RAPID</strong>-Überblick 97
RoutinenProzedurdeklarationBeispiel:Faktor;Multiplikation aller Elemente in einem num-Datenfeld mit einemPROC arrmul( VAR num array{*}, num factor)FOR index FROM 1 TO dim( array, 1 ) DOarray{index} := array{index} * factor;ENDFORENDPROCFunktionsdeklarationEine Funktion kann einen beliebigen Datentypwert liefern, jedoch keinenDatenfeldwert.Beispiel:Rückgabe der Länge eines Vektors;FUNC num veclen (pos vector)RETURN Sqrt(Pow(vector.x,2)+Pow(vector.y,2)+Pow(vector.z,2));ENDFUNCInterrupt-DeklarationBeispiel:Reaktion auf Interrupt „Zuführung leer“;TRAP feeder_emptywait_feeder;RETURN;ENDTRAP22.5 ProzeduraufrufBeim Aufruf einer Prozedur sollen die Argumente verwendet werden, die denParametern der Prozedur entsprechen:- Obligatorische Parameter müssen angegeben werden. Sie sind außerdem in derkorrekten Reihenfolge anzugeben.- Optionale Argumente können weggelassen werden.- Bedingte Argumente können zur Übergabe von Parametern von einemRoutinenaufruf an einen anderen verwendet werden.Weitere Informationen erhalten Sie im Kapitel Verwendung von Funktionsaufrufen inAusdrücken auf Seite 116.Der Name der Prozedur kann entweder statisch mit einem Bezeichner (frühe Bindung)festgelegt werden oder während der Laufzeit aus einer Zeichenfolge (späte Bindung)berechnet werden. Obwohl die frühe Bindung als „normaler“ Prozeduraufruf betrachtetwird, bietet die späte Bindung manchmal sehr effektive und kompakte Lösungen. SpäteBindung wird durch Prozentzeichen vor und nach der Zeichenfolge definiert, die denNamen der Prozedur angibt.98 <strong>RAPID</strong>-Überblick
RoutinenBeispiel! Frühe BindungTEST products_idCASE 1:proc1 x, y, z;CASE 2:proc2 x, y, z;CASE 3:...! Dasselbe Beispiel mit später Bindung% "proc" + NumToStr(product_id, 0) % x, y, z;...! Dasselbe Beispiel mit einer anderen Variante der späten BindungVAR string procname {3} :=["proc1", "proc2", "proc3"];...% procname{product_id} % x, y, z;...Beachten Sie, dass die späte Bindung nur für den Aufruf von Prozeduren, nicht für denAufruf von Funktionen zur Verfügung steht. Wenn ein Verweis auf eine unbekannteProzedur mit später Bindung erfolgt, wird die Systemvariable ERRNO aufERR_REFUNKPRC gesetzt. Wenn ein Verweis auf einen Prozeduraufruffehler(Syntax, nicht Prozedur) mit später Bindung erfolgt, wird die Systemvariable ERRNOauf ERR_CALLPROC gesetzt.22.6 SyntaxRoutinendeklaration ::=[LOCAL] ( | | )| | Parameter ::= { } ::= | | ::=’,’ | | ’,’| ’,’ <strong>RAPID</strong>-Überblick 99
Routinen ::=’\’ ( | ){ ’|’ ( | ) } ::=[ VAR | PERS | INOUT] [ ’{’ ( ’*’ { ’,’ ’*’ } ) | ] ’}’| ’switch’ Prozedurdeklaration ::=PROC ’(’ [ ] ’)’[ BACKWARD ][ ERROR ]ENDPROC ::= ::= {}Funktionsdeklaration ::=FUNC ’(’ [ ] ’)’[ ERROR ]ENDFUNC ::= Interrupt-Routinendeklaration ::=TRAP [ ERROR ]ENDTRAP ::= 100 <strong>RAPID</strong>-Überblick
RoutinenProzeduraufruf ::= [ ] ’;’ ::= | ’%’ ’%’ ::= { } ::= | | | ::=’,’ | | ’,’ | | ’,’ | ’,’ ::= [ ’:=’ ] ::= ’\’ [ ’:=’ ] ::= ’\’ ’?’ ( | )<strong>RAPID</strong>-Überblick 101
Routinen102 <strong>RAPID</strong>-Überblick
Datentypen23 DatentypenEs gibt zwei Arten von Datentypen:- Der Typ Atom ist unteilbar. Seine Definition beruht auf keinem anderen Typund kann nicht in Teile oder Komponenten zerlegt werden, z. B. num.- Der Typ Datensatz (record) ist ein zusammengesetzter Typ mit benannten,geordneten Komponenten, z. B. pos. Eine Komponente kann den Typ „Atom“oder „Datensatz“ haben.Ein Datensatzwert lässt sich als Aggregat-Darstellung ausdrücken.Beispiel: [ 300, 500, tiefe ]Gesamtwert des pos-Datensatzes.Auf eine bestimmte Komponente von Datensatzelementen kann über ihrenNamen zugegriffen werden.Beispiel: pos1.x := 300;Zuweisung der x-Komponente von pos1.23.1 Datentypen ohne einen Wert (non-value)Jeder verfügbare Datentyp ist entweder ein Datentyp mit einem Wert oder ein Datentypohne einen Wert. Einfach gesagt wird ein Datentyp mit einem Wert so behandelt wieder Wert selbst. Daten ohne einen Wert können nicht in wertorientierten Operationenverwendet werden.- Initialisierung- Zuweisung (:=)- Gleich (=) und ungleich ()- TEST-Instruktionen- IN-(Zugriffsmodus)-Parameter in Routinenaufrufen- Funktions-(RETURN)-DatentypenDie Datentypen für Eingangssignal (signalai, signaldi, signalgi) haben den Datentypsemi value (mit festem Wert). Diese Daten können mit Ausnahme von Initialisierungund Zuweisung in wertorientierten Operationen verwendet werden.In der Beschreibung eines Datentyps wird nur angegeben, ob er einen festen Wert oderkeinen Wert hat.<strong>RAPID</strong>-Überblick 103
Datentypen23.2 Gleiche Datentypen (Alias)Ein Alias-Datentyp wird als mit einem anderen Typ gleich definiert. Daten mitdenselben Datentypen können miteinander ausgetauscht werden.Beispiel:VAR dionum high:=1;VAR num level;level:= high;Das ist in Ordnung, da dionum einAlias-Datentyp für num ist.23.3 Syntax::=[LOCAL] ( | )| | ::=RECORD ENDRECORD ::= | ::= ’;’ ::=ALIAS ’;’ ::= 104 <strong>RAPID</strong>-Überblick
Daten24 DatenEs gibt drei Arten von Daten: Variablen, Persistenten und Konstanten.- Einer Variablen kann während der Programmabarbeitung ein neuer Wertzugewiesen werden.- Eine Persistente kann als „speichernde“ Variable beschrieben werden. DasAktualisieren des Werts einer Persistenten bewirkt automatisch dasAktualisieren des Initialisierungswerts in der Persistentendeklaration. (BeimSpeichern eines Programms entspricht der Initialisierungswert in derDeklaration dem aktuellen Wert der Persistenten.)- Eine Konstante stellt einen statischen Wert dar. Ihr kann kein neuer Wertzugewiesen werden.Eine Datendeklaration dient der Einführung von Daten, indem ein Name (Bezeichner)mit einem Datentyp verknüpft wird. Außer vordefinierten Daten undSchleifenvariablen müssen alle verwendeten Daten deklariert werden.24.1 Gültigkeitsbereich von DatenDer Gültigkeitsbereich von Daten entspricht dem Bereich, in dem die Daten sichtbarsind. Der optionale local-Befehl einer Datendeklaration definiert Daten als lokal(innerhalb des Moduls), andernfalls sind sie global. Beachten Sie, dass der local-Befehl nur auf Modulebene, nicht innerhalb einer Routine benutzt werden kann.Beispiel:LOCAL VAR num local_variable;VAR num global_variable;Daten, die außerhalb einer Routine deklariert werden, sind Programmdaten. FürProgrammdaten gelten die folgenden Gültigkeitsbereichsregeln:- Der Gültigkeitsbereich von vordefinierten oder globalen Programmdaten kannein beliebiges Modul umfassen.- Der Gültigkeitsbereich von lokalen Programmdaten umfasst das Modul, in demsie enthalten sind.- Innerhalb ihres Gültigkeitsbereichs verdecken lokale Programmdaten alleglobalen Daten oder eine globale Routine mit demselben Namen(einschließlich Instruktionen und vordefinierter Routinen und Daten).Programmdaten dürfen nicht denselben Namen wie andere Daten oder eine Routine imselben Modul haben. Globale Programmdaten dürfen nicht denselben Namen wieandere globale Daten oder eine Routine in einem anderen Modul haben. EinePersistente darf nicht denselben Namen wie eine andere Persistente im selben Modulhaben.Daten, die innerhalb einer Routine deklariert werden, sind Routinendaten. BeachtenSie, dass die Parameter einer Routine auch als Routinendaten behandelt werden. FürRoutinendaten gelten die folgenden Gültigkeitsbereichsregeln:- Der Gültigkeitsbereich von Routinendaten umfasst die Routine, in der sieenthalten sind.- Innerhalb ihres Gültigkeitsbereichs verdecken Routinendaten jede andereRoutine oder Daten mit demselben Namen.<strong>RAPID</strong>-Überblick 105
DatenSiehe das Beispiel in Abbildung 4.Modul1Lokale Daten aLokale Daten bDaten cDaten dDaten eModul2Lokale Daten aLokale Daten fDaten gLokale Routine eDaten e1Routine hDaten h1Daten cAbbildung 4Beispiel: Die folgenden Daten können von Routine e aufgerufen werden:Modul1: Daten c, d.Modul2: Daten a, f, g, e1.Die folgenden Daten können von Routine h aufgerufen werden:Modul1: Daten d.Modul2: Daten a, f, g, h1, c.Routinendaten dürfen nicht denselben Namen wie andere Daten oder ein Label inderselben Routine haben.24.2 VariablendeklarationEine Variable wird durch eine Variablendeklaration eingeführt.Beispiel: VAR num x;Durch Hinzufügen von Maßangaben in der Deklaration können Variablen einesbeliebigen Typs im Format eines Datenfelds (Grad 1, 2 oder 3) angegeben werden. EineMaßangabe ist ein ganzzahliger Wert größer 0.Beispiel: VAR pos pallet{14, 18};Variablen mit Werttypen können initialisiert werden (einen Anfangswert erhalten). DerAusdruck für die Initialisierung einer Programmvariablen muss konstant sein.Beachten Sie, dass der Wert einer nicht initialisierten Variablen verwendet werdenkann, aber undefiniert, d. h. auf Null gesetzt ist.Beispiel:VAR string author_name := ”John Smith”;VAR pos start := [100, 100, 50];VAR num maxno{10} := [1, 2, 3, 9, 8, 7, 6, 5, 4, 3];Der Initialisierungswert wird gesetzt, wenn:- das Programm geöffnet wird,- das Programm ab seinem Beginn ausgeführt wird.106 <strong>RAPID</strong>-Überblick
Daten24.3 PersistentendeklarationPersistenten dürfen nur auf Modulebene, nicht in einer Routine, deklariert werden.Persistenten können global im System (systemweit), global in der Task (taskweit) oderlokal deklariert werden.Beispiel: PERS num globalpers := 123;TASK PERS num taskpers := 456;LOCAL PERS num localpers := 789;Alle systemweiten Persistenten mit demselben Namen haben den aktuellen Wert.Taskweit gültige und lokale Persistenten haben nicht den gleichen aktuellen Wert wieandere Persistenten.Lokale und taskweite Persistenten müssen einen Initialisierungswert erhalten. Fürsystemweite Persistenten kann der Anfangswert weggelassen werden. DerAnfangswert muss ein Einzelwert (ohne Datenverweis oder Operanden) oder eineinzelnes Aggregat mit Elementen sein, die wiederum Einzelwerte oder einzelneAggregate sind.Beispiel: PERS pos refpnt := [100.23, 778.55, 1183.98];Durch Hinzufügen von Maßangaben in der Deklaration können Persistenten einesbeliebigen Typs im Format eines Datenfelds (Grad 1, 2 oder 3) angegeben werden.Eine Maßangabe ist ein ganzzahliger Wert größer 0.Beispiel: PERS pos pallet{14, 18} := [...];Wenn der aktuelle Wert einer Persistenten geändert wird, wird automatisch derInitialisierungswert (sofern nicht weggelassen) in der Persistentendeklarationaktualisiert.Beispiel: PERS num reg1 := 0;...reg1 := 5;Nach dem Speichern sieht das Modul wie folgt aus:PERS num reg1 := 5;...reg1 := 5;24.4 KonstantendeklarationEine Konstante wird durch eine Konstantendeklaration eingeführt. Der Wert einerKonstanten lässt sich nicht ändern.Beispiel: CONST num pi := 3.141592654;Durch Hinzufügen von Maßangaben in der Deklaration kann eine Konstante einesbeliebigen Typs im Format eines Datenfelds (Grad 1, 2 oder 3) angegeben werden.Eine Maßangabe ist ein ganzzahliger Wert größer 0.Beispiel: CONST pos seq{3} := [[614, 778, 1020],[914, 998, 1021],[814, 998, 1022]];<strong>RAPID</strong>-Überblick 107
Daten24.5 Initialisieren von DatenDer Anfangswert für eine Konstante oder Variable kann ein konstanter Ausdruck sein.Der Anfangswert für eine Persistente kann nur ein literaler Ausdruck sein.Beispiel: CONST num a := 2;CONST num b := 3;! Korrekte SyntaxCONST num ab := a + b;VAR num a_b := a + b;PERS num a__b := 5;! Fehlerhafte SyntaxPERS num a__b := a + b;Nachstehende Tabelle zeigt die Ereignisse in verschiedenen Aktivitäten, wie z. B.Warmstart, neues Programm, Programmstart usw.Tabelle1Datenänderungen bei verschiedenen AktivitätenSystem ereignisbeeinflusstNeustart(Warmstart)Öffnen, Schließenoder neuesProgrammProgrammstart(PZ auf„haupt“)Programmstart(PZ aufRoutine)Programmstart(PZ aufCursor)Programmstart(nach Zyklus)Programmstart(Routinenaufruf)Programmstart(nachStopp)Konstante Unverändert Initialisiserung Initialisiserung Initialisiserung Unverändert Unverändert Unverändert UnverändertVariable Unverändert Initialisiserung Initialisiserung Initialisiserung Unverändert Unverändert Unverändert UnverändertPersistente Unverändert Initialisierung**/UnverändertUnverändert Unverändert Unverändert Unverändert Unverändert UnverändertAngeforderteInterruptsNeueAnforderungGelöscht Gelöscht Gelöscht Unverändert Unverändert Unverändert UnverändertStart der RoutineSYS_RESET(mit Bewegungseinstellungen)KeineAusführungAusführung* Ausführung KeineAusführungKeineAusführungKeineAusführungKeineAusführungKeineAusführungDateien Geschlossen Geschlossen Geschlossen Geschlossen Unverändert Unverändert Unverändert UnverändertBahnNeu gesetztnachEinschaltenGelöscht Gelöscht Gelöscht Gelöscht Unverändert Unverändert Unverändert* Erzeugt einen Fehler, wenn das aktuelle Taskprogramm einen semantischen Fehlerenthält.** Persistenten ohne Anfangswert werden nur initialisiert, wenn sie noch nichtdeklariert sind.108 <strong>RAPID</strong>-Überblick
Daten24.6 SpeicherklasseDie Speicherklasse eines Datenobjekts bestimmt, wann das System Speicherplatz fürdas Datenobjekt belegt bzw. wieder freigibt. Die Speicherklasse eines Datenobjektswird durch die Art des Datenobjekts und den Kontext seiner Deklaration bestimmt undkann statisch oder flüchtig sein.Konstanten, Persistenten und Modulvariablen sind statisch, d. h. sie befinden sich fürdie Laufzeit einer Task fest im Speicher. Das bedeutet, dass jede Wertzuweisung füreine Persistente oder Modulvariable bis zur nächsten Zuweisung gültig bleibt.Routinenvariablen sind flüchtig. Der Speicherplatz für den Wert einer flüchtigenVariablen wird erst beim Aufruf der Routine belegt, die die Deklaration der Variablenenthält. Der Speicherplatz wird bei der Rückkehr zur aufrufenden Routine wiederfreigegeben. Der Wert einer Routinenvariablen ist somit vor dem Aufruf der Routinestets undefiniert und geht nach Beendigung der Routine stets verloren (wirdundefiniert).In einer Folge von rekursiven Routinenaufrufen (eine Routine ruft sich selbst direktoder indirekt auf) erhält jede Instanz der Routine ihren eigenen Speicherbereich für die„gleiche“ Routinenvariable – mehrere Instanzen derselben Variablen werden angelegt.<strong>RAPID</strong>-Überblick 109
Daten24.7 SyntaxDatendeklaration ::=[LOCAL] ( | | )| TASK | | Variablendeklaration ::=VAR ’;’ ::= [ ’{’ { ’,’ } ’}’ ][ ’:=’ ] ::= Persistentendeklaration ::=PERS ’;’ ::= [ ’{’ { ’,’ } ’}’ ][ ’:=’ ]Hinweis! Der literale Ausdruck darf nur für systemweite Persistenten weggelassenwerden.Konstantendeklaration ::=CONST ’;’ ::= [ ’{’ { ’,’ } ’}’ ]’:=’ ::= 110 <strong>RAPID</strong>-Überblick
Instruktionen25 InstruktionenInstruktionen werden nacheinander abgearbeitet, es sei denn, eine Instruktion imProgrammablauf oder ein Interrupt oder ein Fehler verursacht, dass die Abarbeitung aneiner anderen Stelle fortfährt.Die meisten Instruktionen werden durch ein Semikolon (;) abgeschlossen. Ein Labelwird durch einen Doppelpunkt (:) beendet. Einige Instruktionen können weitereInstruktionen enthalten und werden durch bestimmte Schlüsselwörter abgeschlossen:InstruktionIFFORWHILETESTAbschlusswortENDIFENDFORENDWHILEENDTESTBeispiel:WHILE index < 100 DO.index := index + 1; ENDWHILE25.1 Syntax ::= { } ::=[| <strong>RAPID</strong>-Überblick 111
Instruktionen112 <strong>RAPID</strong>-Überblick
Ausdrücke26 AusdrückeEin Ausdruck gibt die Auswertung eines Werts an. Er kann z. B. wie folgt verwendetwerden:- in einer Zuweisungsinstruktion z. B. a:=3*b/c;- als Bedingung in einer IF-Instruktion z. B. IF a>=3 THEN ...- als Argument in einer Instruktion z. B. WaitTime time;- als Argument in einem Funktionsaufruf z. B. a:=Abs(3*b);26.1 Arithmetische AusdrückeAnhand eines arithmetischen Ausdrucks wird ein numerischer Wert errechnet.Beispiel:2*pi*radiusTabelle 2: Verschiedene Arten von möglichen OperationenBediener Operation Operandentypen Ergebnistyp+ Addition num + num num3)+ Unäres Pluszeichen +num oder +pos gleich1)3)+ Vektoraddition pos + pos pos- Subtraktion num - num num3)- Unäres Minuszeichen -num oder -pos gleich1)3)- Vektorsubtraktion pos - pos pos* Multiplikation num * num num3)* Skalare Vektormultiplikation num * pos oder pos *numpos* Vektorprodukt pos * pos pos* Verknüpfung von Drehungen orient * orient orient/ Division num / num numDIV2) Ganzzahlendivision num DIV num numMOD2) Ganzzahlmodulo; Rest num MOD num num1. Das Ergebnis erhält denselben Typ wie der Operand. Wenn der Operand einenAlias-Datentyp aufweist, erhält das Ergebnis den Alias-Basistyp (num oderpos).2. Ganzzahloperationen, z. B. 14 DIV 4=3, 14 MOD 4=2.(Nicht ganzzahlige Operanden sind unzulässig.)3. Behält die exakte ganzzahlige Repräsentation, solange Operanden undErgebnis innerhalb des ganzzahligen Teilbereichs des Typs num bleiben.<strong>RAPID</strong>-Überblick 113
Ausdrücke26.2 Logische AusdrückeAnhand eines logischen Ausdrucks wird ein logischer Wert (TRUE/FALSE) errechnet.Beispiel: a>5 AND b=3Tabelle 3: Verschiedene Arten von möglichen OperationenBediener Operation Operandentypen Ergebnistyp< kleiner als num < num bool= num bool> größer als num > num bool ungleich beliebig1) beliebig1)boolAND und bool AND bool boolXOR exklusives Oder bool XOR bool boolOR oder bool OR bool boolNOT unäres Nicht; Negation NOT bool bool1) Nur Datentypen mit einem Wert (Value). Operanden müssen die gleichenTypen sein.a AND ba True FalsebTrueFalseTrue FalseFalse Falsea XOR ba True FalsebTrueFalseFalse TrueTrue Falsea OR ba True FalsebTrueFalseTrue TrueTrue FalseNOT bbTrueFalseFalseTrue114 <strong>RAPID</strong>-Überblick
Ausdrücke26.3 ZeichenfolgenausdrückeEin Zeichenfolgenausdruck wird verwendet, um Operationen an Zeichenfolgenauszuführen.Beispiel: "IN" + "PUT" liefert das Ergebnis "INPUT".Tabelle 4: Die einzige mögliche OperationBediener Operation Operandentypen Ergebnistyp+ Zeichenfolgenverkettung Zeichenfolge +ZeichenfolgeZeichenfolge26.4 Verwendung von Daten in AusdrückenEine ganze Variable, Persistente oder Konstante kann Teil eines Ausdrucks sein.Beispiel:2*pi*radiusDatenfelderEine als Datenfeld deklarierte Variable, Persistente oder Konstante kann auf das ganzeDatenfeld oder ein einzelnes Element bezogen werden.Auf ein Datenfeldelement wird mithilfe der Indexnummer des Elements verwiesen.Der Index ist ein ganzzahliger Wert größer 0 und darf die deklarierte Dimension nichtüberschreiten. Indexwert 1 wählt das erste Element aus. Die Anzahl der Elemente inder Indexliste muss dem deklarierten Grad (1, 2 oder 3) des Datenfelds angepasst sein.Beispiel:VAR num row{3};VAR num column{3};VAR num value;.value := column{3};row := column;nur ein Element im Datenfeldalle Elemente im DatenfeldDatensätzeEine als Datensatz deklarierte Variable, Persistente oder Konstante kann auf denganzen Datensatz oder eine einzelne Komponente bezogen werden.Auf eine Datensatzkomponente wird mithilfe des Komponentennamens verwiesen.<strong>RAPID</strong>-Überblick 115
AusdrückeBeispiel:VAR pos home;VAR pos pos1;VAR num yvalue;..yvalue := home.yy;pos1 := home;nur die Y-Komponentedie vollständige Position26.5 Verwendung von Aggregaten in AusdrückenEin Aggregat wird für den Wert eines Datensatzes oder Datenfelds verwendet.Beispiel: pos := [x, y, 2*x]; pos record aggregateposarr := [[0, 0, 100], [0,0,z]]; pos array aggregateEs muss möglich sein, den Datentyp eines Aggregats durch den Kontext zu bestimmen.Der Datentyp jedes Aggregatelements muss gleich dem Typ des entsprechendenElements vom bestimmten Typ sein.BeispielVAR pos pl;p1 :=[1, -100, 12];Aggregattyp pos – festgelegt durch p1IF [1, -100, 12] = [a,b,b,] THEN Unzulässig, da der Datentyp vonkeinem der Aggregate durch denKontext ermittelt werden kann.26.6 Verwendung von Funktionsaufrufen in AusdrückenEin Funktionsaufruf initiiert die Auswertung einer bestimmten Funktion und empfängtden Wert, den die Funktion zurückgibt.Beispiel:Sin(angle)Die Argumente eines Funktionsaufrufs werden benutzt, um Daten an die (und ggf. vonder) aufgerufenen Funktion zu übertragen. Der Datentyp eines Arguments muss gleichdem Typ des entsprechenden Parameters der Funktion sein. Optionale Argumentekönnen weggelassen werden, aber die Reihenfolge der (vorhandenen) Argumente mussmit der Reihenfolge der formellen Parameter übereinstimmen. Zusätzlich können zweioder mehr optionale Argumente so deklariert sein, dass sie sich gegenseitigausschließen, d. h. die Argumentliste darf nur eines von beiden enthalten.Ein erforderliches (obligatorisches) Argument wird durch ein Komma (,) vomvorherigen Argument getrennt. Der formelle Parametername kann angegeben oderweggelassen werden.Beispiel: Polar(3.937, 0.785398) zwei erforderliche ArgumentePolar(Dist:=3.937, Angle:=0.785398) ... Verwendung von NamenEinem optionalen Argument müssen ein umgekehrter Schrägstrich „\“ und der formelleParametername vorangehen. Ein Argument des Typs „switch“ (Schalter) ist einSonderfall; es darf keinen Argumentausdruck enthalten. Stattdessen kann ein solchesArgument entweder „vorhanden“ oder „nicht vorhanden“ sein.116 <strong>RAPID</strong>-Überblick
AusdrückeBeispiel: Cosine(45) ein erforderliches ArgumentCosine(0.785398\Rad)... und ein umschaltbares ArgumentDist(p2)ein erforderliches ArgumentDist(\distance:=pos1, p2) ... und ein optionales ArgumentBedingte Argumente werden zur Unterstützung der reibungslosen Weitergabe vonoptionalen Argumenten durch Ketten von Routineaufrufen verwendet. Ein bedingtesArgument wird als „vorhanden“ erachtet, wenn der angegebene optionale Parameter(der aufrufenden Funktion) vorhanden ist. Andernfalls wird er als ausgelassenbetrachtet. Beachten Sie, dass der angegebene Parameter optional sein muss.Beispiel:PROC Read_from_file (iodev File \num Maxtime)..character:=ReadBin (File \Time?Maxtime);! Maxtime wird nur verwendet, wenn es beim Aufruf der Routineangegeben ist.! Read_from_file..ENDPROCDie Parameterliste einer Funktion weist jedem Parameter einen Zugriffsmodus zu. DerZugriffsmodus kann in, Inout, Var oder Pers sein:- Ein IN-Parameter (Standardvorgabe) erlaubt einen beliebigen Ausdruck alsArgument. Die aufgerufene Funktion betrachtet den Parameter als Konstante.- Ein INOUT-Parameter erfordert, dass das entsprechende Argument eineVariable (als Ganzes, Datenfeld-Element oder Datensatzkomponente) odereine vollständige Persistente ist. Die aufgerufene Funktion erhält vollständigenZugriff (Lesen/Schreiben) auf das Argument.- Ein VAR-Parameter verlangt, dass das entsprechende Argument eine Variable(als Ganzes, Datenfeld-Element oder Datensatzkomponente) ist. Dieaufgerufene Funktion erhält vollständigen Zugriff (Lesen/Schreiben) auf dasArgument.- Ein PERS-Parameter verlangt, dass das entsprechende Argument einevollständige Persistente ist. Die aufgerufene Funktion erhält vollständigenZugriff (Lesen/Aktualisieren) auf das Argument.26.7 Priorität zwischen OperatorenDie relative Priorität der Operatoren bestimmt die Reihenfolge, in der sie ausgewertetwerden. Klammern bieten eine Möglichkeit, die Priorität der Operatoren zu ändern.Nachstehende Regeln legen die folgende Operatorpriorität fest:* / DIV MOD- höchste+ -< > = =ANDXOR OR NOT - niedrigsteEin Operator mit höchster Priorität wird vor einem Operator mit niedriger Prioritätausgewertet. Operatoren derselben Priorität werden von links nach rechts ausgewertet.<strong>RAPID</strong>-Überblick 117
AusdrückeBeispiel:Ausdruck Reihenfolge der Auswertung Kommentara + b + c (a + b) + c von links nach rechtsa + b * c a + (b * c) * höher als +a OR b OR c (a OR b) OR c von links nach rechtsa AND b OR c AND d (a AND b) OR (c AND d) AND höher als ORa < b AND c < d (a < b) AND (c < d) < höher als AND26.8 SyntaxAusdrücke ::=| ::= [ NOT ] { ( OR | XOR ) } ::= { AND } ::= [ ] ::= [ ] { } ::= { } ::=| | | | | | | ’(’ ’)’Operatoren ::= ’=’ | ’’ ::= ’+’ | ’-’ ::= ’*’ | ’/’ | DIV | MODKonstante Werte ::= | | 118 <strong>RAPID</strong>-Überblick
AusdrückeDaten ::=| | ::= ::= ’{’ ’}’ ::= { ’,’ } ::= ’.’ ::= ::=| | ::=| | Aggregate ::= ’[’ { ’,’ } ’]’Funktionsaufrufe ::= ’(’ [ ] ’)’ ::= ::= { } ::=| | ::=’,’ | | ’,’ | | ’,’ ::= [ ’:=’ ] ::= ’\’ [ ’:=’ ] ::= ’\’ ’?’ <strong>RAPID</strong>-Überblick 119
AusdrückeSpezialausdrücke ::= ::= ::= Parameter ::=| | 120 <strong>RAPID</strong>-Überblick
Fehlerbehandlung27 FehlerbehandlungEin Abarbeitungsfehler ergibt eine abnormale Situation hinsichtlich der Abarbeitungeines bestimmten Programmteils. Durch einen Fehler wird die weitere Abarbeitungunmöglich (oder zumindest riskant). „Überlauf“ und „Teilung durch Null“ sindBeispiele für Fehler. Fehler werden durch eine eindeutige Fehlernummer identifiziertund stets durch das System erkannt. Bei Auftreten eines Fehlers wird die normaleProgrammabarbeitung angehalten und die Steuerung an die Fehlerbehandlungübergeben. Das Konzept der Fehlerbehandlungen ermöglicht, während desProgrammablaufs auf Fehler zu reagieren und sie möglicherweise zu beheben. Wenneine weitere Abarbeitung nicht möglich ist, stellt die Fehlerbehandlung zumindestsicher, dass das Programm auf geeignete Weise abgebrochen wird.27.1 FehlerbehandlungenJede Routine kann eine Fehlerbehandlung enthalten. Die Fehlerbehandlung isteigentlich ein Teil der Routine, und der Gültigkeitsbereich jeglicher Routinendatenumfasst auch die Fehlerbehandlung. Wenn ein Fehler während der Abarbeitung derRoutine auftritt, wird die Steuerung an die Fehlerbehandlung übergeben.Beispiel:FUNC num safediv( num x, num y)RETURN x / y;ERRORIF ERRNO = ERR_DIVZERO THENTPWrite "Der Wert darf nicht 0 sein";RETURN x;ENDIFENDFUNCDie Systemvariable ERRNO enthält die Fehlernummer des (zuletzt aufgetretenen)Fehlers und kann von der Fehlerbehandlung zur Identifizierung dieses Fehlersverwendet werden. Nachdem die erforderlichen Maßnahmen ergriffen wurden, kanndie Fehlerbehandlung:- Die Abarbeitung wieder aufnehmen, beginnend mit der Instruktion, in der derFehler aufgetreten ist. Dies erfolgt mit der Instruktion RETRY. Wenn dieseInstruktion erneut denselben Fehler verursacht, finden bis zu vierFehlerkorrekturen statt. Danach wird die Abarbeitung angehalten. Damit mehrals vier Versuche möglich sind, müssen Sie den Systemparameter No Of Retrykonfigurieren (siehe Technisches <strong>Referenzhandbuch</strong> - Systemparameter).- Die Abarbeitung mit der Instruktion fortsetzen, die auf die Instruktion folgt, inder der Fehler aufgetreten ist. Dies erfolgt mit der Instruktion TRYNEXT.- Die Steuerung an die aufrufende Routine mithilfe der Instruktion RETURNzurückgeben. Wenn es sich bei der Routine um eine Funktion handelt, muss dieInstruktion RETURN einen geeigneten Rückgabewert enthalten.- Den Fehler mithilfe der Instruktion RAISE an die aufrufende Routineübergeben.<strong>RAPID</strong>-Überblick 121
FehlerbehandlungSystem-FehlerbehandlungWenn ein Fehler in einer Routine auftritt, die keine Fehlerbehandlung enthält, oderwenn das Ende der Fehlerbehandlung erreicht wurde (ENDFUNC, ENDPROC oderENDTRAP), wird die System-Fehlerbehandlung aufgerufen. Die System-Fehlerbehandlung meldet den Fehler und stoppt die Abarbeitung.In einer Folge von Routineaufrufen kann jede Routine ihre eigene Fehlerbehandlungenthalten. Wenn ein Fehler in einer Routine ohne Fehlerbehandlung auftritt und derFehler explizit mithilfe der Instruktion RAISE übergeben wird, tritt dieser Fehlererneut beim Aufruf der Routine auf – und der Fehler wird weitergegeben. Wenn derBeginn einer Aufruffolge (die Einstiegsroutine der Task) erreicht wird, ohne dass eineFehlerbehandlung gefunden wurde, oder wenn das Ende einer beliebigenFehlerbehandlung innerhalb der Aufruffolge erreicht wird, wird die System-Fehlerbehandlung aufgerufen. Die System-Fehlerbehandlung meldet den Fehler undstoppt die Abarbeitung. Da das System (als Reaktion auf einen Interrupt) eineInterrupt-Routine aufrufen kann, erfolgt eine etwaige Übergabe eines Fehlers von einerInterrupt-Routine an die System-Fehlerbehandlung.Eine Fehlerkorrektur ist für Instruktionen in der Rückwärtsbehandlung nicht verfügbar.Solche Fehler werden stets an die System-Fehlerbehandlung übergeben.Es ist nicht möglich, auf Fehler innerhalb einer Fehlerbehandlung gezielt zu reagieren.Solche Fehler werden stets an die System-Fehlerbehandlung übergeben.Vom Programm gemeldete FehlerNeben den durch das Robotersystem ermittelten und gemeldeten Fehlern kann einProgramm mithilfe der Instruktion RAISE explizit Fehler melden. Diese Instruktionkann verwendet werden, um komplexe Fehlersituationen zu lösen. Sie ermöglichtbeispielsweise die Rückkehr aus einer tiefen Verschachtelung von Aufrufen.Fehlernummern 1-90 können mit der Instruktion RAISE verwendet werden. Explizitgemeldete Fehler werden exakt wie Fehler behandelt, die das System meldet.Das EreignisprotokollFür Fehler, die von einer Fehlerbehandlung behandelt werden, wird dennoch einEintrag in das Ereignisprotokoll geschrieben. Im Ereignisprotokoll können Sienachverfolgen, welche Fehler aufgetreten sind.Wenn ein Fehler behandelt werden soll, ohne dass ein Eintrag im Ereignisprotokollerfolgt, verwenden Sie in der Fehlerbehandlung die Instruktion SkipWarn. Dies kannnützlich sein, wenn Sie mit der Fehlerbehandlung einen Test ausführen möchten (z. B.ob eine Datei existiert), ohne Spuren zu hinterlassen, falls der Test fehlschlägt.122 <strong>RAPID</strong>-Überblick
UNDO28 UNDORapid-Routinen können eine UNDO-Behandlung enthalten. Die UNDO-Behandlungwird automatisch ausgeführt, wenn der Programmzeiger (PZ) aus der Routine herausbewegt wird. Dies soll dazu beitragen, dass Nebeneffekte nach teilweiseabgearbeiteten Routinen beseitigt werden, z. B. beim Abbruch von modalenInstruktionen (wie dem Öffnen einer Datei). Die meisten Teile der Rapid-Sprachekönnen in einer UNDO-Behandlung benutzt werden, jedoch gibt es einigeBeschränkungen, z. B. Bewegungsinstruktionen.28.1 Definitionen/Terminologie:Um Mehrdeutigkeiten im folgenden Text zu vermeiden, erhalten Sie zunächst eineListe mit Begriffserklärungen in Bezug auf UNDO.UNDO: Die Abarbeitung von Bereinigungscode vor einem Rücksetzen desProgramms.UNDO-Behandlung: Ein optionaler Teil einer Rapid-Prozedur oder -Funktion, dieRapid-Code enthält, der bei einem UNDO abgearbeitet wird.UNDO-Routine: Eine Prozedur oder Funktion mit einer UNDO-Behandlung.Aufruffolge: Alle Prozeduren oder Funktionen, die derzeit durch noch nichtabgeschlossene Routinenaufrufe miteinander verbunden sind. Soll in der Hauptroutine(Main) starten, sofern nicht anders angegeben.UNDO-Kontext: Wenn die aktuelle Routine einer Aufruffolge angehört, die in einerUNDO-Behandlung gestartet wird.28.2 Verwendung von UNDOEine Rapid-Routine kann an einer beliebigen Stelle abgebrochen werden, indem derProgrammzeiger aus der Routine bewegt wird. In einigen Fällen ist ein Abbruch nichtempfehlenswert, insbesondere wenn das Programm bestimmte empfindliche Routinenabarbeitet. Mithilfe von UNDO können Sie solche empfindlichen Routinen vor einemunerwarteten Rücksetzen des Programms schützen. Mit UNDO ist es möglich, dassbeim Abbruch der Routine bestimmter Code automatisch ausgeführt wird. DieserCode sollte in der Regel Bereinigungsaktionen ausführen, z. B. das Schließen einerDatei.28.3 UNDO-Verhalten im EinzelnenWenn UNDO aktiviert wird, werden alle UNDO-Behandlungen in der aktuellenAufruffolge abgearbeitet. Diese Behandlungsroutinen sind optionale Teile einerRapid-Prozedur oder Funktion, die Rapid-Code enthält. Die aktuell aktiven UNDO-Behandlungen gehören Prozeduren oder Funktionen an, die aufgerufen und noch nichtabgeschlossen wurden, d. h. den Routinen in der aktuellen Aufruffolge.<strong>RAPID</strong>-Überblick 123
UNDOUNDO wird aktiviert, wenn der PZ unerwartet aus einer UNDO-Routine herausbewegtwird, z. B. wenn der Benutzer den Programmzeiger in die Hauptroutine versetzt.UNDO wird auch beim Abarbeiten einer EXIT-Instruktion gestartet, um das Programmzurückzusetzen, oder wenn das Programm aus einem anderen Grund zurückgesetztwird, etwa beim Ändern der Konfiguration oder beim Löschen des Programms oderModuls. Jedoch wird UNDO nicht gestartet, wenn das Programm das Ende der Routineoder eine Return-Anweisung erreicht, und kehrt wie gewöhnlich aus der Routinezurück.Wenn die Aufruffolge mehrere UNDO-Routinen enthält, werden die UNDO-Behandlungen der Routinen in derselben Reihenfolge verarbeitet, in der die Routinenins Hauptprogramm zurückgekehrt wären (von unten nach oben). Die UNDO-Behandlung, die sich am nächsten zum Ende der Aufruffolge befindet, wird zuerstabgearbeitet, und diejenige, die sich am nächsten zu „Main“ befindet, wird zuletztabgearbeitet.28.4 EinschränkungenEine UNDO-Behandlung kann auf jede Variable oder jedes Symbol zugreifen, das vomnormalen Routinenbereich aus erreichbar ist, einschließlich auf lokal deklarierteVariablen. Rapid-Code, der in UNDO-Kontext ausgeführt werden soll, unterliegtjedoch bestimmten Beschränkungen.Eine UNDO-Behandlung darf kein STOP, BREAK, RAISE oder RETURN enthalten.Wenn versucht wird, eine dieser Instruktionen im UNDO-Kontext zu verwenden, wirddie Instruktion ignoriert und eine ELOG-Warnung generiert.Bewegungsinstruktionen, z. B. MoveL, sind im UNDO-Kontext ebenfalls untersagt.Die Abarbeitung in UNDO verläuft immer kontinuierlich, schrittweise Abarbeitung istnicht möglich. Wenn UNDO startet, wird der Abarbeitungsmodus automatisch aufkontinuierlich eingestellt. Nach Beendigung des UNDO-Vorgangs wird wieder dervorherige Abarbeitungsmodus eingestellt.Falls das Programm bei der Abarbeitung einer UNDO-Behandlung gestoppt wird,unterbleibt der Rest der Behandlung. Wenn die Aufruffolge noch weitere noch nichtabgearbeitete UNDO-Behandlungen enthält, werden diese ebenfalls ignoriert. Dies hateine ELOG-Warnung zur Folge. Dazu gehört auch ein Stopp wegen einesLaufzeitfehlers.Der PZ ist in einer UNDO-Behandlung nicht sichtbar. Bei der Abarbeitung von UNDObleibt der PZ an seiner vorherigen Position, wird aber nach Beendigung der UNDO-Behandlung(en) aktualisiert.Eine EXIT-Instruktion bricht UNDO auf ähnliche Weise ab wie ein Laufzeitfehler oderein Stopp. Die übrigen UNDO-Behandlungen werden ignoriert und der PZ wird in„Main“ versetzt.124 <strong>RAPID</strong>-Überblick
UNDO28.5 Beispiel:Tabelle 5: Eine UNDO-AbarbeitungProgramm:PROC BTPWrite "In Routine B";Exit;UNDOTPWrite "In UNDO von Routine B";ENDPROCAusgabe:In MainIn Routine AIn Routine BIn UNDO von Routine BIn UNDO von MainPROC ATPWrite "In Routine A";B;ENDPROCPROC mainTPWrite "In Main";A;UNDOTPWrite "In UNDO von Main";ENDPROC<strong>RAPID</strong>-Überblick 125
UNDO126 <strong>RAPID</strong>-Überblick
Interrupts29 InterruptsInterrupts sind im Programm definierte Ereignisse, die durch Interrupt-Nummernidentifiziert werden. Ein Interrupt tritt auf, wenn eine Interrupt-Bedingung wahr ist. ImUnterschied zu Fehlern ist das Auftreten eines Interrupts nicht direkt mit einerbestimmten Codeposition verbunden. Beim Auftreten eines Interrupts wird dienormale Programmabarbeitung angehalten und die Steuerung an eine Interrupt-Routine übergeben.Selbst wenn das Robotersystem das Auftreten eines Interrupts sofort erkennt (nurdurch die Geschwindigkeit der Hardware verzögert), kann die Reaktion, d. h. derAufruf der entsprechenden Interrupt-Routine, nur an besonderen Programmpositionenerfolgen, und zwar:- beim Einlesen der nächsten Instruktion,- jederzeit bei der Ausführung einer Warteinstruktion, z. B. WaitUntil,- jederzeit bei der Ausführung einer Bewegungsinstruktion, z. B. MoveL.Dadurch entsteht normalerweise eine Verzögerung von 5 bis 120 ms zwischenErkennung des Interrupts und Reaktion, je nachdem, welche Bewegung zur Zeit desInterrupts ausgeführt wird.Das Übergeben von Interrupts kann blockiert und freigegeben sein. Wenn Interruptsblockiert sind, werden auftretende Interrupts in eine Warteschlange eingereiht undkönnen nur nach erneuter Freigabe übergeben werden. Beachten Sie, dass dieInterrupt-Warteschlange mehrere wartende Interrupts enthalten kann. Interrupts ineiner Warteschlange werden in der Reihenfolge ihres Auftretens abgearbeitet (FIFO).Bei der Abarbeitung einer Interrupt-Routine werden Interrupts stets blockiert.Bei schrittweiser Ausführung und bei Programmstopp werden keine Interruptsbehandelt. Interrupts, die unter diesen Umständen erzeugt wurden, nimmt das Systemnicht zur Kenntnis.Die maximale Anzahl gleichzeitig definierter Interrupts ist auf 70 pro Programmtaskbeschränkt. Die maximale Anzahl, die durch die E/A-CPU festgelegt ist, beträgt 100Interrupts.29.1 Handhabung von InterruptsDurch die Definition wird ein Interrupt dem Robotersystem bekannt gegeben. DieseDefinition gibt die Interrupt-Bedingung an, aktiviert den Interrupt und gibt ihn frei.Beispiel:VAR intnum sig1int;.ISignalDI di1, high, sig1int;Ein aktivierter Interrupt kann deaktiviert werden (und umgekehrt).Für die Dauer der Deaktivierung wird jeder neu erzeugte Interrupt des angegebenenTyps ignoriert.Beispiel: ISleep sig1int; deaktiviert .IWatch sig1int;aktiviert<strong>RAPID</strong>-Überblick 127
InterruptsEin blockierter Interrupt kann freigegeben werden (und umgekehrt).Für die Dauer der Blockierung wird jeder neu erzeugte Interrupt des angegebenen Typsin eine Warteschlange gestellt und erst dann abgearbeitet, wenn die Interrupts wiederfreigegeben sind.Beispiel: IDisable sig1int; blockiert.IEnable sig1int;freigegebenDas Löschen eines Interrupts entfernt seine Definition. Es ist nicht erforderlich, eineInterrupt-Definition explizit zu entfernen. Jedoch kann ein neuer Interrupt erst dann miteiner Interrupt-Variablen definiert werden, wenn die vorherige Definition gelöschtwurde.Beispiel: IDelete sig1int;29.2 Interrupt-RoutinenInterrupt-Routinen dienen der Behandlung von Unterbrechungen. Eine Interrupt-Routine kann mithilfe der Instruktion CONNECT mit einem bestimmten Interruptverbunden werden. Beim Auftreten eines Interrupts wird die Steuerung sofort an diezugehörige Interrupt-Routine (falls vorhanden) übergeben. Wenn ein Interrupt auftritt,mit dem keine Interrupt-Routine verbunden ist, wird dies als schwerwiegender Fehlerbetrachtet, d. h. die Programmabarbeitung wird sofort beendet.Beispiel: VAR intnum empty;VAR intnum full;.PROC main()CONNECT empty WITH etrap; Interrupt-Routinen verbindenCONNECT full WITH ftrap;ISignalDI di1, high, empty; Zuführung-Interrupts definierenISignalDI di3, high, full;.IDelete empty;IDelete full;ENDPROCTRAP etrapreagiert auf Interrupt open_valve;"Zuführung leer"RETURN;ENDTRAPTRAP ftrapreagiert auf Interrupt close_valve;"Zuführung voll"RETURN;ENDTRAPMehrere Interrupts können mit derselben Interrupt-Routine verbunden sein. DieSystemvariable INTNO enthält die Interrupt-Nummer und kann von der Interrupt-Routine zur Identifizierung eines Interrupts verwendet werden. Nach Ergreifen dererforderlichen Maßnahme kann eine Interrupt-Routine durch eine RETURN-Instruktion oder bei Erreichen des Endes (ENDTRAP oder ERROR) dieser Interrupt-Routine beendet werden. Die Abarbeitung fährt an der Stelle fort, an der der Interruptaufgetreten ist.128 <strong>RAPID</strong>-Überblick
Rückwärtsabarbeitung30 RückwärtsabarbeitungEin Programm kann Instruktion für Instruktion rückwärts abgearbeitet werden. Diefolgenden allgemeinen Einschränkungen gelten für die Rückwärtsabarbeitung:- Eine Rückwärtsabarbeitung aus einer IF-, FOR-, WHILE- oder TEST-Instruktion heraus ist nicht möglich.- Nach Erreichen des Routinenbeginns ist es nicht möglich, rückwärts aus derRoutine auszusteigen.- Instruktionen für Bewegungseinstellungen und einige andere Instruktionen, dieBewegungen beeinflussen, können nicht rückwärts abgearbeitet werden.Beim Versuch, diese Instruktionen rückwärts abzuarbeiten, informiert Sie eineWarnmeldung, dass dies nicht möglich ist.30.1 RückwärtsbehandlungProzeduren können eine Rückwärtsbehandlung beinhalten, durch die dieRückwärtsabarbeitung eines Prozeduraufrufs definiert wird.Die Rückwärtsbehandlung ist eigentlich ein Teil der Prozedur, und der Bereichjeglicher Routinendaten umfasst auch die Rückwärtsbehandlung der Prozedur.Beispiel: PROC MoveTo ()MoveL p1,v500,z10,tool1;MoveC p2,p3,v500,z10,tool1;MoveL p4,v500,z10,tool1;BACKWARDMoveL p4,v500,z10,tool1;MoveC p2,p3,v500,z10,tool1;MoveL p1,v500,z10,tool1;ENDPROCWenn die Prozedur während einer Vorwärtsabarbeitung aufgerufen wird, trittFolgendes ein:PROC MoveTo ().. MoveL p1,v500,z10,tool1;MoveTo; MoveC p2,p3,v500,z10,tool1;.. MoveL p4,v500,z10,tool1;BACKWARDMoveL p4,v500,z10,tool1;MoveC p2,p3,v500,z10,tool1;MoveL p1,v500,z10,tool1;ENDPROC<strong>RAPID</strong>-Überblick 129
RückwärtsabarbeitungWenn die Prozedur während einer Rückwärtsabarbeitung aufgerufen wird, tritt Folgendesein:PROC MoveTo ().. MoveL p1,v500,z10,tool1;MoveTo;MoveC p2,p3,v500,z10,tool1;.. MoveL p4,v500,z10,tool1;BACKWARDMoveL p4,v500,z10,tool1;MoveC p2,p3,v500,z10,tool1;MoveL p1,v500,z10,tool1;ENDPROCInstruktionen in der Rückwärts- oder Fehlerbehandlung einer Routine dürfen nichtrückwärts abgearbeitet werden. Verschachtelungen in der Rückwärtsabarbeitung sindnicht möglich, d. h. zwei Instruktionen in einer Aufrufkette können nicht gleichzeitigrückwärts abgearbeitet werden.Eine Prozedur ohne Rückwärtsbehandlung kann nicht rückwärts abgearbeitet werden.Eine Prozedur mit einer leeren Rückwärtsbehandlung wird als „keine Operation“abgearbeitet.30.2 Beschränkungen bei Bewegungsinstruktionen in derRückwärtsbehandlungTyp und Sequenz der Bewegungsinstruktion in der Rückwärtsbehandlung müssen denTyp und die Sequenz der Vorwärtsabarbeitung in derselben Routine spiegeln:PROC MoveTo ()MoveL p1,v500,z10,tool1;MoveC p2,p3,v500,z10,tool1;MoveL p4,v500,z10,tool1;BACKWARDMoveL p4,v500,z10,tool1;MoveC p2,p3,v500,z10,tool1;MoveL p1,v500,z10,tool1;ENDPROCSpiegelebeneBeachten Sie, dass die Reihenfolge von CirPoint p2 und ToPoint p3 in MoveC gleichsein sollte.Mit Bewegungsinstruktionen sind alle Instruktionen gemeint, die Bewegungen desRoboters oder externer Achsen zur Folge haben, z. B. MoveL, SearchC, TriggJ, ArcC,PaintL ...130 <strong>RAPID</strong>-Überblick
RückwärtsabarbeitungJede Abweichung von dieser Programmierungsbeschränkung in derRückwärtsbehandlung kann eine falsche Rückwärtsbewegung verursachen. Füreinen Teil der Rückwärtsbahn können lineare Bewegungen kreisförmigausgeführt werden und umgekehrt.30.3 Verhalten der RückwärtsabarbeitungMoveC- und nostepin-RoutinenBei der schrittweisen Abarbeitung einer MoveC-Instruktion hält der Roboter amKreispunkt an (die Instruktion wird in zwei Schritten abgearbeitet). Jedoch hält derRoboter bei der schrittweisen Abarbeitung einer MoveC-Instruktion nicht amKreispunkt an (die Instruktion wird in einem Schritt abgearbeitet).Es ist nicht erlaubt, von Vorwärts- in Rückwärtsabarbeitung zu wechseln, wenn derRoboter eine MoveC-Instruktion abarbeitet.In einer nostepin-Routine ist es nicht erlaubt, von Vorwärts- in Rückwärtsabarbeitung(oder umgekehrt) zu wechseln.Ziel, Bewegungsart und GeschwindigkeitBei der Rückwärtsabarbeitung des Programmcodes gibt ein Programmzeiger dienächste auszuführende Instruktion an, und ein Bewegungszeiger gibt dieBewegungsinstruktion an, die der Roboter ausführt.Bei der Rückwärtsabarbeitung des Programmcodes gibt der Programmzeiger dieInstruktion über dem Bewegungszeiger an. Wenn der Programmzeiger eineBewegungsinstruktion und der Bewegungszeiger eine weitere Bewegungsinstruktionangibt, geht die nächste Rückwärtsbewegung zu dem Ziel, das der Programmzeigerangibt, und verwendet die Bewegungsart und Geschwindigkeit, die derBewegungszeiger angibt.Eine Ausnahme hinsichtlich der Geschwindigkeit der Rückwärtsabarbeitung stellt dieInstruktion MoveExtJ dar. Diese Instruktion verwendet die mit dem Roboterziel(robtarget) verbundene Geschwindigkeit bei der Vorwärts- und derRückwärtsabarbeitung.<strong>RAPID</strong>-Überblick 131
RückwärtsabarbeitungBeispiel:Dieses Beispiel illustriert das Verhalten bei der Rückwärtsabarbeitung vonBewegungsinstruktionen. Programm- und Bewegungszeiger helfen Ihnen, denÜberblick über die Position der <strong>RAPID</strong>-Abarbeitung und des Roboters zu behalten.Tabelle 6: Erläuterungen zu obiger AbbildungABCProgrammzeigerBewegungszeigerMarkieren des „robtarget“, auf das sich der Roboter zu bewegt bzw. das er bereitserreicht hat.1 Das Programm wird vorwärts abgearbeitet, bis der Roboter in p5 ist. DerBewegungszeiger gibt p5 an und der Programmzeiger gibt die nächsteBewegungsinstruktion (MoveL p6) an.2 Beim ersten Drücken der Rückwts-Taste bewegt sich der Roboter nicht, aber derProgrammzeiger springt zur vorherigen Instruktion (MoveC p3, p4). Das ist dieInstruktion, die beim nächsten Drücken der Rückwts-Taste ausgeführt wird.3 Beim zweiten Drücken der Rückwts-Taste bewegt sich der Roboter mit derGeschwindigkeit v300 linear zu p4. Das Ziel dieser Bewegung (p4) wird aus derMoveC-Instruktion genommen. Bewegungsart (linear) und Geschwindigkeitwerden aus der darunter liegenden Instruktion (MoveL p5) genommen. DerBewegungszeiger gibt p4 an und der Programmzeiger bewegt sich nach oben zuMoveL p2.4 Beim dritten Drücken der Rückwts-Taste bewegt sich der Roboter kreisförmig mitder Geschwindigkeit v100 über p3 zu p2. Das Ziel p2 wird aus der InstruktionMoveL p2 genommen. Bewegungsart (kreisförmig), Kreispunkt (p3) undGeschwindigkeit werden aus der Instruktion MoveC genommen. DerBewegungszeiger gibt p2 an und der Programmzeiger bewegt sich nach oben zuMoveL p1.132 <strong>RAPID</strong>-Überblick
Rückwärtsabarbeitung5 Beim vierten Drücken der Rückwts-Taste bewegt sich der Roboter mit derGeschwindigkeit v200 linear zu p1. Der Bewegungszeiger gibt p1 an und derProgrammzeiger bewegt sich nach oben zu MoveJ p0.6 Beim ersten Drücken der Vorwts-Taste bewegt sich der Roboter nicht, aber derProgrammzeiger springt zur nächsten Instruktion (MoveL p2).7 Beim zweiten Drücken der Vorwts-Taste bewegt sich der Roboter mit derGeschwindigkeit v200 linear zu p2.<strong>RAPID</strong>-Überblick 133
Rückwärtsabarbeitung134 <strong>RAPID</strong>-Überblick
Multitasking31 MultitaskingDie Ereignisse in einer Roboterstation erfolgen häufig parallel, warum sind dann dieProgramme nicht parallel?Multitasking <strong>RAPID</strong> ist eine Möglichkeit, Programme (pseudo-) parallel zumnormalen Programm abzuarbeiten. Die Abarbeitung beginnt mit dem Einschalten undwird ständig fortgeführt, es sei denn, in diesem Programm tritt ein Fehler auf. Einparalleles Programm kann in den Vordergrund oder Hintergrund eines anderenProgramms gestellt werden. Es kann sich auch auf der gleichen Ebene wie ein anderesProgramm befinden.Zur Nutzung dieser Funktion muss das Robotersystem mit einer zusätzlichen TASKfür jedes Hintergrundprogramm konfiguriert werden.Bis zu zehn verschiedene Tasks können pseudoparallel ablaufen. Jede Task besteht wiedas normale Programm aus einer Reihe von Modulen. Alle Module in einer Task sindlokal.In jeder Task sind Variablen und Konstanten lokal, jedoch nicht Persistenten. EinePersistente mit demselben Namen und Typ ist in allen Tasks erreichbar. Wenn zweiPersistenten denselben Namen, aber unterschiedlichen Typ oder unterschiedlicheGröße (Datenfelddimension) aufweisen, tritt ein Laufzeitfehler auf.Eine Task verfügt über ihre eigene Interrupt-Behandlungsroutine, und dieEreignisroutinen werden nur für ihren eigenen Systemstatus (z. B. Start/Stopp/Neustart...) ausgelöst.Es bestehen einige Einschränkungen bei der Benutzung von Multitasking <strong>RAPID</strong>.- Mischen Sie parallele Programme nicht mit einem SPS. Die Reaktionszeit istdieselbe wie die Interrupt-Antwortzeit für eine Task. Dies trifft nur dann zu,wenn die Task nicht im Hintergrund eines anderen aktiven Programms abläuft.- Es ist nur ein physisches Programmiergerät vorhanden, achten Sie alsosorgfältig darauf, dass im Bedienerfenster nicht für alle Tasks eine TPWrite-Anforderung eingefügt wird.- Beim Ausführen einer Warteinstruktion im Einrichtbetrieb wird nach 3Sekunden ein Simulationsfeld angezeigt. Dies tritt nur in der Main-Task auf.- Bewegungsinstruktionen können nur in der Main-Task abgearbeitet werden(Informationen zur Taskbindung zu Programminstanz 0 finden Sie imTechnischen <strong>Referenzhandbuch</strong> - Systemparameter).- Die Abarbeitung einer Task stoppt, während andere Tasks auf das Dateisystemzugreifen, d. h. wenn der Bediener ein Programm speichert oder öffnet oderwenn das Programm in einer Task die Lade-/Lösch-/Lese-/Schreib-Instruktionverwendet.- Das Programmiergerät kann nur auf die Main-Task zugreifen. Daher kann dieEntwicklung von <strong>RAPID</strong>-Programmen für andere Tasks nur erfolgen, wenn derCode in die Main-Task geladen wird, oder sie müssen offline programmiertwerden.Alle Einstellungen finden Sie im Technischen <strong>Referenzhandbuch</strong> - Systemparameter.<strong>RAPID</strong>-Überblick 135
Multitasking31.1 Synchronisieren der TasksIn vielen Anwendungen überwacht eine Parallel-Task eine Station völlig unabhängigvon den anderen Tasks, die abgearbeitet werden. In solchen Fällen ist keinSynchronisierungsmechanismus erforderlich. Jedoch gibt es andere Anwendungen, diewissen müssen, welche Aktion beispielsweise die Main-Task ausführt.Synchronisierung mithilfe des AbfragebetriebsDies ist zwar die einfachste Methode, aber die Verarbeitungsgeschwindigkeit ist amlangsamsten.Persistenten werden dann gemeinsam mit den Instruktionen WaitUntil, IF, WHILE oderGOTO verwendet.Bei der Verwendung der Instruktion WaitUntil wird alle 100 ms eine interne Abfrageabgesetzt. Führen Sie in anderen Implementierungen keine häufigeren Abfragen durch.Beispiel:TASK 0MODULE module1PERS bool startsync:=FALSE;PROC main()startsync:= TRUE;.ENDPROCENDMODULETASK 1MODULE module2PERS bool startsync:=FALSE;PROC main()WaitUntil startsync;.ENDPROCENDMODULE136 <strong>RAPID</strong>-Überblick
MultitaskingSynchronisierung mithilfe eines InterruptsDie Instruktionen SetDO und ISignalDO werden verwendet.Beispiel:TASK 0MODULE module1PROC main()SetDO do1,1;.ENDPROCENDMODULETASK 1MODULE module2VAR intnum isiint1;PROC main()CONNECT isiint1 WITH isi_trap;ISignalDO do1, 1, isiint1;WHILE TRUE DOWaitTime 200;ENDWHILEIDelete isiint1;ENDPROCTRAP isi_trap.ENDTRAPENDMODULE31.2 Kommunikation zwischen den TasksAlle Typen von Daten können zwischen zwei (oder mehr) Tasks mit persistentenVariablen übertragen werden.Eine persistente Variable ist global in allen Tasks. Die persistente Variable muss inallen Tasks, die sie deklarieren, denselben Typ und dieselbe Größe (Datenfeldgröße)aufweisen. Andernfalls tritt ein Laufzeitfehler auf.<strong>RAPID</strong>-Überblick 137
MultitaskingAlle Deklarationen müssen einen Anfangswert für die persistente Variable angeben,aber nur das erste Modul, das mit der Deklaration geladen wird, verwendet ihn.Beispiel:TASK 0MODULE module1PERS bool startsync:=FALSE;PERS string stringtosend:="";PROC main()stringtosend:="Dies ist ein Test";startsync:= TRUEENDPROCENDMODULETASK 1MODULE module2PERS bool startsync:=FALSE;PERS string stringtosend:="";PROC main()WaitUntil startsync;!read stringIF stringtosend = "Dies ist ein Test" THENENDPROCENDMODULE31.3 TasktypenJede zusätzliche Task (nicht 0) wird in der Systemstartsequenz gestartet. Wenn die Taskden Typ STATIC aufweist, wird sie an der aktuellen Position neu gestartet (an der derPZ sich beim Abschalten des Systems befand). Wenn aber der Typ auf SEMISTATICeingestellt ist, wird die Task bei jedem Einschalten von Anfang an neu gestartet. EineTask des Typs SEMISTATIC lädt in der Neustartsequenz auch Module, die in denSystemparametern angegeben sind, wenn die Moduldatei neuer als das geladene Modulist.Die Task kann auch auf den Typ NORMAL eingestellt werden und verhält sich dannwie Task 0 (die Main-Task, die die Roboterbewegung steuert). Das Programmiergerätkann nur zum Start von Task 0 benutzt werden, d. h. zum Start von anderen Tasks desTyps NORMAL muss Communication Ware verwendet werden.138 <strong>RAPID</strong>-Überblick
Multitasking31.4 PrioritätenDie einzige Möglichkeit, die Tasks standardmäßig auszuführen, besteht darin, alleTasks auf derselben Ebene umlaufend (ein Basisschritt für jede Instanz)abzuarbeiten. Die Priorität einer Task kann aber geändert werden, indem die Task inden Hintergrund einer anderen Task gestellt wird. Der Hintergrund wird dann nurabgearbeitet, wenn der Vordergrund auf Ereignisse wartet oder die Abarbeitunggestoppt hat (im Leerlauf ist). Ein Roboterprogramm mit Bewegungsinstruktionenbefindet sich meistens im Leerlauf.Nachstehendes Beispiel beschreibt einige Situationen, in denen das System 10 Tasksenthält (siehe Abbildung 5).Umlaufkette 1:Umlaufkette 2:Umlaufkette 3:Umlaufkette 4:Tasks 0, 1 und 8 sind aktiv.Tasks 0, 3, 4, 5 und 8 sind aktiv.Tasks 1 und 2 sind aktiv.Tasks 2, 4 und 5 sind aktiv.Tasks 0, 1, 8 und 9 sind im Leerlauf.Tasks 6 und 7 sind aktiv.Tasks 0, 1, 2, 3, 4, 5, 8 und 9 sind im Leerlauf.<strong>RAPID</strong>-Überblick 139
MultitaskingTask 0Kette 1Kette 2Task 1Task 2Task 3Task 4Task 5Task 6Kette 3Task 7Kette 4Task 8Task 9Abbildung 5Die Tasks können unterschiedliche Prioritäten haben.31.5 TrustLevelTrustLevel handhabt das Systemverhalten, wenn eine Task des Typs SEMISTATICoder STATIC gestoppt wird oder nicht abgearbeitet werden kann.SystemFehler - Dies ist das Standardverhalten. Alle anderen Tasks des TypsNORMAL (z. B. die MAIN-Task) halten ebenfalls an, und das System wird auf denStatus SYS_FAIL gesetzt. Alle Befehle zum manuellen Bewegen und Programmstartwerden abgewiesen. Nur ein neuer Warmstart kann das System zurücksetzen. DieseEinstellung sollte nur verwendet werden, wenn die Task Sicherheitsüberwachungenausführt.SystemHalt - Alle Tasks des Typs NORMAL werden gestoppt (normalerweise nur dieMain-Task). Das System wird zwangsweise in den Zustand „Motoren aus“ versetzt.Wenn das System sich wieder im Zustand „Motoren ein“ befindet, kann der Robotermanuell bewegt werden, aber ein neuer Versuch, das Programm zu starten, wirdzurückgewiesen. Ein neuer Warmstart setzt das System zurück.140 <strong>RAPID</strong>-Überblick
MultitaskingSystemStop - Alle Tasks des Typs NORMAL werden gestoppt (z. B. die Haupttask),aber sie können erneut gestartet werden. Das manuelle Bewegen des Roboters istebenfalls möglich.KeineSicherh - Nur die aktuelle Task wird gestoppt.Siehe Systemparameter - Steuerung/Task31.6 Gesichtspunkte, die berücksichtigt werden solltenBei der Festlegung von Taskprioritäten ist Folgendes zu beachten:- Verwenden Sie bei Überwachungs-Tasks stets den Interrupt-Mechanismus oderSchleifen mit Verzögerungen. Andernfalls erhält das Programmiergerät niegenügend Zeit, um mit dem Anwender zu interagieren. Und wenn sich dieÜberwachungs-Task im Vordergrund befindet, erlaubt sie nie die Abarbeitungeiner anderen Task im Hintergrund.31.7 ProgrammierschemaStartphase1. Definieren Sie die neue Task in den Systemparametern (Steuerung/Task).Stellen Sie den Typ auf NORMAL und den TrustLevel auf KeineSicherhein.2. Geben Sie ebenfalls in den Systemparametern (Steuerung/Taskmodule) alleModule an, die vor dieser neuen Task geladen werden sollen.3. Erstellen Sie am FlexPendant (in der MAIN-Task) oder offline die Module,die sich in der Task befinden sollen.4. Testen Sie die Module in der MAIN-Task, bis sie die gewünschteFunktionalität bieten. Hinweis: Dies ist nur im Zustand Motoren ein möglich.5. Ändern Sie den Typ der Task wieder in SEMISTATIC (oder STATIC).6. Starten Sie das System neu.WiederholungsphaseIn vielen Fällen genügt eine Wiederholung der Punkte 3 und 5. Nur wenn dasProgramm in der MAIN-Task getestet werden muss und die gleichzeitige Abarbeitungdes <strong>RAPID</strong>-Codes in zwei Tasks den Anwender verwirren könnte, sollten alleangegebenen Punkte ausgeführt werden. Hinweis: Bei Verwendung einer Task desTyps STATIC muss ein Laden des neuen geänderten Moduls und ein Neustarterzwungen werden. Wenn alle nachstehenden Punkte ausgeführt werden, werden dieentsprechenden Aktionen automatisch erledigt.<strong>RAPID</strong>-Überblick 141
Multitasking1. Ändern Sie den Typ der Task in NORMAL, um die Task zu unterdrücken.Eine Task, die NORMAL ist,startet nicht beim Systemneustart. Und wenn die Task nicht NORMAL ist,wirdsie nicht durch die Start/Stopp-Taste am FlexPendant beeinflusst.2. Starten Sie das System neu.3. Laden Sie die Module in die MAIN-Task und testen, ändern und speichern Siedie Module.Hinweis: Speichern Sie die Task nicht, aber speichern Sie jedes Modul einzelngemäß der Spezifizierung in den Systemparametern.4. Ändern Sie den Typ der Task wieder in SEMISTATIC (oder STATIC).5. Starten Sie das System neu.Endphase1. Stellen Sie den TrustLevel auf die gewünschte Ebene ein, z. B. SystemFehler.2. Starten Sie das System neu.142 <strong>RAPID</strong>-Überblick
Koordinatensysteme32 Koordinatensysteme32.1 Der Werkzeugarbeitspunkt (TCP) des RobotersDie Position des Roboters und seine Bewegungen beziehen sich stets auf denWerkzeugarbeitspunkt. Dies ist gewöhnlich ein definierter Punkt am Werkzeug, z. B.die Düsenspitze einer Klebepistole, die Mitte eines Greifers oder die Elektrodenspitzeeiner Punktschweißzange.Mehrere TCPs (Werkzeuge) können definiert werden, aber es kann nur jeweils einesaktiv sein. Wenn eine Position gespeichert wird, ist das die Position des TCP. Dies istauch der Punkt, der sich in einer vorgegebenen Geschwindigkeit entlang einervorgegebenen Bahn bewegt.Wenn der Roboter ein Werkobjekt hält und an einem stationären Werkzeug arbeitet,wird ein stationärer TCP verwendet. Wenn dieses Werkzeug aktiv ist, beziehen sichprogrammierte Bahn und Geschwindigkeit auf das Werkobjekt. (WeitereInformationen finden Sie unter Stationäre TCPs auf Seite 150.)32.2 Koordinatensysteme zur Bestimmung der TCP-PositionDie TCP-Position kann in verschiedenen Koordinatensystemen angegeben werden,um die Programmierung und Anpassung von Programmen zu vereinfachen.Das definierte Koordinatensystem hängt von der vorgesehenen Roboteraktion ab.Wenn kein Koordinatensystem definiert ist, beziehen sich alle Stellungen des Robotersauf das Basis-Koordinatensystem.Basis-KoordinatensystemIn einer einfachen Anwendung kann die Programmierung im Basis-Koordinatensystem erfolgen. Hier entspricht die z-Achse des Koordinatensystems derAchse 1 des Roboters (siehe Abbildung 6).ZYAbbildung 6Das Basis-KoordinatensystemX<strong>RAPID</strong>-Überblick 143
KoordinatensystemeDem Basis-Koordinatensystem liegt der Sockel des Roboters zugrunde:- Der Ursprung befindet sich am Schnittpunkt zwischen Achse 1 und derSockelmontagefläche.- Die xy-Ebene stimmt mit der Sockelmontagefläche überein.- Die x-Achse weist nach vorne.- Die y-Achse weist nach links (aus der Perspektive des Roboters).- Die z-Achse weist nach oben.Welt-KoordinatensystemBei einem stehend montierten Roboter ist die Programmierung im Basis-Koordinatensystem einfach. Wenn der Roboter jedoch hängend montiert ist, ist dieProgrammierung im Basis-Koordinatensystem schwieriger, da die Richtungen derAchsen nicht mit den Grundrichtungen des Arbeitsraums übereinstimmen. In solchenFällen ist es nützlich, ein Welt-Koordinatensystem zu definieren. Das Welt-Koordinatensystem stimmt mit dem Basis-Koordinatensystem überein, falls es nichtspeziell definiert wird.Gelegentlich arbeiten mehrere Roboter im selben Arbeitsraum einer Anlage. In diesemFall ermöglicht ein gemeinsames Welt-Koordinatensystem, dass dieRoboterprogramme miteinander kommunizieren. Ein solches System kann auchvorteilhaft sein, wenn sich die Positionen auf einen festen Punkt in der Werkstattbeziehen. Beachten Sie dazu auch das Beispiel in Abbildung 7.Basis-Koordinatensystem, Roboter 2XZYZYXBasis-Koordinatensystem, Roboter 1zyWelt-KoordinatensystemAbbildung 7Zwei Roboter (einer davon hängend montiert) mit einem gemeinsamen Welt-Koordinatensystem.x144 <strong>RAPID</strong>-Überblick
KoordinatensystemeAnwender-KoordinatensystemEin Roboter kann mit verschiedenen Vorrichtungen oder Arbeitsflächen inverschiedenen Stellungen und Orientierungen arbeiten. Für jede Vorrichtung kann einAnwender-Koordinatensystem definiert werden. Wenn alle Positionen inObjektkoordinaten gespeichert sind, ist bei der Verlagerung einer Vorrichtung keineNeuprogrammierung erforderlich. Durch Bewegen/Drehen des Anwender-Koordinatensystems um denselben Betrag wie die Vorrichtung folgen alleprogrammierten Positionen der Vorrichtung und eine Neuprogrammierung erübrigtsich.Das Anwender-Koordinatensystem wird auf der Basis des Welt-Koordinatensystemsdefiniert (siehe Abbildung 3).ZAnwender-Koordinatensystem 1YXZAnwender-Koordinatensystem 2YXZYzXBasis-KoordinatensystemyAbbildung 8Zwei Anwender-Koordinatensysteme beschreiben die Stellung von zweiverschiedenen Vorrichtungen.Objekt-KoordinatensystemWelt-KoordinatensystemDas Anwender-Koordinatensystem wird benutzt, um verschiedene Koordinatensysteme fürverschiedene Vorrichtungen oder Arbeitsflächen zu erhalten. Eine Vorrichtung kann jedochmehrere Werkobjekte umfassen, die der Roboter verarbeiten oder handhaben muss. Daherhilft es häufig, ein Koordinatensystem für jedes Objekt zu definieren, damit das Programmbei einer Bewegung des Objekts oder für ein neues Objekt mit gleichen Eigenschaftenleichter angepasst werden kann. Ein Koordinatensystem, das auf ein Objekt bezogen wird,ist ein Objekt-Koordinatensystem. Dieses Koordinatensystem eignet sich auch für Offline-Programmierung, da die angegebenen Positionen gewöhnlich direkt aus einer Zeichnungdes Werkobjekts übernommen werden können. Das Objekt-Koordinatensystem lässt sichbeim manuellen Bewegen des Roboters verwenden.<strong>RAPID</strong>-Überblick 145x
KoordinatensystemeDas Objekt-Koordinatensystem wird auf der Basis des Anwender-Koordinatensystemsdefiniert (siehe Abbildung 9).zzzObjekt-Koordinatensystem 1yAnwender-KoordinatensystemyyxxxObjekt-Koordinatensystem 2zyWelt-KoordinatensystemxAbbildung 9Zwei Objekt-Koordinatensysteme beschreiben die Position von zwei verschiedenenWerkobjekten in derselben Vorrichtung.Die programmierten Positionen werden immer relativ zu einem Objekt-Koordinatensystem definiert. Wenn eine Vorrichtung bewegt/gedreht wird, kann diesdurch Bewegen/Drehen des Anwender-Koordinatensystems kompensiert werden.Weder die programmierten Positionen noch die definierten Objekt-Koordinatensysteme müssen geändert werden. Wenn das Werkobjekt bewegt/gedrehtwird, kann dies durch Bewegen/Drehen des Objekt-Koordinatensystems kompensiertwerden.Wenn das Anwender-Koordinatensystem beweglich ist, d. h. koordinierte externeAchsen verwendet werden, bewegt sich das Objekt-Koordinatensystem mit demAnwender-Koordinatensystem. Dadurch ist es möglich, den Roboter in Bezug auf dasObjekt zu bewegen, selbst wenn die Werkbank manipuliert wird.Verschiebungs-KoordinatensystemManchmal muss dieselbe Bahn an verschiedenen Stellen des Objekts durchlaufenwerden. Damit diese Positionen nicht jedesmal neu programmiert werden müssen,kann ein so genanntes Verschiebungs-Koordinatensystem definiert werden. DiesesKoordinatensystem lässt sich auch zusammen mit Suchläufen verwenden, umUnterschiede in den Positionen der einzelnen Teile zu kompensieren.Das Verschiebungs-Koordinatensystem wird auf der Basis des Objekt-Koordinatensystems definiert (siehe Abbildung 10).146 <strong>RAPID</strong>-Überblick
KoordinatensystemeyOriginalpositionyNeue PositionxVerschiebungs-KoordinatensystemAbbildung 10Wenn eine Programmverschiebung aktiv ist, werden alle Positionen verschoben.Koordinierte externe AchsenxObjekt-KoordinatensystemKoordinierung des Anwender-KoordinatensystemsWenn das Werkobjekt auf eine externe mechanische Einheit gelegt wird, die sichbewegt, während der Roboter eine im Objekt-Koordinatensystem definierte Bahnabarbeitet, kann ein bewegliches Anwender-Koordinatensystem definiert werden.Position und Orientierung des Anwender-Koordinatensystems hängt in diesem Fallvon den Achsendrehungen der externen Einheit ab. Die programmierte Bahn und dieGeschwindigkeit beziehen sich so auf das Werkobjekt (siehe Abbildung 11) und esmuss nicht berücksichtigt werden, dass das Objekt von der externen Einheit bewegtwird.Anwender-KoordinatensystemzyxAchse 2 Achse 3Achse 1zyWelt-KoordinatensystemAbbildung 11Ein Anwender-Koordinatensystem, das so definiert ist, dass es den Bewegungeneiner externen, mechanischen 3-Achsen-Einheit folgtx<strong>RAPID</strong>-Überblick 147
KoordinatensystemeKoordinierung des Basis-KoordinatensystemsEin bewegliches Koordinatensystem kann auch für den Sockel des Roboters definiertwerden. Dies ist für eine Anlage interessant, in der der Roboter z. B. auf einerVerfahrachse oder in einem Portal montiert ist. Position und Orientierung des Basis-Koordinatensystems hängen wie für das bewegliche Anwender-Koordinatensystemvon den Drehungen der externen Einheit ab. Die programmierte Bahn und dieGeschwindigkeit beziehen sich auf das Objekt-Koordinatensystem (sieheAbbildung 12) und es muss nicht berücksichtigt werden, dass der Robotersockel vonder externen Einheit bewegt wird. Ein koordiniertes Anwender-Koordinatensystemund ein koordiniertes Basis-Koordinatensystem können gleichzeitig definiert sein.Anwender-KoordinatensystemObjekt-KoordinatensystemWelt-Koordinaten-systemVerfahrachseBasis-KoordinatensystemAbbildung 12Koordinierte Interpolation mit einer Verfahrachse, auf der das Basis-Koordinatensystem des Roboters bewegt wird.Damit beim Bewegen betroffener Einheiten das Anwender- und das Basis-Koordinatensystem berechnet werden kann, muss dem Robotersystem Folgendesbekannt sein:- die Kalibrierungspositionen des Anwender- und des Basis-Koordinatensystems- die Relationen zwischen den Winkeln der externen Achsen und die Translation/Drehung des Anwender- und Basis-Koordinatensystems.Diese Relationen werden in den Systemparametern definiert.148 <strong>RAPID</strong>-Überblick
Koordinatensysteme32.3 Koordinatensysteme zur Bestimmung der WerkzeugrichtungDie Orientierung eines Werkzeugs an einer programmierten Position wird durch dieOrientierung des Werkzeug-Koordinatensystems vorgegeben. Das Werkzeug-Koordinatensystem bezieht sich auf das Handgelenk-Koordinatensystem, das amMontageflansch am Handgelenk des Roboters definiert ist.Handgelenk-KoordinatensystemIn einer einfachen Anwendung kann das Handgelenk-Koordinatensystem verwendetwerden, um die Orientierung des Werkzeugs zu definieren. Hier entspricht die z-Achsedes Koordinatensystems der Achse 6 des Roboters (siehe Abbildung 13).yAbbildung 13Das Handgelenk-KoordinatensystemxzDas Handgelenk-Koordinatensystem kann nicht geändert werden und ist immer mitdem Montageflansch des Roboters in folgender Hinsicht identisch:- Der Ursprung befindet sich im Mittelpunkt des Montageflanschs (auf derMontagefläche).- Die x-Achse weist in die entgegengesetzte Richtung zur Passbohrung desMontageflanschs.- Die z-Achse weist nach außen im rechten Winkel zum Montageflansch.Werkzeug-KoordinatensystemDas am Montageflansch des Roboters befestigte Werkzeug benötigt häufig seineigenes Koordinatensystem zur Definition seines TCP, das den Ursprung desWerkzeug-Koordinatensystems darstellt. Das Werkzeug-Koordinatensystem lässt sichauch für geeignete Bewegungsrichtungen beim manuellen Bewegen des Robotersverwenden.Wenn ein Werkzeug beschädigt oder ausgetauscht wird, müssen Sie einfach nur dasWerkzeug-Koordinatensystem neu definieren. Das Programm muss normalerweisenicht geändert werden.Der TCP (Ursprung) wird als der Punkt am Werkzeug gewählt, der korrekt positioniertsein muss, z. B. die Düsenspitze einer Klebepistole. Die Werkzeug-Koordinatenachsenwerden dem entsprechenden Werkzeug zugeordnet.<strong>RAPID</strong>-Überblick 149
KoordinatensystemexSpitzexSpitzezzAbbildung 14Werkzeug-Koordinatensystem, wie es gewöhnlich für einenLichtbogenschweißbrenner (links) und eine Punktschweißzange (rechts) definiertwird.Das Werkzeug-Koordinatensystem wird basierend auf dem Handgelenk-Koordinatensystem festgelegt (siehe Abbildung 15).yWerkzeug-KoordinatensystemxzAbbildung 15Das Werkzeug-Koordinatensystem wird in Relation zum Handgelenk-Koordinatensystem definiert, hier für einen Greifer.Stationäre TCPsWenn der Roboter ein Werkobjekt hält und an einem stationären Werkzeug arbeitet,wird ein stationärer TCP verwendet. Wenn dieses Werkzeug aktiv ist, beziehen sichprogrammierte Bahn und Geschwindigkeit auf das Werkobjekt, das der Roboter hält.Dies bedeutet eine Umkehr der Koordinatensysteme (siehe Abbildung 16).150 <strong>RAPID</strong>-Überblick
KoordinatensystemeZObjekt-KoordinatensystemXYZYXWerkzeug-KoordinatensystemZYzXBasis-KoordinatensystemyWelt-KoordinatensystemAbbildung 16Bei Verwendung eines stationären TCP beruht das Objekt-Koordinatensystemgewöhnlich auf dem Handgelenk-Koordinatensystem.Im Beispiel in Abbildung 16 wird weder das Anwender-Koordinatensystem noch eineProgrammverschiebung verwendet. Es ist jedoch möglich, diese zu benutzen. Indiesem Fall werden sie einander zugeordnet wie in Abbildung 17 gezeigt.xzyzObjekt-KoordinatensystemzzxyxyAnwender-KoordinatensystemyVerschiebungs-KoordinatensystemxHandgelenk-KoordinatensystemxAbbildung 17Programmverschiebung kann auch zusammen mit stationären TCPs verwendetwerden.<strong>RAPID</strong>-Überblick 151
Koordinatensysteme32.4 Weitere InformationenBeschrieben in:Definition des Welt-Koordinatensystems Technisches <strong>Referenzhandbuch</strong> -SystemparameterDefinition des Benutzer-Koordinatensystems Benutzerhandbuch - IRC5 mitFlexPendant - Kalibrierung,Datentypen - wobjdataDefinition des Objekt-Koordinatensystems Benutzerhandbuch - IRC5 mitFlexPendant - Kalibrierung,Datentypen - wobjdataDefinition des Werkzeug-Koordinatensystems Benutzerhandbuch - IRC5 mitFlexPendant - Kalibrierung,Datentypen - tooldataDefinition des Werkzeugarbeitspunkts Benutzerhandbuch - IRC5 mitFlexPendant - Kalibrierung,Datentypen - tooldataDefinition des Programmverschiebungs-KoordinatensystemsBenutzerhandbuch - IRC5 mitFlexPendant - Kalibrierung, <strong>RAPID</strong>Zusammenfassung -BewegungseinstellungenManuelle Bewegung in verschiedenen KoordinatensystemenBenutzerhandbuch - IRC5 mitFlexPendant - Manuelle Bewegung152 <strong>RAPID</strong>-Überblick
Positionierung während der Abarbeitung von Programmen33 Positionierung während der Abarbeitung vonProgrammen33.1 AllgemeinesWährend der Programmabarbeitung steuern Positionierinstruktionen imRoboterprogramm alle Bewegungen. Die Hauptaufgabe der Positionierinstruktionenbesteht darin, die folgenden Informationen über die Ausführung der Bewegung zuliefern:- den Zielpunkt der Bewegung (als Position des Werkzeugarbeitspunkts,Orientierung des Werkzeugs, Konfiguration des Roboters und Stellung derexternen Achsen);- die Interpolationsmethode, anhand deren der Zielpunkt erreicht wird, z. B.achsenweise, lineare oder kreisförmige Interpolation;- die Geschwindigkeit des Roboters und der externen Achsen;- die Zonendaten (definieren, wie der Roboter und die externen Achsen denZielpunkt passieren sollen);- die Koordinatensysteme (Werkzeug, Anwender und Objekt), die für dieBewegung benutzt werden.Alternativ zur Definition der Geschwindigkeit des Roboters und der externen Achsenkann die Bewegungsdauer programmiert werden. Dies sollte jedoch bei Verwendungder Pendelfunktion unterlassen werden. Stattdessen sollten die Geschwindigkeiten derOrientierung und der externen Achsen begrenzt werden, wenn kleine oder gar keineTCP-Bewegungen ausgeführt werden.In Anwendungen zur Materialhandhabung und Palletierung mit intensiven undhäufigen Bewegungen kann die Überwachung des Antriebssystems ausgelöstwerden und den Roboter stoppen, um die Überhitzung von Antriebsstufen oderMotoren zu verhindern. Wenn dies geschieht, muss die Zyklusdauer etwas erhöhtwerden, indem die programmierte Geschwindigkeit oder Beschleunigungreduziert wird.33.2 Interpolation der Position und Orientierung des WerkzeugsAchsenweise InterpolationWenn die Bahngenauigkeit nicht besonders wichtig ist, kann mit dieser Art derBewegung das Werkzeug rasch von einer Position an eine andere bewegt werden.Achsenweise Interpolation gestattet auch das Bewegen einer Achse von einem Ort aneinen anderen innerhalb des Arbeitsraums in einer einzigen Bewegung.Alle Achsen bewegen sich mit konstanter Achsengeschwindigkeit vom Startpunktzum Zielpunkt (siehe Abbildung 18).<strong>RAPID</strong>-Überblick 153
Positionierung während der Abarbeitung von ProgrammenStartpunktAchsenweiseinterpolierte BahnZielpunktAbbildung 18Achsenweise Interpolation ist häufig die schnellste Methode für die Bewegungzwischen zwei Punkten, während die Roboterachsen der Bahn folgen, die amgenauesten zwischen Startpunkt und Zielpunkt (aus der Perspektive der Achsenwinkel)liegt.Die Geschwindigkeit des Werkzeugarbeitspunkts wird in mm/s (im Objekt-Koordinatensystem) ausgedrückt. Während die Interpolation achsenweise erfolgt,entspricht die Geschwindigkeit nicht genau dem programmierten Wert.Während der Interpolation wird die Geschwindigkeit der beschränkenden Achsebestimmt, d. h. der Achse, die sich am schnellsten in Relation zu ihrerHöchstgeschwindigkeit bewegt, um die Bewegung auszuführen. DieGeschwindigkeiten der übrigen Achsen werden dann so berechnet, dass alle Achsengleichzeitig den Zielpunkt erreichen.Alle Achsen werden koordiniert, um eine von der Geschwindigkeit unabhängige Bahnzu erhalten. Die Beschleunigung wird automatisch für die beste Leistung des Robotersoptimiert.Lineare InterpolationWährend der linearen Interpolation bewegt sich der TCP entlang einer Geradenzwischen Start- und Zielpunkt (siehe Abbildung 19).eStartpunktAbbildung 19Lineare Interpolation ohne Neuorientierung des WerkzeugsUm eine lineare Bahn im Objekt-Koordinatensystem zu erhalten, müssen dieRoboterachsen eine nichtlineare Bahn im Achsenraum verfolgen. Je weniger linear dieKonfiguration des Roboters ist, umso mehr Beschleunigungen und Verzögerungen sinderforderlich, um das Werkzeug geradlinig zu bewegen und die gewünschteWerkzeugorientierung zu erzielen. Wenn die Konfiguration extrem nichtlinear ist (z. B.in der Nähe von Handgelenk- und Arm-Singularitäten), benötigen eine oder mehrereAchsen ein höheres Drehmoment als die Motoren abgeben können. In diesem Fall wirddie Geschwindigkeit aller Achsen automatisch reduziert.154 <strong>RAPID</strong>-Überblick
Positionierung während der Abarbeitung von ProgrammenDie Orientierung des Werkzeugs bleibt während der gesamten Bewegung konstant,sofern keine Neuorientierung programmiert wurde. Bei einer Neuorientierung wird dasWerkzeug in konstanter Geschwindigkeit gedreht.Eine maximale Rotationsgeschwindigkeit (in Grad pro Sekunde) kann beim Drehen desWerkzeugs angegeben werden. Wenn dies ein niedriger Wert ist, erfolgt dieNeuorientierung fließend, ungeachtet der Geschwindigkeit, die für denWerkzeugarbeitspunkt definiert ist. Ist es jedoch ein hoher Wert, wird dieGeschwindigkeit für die Neuorientierung nur durch die Höchstgeschwindigkeit derMotoren begrenzt. Solange kein Motor den Grenzwert des Drehmoments überschreitet,wird die definierte Geschwindigkeit beibehalten. Wenn jedoch einer der Motoren denGrenzwert überschreitet, wird die Geschwindigkeit der vollständigen Bewegung(hinsichtlich Position und Orientierung) reduziert.Alle Achsen werden koordiniert, um eine von der Geschwindigkeit unabhängige Bahnzu erhalten. Die Beschleunigung wird automatisch optimiert.Kreisförmige InterpolationEine Kreisbahn wird mithilfe von drei programmierten Positionen als Kreissegmentdefiniert. Der erste zu programmierende Punkt ist der Startpunkt des Kreissegments.Der nächste Punkt ist ein Hilfspunkt (Kreispunkt), der die Krümmung des Kreisesdefiniert. Der dritte Punkt ist der Endpunkt des Kreisbogens (siehe Abbildung 20).Die drei programmierten Punkte sollten in regelmäßigen Abständen auf demKreisbogen liegen, um diesen so präzise wie möglich zu beschreiben.Die für den Hilfspunkt definierte Orientierung wird verwendet, um zwischen derkurzen und der langen Verwindung für die Orientierung vom Start- zum Zielpunkt zuwählen.Wenn die programmierte Orientierung in Relation zum Kreis am Start- und Zielpunktgleich und die Orientierung am Hilfspunkt in Relation zum Kreis ähnlich ist, bleibt dieOrientierung des Werkzeugs in Relation zur Bahn konstant.KreispunktZielpunktStartpunktAbbildung 20Kreisförmige Interpolation mit einer kurzen Neuorientierung für ein Kreissegmentmit einem Startpunkt, einem Kreispunkt und einem Zielpunkt.Wenn die Orientierung am Hilfspunkt jedoch näher zur um 180° gedrehtenOrientierung programmiert wird, wird die alternative Verwindung gewählt (sieheAbbildung 21).<strong>RAPID</strong>-Überblick 155
Positionierung während der Abarbeitung von ProgrammenKreispunktStartpunktZielpunktAbbildung 21Kreisförmige Interpolation mit langer Verwindung für die Orientierung wird erzielt,indem die Orientierung am Kreispunkt in entgegengesetzter Richtung im Vergleichzum Startpunkt definiert wird.Solange alle Motordrehmomente unter den zulässigen Höchstwerten liegen, bewegtsich das Werkzeug in der programmierten Geschwindigkeit am Kreisbogen entlang.Wenn das Drehmoment eines der Motoren nicht ausreicht, wird die Geschwindigkeitautomatisch an den entsprechenden Teilen des Kreisbogens reduziert.Alle Achsen werden koordiniert, um eine von der Geschwindigkeit unabhängige Bahnzu erhalten. Die Beschleunigung wird automatisch optimiert.SingArea\WristWährend der Abarbeitung in der Nähe eines singulären Punkts kann die lineare oderkreisförmige Interpolation problematisch sein. In diesem Fall ist es am besten, einemodifizierte Interpolation zu verwenden, wobei die Handgelenk-Achsen achsenweiseinterpoliert werden und der TCP eine lineare oder kreisförmige Bahn verfolgt. DieOrientierung des Werkzeugs unterscheidet sich jedoch etwas von der programmiertenOrientierung. Die resultierende Orientierung am programmierten Punkt kann sich auchaufgrund von zwei Singularitäten (siehe unten) von der programmierten Orientierungunterscheiden.z1a2BewegungTCPABBWCPDie erste Singularität tritt auf, wenn sich der TCP direkt vor Achse 2 (a2 in obigerAbbildung) befindet. Der TCP kann nicht auf die andere Seite von Achse 2 passieren,statt dessen werden Achse 2 und 3 etwas mehr gebeugt, um den TCP auf derselbenSeite zu halten. Die Orientierung der Bewegung wird dann von der programmiertenOrientierung um denselben Betrag weggedreht.156 <strong>RAPID</strong>-Überblick
Positionierung während der Abarbeitung von ProgrammenDie zweite Singularität tritt auf, wenn der TCP in der Nähe der z-Achse von Achse 1passiert (z1 in obiger Abbildung). Achse 1 dreht sich in diesem Fall in vollerGeschwindigkeit und die Werkzeugorientierung folgt auf dieselbe Weise. DieRichtung der Drehung hängt davon ab, auf welche Seite sich der TCP bewegt. Es wirdempfohlen, in der Nähe der z-Achse zur achsenweisen Interpolation zu wechseln(MoveJ). Beachten Sie, dass der TCP die Singularität bestimmt, nicht der WCP wie beiVerwendung von SingArea\Off.Im Fall SingArea\Wrist ist die Orientierung am Kreishilfspunkt dieselbe wieprogrammiert. Das Werkzeug hat jedoch keine konstante Richtung in Relation zurKreisebene wie bei normaler kreisförmiger Interpolation. Wenn die Kreisbahn an einerSingularität vorbeiführt, muss die Orientierung der programmierten Positionengelegentlich geändert werden, um große Handgelenkbewegungen zu vermeiden. Diesekönnen auftreten, wenn eine vollständige Handgelenk-Neukonfiguration beiAbarbeitung des Kreises generiert wird (Achsen 4 und 6 werden um je 180° bewegt).33.3 Interpolation der ZonenbahnenDer Zielpunkt wird als Stopppunkt definiert, um eine Bewegung von Punkt zu Punktzu erzielen. Dies bedeutet, dass der Roboter und jegliche externe Achsen stoppen underst dann mit der Positionierung fortgefahren werden kann, wenn die Geschwindigkeitaller Achsen Null beträgt und sich die Achsen in der Nähe ihres Ziels befinden.Fly-By-Punkte werden benutzt, um fortlaufende Bewegungen an programmiertenPositionen vorbei auszuführen. So können Positionen in hoher Geschwindigkeit ohneüberflüssiges Abbremsen passiert werden. Ein Fly-By-Punkt generiert an derprogrammierten Position vorbei eine Zonenbahn (parabolische Bahn), d. h. dieprogrammierte Position wird nie erreicht. Beginn und Ende dieser Zonenbahn werdendurch eine Zone um die programmierte Position definiert (siehe Abbildung 22).Die Zone für die TCP-BahnProgrammiertePositionZonenbahnAbbildung 22Ein Fly-By-Punkt generiert eine Zonenbahn, um die programmierte Position zupassieren.Alle Achsen werden koordiniert, um eine von der Geschwindigkeit unabhängige Bahnzu erhalten. Die Beschleunigung wird automatisch optimiert.<strong>RAPID</strong>-Überblick 157
Positionierung während der Abarbeitung von ProgrammenAchsenweise Interpolation in ZonenbahnenDie Größe der Zonenbahnen für die TCP-Bewegung wird in mm ausgedrückt (sieheAbbildung 23). Da die Interpolation achsenweise erfolgt, muss die Größe der Zonen(in mm) als Achsenwinkel (in Radiant) neu berechnet werden. Diese Berechnungenthält einen Fehlerfaktor (normalerweise maximal 10 %), d. h. die echte Zone weichtetwas von der programmierten Zone ab.Wenn unterschiedliche Geschwindigkeiten vor oder nach der Position programmiertwurden, erfolgt der Übergang von einer Geschwindigkeit zur nächsten fließend in derZonenbahn, ohne die tatsächliche Bahn zu beeinflussen.ProgrammierterFly-By-PunktZoneStartpunktZonenbahnAbbildung 23Während der achsenweisen Interpolation wird eine Zonenbahn generiert, um einenFly-By-Punkt zu passieren.Lineare Interpolation einer Position in ZonenbahnenDie Größe der Zonenbahnen für die TCP-Bewegung wird in mm ausgedrückt(siehe Abbildung 24).ProgrammierteZonenpositionZoneStartpunktZonenbahnAbbildung 24Während der linearen Interpolation wird eine Zonenbahn generiert, um einen Fly-By-Punkt zu passieren.158 <strong>RAPID</strong>-Überblick
Positionierung während der Abarbeitung von ProgrammenWenn unterschiedliche Geschwindigkeiten vor oder nach der Zonenpositionprogrammiert wurden, erfolgt der Übergang in der Zonenbahn fließend, ohne dietatsächliche Bahn zu beeinflussen.Wenn das Werkzeug in der Zonenbahn einen Prozess ausführen soll (z. B.Lichtbogenschweißen, Kleben oder Wasserstrahlschneiden), kann die Größe der Zonefür die gewünschte Bahn eingestellt werden. Wenn die Form einer parabolischenZonenbahn nicht der Objektgeometrie entspricht, können die programmiertenPositionen näher aneinander platziert werden. Damit ist eine Annäherung an diegewünschte Bahn durch zwei oder mehrere kleine parabolische Bahnen möglich.Lineare Interpolation der Orientierung in ZonenbahnenZonen können wie für Werkzeugpositionen auch für Werkzeugorientierungen definiertwerden. Die Orientierungszone wird gewöhnlich größer eingestellt als diePositionierzone. In diesem Fall beginnt die Neuorientierung mit der Interpolation zurOrientierung der nächsten Position, bevor die Zonenbahn beginnt. DieNeuorientierung erfolgt dann fließender und es ist eventuell nicht erforderlich, dieGeschwindigkeit dafür zu reduzieren.Das Werkzeug wird so neu orientiert, dass die Orientierung am Ende der Zone diegleiche wie die eines programmierten Stopppunkts ist (siehe Abbildung25a-c).Abbildung25aDrei Positionen mit verschiedenen Werkzeugorientierungen werden wie obenprogrammiert.Abbildung25bWenn alle Positionen Stopppunkte sind, sieht die Programmabarbeitung wiedargestellt aus.Zonengröße der OperationAbbildung25cWenn die mittlere Position ein Fly-By-Punkt ist, sieht die Programmabarbeitungwie dargestellt aus.Die Orientierungszone für die Werkzeugbewegung wird gewöhnlich in mmausgedrückt. Auf diese Weise können Sie direkt bestimmen, wo auf der Bahn dieOrientierungszone beginnt und endet. Wenn das Werkzeug nicht bewegt wird, wird dieGröße der Zone in Winkelgrad ausgedrückt.Wenn vor und nach dem Fly-By-Punkt verschiedeneUmorientierungsgeschwindigkeiten programmiert wurden und damit die Bewegungbeschränkt wird, erfolgt der Übergang von einer Geschwindigkeit zur nächsten in derZonenbahn fließend.<strong>RAPID</strong>-Überblick 159
Positionierung während der Abarbeitung von ProgrammenInterpolation von externen Achsen in ZonenbahnenZonen können auch für externe Achsen wie für die Orientierung definiert werden.Wenn die externe Achsenzone größer als die TCP-Zone eingestellt wird, startet dieInterpolation der externen Achsen zum Ziel der nächsten programmierten Position,bevor die TCP-Zonenbahn beginnt. Dies kann so für fließendere externeAchsenbewegungen verwendet werden, wie die Orientierungszone für fließendereHandgelenkbewegungen benutzt wird.Zonenbahnen beim Wechseln der InterpolationsmethodeZonenbahnen werden auch generiert, wenn die Interpolationsmethode gewechseltwird. Die Interpolationsmethode in der aktuellen Zonenbahn wird dann so gewählt,dass der Übergang von einer Methode zur nächsten so fließend wie möglich erfolgt.Wenn die Zonen für die Orientierung und Position nicht dieselbe Größe aufweisen,können in der Zonenbahn mehrere Interpolationsmethoden benutzt werden (sieheAbbildung 26).p1Lineare InterpolationAchsenweiseInterpolationSing Area\Wrist-Interpolationp4p2p3Sing Area\Wrist-InterpolationPositionszoneOrientierungszoneAbbildung 26Interpolation beim Wechsel der Interpolationsmethode. Zwischen p1 und p2 wurdelineare Interpolation programmiert, zwischen p2 und p3 achsenweise Interpolationund zwischen p3 und p4 Sing Area\Wrist-Interpolation.Wenn die Interpolation von einer normalen TCP-Bewegung auf eine Umorientierungohne eine TCP-Bewegung oder umgekehrt wechselt, wird keine Verschleifzonegeneriert. Dies ist auch der Fall, wenn die Interpolation zu oder von einer externenachsenweisen Bewegung ohne TCP-Bewegung wechselt.Interpolation beim Wechsel des KoordinatensystemsWenn das Koordinatensystem in einer Zonenbahn gewechselt wird, z. B. ein neuer TCPoder ein neues Werkobjekt, wird achsenweise Interpolation der Zonenbahn verwendet.Dies gilt auch beim Wechsel von einer koordinierten Operation in eine nichtkoordinierte Operation und umgekehrt.160 <strong>RAPID</strong>-Überblick
Positionierung während der Abarbeitung von ProgrammenZonenbahnen mit überlagernden ZonenWenn programmierte Positionen nahe beieinander liegen, ist es nicht ungewöhnlich,dass sich die programmierten Zonen überlagern. Um eine gut definierte Bahn undimmer eine optimale Geschwindigkeit zu erzielen, reduziert der Roboter die Größe derZone auf den halben Abstand von einer überlagernden programmierten Position zuranderen (siehe Abbildung 27). Derselbe Zonenradius wird stets beim Hineinfahren inbzw. Herausfahren aus einer programmierten Position verwendet, um symmetrischeZonenbahnen zu erzielen.GenerierteBahnp4p2p1ProgrammiertePositionierzonenp3Verschleifzonen wievom Roboter berechnetAbbildung 27Interpolation mit überlagernden Positionierzonen. Die Zonen um p2 und p3 sindgrößer als der halbe Abstand zwischen p2 und p3. Daher reduziert der Roboter dieGröße der Zonen so, dass sie gleich dem halben Abstand zwischen p2 und p3 sind,wodurch sich innerhalb der Zonen symmetrische Bahnen ergeben.Sowohl Positionier- als auch Orientierungszonen können sich überlagern. Sobald einedieser Verschleifzonen die andere überlagert, wird diese Zone verkleinert (sieheAbbildung 28).ProgrammierteOrientierungszoneGenerierteOrientierungszonep2Generierte Bahnp4p1Positionierzonenp3OrientierungszoneAbbildung 28Interpolation mit überlagernden Orientierungszonen. Die Orientierungszone beip2 ist größer als der halbe Abstand zwischen p2 und p3 und wird daher auf die Hälftedieses Abstands verringert. Die Positionierzonen überlagern sich nicht und werdendaher nicht verringert. Die Orientierungszone bei p3 wird ebenfalls nicht verkleinert.<strong>RAPID</strong>-Überblick 161
Positionierung während der Abarbeitung von ProgrammenPlanung der Zeit für Fly-By-PunkteGelegentlich können programmierte Fly-By-Punkte einen Stopppunkt auslösen, wenndie nächste Bewegung nicht rechtzeitig berechnet wird. Dies kann in folgenden Fällengeschehen:- Eine Reihe logischer Instruktionen mit langen Programmabarbeitungszeitenwird zwischen kurzen Bewegungen programmiert.- Die Punkte liegen sehr nahe beieinander und es sind hohe Geschwindigkeiteneingestellt.Wenn Stopppunkte ein Problem darstellen, verwenden Sie simultaneProgrammabarbeitung.33.4 Unabhängige AchsenEine unabhängige Achse bewegt sich unabhängig von anderen Achsen imRobotersystem. Der Modus einer Achse kann in „unabhängig“ und später wieder in„normal“ geändert werden.Spezielle Instruktionen handhaben die unabhängigen Achsen. Vier verschiedeneBewegungsinstruktionen geben die Achsenbewegung an. Beispielsweise startet dieInstruktion IndCMove eine kontinuierliche Bewegung der Achse. Die Achse bewegtsich dann in konstanter Geschwindigkeit (unabhängig von den Aktionen des Roboters),bis eine neue Unabhängig-Instruktion abgearbeitet wird.Für die Rückkehr in den Normalmodus wird die Reset-Instruktion IndReset verwendet.Die Reset-Instruktion kann auch eine neue Referenz für das Messsystem der Achsesetzen, eine Art neue Achsensynchronisierung. Sobald die Achse wieder imNormalmodus ist, kann sie als normale Achse betrieben werden.ProgrammabarbeitungEine Achse wechselt sofort beim Abarbeiten der Instruktion Ind_Move in denunabhängigen Modus. Dies geschieht, selbst wenn sich die Achse zu diesem Zeitpunktbewegt, z. B. wenn ein vorheriger Punkt als Fly-By-Punkt programmiert wurde oderwenn simultane Programmabarbeitung benutzt wird.Wenn erneut die Instruktion Ind_Move abgearbeitet wird, bevor die vorherigeabgeschlossen wurde, überschreibt die neue Instruktion sofort die alte.Wird die Abarbeitung eines Programms gestoppt, während sich eine unabhängigeAchse bewegt, stoppt auch diese Achse. Beim Neustart des Programms startet dieunabhängige Achse automatisch. Zwischen unabhängigen Achsen und anderen Achsenim Normalmodus findet keine aktive Koordinierung statt.Wenn sich eine Achse bei einem Stromausfall im unabhängigen Modus befindet, kanndas Programm nicht neu gestartet werden. Eine Fehlermeldung wird angezeigt und dasProgramm muss von vorne begonnen werden.Beachten Sie, dass eine mechanische Einheit nicht deaktiviert werden kann, wenn sicheine ihrer Achsen im unabhängigen Modus befindet.162 <strong>RAPID</strong>-Überblick
Positionierung während der Abarbeitung von ProgrammenSchrittweise AbarbeitungWährend der schrittweisen Abarbeitung wird eine unabhängige Achse nur dannbewegt, wenn eine andere Instruktion abgearbeitet wird. Die Bewegung der Achseerfolgt auch schrittweise mit der Abarbeitung anderer Instruktionen, wie inAbbildung 29 beschrieben.IndAMove WaitTime 10Geschwindigkeitder unabhängigenAchse10 sGeschwindigkeit der normalen AchsenMoveLUnabhängige Achseerreicht EndpositionMoveLAbbildung 29Schrittweise Abarbeitung unabhängiger Achsen.BewegenAchsen im unabhängigen Modus können nicht manuell bewegt werden. Bei einemVersuch, die Achse manuell zu bewegen, wird ein Fehler gemeldet. Mit der InstruktionIndReset oder durch Setzen des Programmzeigers auf „haupt“ können Sie denunabhängigen Modus verlassen.ArbeitsbereichDer physische Arbeitsbereich entspricht der vollständigen Bewegung der Achse.Der logische Arbeitsbereich ist der Bereich, den <strong>RAPID</strong>-Instruktionen verwendenoder den Sie im Fenster „Bewegen“ ablesen können.Nach der Synchronisierung (aktualisierter Umdrehungszähler) stimmen der physischeund der logische Arbeitsbereich überein. Mit der Instruktion IndReset können Sie denlogischen Arbeitsbereich bewegen, wie in Abbildung 30 beschrieben.<strong>RAPID</strong>-Überblick 163
Positionierung während der Abarbeitung von ProgrammenLogischer Arbeitsbereichnach Synchronisierung00Logischer Arbeitsbereichnach IndReset0PhysischerArbeitsbereichLogischer ArbeitsbereichAbbildung 30Mit der Instruktion IndReset können Sie den logischen Arbeitsbereich verschieben.Die Auflösung der Positionen verringert sich, je weiter sie von der logischenNullposition entfernt sind. Niedrige Auflösung mit einer starr eingestellten Steuerungkann zu inakzeptablen Drehmomenten, Rauschen und instabiler Steuerung führen.Prüfen Sie bei der Installation die Einstellung der Steuerung und die Bewegungen ander Grenze des Arbeitsbereichs. Prüfen Sie außerdem, ob die Positionsauflösung unddas Bahnverhalten akzeptabel sind.Geschwindigkeit und BeschleunigungIm Einrichtbetrieb mit reduzierter Geschwindigkeit wird die Geschwindigkeit einerunabhängigen Achse auf das gleiche Maß reduziert, als wäre sie abhängig. BeachtenSie, dass die Funktion IndSpeed\InSpeed nicht TRUE ist, wenn dieAchsengeschwindigkeit reduziert ist.Die Instruktion VelSet und prozentuale Geschwindigkeitskorrektur imProduktionsfenster sind für unabhängige Bewegungen aktiv. Beachten Sie, dassKorrekturen über das Produktionsfenster den Wert TRUE aus der FunktionIndSpeed\InSpeed blockieren.Im unabhängigen Modus wird der niedrigste Wert für Beschleunigung undVerzögerung, der in der Konfigurationsdatei angegeben ist, sowohl für dieBeschleunigung als auch für die Verzögerung verwendet. Dieser Wert kann durch denWert der Rampe in der Instruktion reduziert werden (1 – 100 %). Die Instruktion AccSetbeeinflusst keine unabhängigen Achsen.RoboterachsenNur Roboterachse 6 kann als unabhängige Achse verwendet werden. Gewöhnlich wirdnur die Instruktion IndReset für diese Achse benutzt. Jedoch kann die InstruktionIndReset auch für Achse 4 der Modelle IRB 2400 und 4400 benutzt werden. Bei derVerwendung der Instruktion IndReset für Roboterachse 4 darf Achse 6 nichtunabhängig sein.Wenn Achse 6 als unabhängige Achse benutzt wird, können Singularitätsproblemeauftreten, da die normale, aus sechs Achsen bestehende Koordinatentransformationimmer noch verwendet wird. Arbeiten Sie bei diesem Problem dasselbe Programm mitAchse 6 im Normalmodus ab. Modifizieren Sie die Punkte oder verwenden Sie dieInstruktionen SingArea\Wrist oder MoveJ.164 <strong>RAPID</strong>-Überblick
Positionierung während der Abarbeitung von ProgrammenAchse 6 ist auch intern aktiv für die Berechnung der Bahn. Als Resultat hiervon kanneine interne Bewegung von Achse 6 die Geschwindigkeit anderer Achsen im Systemverringern.Der unabhängige Arbeitsbereich für Achse 6 wird mit Achse 4 und 5 in Grundstellungdefiniert. Wenn sich Achse 4 oder 5 nicht in der Grundstellung befindet, wird derArbeitsbereich für Achse 6 bedingt durch die Getriebekopplung verschoben. DasAuslesen der Position vom FlexPendant wird mit den Positionen von Achse 4 und 5über die Getriebekopplung kompensiert.33.5 SoftservoEinige Anwendungen erfordern einen Servomechanismus, der wie eine mechanischeFeder wirkt. Dies bedeutet, dass die vom Roboter auf das Werkobjekt ausgeübte Kraftals Funktion des Abstands zwischen der programmierten Position (hinter demWerkobjekt) und der Kontaktposition (Roboterwerkzeug – Werkobjekt) zunimmt.Das Verhältnis zwischen Positionsabweichung und Kraft wird durch den ParameterSoftness (Weichheit) definiert. Je größer dieser Parameter, umso größer ist dieerforderliche Positionsabweichung, die zur Erzeugung derselben Kraft erforderlich ist.Der Weichheitsparameter wird im Programm gesetzt und seine Werte können anbeliebiger Stelle im Programm geändert werden. Verschiedene Weichheitswertekönnen für verschiedene Achsen gesetzt werden. Auch ist es möglich, Achsen mitnormalem Servomechanismus zusammen mit Achsen mit Softservo zu verwenden.Das Aktivieren und Deaktivieren des Softservomechanismus sowie das Ändern derWeichheitswerte kann erfolgen, während sich der Roboter bewegt. In diesem Fallerfolgt eine Abstimmung zwischen den verschiedenen Servomechanismen undverschiedenen Weichheitswerten, um fließende Übergänge zu erzielen. DieAbstimmungsdauer kann im Programm durch den Parameter „ramp“ (Rampe) gesetztwerden. Mitramp = 1 erfolgen die Übergänge in 0,5 Sekunden. Im Allgemeinen beträgt dieÜbergangsdauer ramp x 0,5 in Sekunden.Beachten Sie, dass der Softservomechanismus nicht aktiviert werden sollte, solangeeine Kraft zwischen dem Roboter und dem Werkobjekt wirkt.Bei hohen Weichheitswerten besteht das Risiko, dass die Servopositionsabweichungenso groß sind, dass sich die Achsen außerhalb des Arbeitsbereichs des Robotersbewegen.33.6 Stopp und NeustartEine Bewegung kann auf drei Arten gestoppt werden:1. Bei einem normalen Stopp hält der Roboter auf der Bahn an, was einen Neustartvereinfacht.2. Bei einem abrupten Stopp hält der Roboter schneller als beim normalen Stopp an,aber die Verzögerungsbahn folgt nicht der programmierten Bahn. Diese Stoppmethodewird beispielsweise für einen Suchlauf verwendet, bei dem die Bewegung so schnellwie möglich angehalten werden muss.<strong>RAPID</strong>-Überblick 165
Positionierung während der Abarbeitung von Programmen3. Bei einem schnellen Stopp werden die mechanischen Bremsen verwendet, um ausSicherheitsgründen einen möglichst kurzen Bremsweg zu erzielen. Dabei ist dieBahnabweichung gewöhnlich größer als bei einem abrupten Stopp.Nach einem (beliebigen) Stopp ist ein Neustart stets auf der unterbrochenen Bahnmöglich. Wenn der Roboter außerhalb der programmierten Bahn gestoppt wurde,beginnt der Neustart mit einer Rückkehr an die Position auf der Bahn, an der derRoboter hätte anhalten sollen.Ein Neustart nach einem Stromausfall ist gleich mit einem Neustart nach einemschnellen Stopp. Beachten Sie dabei, dass der Roboter immer vor dem Neustart desunterbrochenen Programmablaufs zur Bahn zurückkehrt, selbst dann, wenn derStromausfall während der Ausführung einer logischen Instruktion eingetreten ist. BeimNeustart werden alle Zeiten von Anfang an gezählt, z. B. die rechtzeitigePositionierung oder eine Unterbrechung in der Instruktion WaitTime.33.7 Weitere InformationenBeschrieben in:Definition der GeschwindigkeitDatentypen - speeddataDefinition der Zonen (Zonenbahnen) Datentypen - zonedataInstruktion für achsenweise Interpolation Instruktionen - MoveJInstruktion für lineare Interpolation Instruktionen - MoveLInstruktion für kreisförmige Interpolation Instruktionen - MoveCInstruktion für modifizierte Interpolation Instruktionen - SingAreaSingularität Bewegung und E/A-Prinzipien -SingularitätSimultane Programmabarbeitung Bewegung und E/A-Prinzipien -Synchronisierung mit logischenInstruktionenCPU-Optimierung Technisches <strong>Referenzhandbuch</strong> -Systemparameter166 <strong>RAPID</strong>-Überblick
Synchronisierung mit logischen Instruktionen34 Synchronisierung mit logischen InstruktionenGewöhnlich werden Instruktionen im Programm sequenziell abgearbeitet. Jedochkönnen logische Instruktionen auch an bestimmten Positionen oder während einerlaufenden Bewegung abgearbeitet werden.Eine logische Instruktion ist eine beliebige Instruktion, die keine Roboterbewegungoder externe Achsenbewegung erzeugt, z. B. eine E/A-Instruktion.34.1 Sequenzielle Programmabarbeitung an StopppunktenFalls eine Positionierinstruktion als Stopppunkt programmiert wurde, wird dienachfolgende Instruktion erst ausgeführt, wenn der Roboter und die externen Achsenim Stillstand sind, d. h. wenn die programmierte Position erreicht wurde (sieheAbbildung 31).p1MoveL p1, v1000, fine, tool1;SetDO do1, on;MoveL p2, v1000, z30, tool1;Abarbeitung vonSetDOAbbildung 31Eine logische Instruktion nach einem Stopppunkt wird erst ausgeführt, wenn dieZielposition erreicht wurde.34.2 Sequenzielle Programmabarbeitung an Fly-By-PunktenWenn eine Positionierinstruktion als Fly-By-Punkt programmiert wurde, werden dienachfolgenden logischen Instruktionen einige Zeit vor Erreichen der größten Zoneausgeführt (für Position, Orientierung oder externe Achsen). Sehen Sie dazuAbbildung 32 und Abbildung 33. Diese Instruktionen werden nacheinanderabgearbeitet.Abarbeitung vonSetDODTp1MoveL p1, v1000, z30, tool1;SetDO do1, on;MoveL p2, v1000, z30, tool1;PositionszoneOrientierungszoneAbbildung 32Eine logische Instruktion nach einem Fly-By-Punkt wird vor Erreichen der größtenZone abgearbeitet.<strong>RAPID</strong>-Überblick 167
Synchronisierung mit logischen InstruktionenAbarbeitungvon SetDOPositionszoneDTp1p2MoveL p1, v1000, z30, tool1;MoveL p2, v1000, z30, tool1;SetDO do1, on;MoveL p3, v1000, z30, tool1;OrientierungszoneAbbildung 33Eine logische Instruktion nach einem Fly-By-Punkt wird vor Erreichen der größten Zoneabgearbeitet.Die Dauer der Abarbeitung (DT) ist aus folgenden Zeitkomponentenzusammengesetzt:- Der Zeitdauer, die der Roboter zur Planung der nächsten Bewegung benötigt:ca. 0,1 Sekunden.- Der Roboterverzögerung (Folgeverzögerung) in Sekunden: 0 bis 1,0 Sekunden,abhängig von der Geschwindigkeit und der tatsächlichen Verzögerungsleistungdes Roboters.34.3 Simultane Abarbeitung von ProgrammenSimultane Abarbeitung von Programmen kann mithilfe des Arguments \Conc in derPositionierinstruktion programmiert werden. Dieses Argument wird für Folgendesverwendet:- Abarbeitung von einer oder mehreren logischen Instruktionen gleichzeitig mit derRoboterbewegung, um die Zyklusdauer zu verringern (z. B. bei der Kommunikationüber serielle Kanäle).168 <strong>RAPID</strong>-Überblick
Synchronisierung mit logischen InstruktionenGleichzeitig mit einer Positionierinstruktion mit dem Argument \Conc werden auchdie folgenden logischen Instruktionen nacheinander abgearbeitet:- Wenn sich der Roboter nicht bewegt oder die vorherige Positionierinstruktion miteinem Stopppunkt endet, werden die logischen Instruktionen abgearbeitet, sobalddie aktuelle Positionierinstruktion beginnt (gleichzeitig mit der Bewegung).(Beachten Sie hierzu auch Abbildung 34.)- Wenn die vorherige Positionierinstruktion mit einem Fly-By-Punkt endet,werden die logischen Instruktionen in einer vorgegebenen Zeit (DT) vorErreichen der größten Zone abgearbeitet (für Position, Orientierung oderexterne Achsen). (Beachten Sie hierzu auch Abbildung 35.)Abarbeitung von SetDOp1p2MoveL p1, v1000, fine, tool1;MoveL \Conc, p2, v1000, z30, tool1;SetDO do1, on;MoveL p3, v1000, z30, tool1;Abbildung 34Bei der simultanen Programmabarbeitung nach einem Stopppunkt werden einePositionierinstruktion und darauffolgende logische Instruktionen gleichzeitiggestartet.<strong>RAPID</strong>-Überblick 169
Synchronisierung mit logischen InstruktionenAbarbeitungvon SetDODTGrößte Zonep1p2MoveL p1, v1000, z30, tool1;MoveL \Conc, p2, v1000, z30, tool1;SetDO do1, on;MoveL p3, v1000, z30, tool1;Abbildung 35Bei simultaner Programmabarbeitung nach einem Fly-By-Punkt beginnt dieAbarbeitung der logischen Instruktionen vor den Positionierinstruktionen mit demArgument \Conc.Instruktionen, die Bewegungen wie ConfL und SingArea indirekt beeinflussen, werdenauf die gleiche Weise wie andere logische Instruktionen abgearbeitet. Sie beeinflussenjedoch nicht die Bewegungen, die durch vorherige Positionierinstruktionen festgelegtwurden.Wenn mehrere Positionierinstruktionen mit dem Argument \Conc und mehrerelogische Instruktionen in einer langen Folge gemischt sind, gilt Folgendes:- Logische Instruktionen werden unmittelbar in der programmierten Reihenfolgeabgearbeitet. Dies erfolgt gleichzeitig mit der Bewegung (siehe Abbildung 36), d. h. dielogischen Instruktionen werden auf der Bahn in einer früheren Phaseabgearbeitet, als sie programmiert wurden.170 <strong>RAPID</strong>-Überblick
Synchronisierung mit logischen InstruktionenAbarbeitung vonSetDO und SetAODTGrößte Zonep1p2MoveL p1, v1000, z30, tool1;MoveL \Conc, p2, v1000, z30, tool1;SetDO do1, on;MoveL \Conc, p3, v1000, z30, tool1;SetAO ao2, 5;Abbildung 36Wenn mehrere Positionierinstruktionen mit dem Argument \Conc nacheinanderprogrammiert wurden, werden alle verbundenen logischen Instruktionen gleichzeitigmit dem Ausführen der ersten Position abgearbeitet.Bei der simultanen Programmabarbeitung werden die folgenden Instruktionenprogrammiert, um die Sequenz abzuschließen und anschließendPositionierinstruktionen und logische Instruktionen neu zu synchronisieren:- eine Positionierinstruktion auf einen Stopppunkt ohne das Argument \Conc,- die Instruktion WaitTime oder WaitUntil mit dem Argument \Inpos.34.4 Synchronisierung der BahnUm Prozesseinrichtungen (für Anwendungen wie Kleben, Lackieren undLichtbogenschweißen) mit den Bewegungen des Roboters zu synchronisieren, könnenverschiedene Arten von Bahnsynchronisierungssignalen erzeugt werden.Mit einem so genannten Positionierungsereignis wird ein Triggersignal erzeugt, sobaldder Roboter eine vordefinierte Position auf der Bahn passiert. Bei einem Zeitereigniswird ein Signal in einer vordefinierten Zeitdauer vor dem Stoppen des Roboters aneiner Stoppposition erzeugt. Darüber hinaus steuert das System auch Pendelereignisse,die Impulse in vordefinierten Phasenwinkeln einer Pendelbewegung generieren.<strong>RAPID</strong>-Überblick 171
Synchronisierung mit logischen InstruktionenAlle mit Positionen synchronisierten Signale können sowohl vor (vorauseilend) alsauch nach (verzögert) dem Zeitpunkt erzeugt werden, an dem der Roboter dievordefinierte Position passiert. Die Position wird durch eine programmierte Positiondefiniert und kann als Strecke vor der programmierten Position eingestellt werden.Die typische Wiederholgenauigkeit für einen Satz digitaler Ausgänge auf der Bahnbeträgt +/-2ms.Bei einem Stromausfall und Neustart in einer Trigg-Instruktion werden alleTriggerereignisse noch einmal auf der verbleibenden Bewegungsbahn für die Trigg-Instruktion generiert.34.5 Weitere InformationenPositionierinstruktionenDefinition der ZonengrößeBeschrieben in:<strong>RAPID</strong> Zusammenfassung - BewegungDatentypen - zonedata172 <strong>RAPID</strong>-Überblick
Roboterkonfiguration35 Roboterkonfiguration35.1 Verschiedene Arten der RoboterkonfigurationGewöhnlich ist es möglich, dieselbe Stellung und Orientierung des Roboterwerkzeugs aufverschiedene Weise mithilfe verschiedener Zusammenstellungen von Achsenwinkeln zuerzielen. Wir nennen diese Möglichkeiten verschiedene Roboterkonfigurationen.Wenn sich beispielsweise eine Position etwa in der Mitte einer Arbeitsstation befindet,können einige Roboter von oben und unten an diese Position gelangen, wenn sieverschiedene Stellungen von Achse 1 verwenden (siehe Abbildung 37).Abbildung 37Zwei verschiedene Armkonfigurationen erreichen dieselbe Position undOrientierung. In der Konfiguration rechts wurde der Arm nach hinten gedreht.Achse 1 wird um 180 Grad gedreht.Einige Roboter können auch diese Position von oben und unten bei gleicher Stellung vonAchse 1 erreichen. Dies ist für Robotertypen mit erweitertem Arbeitsbereich der Achse 3möglich (siehe Abbildung 38).<strong>RAPID</strong>-Überblick 173
RoboterkonfigurationABBABBAbbildung 38IRB140 mit zwei verschiedenen Armkonfigurationen zum Erreichen derselbenPosition und Orientierung. Der Winkel von Achse 1 ist identisch für beideKonfigurationen. Die Konfiguration rechts wird erzielt, indem der untere Arm nachvorne und der obere Arm nach hinten gedreht wird.Dieselbe Wirkung wird erzielt, wenn der vordere Teil des oberen Roboterarms (Achse 4)umgedreht und Achsen 5 und 6 in die gewünschte Stellung und Orientierung gedreht werden(siehe Abbildung 39).Achse 6Achse 4Achse 5Abbildung 39Zwei verschiedene Handgelenkkonfigurationen erreichen dieselbe Position undOrientierung. In der Konfiguration, in der der vordere Teil des Oberarms nach oben weist (unten),wurden die Achsen 4, 5 und 6 um 180 Grad gedreht, um die Konfiguration zuerreichen, in der der vordere Teil des Oberarms nach unten weist (oben).174 <strong>RAPID</strong>-Überblick
Roboterkonfiguration35.2 Festlegen der RoboterkonfigurationBeim Programmieren einer Roboterstellung wird auch eine Roboterkonfigurationfestgelegt.Wie die Roboterkonfiguration festgelegt wird, ist je nach Robotertyp unterschiedlich.(Eine vollständige Beschreibung finden Sie unter Datentypen und Systemdaten -confdata.) Für die meisten Robotertypen beinhaltet dies jedoch die Definition derentsprechenden Quadranten für Achse 1, 4 und 6.102 3Abbildung 40Eine Vierteldrehung für einen positiven Achsenwinkel:angleint joint – -------------© § S e 2 ¹·-3-4-2 -1angleAbbildung 41Eine Vierteldrehung für einen negativen Achsenwinkel: int joint – ------------- – 1 .© § S e 2 ¹·35.3 KonfigurationsprüfungGewöhnlich soll der Roboter bei der Programmabarbeitung exakt die Konfigurationerreichen, die programmiert wurde. Hierfür können Sie festlegen, dass dasRobotersystem die Konfiguration prüft und – falls die korrekte Konfiguration nichterreicht wird – die Programmabarbeitung stoppt. Ohne Prüfen der Konfiguration kannder Roboter u. U. seine Arme und Handgelenke unerwartet bewegen und damitKollisionen mit Peripheriegeräten verursachen.Die Konfigurationsprüfung vergleicht die Konfiguration der programmierten Stellungmit der tatsächlichen Position des Roboters.Bei einer linearen Bewegung bewegt sich der Roboter stets in die am genauestenentsprechende Konfiguration. Wenn jedoch die Konfigurationsprüfung aktiv ist, stopptdie Programmabarbeitung, sobald eine der Achsen um mehr als die angegebeneGradzahl abweicht.<strong>RAPID</strong>-Überblick 175
RoboterkonfigurationWährend einer achsenweisen oder modifizierten linearen Bewegung mitKonfigurationsprüfung bewegt sich der Roboter stets in die programmierteAchsenkonfiguration. Wenn die programmierte Stellung und Orientierung nichterreicht werden können, stoppt die Programmabarbeitung, bevor die Bewegung startet.Wenn die Konfigurationsprüfung nicht aktiv ist, bewegt sich der Roboter in dieangegebene Stellung und Orientierung mit der am genauesten möglichenKonfiguration.Wenn die Abarbeitung einer programmierten Stellung wegen einesKonfigurationsfehlers gestoppt wird, hat das häufig eine der folgenden Ursachen:• Die Stellung wurde offline mit einer falschen Konfiguration programmiert.• Das Roboterwerkzeug wurde gewechselt, daher übernimmt der Roboter eine andereKonfiguration als die programmierte.• Auf die Stellung erfolgt eine aktive Koordinatensystemoperation (Verschiebung,Anwender, Objekt, Basis).Die korrekte Konfiguration in der Zielstellung können Sie ermitteln, indem Sie denRoboter in die Nähe positionieren und die Konfiguration am FlexPendant ablesen.Wenn sich die Konfigurationsparameter aufgrund einer aktiven Operation in einemKoordinatensystem ändern, kann die Konfigurationsprüfung deaktiviert werden.35.4 Weitere InformationenDefinition der RoboterkonfigurationAktivieren/Deaktivieren derKonfigurationsprüfungBeschrieben in:Datentypen und Systemdaten - confdata<strong>RAPID</strong> Zusammenfassung -Bewegungseinstellungen176 <strong>RAPID</strong>-Überblick
Kinematisches Modell des Roboters36 Kinematisches Modell des Roboters36.1 RoboterkinematikStellung und Orientierung eines Roboters wird aus dem kinematischen Modell seinermechanischen Struktur bestimmt. Jede Installation benötigt ihre spezifische Definitiondes mechanischen Modells. Für ABB-Master- und externe Standardroboter sind dieseModelle in der Steuerung vordefiniert.Master-RoboterDas kinematische Modell des Master-Roboters legt die Stellung und Orientierung desRoboterwerkzeugs relativ zu seiner Basis als Funktion der Roboterachsenwinkel fest.Die kinematischen Parameter für die Armlängen, Offsets und Achsenstellungen sindfür jeden Robotertyp in der Konfigurationsdatei vordefiniert.length_of_upper_arm length_of_wristAchse 5 Z6Achse 4 Achse 6offset_of_joint_3Z Achse 3X6length_of_lower_armoffset_of_joint_2height_of_footAchse 1Achse 2XAbbildung 42Kinematische Struktur eines Roboters des Typs IRB1400Eine Kalibrierungsprozedur unterstützt die Definition des Basis-Koordinatensystemsdes Master-Roboters relativ zum Welt-Koordinatensystem.<strong>RAPID</strong>-Überblick 177
Kinematisches Modell des RobotersZ6X6ZYXBasis-Koordinatensystemdes Master-RobotersWelt-KoordinatensystemAbbildung 43Basis-Koordinatensystem des Master-RobotersExterner RoboterDie Koordinierung mit einem externen Roboter erfordert auch ein kinematischesModell für den externen Roboter. Eine Reihe vordefinierter Klassen von 2- und 3-dimensionalen mechanischen Strukturen wird unterstützt.Z2Z0length_of_lower_armoffset_of_upper_armattitude_of_joint1Achse 2X2Achse 1 turn_tableoffset_of_joint1_xattitude_of_jointheight_of_footX0Abbildung 44Kinematische Struktur eines Roboters des Typs ORBIT 160B nach einemvordefinierten ModellKalibrierungsprozeduren zur Definition des Basis-Koordinatensystems relativ zumWelt-Koordinatensystem werden für jede Klasse von Strukturen zur Verfügunggestellt.178 <strong>RAPID</strong>-Überblick
Kinematisches Modell des RobotersZ0Z2Einheit CX2Einheit BEinheit AWelt-KoordinatensystemX0Basis-Koordinatensystemdes externen RobotersAbbildung 45Basis-Koordinatensystem eines Roboters des Typs ORBIT_160BY0Y2X0y1X2x1x2Abbildung 46Referenzpunkte auf Drehteller für Kalibrierung des Basis-Koordinatensystemseines Roboters des Typs ORBIT_160B in der Grundstellung nach einem vordefinierten Modell36.2 Allgemeine KinematikMechanische Strukturen, die nicht durch vordefinierte Strukturen unterstützt werden,können mithilfe eines allgemeinen kinematischen Modells modelliert werden. Dies istmöglich für externe Roboter.Die Modellierung basiert auf der Denavit-Hartenberg-Konvention. WeitereInformationen hierzu finden Sie in „Introduction to Robotics, Mechanics & Control“,John J. Craigh (Addison-Wesley 1986).<strong>RAPID</strong>-Überblick 179
Kinematisches Modell des Robotersd1Z2d2Z0Y2turn_tablea1 = 0a2 = 0alfa1 = 0X0alfa2Abbildung 47Kinematische Struktur eines Roboters des Typs ORBIT 160B nach einemallgemeinen kinematischen ModellEine Kalibrierungsprozedur unterstützt die Definition des Basis-Koordinatensystemsdes externen Roboters relativ zum Welt-Koordinatensystem.Z0Y2Z2X0Basis-Koordinatensystemdes externen RobotersWelt-KoordinatensystemAbbildung 48Basis-Koordinatensystem eines Roboters des Typs ORBIT_160B nach einemallgemeinen kinematischen Modell180 <strong>RAPID</strong>-Überblick
Kinematisches Modell des RobotersY0X0x1y1x2Y2X2Abbildung 49Referenzpunkte auf Drehteller für Kalibrierung des Basis-Koordinatensystemseines Roboters des Typs ORBIT_160B in der Grundstellung (Achsen = 0 Grad)36.3 Weitere InformationenDefinition der allgemeinen Kinematikeines externen RobotersBeschrieben in:Technisches <strong>Referenzhandbuch</strong> -Systemparameter<strong>RAPID</strong>-Überblick 181
Kinematisches Modell des Roboters182 <strong>RAPID</strong>-Überblick
Bewegungsüberwachung/Kollisionserkennung37 Bewegungsüberwachung/KollisionserkennungBewegungsüberwachung ist die Bezeichnung für eine Reihe von Funktionen fürhochempfindliche, modellbasierte Überwachung der Roboterbewegungen.Bewegungsüberwachung umfasst Funktionalität für die Erkennung von Kollisionen,Blockierungen und falschen Lastdefinitionen. Diese Funktionalität wirdKollisionserkennung genannt.37.1 EinleitungDie Kollisionserkennung kann ausgelöst werden, wenn die Daten für die am Robotermontierten Lasten nicht korrekt sind. Hierzu gehören Lastdaten für Werkzeuge,Nutzlasten und Armlasten. Wenn die Werkzeug- oder Nutzlastdaten unbekannt sind,können sie über die Funktionalität zur Lastidentifizierung definiert werden. Daten überdie Armlast können nicht identifiziert werden.Beim Auslösen der Kollisionserkennung werden die Motorenmomente umgekehrt unddie mechanischen Bremsen aktiviert, um den Roboter zu stoppen. Der Roboter bewegtsich dann eine kurze Strecke auf der Bahn zurück, um etwaige Restenergien aus einerKollision oder Blockade abzubauen. Anschließend stoppt der Roboter erneut undbleibt im Zustand „Motoren ein“. Nachstehende Abbildung zeigt eine typischeKollision.Die Bewegungsüberwachung ist nur aktiv, wenn mindestens eine Achse(einschließlich externe Achsen) in Bewegung ist. Bei einem Stillstand aller Achsenwird die Funktion deaktiviert. Damit wird überflüssiges Auslösen durch externeProzesskräfte vermieden.37.2 Einstellen der Stufe für die KollisionserkennungDie Kollisionserkennung verwendet eine variable Überwachungsstufe. Bei niedrigenGeschwindigkeiten ist die Empfindlichkeit höher als bei hohen Geschwindigkeiten.Daher sind bei Normalbetrieb keine Einstellungen der Funktion durch den Anwendererforderlich. Jedoch ist es möglich, die Funktion ein- und auszuschalten und dieÜberwachungsstufen einzustellen. Separate Einstellparameter stehen für manuelleBewegungen und die Programmabarbeitung zur Verfügung. Die verschiedenenEinstellparameter werden ausführlich im Technischen <strong>Referenzhandbuch</strong> unter denSystemparametern für den Manipulator beschrieben.Die <strong>RAPID</strong>-Instruktion MotionSup schaltet die Funktion ein und aus und ermöglichtdie Änderung der Überwachungsstufe. Dies ist nützlich in Anwendungen, in denen inbestimmten Teilen des Zyklus externe Prozesskräfte auf den Roboter einwirken. DieInstruktion MotionSup wird ausführlicher im <strong>RAPID</strong> <strong>Referenzhandbuch</strong> beschrieben.Die Einstellung erfolgt in Prozent, wobei 100 % den Basiswerten entspricht. Einhöherer Prozentwert ergibt ein weniger empfindliches System, ein kleinerer Wertbewirkt das Gegenteil. Beachten Sie unbedingt, dass der Einstellwert sowohl in den<strong>RAPID</strong>-Überblick 183
Bewegungsüberwachung/KollisionserkennungAbbildung: Typische KollisionPhase 1 - DasMotordrehmoment wirdumgekehrt, um den Roboter zustoppen.Phase 2 - DieMotorgeschwindigkeit wirdumgekehrt, um Restenergienvon Werkzeug und Roboter zuentfernen.ZeitpunktderKollisionMotorgeschwindigkeitKollisionerkanntRoboterangehaltenRestenergieentferntZeitMotordrehmomentGeschwindigkeitumgekehrtZeitDrehmomentumgekehrt184 <strong>RAPID</strong>-Überblick
Bewegungsüberwachung/KollisionserkennungSystemparametern als auch in der <strong>RAPID</strong>-Instruktion berücksichtigt werden muss.Beispiel: Wenn der Einstellwert in den Systemparametern 150 % und in der <strong>RAPID</strong>-Instruktion 200 % beträgt, ergibt sich daraus eine Überwachungsstufe von 300 %.Es gibt eine Höchststufe, auf die die Kollisionserkennung eingestellt werden kann.Diese Einstellung beträgt standardmäßig 300 %, die jedoch über den Systemparametermotion_sup_max_level geändert werden kann. Dieser Parameter steht nur zurVerfügung, wenn das System im Servicemodus installiert wurde.37.3 Dialogfeld für die BewegungsüberwachungWählen Sie „Bewegungsüberwachung“ aus dem Menü „Spezial“ im Fenster„Bewegen“. Ein Dialogfeld wird geöffnet, in dem Sie die Bewegungsüberwachungein- oder ausschalten können. Dies hat nur einen Einfluss auf das manuelleBewegen des Roboters. Wenn die Bewegungsüberwachung im Dialogfeldausgeschaltet wurde und ein Programm abgearbeitet wird, kann dieKollisionserkennung dennoch während der Abarbeitung des Programms aktiv sein.Wenn das Programm dann angehalten und der Roboter manuell bewegt wird, wird dasStatusflag im Dialogfeld wieder auf „ein“ gesetzt. Diese Sicherheitsvorkehrungverhindert, dass die Funktion versehentlich ausgeschaltet wird.37.4 Digitale AusgängeDer digitale Ausgang BwegÜwachEin ist gesetzt (1), wenn die Kollisionserkennungaktiv ist, und nicht gesetzt (0), wenn die Kollisionserkennung deaktiviert ist. BeachtenSie, dass eine Zustandsänderung der Funktion wirksam wird, wenn eine Bewegungbeginnt. Wenn also die Kollisionserkennung aktiv ist und sich der Roboter bewegt, istBwegÜwachEin gesetzt. Wenn der Roboter gestoppt und die Funktion ausgeschaltetwird, ist BwegÜwachEin immer noch gesetzt. Wenn der Roboter beginnt, sich zubewegen, wird BwegÜwachEin auf 0 eingestellt.Der digitale Ausgang BwegÜwachTrig wird gesetzt, wenn die Kollisionserkennungausgelöst wird. Er bleibt gesetzt, bis der Fehlercode bestätigt wird, entweder amFlexPendant oder durch den digitalen Eingang OkFehlerdialog.Eine ausführlichere Beschreibung der digitalen Ausgänge finden Sie imBenutzerhandbuch - IRC5 mit FlexPendant unter „E/A-Signale“.37.5 EinschränkungenDie Bewegungsüberwachung ist nur für die Roboterachsen verfügbar. FürVerfahrachsen, Orbit-Stations oder andere externe Manipulatoren steht sie nicht zurVerfügung.Die Kollisionserkennung wird deaktiviert, wenn mindestens eine Achse imunabhängigen Achsenmodus ausgeführt wird. Dies ist auch der Fall, wenn eine externeAchse als unabhängige Achse ausgeführt wird.<strong>RAPID</strong>-Überblick 185
Bewegungsüberwachung/KollisionserkennungDie Kollisionserkennung kann ausgelöst werden, wenn der Roboter im Modus„Softservo“ betrieben wird. Daher ist es bei Verwendung dieses Modus ratsam, dieKollisionserkennung auszuschalten.Das Ausschalten der Kollisionserkennung über die <strong>RAPID</strong>-Instruktion MotionSupwird erst wirksam, wenn der Roboter seine Bewegung startet. Daher kann der digitaleAusgang BwegÜwachEin vorübergehend beim Programmstart gesetzt sein, bevor derRoboter beginnt, sich zu bewegen.Die Strecke, die sich der Roboter nach einer Kollision auf der Bahn zurückbewegt, istproportional zur Geschwindigkeit der Bewegung vor der Kollision. Bei wiederholteintretenden Kollisionen mit niedriger Geschwindigkeit bewegt sich der Robotereventuell nicht weit genug zurück, um die Restenergien der Kollision abzubauen.Infolgedessen kann der Roboter möglicherweise nicht manuell bewegt werden, ohnedie Überwachung auszulösen. Schalten Sie in diesem Fall die Kollisionserkennungüber das Menü „Bewegen“ vorübergehend aus und entfernen Sie den Roboter manuellvom Hindernis.Bei einer harten Kollision während der Programmabarbeitung kann es einige Sekundendauern, bevor sich der Roboter auf seiner Bahn rückwärts bewegt.Wenn der Roboter auf einer Verfahrachse montiert ist, sollte die Kollisionserkennungausgeschaltet werden, sobald sich die Verfahrachse bewegt. Andernfalls kann dieKollisionserkennung während der Bewegung der Verfahrachse ausgelöst werden, ohnedass eine tatsächliche Kollision vorliegt.37.6 Weitere InformationenBeschrieben in:<strong>RAPID</strong>-Instruktion MotionSup <strong>RAPID</strong> Zusammenfassung -BewegungSystemparameter für Einstellungen Systemparameter - ManipulatorE/A-Signale der Bewegungsüberwachung Systemparameter - E/A-SignaleLast-IdentifikationBewegung und E/A-Prinzipien186 <strong>RAPID</strong>-Überblick
Singularität38 SingularitätEinige Positionen im Arbeitsraum des Roboters können mit einer unendlichen Anzahlvon Roboterkonfigurationen zur Positionierung und Orientierung des Werkzeugserreicht werden. Diese Positionen, so genannte singuläre Punkte (Singularitäten),bilden ein Problem für die Berechnung der Roboterarmwinkel auf der Basis derWerkzeugposition und -orientierung.Im Wesentlichen besitzt ein Roboter zwei Arten von Singularitäten: Arm-Singularitäten und Handgelenk-Singularitäten. Arm-Singularitäten sind alleKonfigurationen, bei denen die Mitte des Handgelenks (Schnittpunkt der Achsen 4, 5und 6) direkt über Achse 1 endet (siehe Abbildung 50). Handgelenk-Singularitätensind Konfigurationen, bei denen Achse 4 und Achse 6 auf derselben Linie liegen, d. h.Achse 5 hat einen Winkel gleich 0 (siehe Abbildung 51).Singularität am Schnittpunktzwischen der Mitte desHandgelenks und Achse 1Drehachse von Achse 1Z baseX baseAbbildung 50Die Arm-Singularität befindet sich am Schnittpunkt zwischen der Mitte desHandgelenks und Achse 1.Achse 5 hat einen Winkel von 0 Grad.Achse 6 parallelzu Achse 4Abbildung 51Die Handgelenk-Singularität tritt ein, wenn Achse 5 bei 0 Grad liegt.<strong>RAPID</strong>-Überblick 187
SingularitätSingularitätspunkte des IRB140Der Roboter verfügt über die Handgelenk-Singularität und die Arm-Singularität.Zusätzlich besitzt er noch eine dritte Art von Singularität. Diese Singularität tritt beiRoboterstellungen auf, bei denen die Mitte des Handgelenks sowie die Drehachsender Achsen 2 und 3 auf einer Geraden liegen (siehe nachstehende Abbildung).ABBAbbildung 52Der zusätzliche Singularitätspunkt des IRB140.38.1 Programmabarbeitung durch SingularitätenBei der Achseninterpolation treten keine Probleme auf, wenn der Roboter singulärePunkte passiert.Bei der Ausführung einer linearen oder kreisförmigen Bahn in der Nähe einerSingularität können die Geschwindigkeiten in einigen Achsen (1 und 6/4 und 6) sehrhoch sein. Damit die zulässige Höchstgeschwindigkeit nicht überschritten wird, wirddie Geschwindigkeit auf der linearen Bahn reduziert.Die hohen Achsengeschwindigkeiten können durch Verwendung des Modus (SingArea\Wrist) verringert werden, wenn die Handgelenkachsen in Achsenwinkelninterpoliert werden, während die lineare Bahn des Roboterwerkzeugs beibehalten wird.Dies ergibt jedoch einen Orientierungsfehler im Vergleich zur vollständigen linearenInterpolation.Beachten Sie, dass sich die Roboterkonfiguration erheblich ändert, wenn der Roboterdie Nähe einer Singularität mit linearer oder kreisförmiger Interpolation passiert. Umdie Neukonfiguration zu verhindern, sollte die erste Position an der anderen Seite derSingularität mit einer Orientierung programmiert werden, durch die sich dieNeukonfiguration erübrigt.Außerdem sollte beachtet werden, dass der Roboter nicht in seiner Singularität seindarf, wenn nur externe Achsen bewegt werden. Dies könnte zu überflüssigenBewegungen der Roboterachsen führen.188 <strong>RAPID</strong>-Überblick
Singularität38.2 Manuelle Bewegung durch SingularitätenBei der Achseninterpolation treten keine Probleme auf, wenn der Roboter singulärePunkte passiert.Bei der linearen Interpolation kann der Roboter zwar singuläre Punkte passieren,jedoch mit verringerter Geschwindigkeit.38.3 Weitere InformationenSteuerung des Roboterverhaltens bei derAbarbeitung in der Nähe von singulärenPunktenBeschrieben in:Instruktionen - SingArea<strong>RAPID</strong>-Überblick 189
Singularität190 <strong>RAPID</strong>-Überblick
Optimierte Beschleunigungsbegrenzung39 Optimierte BeschleunigungsbegrenzungBeschleunigung und Geschwindigkeit des Roboters werden ständig kontrolliert, damitdie definierten Grenzen nicht überschritten werden.Die Grenzen werden durch das Anwenderprogramm (z. B. programmierteGeschwindigkeit oder AccSet) oder durch das System selbst definiert (z. B. maximalesDrehmoment in Getriebe oder Motor, maximales Drehmoment oder maximale Kraft inRoboterstruktur).Solange die Lastdaten (Masse, Zentrum der Schwerkraft und Trägheit) innerhalb derGrenzen des Lastdiagramms liegen und korrekt in die Werkzeugdaten eingegebenwurden, sind keine anwenderdefinierten Beschleunigungsgrenzen erforderlich und dieLebensdauer des Roboters ist automatisch gewährleistet.Wenn die Lastdaten außerhalb der Grenzen des Lastdiagramms liegen, könnenbesondere Einschränkungen erforderlich sein, d. h. AccSet oder geringereGeschwindigkeit, wie auf Anfrage von ABB mitgeteilt.TCP-Beschleunigung und -Geschwindigkeit steuert die Bahnplanung mithilfe einesvollständigen dynamischen Modells der Roboterarme, einschließlichanwenderdefinierter Lasten.TCP-Beschleunigung und -Geschwindigkeit hängen von der Stellung,Geschwindigkeit und Beschleunigung aller Achsen zu jedem Zeitpunkt ab, dahervariiert die tatsächliche Beschleunigung ständig. Auf diese Weise wird eine optimaleZyklusdauer erzielt, d. h. eine oder mehrere Grenzen sind zu jedem Zeitpunkt aufihrem Höchstwert. Das bedeutet, dass die maximale Fähigkeit der Robotermotorenund -struktur jederzeit genutzt wird.<strong>RAPID</strong>-Überblick 191
Optimierte Beschleunigungsbegrenzung192 <strong>RAPID</strong>-Überblick
Weltzonen40 Weltzonen40.1 Verwenden globaler ZonenMit dieser Funktion stoppt der Roboter seine Bewegung oder ein digitaler Ausgangwird automatisch gesetzt, falls sich der Roboter in einem speziellen,anwenderdefinierten Bereich befindet. Anwendungsbeispiele:- Zwei Roboter benutzen teilweise überlagernde Arbeitsbereiche. DurchÜberwachung der Signale können die Systeme sicherstellen, dass die beidenRoboter nicht miteinander kollidieren.- Externe Einrichtungen befinden sich im Arbeitsbereich des Roboters. Es kannein „verbotener“ Arbeitsbereich definiert werden, damit der Roboter nicht mitdiesen externen Einrichtungen zusammenstößt.- Der Roboter befindet sich an einer Position, an der der Start derProgrammabarbeitung von einem SPS zulässig ist.40.2 Verwenden von WeltzonenFür die Anzeige, dass der Werkzeugarbeitspunkt sich in einem speziellen Teil desArbeitsbereichs befindet.Für die Beschränkung des Arbeitsbereichs des Roboters, um eine Kollision mit demWerkzeug zu vermeiden.Zur Definition eines gemeinsamen Arbeitsbereichs für zwei Roboter, wobei derBereich immer nur jeweils einem Roboter zur Verfügung steht.40.3 Definition von Weltzonen im Welt-KoordinatensystemAlle Weltzonen müssen im Welt-Koordinatensystem definiert werden. Die Seiten derQuader liegen parallel zu den Koordinatenachsen, und die Zylinderachse liegt parallelzur Z-Achse des Welt-Koordinatensystems.<strong>RAPID</strong>-Überblick 193
WeltzonenBasis-Koordinatensystem des RobotersXZYKugelRadiusTCPZylinderzHöheRadiusQuaderyWelt-KoordinatensystemxEine Weltzone kann so definiert werden, dass sie innerhalb oder außerhalb desQuaders, der Kugel oder des Zylinders liegt.40.4 Überwachung des Roboter-TCPnicht überwachtTCPDie Bewegung des TCP(Werkzeugarbeitspunkts) wirdüberwacht, nicht aber andere Punkteam Roboter.Der TCP wird unabhängig vomBetriebsmodus, z. B. beim manuellenBewegen oder bei derProgrammabarbeitung, immerüberwacht.Stationäre TCPsWenn der Roboter ein Werkobjekt hält und an einem stationären Werkzeug arbeitet,wird ein stationärer TCP verwendet. Falls dieses Werkzeug aktiv ist, bewegt es sichnicht, und wenn es sich innerhalb einer Weltzone befindet, bleibt es immer in dieserWeltzone.194 <strong>RAPID</strong>-Überblick
Weltzonen40.5 AktionSetzen eines digitalen Ausgangs, wenn der TCP in einer Weltzone istDiese Aktion setzt einen digitalen Ausgang, wenn sich der TCP in einer Weltzone befindet.Sie wird verwendet, um anzuzeigen, dass der Roboter in einer bestimmten Zone gestoppthat.Bewegung des TCPZeit zwischen Kontrollevon WeltzonenWeltzoneStatus des digitalen AusgangsSetzen eines digitalen Ausgangs, bevor der TCP eine Weltzone erreichtDiese Aktion setzt einen digitalen Ausgang, bevor der TCP eine Weltzone erreicht. Mitihr kann der Roboter direkt innerhalb einer Weltzone gestoppt werden.Bewegung des TCPStoppzeit für den RoboterWeltzoneStatus des digitalen AusgangsStoppen des Roboters, bevor der TCP eine Weltzone erreichtEine Weltzone kann außerhalb des Arbeitsbereichs definiert werden. Der Roboterstoppt dann mit dem Werkzeugarbeitspunkt auf dem Weg zur Weltzone, kurz bevor erdie Zone erreicht.Bewegung des TCPStoppzeit für den RoboterZeit zwischen Kontrollevon WeltzonenWenn der Roboter etwa durch Lösen der Bremsen oder manuelles Verfahren in eineWeltzone bewegt wird, die als „außerhalb des Arbeitsbereichs“ definiert ist, kann derRoboter nur noch durch manuelles Verfahren oder manuelles Bewegen bei gelöstenBremsen aus dieser Zone gebracht werden.<strong>RAPID</strong>-Überblick 195
Weltzonen40.6 Mindestgröße von WeltzonenDie Überwachung der Bewegung des Werkzeugarbeitspunkts (TCP) erfolgt andiskreten Punkten mit einer Abtastrate zwischen den Punkten, die von derBahnauflösung abhängt. Es obliegt dem Anwender, die Zonen so groß einzurichten,dass der Roboter keine Zone durchfahren kann,ohne in der Zone geprüft zu werden.Mindestgröße der Zonefür verwendete Bahnauflösung und max.GeschwindigkeitGeschwindigkeitAuflösung11000 mm/s 2000 mm/s 4000 mm/s25 mm 50 mm100 mm250 mm100 mm200 mm375 mm150 mm300 mmWenn derselbe digitale Ausgang für mehrere Weltzonen verwendet wird, muss derAbstand zwischen den Zonen die Mindestgröße (siehe obige Tabelle) überschreiten,um einen fehlerhaften Zustand des Ausgangs zu verhindern.Zeit zwischen Kontrollevon WeltzonenEs ist möglich, dass der Roboter durcheineEcke der Zone fahren kann, ohne bemerktzu werden, falls die Dauer desZonenaufenthalts zu kurz ist. Stellen Siedaher die Zone größer ein als dengefährlichen Bereich.40.7 Maximale Anzahl an WeltzonenMaximal zehn Weltzonen können gleichzeitig definiert sein.40.8 Stromausfall, Neustart und Motoren einStationäre Weltzonen werden bei einem Stromausfall oder beim Abschalten desSystems gelöscht und müssen beim Einschalten des Systems durch eineEreignisroutine, verbunden mit dem Ereignis NETZ_EIN, erneut initialisiert werden.Temporäre Weltzonen bleiben bei Stromausfall oder Abschalten des Systems erhalten,werden aber beim Laden eines neuen Programms oder beim Start eines Programms ausdem Hauptprogramm gelöscht.Die digitalen Ausgänge für die Weltzonen werden erst bei Motoren ein aktualisiert.196 <strong>RAPID</strong>-Überblick
Weltzonen40.9 Weitere Informationen<strong>RAPID</strong> <strong>Referenzhandbuch</strong>Bewegung und E/A-Prinzipien:Datentypen:Instruktionen:KoordinatensystemewztemporarywzstationaryshapedataWZBoxDefWZSphDefWZCylDefWZLimSupWZDOSetWZDisableWZEnableWZFree<strong>RAPID</strong>-Überblick 197
Weltzonen198 <strong>RAPID</strong>-Überblick
E/A-Prinzipien41 E/A-PrinzipienDas Robotersystem enthält gewöhnlich eine oder mehrere E/A-Karten. Jede dieserKarten umfasst verschiedene digitale und analoge Kanäle, die vor ihrer Verwendungmit logischen Signalen verbunden werden müssen. Dies erfolgt über dieSystemparameter und wurde normalerweise schon durch Standardnamen vorAuslieferung des Roboters vorgenommen. Bei der Programmierung müssen immerlogische Namen verwendet werden.Ein physischer Kanal kann mit mehreren logischen Namen verbunden sein, jedochmuss er keine logischen Anschlüsse besitzen (siehe Abbildung 53).Physischer KanalLogisches SignalIN1IN2IN16....do1ZuführungOUT1OUT2OUT16....E/A-KarteGreiferdo2Zuführung2do16Abbildung 53Damit eine E/A-Karte benutzt werden kann, müssen ihre Kanäle logische Namenerhalten. In obigem Beispiel ist der physische Ausgang 2 mit zwei verschiedenenlogischen Namen verbunden. IN16 andererseits hat keinen logischen Namen und istdaher nicht benutzbar.41.1 SignaleigenschaftenDie Eigenschaften eines Signals hängen vom verwendeten physischen Kanal sowievon der Definition des Kanals in den Systemparametern ab. Der physische Kanalbestimmt Zeitverzögerungen und Spannungshöhen (siehe Produktspezifikation). DieEigenschaften, Filterzeiten und Skalierung zwischen programmierten und physischenWerten werden in den Systemparametern definiert.<strong>RAPID</strong>-Überblick 199
E/A-PrinzipienWenn die Stromversorgung des Roboters eingeschaltet ist, werden alle Signale auf nullgesetzt. Sie werden jedoch nicht durch Not-Aus oder ähnliche Ereignisse beeinflusst.Ein Ausgangssignal kann innerhalb des Programms auf eins oder null gesetzt werden. Diesist auch über eine Verzögerung oder einen Impuls möglich. Wird ein Impuls oderverzögertes Umschalten für ein Ausgangssignal angefordert, wird das Programm weiterabgearbeitet. Die Änderung wird dann ausgeführt, ohne die übrige Abarbeitung desProgramms zu beeinflussen. Wenn andererseits ein neuer Wechsel für dasselbeAusgangssignal angefordert wird, bevor eine vorgegebene Zeit abgelaufen ist, wird daserste Umschalten nicht ausgeführt (siehe Abbildung 54).1SetDO \SDelay:=1, do1;WaitTime 0,5;PulseDO do1;Signalwert0 0,5 1ZeitAbbildung 54Die Instruktion SetDO wird nicht ausgeführt, da ein neuer Befehl erteilt wurde,bevor die Zeitverzögerung abgelaufen ist.41.2 Signale für InterruptsInterrupt-Funktionalität von <strong>RAPID</strong> kann mit digitalen Signalwechseln verbundensein. Die Funktion kann auf eine ansteigende oder abfallende Signalflanke reagieren.Bei sehr schnellen Signalwechseln ist es jedoch möglich, dass der Interrupt verpasstwird.Beispiel:Die Funktion ist mit Signal do1 verbunden und folgendes Programm wird ausgeführt:SetDO do1,1;SetDO do1,0;Das Signal geht zunächst in den Zustand „High“ und dann nach wenigenMillisekunden in den Zustand „Low“. In diesem Fall kann der Interrupt verloren gehen.Damit Sie den Interrupt erhalten, stellen Sie sicher, dass der Ausgang gesetzt ist, bevorSie ihn zurücksetzen.Beispiel:SetDO do1,1;WaitDO do1 ,1;SetDO do1,0;Auf diese Weise kann kein Interrupt verloren gehen.200 <strong>RAPID</strong>-Überblick
E/A-Prinzipien41.3 SystemsignaleLogische Signale können mit speziellen Systemfunktionen verbunden werden. Wennz. B. ein Eingang mit der Systemfunktion Start verbunden wird, erfolgt einautomatischer Programmstart, sobald dieser Eingang freigegeben wird. DieseSystemfunktionen werden generell nur im Automatikmodus freigegeben. WeitereInformationen finden Sie in Kapitel 9, „Systemparameter“, oder im Kapitel überInstallation und Inbetriebnahme - SPS-Kommunikation im Produkthandbuch.41.4 QuerverbindungenDigitale Signale können so miteinander verbunden werden, dass sie sich automatischgegenseitig beeinflussen.Beispiele:- Ein Ausgangssignal kann mit einem oder mehreren Eingangs- oderAusgangssignalen verbunden sein.- Ein Eingangssignal kann mit einem oder mehreren Eingangs- oderAusgangssignalen verbunden sein.- Wenn dasselbe Signal in mehreren Querverbindungen benutzt wird, ist der Wertdieses Signals gleich dem zuletzt aktivierten (geänderten) Wert.- Querverbindungen können verknüpft werden, d. h. eine Querverbindung kanneine andere beeinflussen. Sie dürfen jedoch nicht zirkulär verbunden werden,z. B. Querverbindung zwischen di1 und di2, während eine Querverbindungzwischen di2 und di1 besteht.- Wenn eine Querverbindung an einem Eingangssignal besteht, wird dieentsprechende physische Verbindung automatisch deaktiviert. Änderungen amphysischen Kanal werden daher nicht erkannt.- Impulse oder Verzögerungen werden nicht über Querverbindungen übertragen.- Logische Bedingungen können mithilfe von NOT, AND und OR definiertwerden (Option: Advanced Functions (Erweiterte Funktionen)).- di2=di1- di3=di2- do4=di2Wenn sich di1 ändert, werden di2, di3 und do4 auf den entsprechenden Wertgeändert.- do8=do7- do8=di5Wenn do7 auf 1 gesetzt wird, wird auch do8 auf 1 gesetzt. Wenn dann di5 auf 0gesetzt wird, schaltet auch do8 um (obwohl do7 immer noch auf 1 gesetzt ist).- do5=di6 und do1Do5 wird auf 1 gesetzt, wenn sowohl di6 als auch do1 auf 1 gesetzt sind.<strong>RAPID</strong>-Überblick 201
E/A-Prinzipien41.5 EinschränkungenMaximal 10 Signale können gleichzeitig gepulst und maximal 20 Signale gleichzeitigverzögert werden.41.6 Weitere InformationenBeschrieben in:Definition von E/A-Karten und Signalen Technisches <strong>Referenzhandbuch</strong> -SystemparameterInstruktionen für die Handhabung von E/A <strong>RAPID</strong> Zusammenfassung -Eingangs- und AusgangssignaleManuelle Handhabung von E/ABenutzerhandbuch - IRC5 mitFlexPendant - Eingänge undAusgänge202 <strong>RAPID</strong>-Überblick
Offline-Programmierung42 Offline-Programmierung<strong>RAPID</strong>-Programme können bequem an einem gewöhnlichen Bürocomputer erstellt,gepflegt und gespeichert werden. Alle Informationen lassen sich direkt in einemnormalen Texteditor lesen und ändern. Dieses Kapitel erklärt die Vorgehensweisehierfür. Zusätzlich zur Offline-Programmierung können Sie das DienstprogrammQuickTeach verwenden.42.1 DateiformatDer Roboter speichert und liest <strong>RAPID</strong>-Programme in TXT-Format (ASCII) und kannsowohl DOS- als auch UNIX-Textformate verarbeiten. Wenn Sie Programme in einemTextverarbeitungsprogramm editieren, müssen Sie diese in TXT-Format (ASCII)speichern, bevor Sie sie im Roboter verwenden können.42.2 EditierenWenn ein Programm in einem Textverarbeitungsprogramm erstellt oder geändert wird,werden sämtliche Informationen in Form von Text verwaltet. Dies bedeutet, dassInformationen über Daten und Routinen sich etwas von der Anzeige am FlexPendantunterscheiden.Beachten Sie, dass der Wert einer gespeicherten Position am FlexPendant nur als *angezeigt wird, während die Textdatei den tatsächlichen Positionswert (x, y, z usw.)enthält.Um das Fehlerrisiko in der Syntax (fehlerhafte Programme) zu minimieren, sollten Sieeine Vorlage verwenden. Eine Vorlage kann die Form eines zuvor am Robotererstellten Programms haben oder mit QuickTeach vorgegeben werden. DieseProgramme können Sie direkt in ein Textverarbeitungsprogramm einlesen, ohne sie zukonvertieren.42.3 SyntaxprüfungProgramme müssen syntaktisch korrekt sein, bevor Sie sie in den Roboter laden. Dasbedeutet, dass der Text die Grundregeln der Programmiersprache <strong>RAPID</strong> einhaltenmuss. Anhand einer der folgenden Methoden können Fehler im Text ermittelt werden:• Speichern Sie die Datei auf Diskette und versuchen Sie, sie im Roboter zu öffnen.Wenn syntaktische Fehler vorhanden sind, wird das Programm nicht akzeptiert undeine Fehlermeldung wird angezeigt. Informationen über den Fehlertyp speichert derRoboter im Protokoll PGMCPL1.LOG auf der internen RAM-Disk. Kopieren Siedieses Protokoll mit Hilfe des Datei-Managers des Roboters auf eine Diskette.Öffnen Sie das Protokoll in einem Textverarbeitungsprogramm, um zu lesen, welcheZeilen fehlerhaft sind, und eine Fehlerbeschreibung zu erhalten.• Öffnen Sie die Datei in QuickTeach oder ProgamMaker.• Verwenden Sie das <strong>RAPID</strong>-Syntaxprüfprogramm für den PC.<strong>RAPID</strong>-Überblick 203
Offline-ProgrammierungWenn das Programm syntaktisch korrekt ist, lässt es sich im Roboter prüfen undeditieren. Um sicherzustellen, dass alle Verweise auf Routinen und Daten korrekt sind,verwenden Sie den Befehl Datei: Programm kontrollieren. Wenn das Programm imRoboter geändert wurde, kann es erneut auf Diskette gespeichert und auf einem PCverarbeitet oder gespeichert werden.42.4 BeispieleDie folgenden Beispiele zeigen Routinen in Textformat.%%%VERSION: 1LANGUAGE: ENGLISH%%%MODULE mainVAR intnum process_int ;! Demo eines <strong>RAPID</strong>-ProgrammsPROC main()MoveL p1, v200, fine, gun1;ENDPROCTRAP InvertDo12! Interrupt-Routine für TriggIntTEST INTNOCASE process_int:InvertDO do12;DEFAULT:TPWrite ”Unbekannter Interrupt ,Nummer=”\Num:=INTNO;ENDTESTENDTRAPLOCAL FUNC num MaxNum(num t1, num t2)IF t1 > t2 THENRETURN t1;ELSERETURN t2;ENDIFENDFUNCENDMODULE204 <strong>RAPID</strong>-Überblick
Offline-Programmierung42.5 Erstellen von eigenen InstruktionenZur leichteren Programmierung können Sie Ihre eigenen Instruktionen anpassen. Siewerden in der Form normaler Routinen erstellt, fungieren beim Programmieren oderTesten jedoch als Instruktionen:- Sie können der Instruktionsauswahlliste entnommen und als normaleInstruktionen programmiert werden.- Die vollständige Routine läuft bei der schrittweisen Abarbeitung ab.• Erstellen Sie ein neues Systemmodul, in das Sie Ihre Routinen einfügen, die alsInstruktionen fungieren. Alternativ können Sie sie in das SystemmodulANWENDER eingeben.• Erstellen Sie in diesem Systemmodul eine Routine mit dem Namen, den Ihre neueInstruktion haben soll. Die Argumente der Instruktion werden in der Form vonRoutinenparametern definiert. Beachten Sie, dass die Namen der Parameter bei derProgrammierung im Fenster angezeigt werden. Benutzen Sie daher solche Namen,die der Anwender versteht.• Setzen Sie die Routine in eine der am häufigsten benutzten Auswahllisten.• Wenn sich die Instruktion während der Rückwärtsabarbeitung des Programms aufeine bestimmte Weise verhalten soll, können Sie dies durch eineRückwärtsbehandlung erreichen. Wenn keine solche Behandlungsroutine verfügbarist, kann die Rückwärtsabarbeitung ab dieser Instruktion nicht mehr fortfahren (sieheKapitel 13 im vorliegenden Handbuch - Grundlegende Eigenschaften). EineRückwärtsbehandlung können Sie über den Befehl Routine: Rückw.behandl. hinzuim Fenster Programmroutinen eingeben.• Testen Sie die Routine gründlich, damit sie mit verschiedenen Arten vonEingabedaten (Argumenten) arbeitet.• Ändern Sie das Modulattribut in NOSTEPIN. Die vollständige Routine läuft dannwährend der schrittweisen Abarbeitung ab. Dieses Attribut muss allerdings offlineeingegeben werden.Beispiel: Um die Handhabung des Greifers zu vereinfachen, werden zwei neueInstruktionen definiert: GripOpen und GripClose. Der Name des Ausgangssignalswird im Instruktionsargument angegeben, z. B. GripOpen gripper1.MODULE My_instr (SYSMODULE, NOSTEPIN)PROC GripOpen (VAR signaldo Gripper)Set Gripper;WaitTime 0,2;ENDPROCPROC GripClose (VAR signaldo Gripper)Reset Gripper;WaitTime 0,2;ENDPROCENDMODULE<strong>RAPID</strong>-Überblick 205
Offline-Programmierung206 <strong>RAPID</strong>-Überblick
Systemmodul Anwender43 Systemmodul AnwenderZur einfacheren Programmierung werden mit dem Roboter vordefinierte Datengeliefert. Diese Daten müssen nicht erstellt werden und sind daher direkt verwendbar.Diese Daten vereinfachen die Erstprogrammierung. Jedoch empfiehlt es sichnormalerweise, den verwendeten Daten eigene Namen zu geben, damit das Programmbesser lesbar ist.43.1 InhaltAnwender umfasst Daten für fünf numerische Werte (Register), ein Werkobjekt, eineUhr und zwei symbolische Werte für digitale Signale.Name Datentyp Deklarationreg1 num VAR num reg1:=0reg2 . .reg3 . .reg4 . .reg5 num VAR num reg5:=0wobj1 wobjdata PERS wobjdatawobj1:=wobj0clock1 clock VAR clock clock1Anwender ist ein Systemmodul, d. h. es ist immer im Speicher des Robotersvorhanden, unabhängig vom jeweils geladenen Programm.43.2 Erstellen neuer Daten in diesem ModulIn diesem Modul können Sie solche Daten und Routinen erstellen, die unabhängig vomgeladenen Programm immer im Programmspeicher vorhanden sein müssen, z. B.Dienstprogramme und Serviceroutinen.• Wählen Sie Ansicht: Module im Fenster „Programm“.• Wählen Sie das Systemmodul Anwender und drücken Sie Eingabe .• Ändern oder erstellen Sie Daten und Routinen wie üblich (siehe Programmieren undTesten).<strong>RAPID</strong>-Überblick 207
Systemmodul Anwender43.3 Löschen dieser DatenWarnung: Wenn das Modul gelöscht wird, ist die Instruktion CallByVar nicht mehrverwendbar.Alle Daten löschen (d. h. das vollständige Modul)• Wählen Sie Ansicht: Module im Fenster „Programm“.• Wählen Sie das Modul Anwender.• Drücken Sie die Löschtaste .Einzelne Daten ändern oder löschen• Wählen Sie Ansicht: Daten im Fenster „Programm“.• Wählen Sie Daten: In allen Modulen.• Wählen Sie die gewünschten Daten aus. Wenn sie nicht angezeigt werden, drückenSie die Funktionstaste Typen, um den gewünschten Datentyp zu wählen.• Ändern oder löschen Sie die Daten wie üblich (siehe Programmieren und Testen).208 <strong>RAPID</strong>-Überblick
Glossar44 GlossarArgumentDer Teil einer Instruktion, der geändert werden kann, d. h. allesmit Ausnahme des Namens der Instruktion.Ausdruck Eine Folge von Daten und zugehörigen Operanden, z. B.reg1+5 oder reg1>5.AutomatikmodusBedienfeldDatensatzDeklarationDialog/DialogfeldE/AEinrichtbetriebFehlerbehandlungFensterFly-By-PunktFunktionHauptroutineInterruptInterrupt-RoutineDer Modus, in dem der Wahlschalter für die Betriebsart aufsteht.Das Bedienfeld an der Vorderseite der Steuerung.Ein zusammengesetzter Datentyp.Der Teil einer Routine oder von Daten, der ihre Eigenschaftendefiniert.Jedes Dialogfeld, das an der Anzeige des FlexPendant geöffnetwird, muss stets geschlossen werden (gewöhnlich durchDrücken von OK oder Abbrechen), bevor es verlassen werdenkann.Elektrische Eingänge und Ausgänge.Der Modus, in dem der Wahlschalter für die Betriebsart aufsteht.Ein separater Teil einer Routine, in dem ein Fehler behobenwerden kann. Die normale Programmabarbeitung kann dannautomatisch neu gestartet werden.Das Robotersystem wird mithilfe von verschiedenen Fensternprogrammiert und bedient, z. B. mit dem Fenster „Programm“und dem Fenster „Service“. Ein Fenster kann immer durchWählen eines anderen Fensters verlassen werden.Ein Punkt, den der Roboter in einem bestimmten Abstandpassiert, ohne anzuhalten. Die Entfernung zu diesem Punkthängt von der Größe der programmierten Zone ab.Eine Routine, die einen Wert zurückgibt.Die Routine, die gewöhnlich beginnt, wenn die Taste Startgedrückt wird.Ein Ereignis, das kurzzeitig die Programmabarbeitungunterbricht und eine Interrupt-Routine abarbeitet.Die Routine, die die Aktionen festlegt, die bei Eintreten einesbestimmten Interrupts auszuführen sind.<strong>RAPID</strong>-Überblick 209
GlossarKomponenteKonfigurationKonstanteEin Teil eines Datensatzes.Die Stellung der Roboterachsen an einer bestimmten Position.Daten, die nur manuell geändert werden können.Mechanische Einheit Eine Gruppe von externen Achsen.ModulMotoren ein/ausOrientierungParameterPersistenteProgrammProgrammdatenProgrammmodulProzedurRoutineRoutinendatenSignalgruppeStartpunktStopppunktSystemmodulEine Gruppe von Routinen und Daten, d. h. ein Teil desProgramms.Der Zustand des Roboters, d. h. ob die Stromversorgung zu denMotoren geschaltet ist oder nicht.Beispielsweise die Richtung eines Endeffektors.Die Eingangsdaten einer Routine, die mit dem Aufruf derRoutine übertragen werden. Sie entsprechen den Argumenteneiner Instruktion.Eine Variable, deren Wert persistent ist.Die Summe von Instruktionen und Daten, die die Aufgabe desRobotersystems definiert. Programme enthalten jedoch keineSystemmodule.Daten, die in einem Modul oder im vollständigen Programmverwendet werden können.Ein Modul des Roboterprogramms, das z. B. beim Kopierendes Programms auf eine Diskette übertragen wird.Eine Routine, die bei ihrem Aufruf unabhängig eineInstruktion bilden kann.Ein Unterprogramm.Lokale Daten, die nur in einer Routine verwendet werdenkönnen.Eine Anzahl digitaler Signale, die zusammengefasst sind undwie ein einzelnes Signal behandelt werden.Die Instruktion, die als Erste abgearbeitet wird, wenn dieProgrammabarbeitung beginnt.Ein Punkt, an dem der Roboter anhält, bevor er mit demnächsten Punkt fortfährt.Ein Modul, das immer im Programmspeicher vorhanden ist.Beim Laden eines neuen Programms bleiben dieSystemmodule im Programmspeicher.210 <strong>RAPID</strong>-Überblick
GlossarSystemparameterVariableDie Einstellungen, die das Robotersystem und seineEigenschaften definieren, so genannte Konfigurationsdaten.Daten, die das Programm ändern kann, die aber ihren Inhaltverlieren (zu ihrem Anfangswert zurückkehren), wenn dasProgramm erneut gestartet wird.Werkzeugarbeitspunkt (TCP)Der Punkt, normalerweise die Spitze des Werkzeugs, der sichentlang der programmierten Bahn mit der programmiertenGeschwindigkeit bewegt.ZoneZonenbahnDer kugelförmige Raum, der einen Fly-By-Punkt umgibt.Sobald der Roboter diese Zone betritt, beginnt er sich zurnächsten Position zu bewegen.Die Bahn, die beim Passieren eines Fly-By-Punkts erzeugtwird.<strong>RAPID</strong>-Überblick 211
Glossar212 <strong>RAPID</strong>-Überblick
IndexAAchsenbewegung 153Achsenkonfiguration 173Aggregat 103Alias-Datentyp 104AND 114Anwender – Systemmodul 207Anwender-Koordinatensystem 145Argumentbedingt 117Arithmetischer Ausdruck 113Ausdruck 113Ausgangsinstruktionen 29BBasis-Koordinatensystem 143Bedingtes Argument 117Bewegungseinstellungsinstruktionen 13Bewegungsinstruktionen 20Bezeichner 85Ccomment 87CONST 107DDateiinstruktionen 33Dateivorspann 88Daten 105in Ausdrücken 115Datenfeld 106, 107Datensatz 103Datentyp 103Datentyp mit einem festen Wert 103Datentypen ohne einen Wert 103Deklarationconstant 107Modul 92Persistente 107Routine 97variable 106DIV 113EE/A-Prinzipien 199E/A-Synchronisierung 167Eingangsinstruktionen 29ERRNO 121Externe Achsenkoordiniert 147FFehlerbehandlung 121, 123Fehlernummer 121Fest positionierte E/A 171Funktion 95Funktionsaufruf 116GGleicher Datentyp 104GlobalDaten 105Routine 95GültigkeitsbereichDatengültigkeitsbereich 105Routinengültigkeitsbereich 95HHandgelenk-Koordinatensystem 149Hauptroutine 91IInterpolation 153Interrupt 37, 127Interrupt-Routine 95KKommentar 9Kommunikation 51Kommunikationsinstruktionen 33Komponente eines Datensatzes 103Konstante 105Koordinatensystem 143, 177Koordinierte externe Achsen 147Kreisbewegung 155LLineare Bewegung 154Logischer Ausdruck 114Logischer Wert 86LokalDaten 105<strong>RAPID</strong>-Überblick 213
Routine 95Rückwärtsbehandlung 97, 129, 136, 205MMathematische Instruktionen 47, 61MOD 113Modifizierte lineare Interpolation 156Modul 91Deklaration 92Multitasking 63, 135NNOT 114Numerischer Wert 86OObjekt-Koordinatensystem 145Offline-Programmierung 203OperatorPriorität 117Optionaler Parameter 96OR 114PParameter 96PERS 107Persistente 105Platzhalter 87PositionInstruktion 20Programm 91Programmablauf-Instruktionen 7Programmdaten 105Programmierung 203Programmmodul 91Prozedur 95QQuerverbindungen 201RReservierte Wörter 85Roboterkonfiguration 173Routine 95Deklaration 97Routinendaten 105Rückwärtsabarbeitung 129SSimultane Abarbeitung 168, 185Singularität 187, 191Softservo 165Stationärer TCP 150Stoppen der Programmabarbeitung 8Suchinstruktionen 20switch 96Synchronisierung der Bahn 171Syntaxregeln 2Systemmodul 92TTCP 143, 177stationär 150trap routine 127VVAR 106Variable 105Vereinbarungen zur Schreibweise 2Verschiebungs-Koordinatensystem 146WWarteinstruktionen 9Welt-Koordinatensystem 144Werkzeugarbeitspunkt 143, 177Werkzeug-Koordinatensystem 149XXOR 114ZZeichenfolge 86Zeichenfolgenausdrücke 115Zeitinstruktionen 45Zonenbahn 157Zuweisen eines Datenwerts 9214 <strong>RAPID</strong>-Überblick