Beruflich Dokumente
Kultur Dokumente
(Begleitskript)
Michael Uschold
2019
OTH mind - BMBF Verbundprojekt
#aufstieggestalten
Dieses Material ist lizenziert unter einer Creative Commons Namensnennung – Weitergabe unter gleichen Bedingungen 4.0 International Lizenz (CC
BY-SA 4.0). Bei einer Weitergabe soll der Name des Urhebers wie folgt genannt werden: „Michael Uschold, OTH mind #aufstieggestalten, OTH Amberg-
Weiden“.
Literatur
Normen und Richtlinien
Einführung
– Robotik als interdisziplinäres Fachgebiet
– Geschichte
– Entwicklung erster Industrieroboter
– Entwicklung heutiger Industrieroboter
Einteilung der Roboter und Anwendungsfelder
– Einteilung der Handhabungsgeräte (VDI)
– Abgrenzung, Begriffsdefinition
– Einteilung nach Einsatzgebieten
– Industrieroboter
– Serviceroboter
– Geländeroboter
– Neue Anwendungsfelder
Einsatzzahlen und Märkte von Industrieroboter
Märkte für Serviceroboter
Weber, W.:
Industrieroboter: Methoden der Steuerung und Regelung
München, Wien: Hanser, 2002
Hesse, S.:
Industrieroboterpraxis.
Wiesbaden: Vieweg, 1998
Siegert, H.-J.; Bocionek, S.:
Robotik: Programmierung intelligenter Roboter.
Berlin: Springer, 1996
Dietmar Steinpichler und Horst Kargl
Projektabwicklung mit UML und Enterprise Architect
SparxSystems Software 2012
Linnemann
Vorlesungsmanuskript WiSe 2016/17 Robotertechnik.
Beuth Hochschule für Technik Berlin, Fachbereich VI – Informatik und Medien
1805 J.M. Jacquard: Mit Lochkarten gesteuerter Webstuhl -> erster spezialisierter
Industrieroboter
1946 USA, G.C. Devol: Steuergerät zur magnetischen Aufzeichnung elektrischer Signale: Die
Signale konnten später zur Steuerung mechanischer Geräte (roboterähnliche
Maschinen) benutzt werden. (mehrere Patente)
1959 Erster kommerzieller Roboter der Fa. Planet Corporation für einfache Aufgaben, z.B.
Punktschweißen
1960 Erster Roboter der Fa. Unimate (basiert auf Arbeiten von Devol) Der Roboter wurde
hydraulisch angetrieben und von einem Computer nach dem Prinzip der NC-Technik
gesteuert
1998 Stanford Research Institute entwickelt einen mobilen experimentellen Roboter (Shakey)
mit Kamera und taktilen Sensoren.
2. Ein Roboter muss den Anweisungen gehorchen, die ihm von Menschen gegeben
werden, außer wenn diese dem ersten Gesetz widersprechen.
3. Ein Roboter muss seine eigene Existenz solange zu sichern versuchen, wie dies
nicht dem ersten oder zweiten Gesetz widerspricht.
Halten
aufnehmen, haften, spannen
Aufnehmen
annehmen, fassen (greifen), ergreifen (pflücken, schnappen)
Lage bestimmen
positionieren (einrichten), ordnen (orientieren)
Bewegen
zuführen (beladen, laden, eingeben, zubringen, einlegen)
weitergeben (transportieren, fördern, befördern, zuteilen, vereinzeln)
ausgeben (entladen, ausladen, auswerfen)
Ablegen
freigeben (loslassen, lösen), absetzen (abstellen, hinlegen)
Handhabungs-
geräte
Manipulator
Telemanipulator Fest programmiert Frei programmierbar
Einlegegerät Industrieroboter
Nach VDI 2860 Blatt 1 bilden Industrieroboter eine Untergruppe der Handhabungseinrichtungen.
Unter Handhaben sind alle Vorgänge zu verstehen,
• bei denen ein Objekt in eine definierte Lage im Raum gebracht oder gehalten wird,
• oder bei denen mit dem Objekt eine definierte Bewegung ausgeführt wird.
Industrieroboter
Arbeiten in Fabriken und Lagerhallen (künstliche Umgebung):
Schweißroboter, Lackierroboter, Montageroboter, …
Serviceroboter
Arbeiten in von Menschen bevölkerten Gebieten:
Putzroboter, Rasenmäher, Museumsführer
Geländeroboter
Arbeiten in rauer Umgebung oder an von Menschen nicht zugänglichen Orten:
Tiefsee, Weltraum, Kernkraftwerke, Kanalreinigung, …
Der Grundaufbau eines Industrieroboters leitet sich aus der allgemeinen Aufgabe ab, einen Körper
im Raum durch Schieben und Drehen frei beweglich in eine andere Position bzw. Orientierung
gegenüber einem Bezugsystem zu bringen. Dazu müssen nachfolgende Komponenten koordiniert
zusammenwirken:
I Steuerung
II ausführende Einrichtung
III Arbeitsorgan
IV Peripherie
1 Roboterarm
2 Bewegungseinheit
3 Robotersteuerung
4 Anpasssteuerung
5 Handbedienpult
6 Drehtisch
Buch Industrieroboterpraxis - Stefan Hesse - Vieweg Verlag - Plauen, Juni 1998 - Seite 15
2.8 Armbewegung
Linnemann
Vorlesungsmanuskript WiSe 2016/17 Robotertechnik.
Beuth Hochschule für Technik Berlin, Fachbereich VI – Informatik und Medien
VAL3 Referenzanleitung
Stäubli, Faverges 2005
D28056202B - 06/2005
Hesse, S.:
Industrieroboterpraxis.
Wiesbaden: Vieweg, 1998
• Roboter bestehen aus einer Kombination von Drehgelenken (D) und/oder Schubgelenken (S),
welche in beliebiger Reihenfolge nacheinander angeordnet werden können.
• Jedes zusätzliche Gelenk schafft einen weiteren Freiheitsgrad für das System (bis auf zwei
hintereinander angeordnete Schubgelenke mit kleiner Ausrichtung).
Buch Industrieroboterpraxis - Stefan Hesse - Vieweg Verlag - Plauen, Juni 1998 - Seite 20
a) DSS → Zylinder
b) DDS → Hohlkugelsegment
c) TTT → Kartesischer Raum (X, Y, Z)
d) DDD → Hohlkugel
e) DDT
Buch Industrieroboterpraxis - Stefan Hesse - Vieweg Verlag - Plauen, Juni 1998 - Seite 54/55
B = Bewegungsraum
A = Arbeitsraum
K = Kollisionsraum
Anwendungen:
- Montage
- Maschinenbeschickung
- Lackieren
- Verpacken
+ Vorteile
- Bewegungen ähnlich dem menschlichen Arm möglich
- Großer Arbeitsraum bei kleinem Kollisionsraum
- Kleine Stellfläche
- Nachteile
- Achsauflösung im Arbeitsraum nicht linear
- Lastausgleich bei waagerechten Drehachsen teilweise erforderlich
Anwendungen:
- Montage
- Pick and Place
- Pelletieren
+ Vorteile
- Hohe Steifigkeit in Z-Achse
- Hohe Einpresskraft
- Kleine Stellfläche
- Nachteile
- Kleiner Arbeitsbereich
- Geringe Traglast
- Lastausgleich bei waagerechten Drehachsen teilweise erforderlich
Anwendungen:
- Maschinenbeschickung (v.a. sperrige Werkstücke)
- Entladen
- Stapeln
+ Vorteile
- Sehr großer Arbeitsraum möglich
- Bewegung der ersten 3 Achsen im kartesischen Raum (leicht vorstellbar)
- Achsauflösung im gesamten Arbeitsraum linear
- Nachteile
- Große Stellfläche
- Keine Veränderung der Orientierung möglich
- Achsauflösung im Arbeitsraum nicht linear
Anwendungen:
- Pick and Place
- Verpacken
- Montage
- Materialhandhaben
+ Vorteile
- Hohe Presskräfte in Z-Richtung
- Sehr hohe Dynamik
- Nachteile
- Nur senkrechte Montagebewegung möglich
- Achsauflösung im Arbeitsraum nicht linear
- Komplexer Programmieraufwand
Beispiele: vx
1) Freier Vektor Geschwindigkeit: v vy vx vy vz T
v
z
x
2) Ortsvektor p y ( x y z)
T
(benötigt Koordinatensystem)
z
x
Homogener p
y T
Pkt ( x y z) ( x y z 1 )
Ortsvektor: z
1
y'
P
x'
1 0 0 x
Translation um Vektor ( x y z )
T
: Trl ( x y z)
0 1 0 y
0 0 1 z
0 0 0 1
BMBF-Verbundprojekt OTH mind S. 43
2.3 Koordinaten und Transformation
Drehung um die z-Achse (Rotation)
y'
θZ
x'
z'
cos( ) sin ( ) 0 0
sin ( ) cos( ) 0 0
Rotation um die z-Achse um den Winkel ?: Rotz ( )
0 0 1 0
0 0 0 1
1 0 0 0
Rotation um die x-Achse um den Winkel ?: Rotx( )
0 cos( ) sin ( ) 0
0 sin ( ) cos( ) 0
0 0 0 1
cos( ) 0 sin ( ) 0
Rotation um die y-Achse um den Winkel ?: Roty ( )
0 1 0 0
sin ( ) 0 cos( ) 0
0 0 0 1
P2 T 1 P 1
P3 T 2 P 2 T 2 T 1 P 1
P3 T res P 1 T res T 2 T 1
T
Beispiel T Trl ( 1 0 0) R Rotz ( 45°) p ( 1 1 0 1)
Transformation:
Tg 1 2 Rotz 1 Trl r1 0 0 Rotz 2 Trl r2 0 0
i 0 2 P 1 Rotz 1 Trl r1 0 0 P 2
P 0 Tg 1 2 P 2
20
10
T
P 0 ( 12.7 1.4 0 1 )
20 10 0 10 20
10
20
• Translation in X-Richtung
• Translation in Y-Richtung
• Translation in Z-Richtung
Translation
• Rotation um X-Achse
• Rotation um Y-Achse
• Rotation um Z-Achse
Rotation
„Rechter Daumen“ Regel
– 1. Verschiebung in X-Richtung
1.
– 2. Verschiebung in Y-Richtung
– 3. Verschiebung in Z-Richtung
2.
3.
– 5. Rotation um Y‘-Achse
– 6. Rotation um Z‘‘-Achse
6.
• Jedes Bezugssystem ist einem Körper zugeordnet; das sind Armteile, Werkzeuge, Werkstücke
oder Hindernisse.
• Der gesamte Roboterarm kann als kinematische Kette betrachtet werden, wobei jedes Armteil
durch ein zugehöriges Koordinatensystem dargestellt wird, das fest mit dem Armteil
verbunden ist und es bezüglich Lage und Orientierung eindeutig beschreibt.
• Die Verwendung von Bezugssystemen ist höchst charakteristisch für die Robotik.
• Basiskoordinaten (base frame): Mit dem Sockel des Roboters verbunden, die z-Achse ist meist
mit der Achse des ersten Drehgelenks verbunden.
• Anwenderkoordinaten (user frame): Mit der Aufnahme für Werkstücke verbunden, oft relativ
zu Weltkoordinaten.
• Handflanschkoordinaten (toolO frame): Mit dem Handflansch verbunden, mitbewegt und über
die kinematische Kette der Gelenke relativ zu den Basiskoordinaten festgelegt.
KB T A_BKA
PA T A_BP B
-1 wirkt genau 1
Die inverse Matrix T A_B umgekehrt: T A_B T B_A
KA T A_B 1 KB
PB T A_B 1 P A
In einer Fertigungsstraße steht ein Lackierroboter hinter einer Autokarosserie. Die Bezüge zwischen
Weltkoordinaten, Basiskoordinaten, Effektorkoordinaten und Objektkoordinaten sind wie folgt gegeben:
– Das Basiskoordinatensystem geht aus den Weltkoordinaten hervor durch eine Translation um
(20; 30; 0).
– Das Objektkoordinatensystem geht aus den Weltkoordinaten hervor durch eine Rotation um 180° um die z-Achse und eine
Translation um (350; 0; 130).
– Das Effektorkoordinatensystem geht aus den Basiskoordinaten hervor durch eine Rotation um 135° um die y-Achse und eine
Translation um (150; 0; 125).
– Ein Punkt P ist in Objektkoordinaten gegeben durch PO = (200; 25; 10).
Bestimmen Sie die Koordinaten des Punktes P in Weltkoordinaten und Basiskoordinaten!
Gelenkkoordinaten (joint )
• Der Roboter erreicht sein Ziel nur deshalb, weil jedes Gelenk exakt auf den richtigen Winkel bzw. die richtige
Länge gefahren wird.
• Die Robotersteuerung auf der maschinennahen Ebene muss bei einer Bewegung den Servomotoren des
Roboters korrekte Zielangaben machen und diese müssen im internen Koordinatensystem der Servomotoren
formuliert sein.
• Dieses sind die Gelenkkoordinaten und auf der unteren Steuerungsebene können nur sie benutzt werden.
• Die Gelenkkoordinaten heißen auch Gelenkwinkel, Maschinenkoordinaten oder Achskoordinaten.
• Die Robotersprachen enthalten sowohl Bewegungsbefehle die kartesische Koordinaten benutzen (Normalfall)
als auch Bewegungsbefehle, die Gelenkkoordinaten benutzen (seltener genutzt).
Die Armteile eines Roboters als kinematische Kette, in diesem Beispiel 6 Armteile (N=6)
1 x
2 y
z
3
. x
. y
z
N
T
tp T 06 ( 15.7 13.2 10.7 )
x T 06 90 °
y T 06 0 °
z T 06 165 °
x 1
y 2
z
3
x .
y .
z
N
Singularitäten
• sind spezielle Situationen, in denen die mathematische Ermittlung der Gelenkwinkel mit
vorgegebener Geschwindigkeit des TCP nicht möglich ist.
• Sie müssen durch zusätzliche Randbedingungen umgangen werden.
3.1 Grundlegendes
Strukturierte Typen
sind aus elementaren Datentypen zusammengesetzt und haben einen Bauplan (struct )
string, frame, point, config, joint, …
auch
Arrays, Collections, benutzerdefinierte Strukturen
byte
Alg. Ganze 8 bit, -128 … +127
Datentypen Zahlen short
Zahlen 16 bit, -32768 … +32767
int
Elementare Fließkomma 32 bit, -2147483648 …+2147483647
Typen Zahlen
num
14 Dezimalstellen Genauigkeit
Logik
bool
true / false
Zeichen char
8 bit ASCII, 0 - 255
• Wertebereiche
ergeben sich aus der Repräsentation (Binärcodierung)
z.B.: int als 32 bit signed integer, -4.294.967.296 … 4.294.967.295
• Konstante Werte
sind sog. Literale (Schreibweisen) von festen Werten im Programm, z.B.:
1234 für einen int Typ
“Achtung“ für einen string
Datentyp
legt Wertebereich und Operatoren/Funktionen fest
Aktueller Wert
elementare aktuelle Repräsentation der Daten, jederzeit veränderbar
Name
eindeutiger Bezeichner
Initialisierung
Anfangs-/Startwert
Gültigkeitsbereich
Sichtbarkeit in verschiedenen Teilen eines Programms
Lebensdauer
während der Ausführung eines Programms
Speicherplatz
physikalische Repräsentation (irrelevant für den Anwender)
• Wichtig: -VZ *
Datentypen der Operanden
Rangfolge der Operatoren Wert der Konstanter
cos(.)
Operanden eines Operators Variablen a Wert 2
Abarbeitung links/rechts
Nötige Klammerung
Parameter einer Funktion
-
Ergebnistyp einer Funktion
Wert der Konstanter
Variablen b Wert 2
Programm stop()
– Das Programm stop() wird am Ende der Ausführung der VAL3-Applikation aufgerufen. Es
kann keine Parameter besitzen.
– In diesem Programm finden sich im Allgemeinen alle zum korrekten Beenden der
Applikation erforderlichen Vorgänge:
– Das stop()-Programm kann, wie jedes andere Programm, in einem anderen Programm
aufgerufen werden (Anweisung call):
Das Aufrufen des stop()-Programms führt nicht zum sofortigen Abbruch der Applikation.
Der Typ einer Konstante ist implizit durch das System vorgegeben.
bBool = true
nPi = 3.141592653
sString = "Dies ist eine konstante Zeichenkette"
Zum Beispiel
procedure dummy(trsf t, dio d)
point p
p = {{100, -50, 200, 0, 0, 0}, {sfree, efree, wfree}}
call dummy({a+b, 2* c, 120, limit(c, 0, 90), 0, 0}, io:Ventil1)
Konstantentabelle/Array
joint j[5 ]
j[0] = {0, 0, 0, 0, 0, 0}
j[1] = {90, 0, 90, 0, 0, 0}
j[2] = {-90, 0, 90, 0, 0, 0}
j[3] = {90, 0, 0, -90, 0, 0}
j[4] = {-90, 0, 0, -90, 0, 0}
• Der Name einer Variablen ist eine Zeichenkette mit 1 bis 12 Zeichen von "a..zA..Z0..9_".
Er darf nicht mit einer Ziffer beginnen.
• Alle Variablen können als Array (Tabelle) verwendet werden. Einfache Variablen haben
die Größe 1. Z.B.: a[0], a[1], a[2]
• Die Größe einer Variablen kann mittels der Anweisung size()in Erfahrung gebracht
werden.
• Haben eine globale und eine lokale Variable den gleichen Namen, wird das Programm, in dem
die lokale Variable deklariert ist, die lokale Variable verwenden und nicht auf die globale
Variable zugreifen.
• Die Parameter eines Programms sind lokale Variablen, die nur in dem Programm, in dem sie
deklariert wurden, verwendet werden können. Jedoch erhalten sie ihre Initialisierung
(Startwerte) an der Stelle, an der das Programm aufgerufen wird (call).
Strukturierte Typen
Die einzelnen Felder von strukturierten Variablen sind mit einem ‘.’ gefolgt vom Namen des Feldes
zugänglich ‘pOrig.tsrf’.
"By Reference"-Parameter
– Bei einer "By Reference"-Parameter-Übergabe arbeitet das Programm nicht mehr mit einer Kopie des
vom aufrufenden Programm übergebenen Datenelements, sondern mit dem Datenelement selbst,
das nur lokal umbenannt wurde.
– Die Variablen des aufrufenden Programms, die als By Reference-Parameter verwendet werden,
ändern ihren Wert, wenn das aufgerufene Programm den Wert des Parameters ändert.
– Alle Elemente einer "By Reference" übergebenen Tabelle können benutzt und geändert werden.
– Wird ein Element einer Tabelle "By Reference" übergeben, so können dieses Element und alle ihm
folgenden Elemente benutzt und geändert werden.
– Die Anweisung size() ermöglicht es, die effektive Größe eines Parameters in Erfahrung zu bringen.
– Wenn eine Konstante oder ein Ausdruck "By reference" übergeben wurde, hat eine Zuweisung des
entsprechenden Parameters keinen Effekt: der Parameter behält den Wert bei.
Die Initialisierung einer Variablen des Typs bool ist immer false.
Variablen des Typs num werden vorprogrammiert auf den Wert 0 initialisiert.
Operatoren: Keine
• Die seriellen Ein-/Ausgänge des Systems sind ständig aktiviert. Die Verbindungen per Ethernet-Socket werden
beim ersten Lese-/Schreibzugriff durch ein VAL3-Programm aktiviert. Bei Beendigung der VAL3-Anwendung,
werden die Verbindungen per Ethernet-Socket automatisch deaktiviert.
• Die im System erklärten Ein-/Ausgänge sind in einer Applikation des Typs VAL3 direkt verwendbar, ohne dass
sie in der Applikation als globale oder lokale Variable erklärt werden müssen. Der Typ sio dient daher vor
allem zum Parametrieren eines Programms, in dem Ein- oder Ausgänge verwendet werden.
• Anweisungen, in denen eine Variable des Typs sio verwendet wird, die nicht einem im System deklarierten Ein-
/Ausgang zugewiesen wurde, bewirken eine Fehlermeldung.
• Eine Variable des Typs sio ist nicht von vornherein einem Ein-/Ausgang zugewiesen und führt zu einer
Fehlermeldung, wenn sie ohne Zuweisung verwendet wird.
4.3 Auswahlanweisung
4.7 Benutzerschnittstelle
Ein- / Ausgabe:
Externe Daten
Verzweigung:
Binär oder mehrfach
Grenzstelle:
Start, Ende, Funktionskopf, Label
Vordefinierter Programmschritt:
Unterprogramm-Aufruf, Funktion, Teilprozeß
Flussrichtung:
n>0 Verzweigung:
hier Binär
ja nein
/ n = -n
for i = 1 … n Wiederholungsanweisung:
hier while bzw. for Struktur
summe = summe + i
Ausgabe: summe
<Wahr Anweisungen>
endif
Wahr- Falsch-
Anweisungen Anweisungen
weiter
If-Anweisung:
if <bool Bedingung > Wahr-Anweisung else Falsch-Anweisung
if <bool Bedingung > Wahr-Anweisung
– Bedingung : Boolscher Ausdruck; ergibt sich true wird die Anweisung nach if
ausgeführt. Andernfalls wird – falls vorhanden – die Anweisung nach else ausgeführt.
– Falsch-Anweisung: else Anweisung kann fehlen
– Wenn mehrere if-Anweisungen geschachtelt sind, gehört ein else immer zum
unmittelbar voranstehenden if
else
ja nein
dis < 0
s = “zwei Loesungen“
Ende
ja nein
else
s = “zwei Loesungen“
Ausgabe: Ausgabe:
endif keine Lsg. zwei Lsg.
if x < 1 or x > 6
Eingabe: x
put(“error“)
ja
else
x < 1 or x > 6
put(x)
nein
endif “Error“
...
Ausg.: x
case 1
// Anweisungsblock für 1
… Wahl
break
case 2, 3 1
// Anweisungsblock für 2,3 Anweisung 1
…
break
switch- 2,3
default: Block Anw. 2,3
// Anweisungsblock sonst
…
break
sonst
endSwitch Anw. sonst
switch-
Marke weiter
weiter
put(“Kurs: “ + text)
Ausgabe: text
Ende
switch ((kurs+22.5)/45) % 8
Eingabe des Kurses:
kurs
case 0 text = “N“ break
case 1 text = “NE“ break
case 2 text = “E“ break
case 3 text = “SE“ break s = [(kurs+22,5)/45]int mod 8
case 4 text = “S“ break
case 5 text = “SW“ break
wähle für s =
case 6 text = “W“ break
case 7 text = “NW“ break
default
text = “Error“ 0 1 2 3 4 5 6 7 sonst
break
endSwitch
txt= txt= txt= txt= txt= txt= txt= txt= error
put(“Kurs: “ + text) "N" "NE" "E" "SE" "S" "SW" "W" "NW"
boolscher falsch
while <bool Bedingung> Bedingung
Ausdruck
// zu wiederholender wahr
// Anweisungsblock
…
Wiederholungs-
Wiederholungs- Anweisungsblock
Anweisung
endWhile
// weiter
Fortführung weiter
nach Ende
while bool-Ausdruck
Anweisung(en)
endWhile
– bool-Ausdruck: Boolscher Ausdruck; die Anweisung(en) werden solange wiederholt,
solange dieser Ausdruck true ergibt;
auch keinmal ist möglich
– Anweisung(en): Einzelne Anweisung oder Anweisungsblock
endWhile Lampe=!Lampe
dLampe = false
// Ende delay(0.5)
Lampe = off
weiter
Lampe = off
endFor
Inkrement:
// weiter i = i + Step
weiter
endFor
movej(Dest, …
// Ende
i = i -10
Ende
N Eingabe: N
sum i
i 1
i = 1, sum = 0
sum = sum + i
endFor
Ausgabe: sum
put(sum)
// Ende Ende
sum = sum + i
put(sum)
// Ende
sum = sum + n
sum = sum + N
endFor
put(sum) N=N-1
// Ende
Ausgabe: sum
Ende
do Wiederholungs-
Anweisungsblock
// zu wiederholender
Wiederholungs-
// Anweisungsblock
Anweisung
…
falsch
weiter
do Anweisung(en)
until bool-Ausdruck
do
x = get();
Eingabe.: x
until x == 270
// weiter
x = 270
falsch
wahr
weiter
num x
Eingabe Wiederholung:
do
Tastencode: x
x = get();
until x == 270
// wiederhole
// weiter
until x == 270
… weitere Anweisungen
• Das Bedienerdisplay hat 14 Zeilen mit je 40 Zeichen. Die letzte Zeile kann zur
Erstellung von Menüs mit zugeordneter Taste F1, F2, … verwendet werden.
• Eine weitere Zeile steht zur Anzeige eines Titels zur Verfügung.
Beispiel:
Service:
pick up Bauelement
vom Vorrat an Position (Row, Col) und
setze bei Erfolg die Variable Success auf ‘true’
// Aufrufender Programmteil
bool Erfolg 2, 4, Erfolg
call pick(2, 4, Erfolg)
if Erfolg pick(Row, Col,
…. Erfolg = true Success)
Return
num i
for i = 0 to size(Text)-1
goto (0, i)
put (Text[i])
endFor
end
// Deklaration
num Ergebnis
programm start()
begin
call avg(3, 7)
put(“Avg: “)
putln(Ergebnis)
end
// Deklaration lokal
num lErgebnis
programm start()
begin
call avg(3, 7, lErgebnis)
put(“Avg: “)
putln(lErgebnis)
end
Lokale Variablen:
– sind nur im definierenden Unterprogramm bekannt
– müssen nicht global eindeutig benannt werden
– werden bei jedem Unterprogrammaufruf neu angelegt und müssen deshalb mit einem Wert
initialisiert werden
– werden beim Verlassen des Unterprogramms gelöscht, der aktuelle Wert ist verloren
– werden für transiente (temporäre) Daten verwendet
– zum Datenaustausch werden Parameter verwendet
6.1 Übersicht
6.2 Emulator
6.5 Programmierung
6.6 3D Modellage
• Zellenparameter kontrollieren
• Fertig stellen mit Beenden
1. Enter 2. F7
5. OK
6. Start
pD
pB tGreifer2
tGreifer2 pC
tGreifer1
pA
tGreifer1
Punkte teachen im Emulator Das „@“ vor dem Punkt zeigt an, dass sich das Tool nun an diesem genau
an diesem Punkt befindet.
Weitere Symbole:
! Punkt nicht erreichbar
~ Werkzeug ungefähr an dieser Position
0 Punkt hat noch keine Werte
1. Controller markieren
2. Neue Applikation
3. Name Vergeben
(Speicherort beibehalten)
Applikation mit
Unterprogramme
Eigenschaften
des Controllers
1. Applikation markieren
2. Neues Programm
3. Name Vergeben
(Speicherort
beibehalten)
4. Bestätigen
1. Applikation markieren
3. Typ auswählen
4. Bezeichnung (Typen-
Vorsilbe beachten)
5. Bestätigen
• Die Variable Points beschreibt eine Position mit zugehöriger Rotation im Raum
• Ändern der Koordinaten eines Punktes (x, y, z, rx, ry, rz)
• World als Bezugssystem
• Transformation (trsf)
• Achtung bei Gelenkkonfiguration
• Die Variable Tool definiert Abstand und Rotation vom TCP zum Flange
• Der TCP (Tool Center Point) ist der Arbeitspunkt eines Werkzeuges
• Ändern der Parameter eines Werkzeuges (x, y, z, rx, ry, rz)
• Unter Geometrische Beschreibung sind die Bezüge der Elemente untereinander ersichtlich
(Bezugssystem für pA ist World)
• Ein Ändern dieser Bezüge ist mittels Drag and Drop möglich (neues Bezugssystem für pA ist
Frame1)
Speichern
Simulation starten
Betriebsmodus „Hand“
Arm einschalten
„Move“ führt
Bewegung aus
Code-Beispiel
Programmcodes UserPage
void gotoxy(num nX, num setzt den Cursor auf die Stelle (x,y)
nY)
void put(num nWert) Schreibt die Zahl oder den Text an die aktuelle Cursor
void put(string sText) Position
void putln(num nWert) Wie put, aber mit zusätzlichem Zeilenumbruch
void putln(string sText)
num clock() Liefert den aktuellen Wert der internen Uhr
Beim Booten wird der Wert wieder auf 0 gesetzt
• User Page
(39, 0)
(0, 0)
Y
(0, 13)
Programmcodes Tastatureingabe
num get(num& nWert) Wartet auf Bestätigung der Eingabe mit ENTER oder
num get(string& sText) ESC
num get() Wartet auf Tastendruck und gib den ASCII Code der
zuerst gedrückten Taste
num get(Key) Gibt den Unicode der zuletzt gedrückten Taste aus
Wenn keine Taste gedrückt wurde ist die Rückgabe -1
bool isKeyPressed(num nCode) Gibt true aus, wenn die Taste noch gedrückt ist
()
Autovervollständigung
nutzen um Tipp- bzw.
Syntaxfehler zu Vermeiden!
Operatoren
== gleich != ungleich
Anweisung if Beispiel
Unterprogramme aufrufen
Multitasking
Priorität
– Gibt an wie viele Programmzeilen am Stück abgearbeitet werden, bevor der nächste Task
bearbeitet wird
– Werte von 1 bis 100 sind zulässig
– Abgeben an den nächsten Task bei folgenden Befehlen auch wenn die angegebene
Zeilenanzahl noch nicht erreicht ist:
watch(), delay(), wait(), waitEndMove(), setMutex()
Open(), close()
Get()
disablePower()
taskResume(), taskKill()
libLoad(), libSave(), libDelete(), libList(), setProfile()
sioGet(), sioSet(), bei Operator „=“
Multitasking
nSprung
– = 0 - weiter ab aktueller Zeile
– > 0 - weiter an „nSprung“-Zeilen nach der aktuellen Zeile *
– < 0 - weiter an „nSprung“-Zeilen vor der aktuellen Zeile *
* Vermeiden! Kann zu Problemen führen.
Taskstatus
Fahrbefehle
mdesc mDesc (neue globale Variable) Motiondescriptor
num movej(joint jPosition, tool tWerkzeug, mdesc mDesc) Achsinterpolation
(Joint)
num movej(point pPosition, tool tWerkzeug, mdesc mDesc) Achsinterpolation
(Point)
num movel(point pPoint, tool tWerkzeug, mdesc mDesc) Kartesische
Interpolation
num movec(point p1, point pZiel, tool tWerkzeug, mdesc mDesc) Kreisinterpolation
Blending
• Bei waitEndMove() wird der Anschlussbewegung zu Punkt C erst ausgeführt, wenn Punkt B
erreicht wurde
Anweisung movej()
– Achsinterpolation
– Nichtgeradlinige Bewegung
– Keine Probleme mit Singularitäten
– Bahnkurve nur grob vorherzusehen
Anweisung movel()
– Kartesische Interpolation
– Geradlinige Bewegung
– Probleme mit Singularitäten slow down
– Bahnkurve genau vorherzusehen
Anweisung movec()
– Kreisinterpolation
– Kreisförmige Bewegung
– Probleme mit Singularitäten slow down
– Bahnkurve genau vorherzusehen
Motion Stack
bool isEmpty() Liefert true, wenn der Motion Stack leer ist
• Versatz in Z um 478 mm
• Bezugssystem 3D Ansicht
• Komplette 3D-Modellierung der Roboterzelle siehe Kapitel 6.6
Liefert position von TCP mit Ausgabe als Point, Armkonfiguration bleibt in Joint
appro(pPunkt,{0,0,100,0,0,0})
(generierter Punkt)
100 mm
pPunkt
(originaler Punkt)
Appro generiert einen neuen Punkt mit Bezug auf einen bestehenden Punkt unter
Angabe der Transformation.
Undefinierte
Position
X+200
Z+100
X+200
Z+100
Z+100
VAL3 Code
Vorzeichen beachten!
(rechte Hand Regel)
30°
Achswinkel
(0,0,0,0,0,0)
Über rechtsklick auf den
Roboter
Punkt 1 …
… Punkt 2 …
• Referenzframe des Greifers an der richtigen Stelle Bearbeitung beenden (Klick auf
„Referenzframe bearbeiten“)
• Greifer-Geometrie als Neues Tool definieren und an den Handler vom TX90L montieren
• Handler bzw. TCP (Tool Center Point) sitzt nicht an der Spitze des Greifers
Handler „Bearbeiten“
• Durch Drehen um die Achsen des Koordinatensystems (nur 90° Schritten) zum Roboter
Ausrichten
• Frame auf eine Befestigungsbohrung des Roboters setzen und zum Welt-Koordinatensystem
ausrichten
• Weiteren Frame auf entsprechende Bohrung am Roboter setzen, Ausrichten und Werte notieren
Interner Ventilblock
• Der Stäubli TX 90 L verfüg bereits werksseitig pneumatische Ventile in seinem Standfuß. Diese
sind bereits in der Entwicklungsumgebung hinterlegt.
• Entsprechende Tool Variable anklicken – Doppelklick auf Gripper – Ventil auswählen
• Alternativ kann ein Dio (digitaler Ein-/Ausgang) mit dem entsprechenden Ventil belegt werden
• Die Ansteuerung des Ventil erfolgt über die Zuweisung „true“ bzw. „false“
• Über eine Modbus können zum Beispiel die Signale einer SPS eingebunden werden
• Die Art und Anzahl aller Karten der angeschlossenen SPS muss angelegt werden
• Die modbus.xml Datei muss in der Zelle unter „Modbus“ gespeichert werden
• Die entsprechenden Ein- / Ausgänge stehen nun zur Verfügung
• Die Verknüpfung der SPS Signale mit den globalen Variablen erfolg nach dem gleichen Prinzip
wie bei den internen Ventilen
Namen vergeben
Sobald der Socket in der Val3 Applikation aufgerufen wird zeigt das
Serverprogramm „connected“
Herausgegeben durch: Teilprojekt #aufstieggestalten der OTH Amberg-Weiden aus dem Verbundprojekt „OTH
mind“ mit der OTH Regensburg des Bund-Länder-Wettbewerbs „Aufstieg durch Bildung:
offene Hochschulen“
Copyright: Dieses Kursmaterial ist lizenziert unter einer Creative Commons Namensnennung –
Weitergabe unter gleichen Bedingungen 4.0 International Lizenz (CC BY-SA 4.0). Bei einer
Weitergabe soll der Name des Urhebers wie folgt genannt werden: „Michael Uschold, OTH
mind #aufstieggestalten, OTH Amberg-Weiden“.
Hinweis: Diese Publikation wurde im Rahmen des vom Bundesministerium für Bildung und
Forschung (BMBF) geförderten Bund-Länder-Wettbewerbs „Aufstieg durch Bildung: offene
Hochschulen“ erstellt. Die in dieser Publikation dargelegten Inhalte liegen in der
alleinigen Verantwortung des Autors.