Rob 3
Rob 3
Erklärung
Hiermit erkläre ich, dass ich die vorliegende Arbeit selbstständig angefertigt, alle
benutzten Quellen und Hilfsmittel vollständig und genau angegeben habe. Ich habe
alles kenntlich gemacht, was ich aus Arbeiten anderer unverändert oder mit
Änderungen übernommen habe.
Christoph Hyllus
II
Vorwort
Vorwort
An dieser Stelle möchte ich mich bei all jenen bedanken, die mich bei der
Durchführung dieser Diplomarbeit unterstützt haben.
Mein erster Dank gilt Prof. Dr. Matthias Seitz, der die Durchführung dieser
Diplomarbeit ermöglicht hatte, sowie für die Betreuung und Korrektur der
Diplomarbeit
Besonders danken möchte ich Herrn Hans Peter für all seine Lösungstipps für
angefallene Probleme der Visual – Basic – Programmierung.
Ein weiterer Dank gilt der Firma EUROBTEC, die mich bei Fragen im Bereich des
Low – Level - Protokolls unterstützt hat.
Ein weiterer Dank geht an Prof. Dr. R.- D. Brückbauer für die Zweitkorrektur dieser
Arbeit.
III
Inhaltsverzeichnis
Inhaltsverzeichnis
1 Einleitung ..........................................................................................................................1
1.1 Problemumfeld .........................................................................................................1
1.1.1 Entwicklung der Roboter ................................................................................3
1.1.2 Anwendungsbereiche der Roboter...............................................................4
1.2 Aufgabenstellung .....................................................................................................6
1.2.1 Die Schwerpunkte der Diplomarbeit .............................................................6
1.3 Überblick über die Arbeit ........................................................................................8
2 Die Ansteuerung eines Roboters..................................................................................9
3 Kinematik eines Manipulators...................................................................................... 11
3.1 Die Anatomie eines Roboters..............................................................................12
3.1.1 Aufbau des Roboters ROB 3 .......................................................................12
3.2 Arbeitsraum des Roboters ................................................................................... 14
3.3 Transformation in Welt- und Achsenkoordinatensysteme .............................. 15
3.3.1 Denavit – Hartenberg – Methode................................................................ 19
3.3.2 Rückwärtstransformation ( inverse Transformation)................................ 24
3.3.3 Vorwärtstransformatio n (direkte Transformation ) ....................................27
4 Programmierungsarten eines Manipulators .............................................................. 30
4.1 Teach-in-Programmierung ................................................................................... 30
4.2 Play-Back-Programmierung................................................................................. 31
4.3 Off-Line-Programmierung..................................................................................... 31
4.4 Sensorunterstützte Programmierung .................................................................31
5 Programmieren des Roboters ROB 3 ........................................................................32
5.1 Low – Level – Protokoll ........................................................................................ 33
5.1.1 Kommunikationsablauf................................................................................. 33
5.1.2 Kommandos zur Ansteuerung des Roboters ............................................34
6 SPS – Programmierung mit ProSys ...........................................................................38
6.1 Ablaufssprachen(AS) – Editor............................................................................. 38
6.2 Strukturierter Text (ST) - Editor...........................................................................39
7 Visual Basic (VB) ...........................................................................................................42
7.1 Allgemein ................................................................................................................ 42
7.2 Die Entwicklungsumgebung (IDE) ......................................................................42
IV
Inhaltsverzeichnis
V
Kapitel 1 Einleitung
1 Einleitung
1.1 Problemumfeld
Der Anfang der Roboter geht ins 17. und 18. Jahrhundert zurück. In diesem
Zeitraum gab es eine Anzahl genialer Erfindungen. Die meisten davon galten der
Unterhaltung.
Etwa 1750 wurden verschiedene mechanische Musikautomaten in menschlicher
Größe gebaut. 15 Jahre später wurde eine mechanische Puppe konstruiert, die
zeichnen konnte [3]. Damals, ähnlich wie heute, nahmen diese Erfindungen die
Tierwelt oder uns Menschen als Grundidee und Vorbild. Die Bewegung der
Menschen und Tiere wurde auch bei der Entwicklung der Roboter genutzt. Viele
mobile Roboter bewegen sich heute ähnlich wie Insekten und in automatisierten
Fabriken sieht man oft Bewegung der Industrieroboter, die sehr der des
menschlichen Armes ähnelt (Abbildung 1.1).
Der Begriff „Roboter“ wurde 1920 von dem tschechoslowakischen
Schriftsteller Karel Capek geprägt. Die ersten Roboter danach kennen die meisten
Menschen aus den Science - Fiction – Erzählungen und Filmen. Der erste
kommerzielle Roboter wurden erst 1959 vorgestellt. Die Steuerung erfolgte durch
Begrenzungsschalter und Kurvenscheiben. Ein Jahr später wurde ein Roboter des
Typs „Unimate“ vorgestellt. Er benutzte zur Steuerung die Prinzipien der
numerischen Steuerung und wurde hydraulisch angetrieben.
Seite 1
Kapitel 1 Einleitung
Im darauffolgenden Jahr wurde ein Roboter des gleichen Typs bei Ford Motor
Company installiert. Er arbeitete mit einer Druckgussmaschine zusammen.
Die meiste Verwendung fanden die Roboter bei der Montage bei der Autoindustrie.
So auch 1978 der PUMA - Roboter (Programmierbare Universalmaschine für
Montagezwecke), der aus den Entwürfen von General Motors stammt [3].
In der heutigen Realität sind Roboter hochautomatisierte Handhabungsgeräte, die
von Computern gesteuert, aber immer noch von uns Menschen gebaut und
programmiert werden.
Die Handhabungsgeräte können nach folgendem Schema unterteilt werden:
Handhabungsgerä te
Geräte zum Halten/Bewegen von Objekten
Transportsysteme Manipulatoren
fester Bewegungsablauf Arbeitsmaschinen zur
Objektbewegung
lose feste
Flurförder- Transport synchrone
Prozessgesteuerte programmgesteuert
-fahrzeuge -systeme
Schieber
Fließbänder
fest- frei-
programmiert programmiert
Industrie-
lose
-roboter
fernsteuerbar fest
mobil stationär
Thema der
Diplomarbeit
Seite 2
Kapitel 1 Einleitung
Bleiben wir aber bei der heutig en Wirklichkeit, bei dem Industrieroboter.
Nach VDI-Richtlinie 2860 (von 1981) sind Industrieroboter universal einsetzbare
Bewegungsautomaten mit mehreren Achsen, deren Bewegung hinsichtlich
Bewegungsfolge und Wegen bzw. Winkeln frei programmierbar und gegebenenfalls
sensorgeführt wird. Sie sind mit Greifern, Werkzeugen oder anderen
Fertigungsmitteln ausrüstbar und können Handhabungs- und/oder
Fertigungsaufgaben ausführen [4].
Die industrielle Entwicklung und das Verlangen nach Erzeugnissen in großen
Stückz ahlen führten zur Automatisierung der Maschinen. Unser industrielles
Zeitalter, angefangen bei der Energietechnik, ist geprägt von
Produktivitätssteigerungen und damit verbundenen Fragen: wie schnell und wie
günstig, kann man ein Produkt herstellen ohne dabei an der Qualität zu verlieren.
Um diese Möglichkeiten zu steigern, muss eine Maschine mit mehr Kraft,
unermüdlich und schnell menschliche Tätigkeiten nachahmen.
In vielen Industriezweigen ist das fast gelungen. Durch ausgefallene Sensorik
schaffte man Hallen voller Industrieroboter, je nach Bestellung und Produkt variabel
programmiert, überwacht von einer handvoll Techniker, wo früher Dutzende Arbeiter
einer monotonen Beschäftigung nachgingen.
Die wichtigsten Gründe auf Handhabungstechnik zurückzugreifen sind:
♦ Wirtschaftlichkeit, Schnelligkeit der Roboter mit ihrer Gewichtskraft kann von
keinem Menschen ersetzt werden. Dazu kommen die ständig steigenden
Lohnkosten.
♦ Arbeitsschutz, in vielen Industriebereichen kann es durch schädliche Stoffe wie
Säure oder Dämpfe sehr schnell zu Verletzungen der Arbeiter kommen.
♦ Qualitätssicherung, viele Werkstücke sollen während der Bearbeitung nicht
mit dem Handschweiß in Berührung kommen, damit es nicht zur unerwünschten
Korrosion kommt.
♦ Miniaturisierung, die Größe mancher Objekte (Chip Fertigung) überschreitet die
Grenzen menschlicher Präzision, was die Positioniergenauigkeit und die
Arbeitsgeschwindigkeit betrifft [1].
Seite 3
Kapitel 1 Einleitung
So steigt die Anzahl der gebauten und eingesetzten Roboter im Industriebereich seit
1980 exponenzial. Nach United Nations Economic Commission for Europe in
Zusammenarbeit mit der International Federation of Robotics (FR) im Bericht "World
Robotics 2000" über den Stand und die Zukunft der Robotik soll es in der In dustrie
weltweit 742500 Roboter geben [16].
Seite 4
Kapitel 1 Einleitung
Ein anderer mobiler Roboter, „KURT II“ verrichtet seine Dienste bei der autonomen
Inspektion kommunaler Abwasser. Trotzdem dominieren die in der Industrie
eingesetzten Roboter gegenüber den Dienstleistungsrobotern.
Neben den oben genannten Gebieten werden Roboter auch in Spezialbereichen
eingesetzt, wie die bei Expeditionen im All oder bei schwer zugänglichen
Bergungsarbeiten. Mobile Roboter werden bei Militär und Polizei z.B. zur
Bombenentschärfung eingesetzt, wo bei direkten Einsätzen menschliches Leben in
Gefahr ist.
Nach Delphi – Prognosen (zusammengefasste Schätzungen von mehreren
Wissenschaftlern) werden vers tärkt Roboter in nächster Zukunft auf folgenden
Gebieten eingesetzt:
♦ Roboter für Pflege (Alten, Kinder, Kranken, Blinden),
♦ Löschroboter für Brandbekämpfung und Menschenrettung,
♦ Roboter für Bergbau, für Tunnelprojekte, und
♦ Roboter als Außenskelette für Gelähmte [1].
Seite 5
Kapitel 1 Einleitung
1.2 Aufgabenstellung
Geschichte
und
Demo
Entwicklung
Pick&Place Schnittstellen
der
programmie
Roboter
rung
Diplomarbeit:
Untersuchung zur Steuerung
SPS
Vorwärts- und eines fünfachsigen Roboterarmes
Programmie
Rückwärts- mit einer SPS
-rung
transformation
Seite 6
Kapitel 1 Einleitung
Seite 7
Kapitel 1 Einleitung
Seite 8
Kapitel 2 Die Ansteuerung eines Roboters
ZIEL
ZIEL
START
START
Die Komplexität der Steuerung ist auf der Abbildung 2.2 auf der nächsten Seite zu
sehen.
Seite 9
Kapitel 2 Die Ansteuerung eines Roboters
Programmspeicher
PtP-Steuerung CP-Steuerung
Interpolation
Koordinatentransformation
Vor- und Rückwärtstransformation
Sensordaten-
Lageregelkreis -verarbeitung
Roboterarm Werkstück
Werkzeug Umwelt
Seite 10
Kapitel 3 Kinematik eines Manipulators
Greifer
Greifer
Seite 11
Kapitel 3 Kinematik eines Manipulators
Der Roboterarm ROB 3 (siehe Abbildung 3.2) ist aus 5 – Gelenken (Achsen) und
einem Greifer aufgebaut und besitzt somit 5 Freiheitsgrade. Der mechanische Teil
des Roboters wird nach dem Vorbild des menschlichen Skeletts aufgebaut. Analog
dazu sind auch die Bezeichnungen der Achsen 1 bis 5 mit:
- Achse 1 – Körperdrehung
- Achse 2 – Schulter
- Achse 3 – Ellbogen
- Achse 4 – Handgelenk
- Achse 5 – Handdrehung [ 8 ].
Seite 12
Kapitel 3 Kinematik eines Manipulators
Die Anatomie des ROB3 erlaubt, ausgehend von der Grundposition (Abb. 3.3)
folgende Winkelbereiche:
Der Winkelbereich der Achse 2 wurde vom Verfasser im Visual Basic – Programm
+70°..-15° begrenzt. Der Grund war die mögliche Kollisionsgefahr des Roboterarmes
(siehe dazu Abbildung 3.4).
80° -100°
A1
-80°
Seite 13
Kapitel 3 Kinematik eines Manipulators
R = 460 mm
R = 460mm
Kollisionsgefahr
Draufsicht Seitenansicht
Die Abbildung 3.4 zeigt den Arbeitsraum des Trainingsroboters ROB 3 der Firma
Eurobtec. Der mechanische Aufbau erlaubt es den Endeffektor des Roboterarmes
auch in einen möglichen Kollisionsbereich (z. B. Tischunterkante) zu steuern, was
die Beschädigung des Roboters zur Folge haben kann und durch entsprechende
Programmierung vermieden werden muss.
Seite 14
Kapitel 3 Kinematik eines Manipulators
A1 A2 A4
A3
Der Roboterarm wird jedoch durch seine Gelenke bewegt und benötigt deshalb
bei einer Drehbewegung achsenspezifische Sollwerte. Damit ergibt sich bei einem
fünfachsigen Roboterarm der TCP als Funktion der Winkel der einzelnen Achsen:
PTCP= f( ∂ 1, ∂ 2, ∂ 3, ∂ 4, ∂ 5 )T . (3.1)
Mit den Winkeln hat man die Position des TCP, aber keine Orientierung des
Greifers selbst, die Greiferlage(Abb. 3.6). Um die Greiferlage zu erfassen müssen die
drei Orientierungswinkel ψ (xe, Gieren), ϑ (ye, Nicken), ϕ (z e, Rollen ) vorgegeben werden.
Seite 15
Kapitel 3 Kinematik eines Manipulators
Orientierungswinkel ye
Endeffektor
xe
ze
Basiskoordinatensystem
Transformation, ∂ = f –1(p)
Umgekehrt liefert der Roboterarm die Istwerte der einzelnen Achsen als
Rückmeldungen nach dem Erreichen der Positionen als Gelenkwerte, die wiederum
in kartesische Koordinaten umgerechtet werden müssen. Dieser Vorgang wird
Vorwärtstransformation oder direkte Transformation genannt p = f ( ∂ ).
Rückwärtstransformation ∂ soll
P soll
f –1 Roboter
Steuerung
Sensorik
Vorwärtstransformation
Seite 16
Kapitel 3 Kinematik eines Manipulators
Wie schon am Anfang des Kapitels erwähnt, bilden die einzelnen Gelenke (hier
Achsen) des Roboterarmes kinematische Bewegungsketten. Innerhalb der
Bewegungsketten werden in Schritten die verwendeten Koordinatensysteme um die
nächstfolgende Achse rotiert oder/und in eine beliebige Richtung verschoben.
Sind alle Vektoren (Achsen) so aneinandergereiht, kann die Position des TCP
(des Endeffektors) bestimmt werden. Diese Umrechnung eines Koordinatensystems
ins Andere wird mit Hilfe der homogenen Transformation realisiert. Dabei handelt es
sich um eine 4x4 Matrix:
r11 r12 r 13 tx
r 21 r 22 r 23 ty
Transfo rmationsmatrix T = (3.3)
r31 r32 r 33 tz
0 0 0 1
1 0 0 tx
0 1 0 ty
T Trans (x, y, z) = (3.4)
0 0 1 tz
0 0 0 1
1 0 0 0
0 cos θ − sin θ 0
T Rot (x, θ ) = (3.5)
0 sin θ cosθ 0
0 0 0 1
Seite 17
Kapitel 3 Kinematik eines Manipulators
cos θ 0 sin θ 0
0 1 0 0
T Rot (y, θ ) = (3.6)
− sin θ 0 cosθ 0
0 0 0 1
cosθ − sin θ 0 0
sin θ cosθ 0 0
T Rot (z, θ ) = (3.7)
0 0 1 0
0 0 0 1
Die kinematischen Ketten können nun durch Multiplikation der oben genannten
Transformationsmatrizen erfasst werden. Als Ergebnis der Multiplikation steht dann
die gesamte Translation Tn (mit n als Anzahl der Gelenke und Multiplikationen)
bezogen auf das ursprüngliche Koordinatensystem.
Innerhalb dieser Ketten wird in jedem Schritt das zuletzt verwendete
Koordinatensystem (Gelenkkoordinatensystem) um die entsprechende Achse rotiert
bzw. verschoben, um wieder auf das Basiskoordinatensystem zurückzukommen.
Für das Zurückrechnen der Orientierungswinkel ψ (xe, Gieren ), ϑ (ye,
Nicken), ϕ (z e, Rolle n) (siehe Abb. 3.6) des Greifers ergibt sich nach (3.5 – 3.7) und
cos ϕ cos θ cos ϕ sin θ sin ψ − sin ϕ cosψ cos ϕ sin θ cosψ + sin ϕ sinψ 0
sin ϕ cos θ sin ϕ sin θ sin ψ + cos ϕ cosψ sin ϕ sin θ cosψ − cos ϕ sinψ 0
(3.9)
− sin θ cos θ sin ψ cosθ cosψ 0
0 0 0 1
Seite 18
Kapitel 3 Kinematik eines Manipulators
- die xn – Achse steht senkrecht zur z n-1 und zeigt von ihr weg [5].
Die Länge a n des Gliedes wird als Länge der Linie definiert, die jeweils auf den
Achsen zweier benachbarter Gelenke senkrecht steht (Abbildung 3.8).
y n-1 yn
x n -1 xn
z n-1 zn
an
Abbildung 3.8 : Senkrechte Verschiebung zwischen benachbarten Gelenken
Seite 19
Kapitel 3 Kinematik eines Manipulators
Die Entfernung ln, ist die Entfernung zwischen den Lotrechten der benachbarten
Gliedern (Abbildung 3.9). Diese Größe wird auch als Offset des Gelenks bezeichnet.
Im Fall eines linearen Gelenks handelt es sich um die Variable des Gelenks.
y n-1
∂n
x n-1
z n -1 yn ln
∂ n+1
xn
zn
Der Winkel ?n besteht aus der Verdrillung zwischen den Achsen der Gelenke in einer
zu a n senkrechten Ebene (Beispiel Abb. 3.12 und 3.13).
Der Winkel ∂ n ist der Winkel zwischen den Gliedern, der als Winkel zwischen den
Lotrechten a n und a n-1 in der Ebene senkrecht zu den Achsen des Gelenks
gemessen wird [3].
Eine allgemeine Transformation kann hergeleitet werden durch:
§ eine Drehung um den Winkel ∂ n um die Achse z n-1,
damit xn-1 parallel zu xn wird
§ eine Verschiebung um x n die Entfernung ln entlang z n-1
Seite 20
Kapitel 3 Kinematik eines Manipulators
Als Beispiel für die Anwendung der Denavit – Hartenberg – Methode wurden die
Transformationsmatrizen für den ROB3 aufgestellt.
Der Verfasser geht von der Grundstellung des Roboters wie in der Abb.3.5 aus.
Bei dem Verfahren ist es wichtig zuerst alle Parameter für die Gelenke zu definieren.
Nach Denavit – Hartenberg – Methode ergibt sich für ROB3 folgende Tabelle:
Gelenk ∂n λ an ln
(Achse)
1 ∂1 90° 0 0
2 ∂2 0° a 2=200 0
3 ∂3 0° a 3=130 0
4 ∂4 0° 0 0
5 ∂5 -90° 0 0
Greifer 0° 0° 0 l5 =130
Die sechste Zeile in der Tabelle 3.1 ist reine translatorische Verschiebung(nur Offset)
durch den Greifer. Die aufeinander folgenden Gelenkachsen sind zueinander parallel
angeordnet. In der Abbildung 3.11 sind die einzelnen Koordinatensysteme der
entsprechenden Achsen gezeichnet, wobei das erste Koordinatensystem (Achse 1)
mit dem Index 0 beginnt. Bei der räumlichen Darstellung der
Weltkoordinatensysteme wird die „Rechte – Hand - Regel“ verwendet (Abb. 3.10).
Seite 21
Kapitel 3 Kinematik eines Manipulators
z: Mittelfinger
y: Zeigerfinger
x: Daumen
z0,y1 y0 y2 y3 y4
x1,x0 x2 x3, z4
z1 z2 z3 x4
a2 a3 l5
y1
A2 x1
z1
z0
+90° y0
x0
Seite 22
Kapitel 3 Kinematik eines Manipulators
Nach dem die beiden benachbarten x- Achsen in Deckung gebracht worden sind,
ergibt sich beim letzten Drehgelenk A5 ein Winkel λ von - 90° (Abb.3.13)
y3 z4
y4
-90°
x3 x4
z3
Abbildung 3.13 : Drehung um die x – Achse bei letztem Gelenk
Mit dieser Methode ergeben sich für den ROB 3 mit seinen 5 Achsen und dem
Greifer (siehe Abbildung 3.5) nach Tabelle 3.2 folgende Matrizen:
cos ∂1 0 sin ∂1 0
sin ∂1 0 − cos ∂1 0
A1= (3.12)
0 1 0 0
0 0 0 1
cos ∂ 4 −sin ∂ 4 0 0
sin ∂ 4 cos ∂ 4 0 0
A4= (3.15)
0 0 1 0
0 0 0 1
Seite 23
Kapitel 3 Kinematik eines Manipulators
cos ∂ 5 0 − sin ∂ 5 0
sin ∂ 5 0 cos ∂ 5 0
A5= (3.16)
0 −1 0 l5
0 0 0 1
1 0 0 0
0 1 0 0
Greifer => Trans (x) = (3.17) reine transl. Verschiebung nach (3.4)
0 0 1 l5
0 0 0 1
mit l 5 = 130mm
Die Transformationsmatrix lautet somit:
6
∏
6
T = Ai = (A1*A2*A3*A4*A5*A6) (3.18)
i =1
Durch die Multiplikation erhält man eine 4x4 Matrix aus der man durch einen
Komponentenvergleich (3.9) und (3.10) direkt die Position (x, y, z ) des TCP
bestimmen kann (p = f ( ∂ )). Die Orientierungswinkel ψ , θ , ϕ werden ebenfalls aus
Seite 24
Kapitel 3 Kinematik eines Manipulators
Manipulators aufgestellt. Die hat zum Vorteil, dass die Lösungsgleichungen bereits
vorhanden sind.
HDS 06 [5] ROB3
q1 ∂1
q2 ∂2
q3 ∂ 3+ 90°
q4 0°
q5 ∂4
q6 ∂5
Im [5] ergeben sich für die 6 Winkel des HDS 06 folgende Gleichungen:
y
∂1 = arctan2 (3.19)
x
( (c1× x ) + ( s1× y )) + z − l 4 − a 2
2 2 2 2
∂ 3 = arctan2 (3.20)
2
± 4 a 22 l 4 2 − ( ( c1 × x ) + ( s1 × y )) + z 2 − l 42 − a 2 2
2
( a 2 + (l 4 × s3 ) ) × z + ( ( c1× x ) +( s1 × y ) ) × (l 4 × c 3)
∂ 2 = arctan2 (3.21)
(( c1 × x ) +( s1× y ) ) × (a 2× ( l4 × s3 )) − ( z × l 4 × c 3)
s1zex − c1zey
∂ 4 = arctan2 (3.22)
c32 ( c1zex + s1zey ) + s32 zez
Seite 25
Kapitel 3 Kinematik eines Manipulators
{ }
− c5 c4 c32 ( c1 yex + s1 yey ) + s 32 yez + s 4 ( s1 yex − c1 yey ) + s5 s32 ( c1 yex + s1 yey ) − c32 yez
∂ 6 = arctan2
− s4 c32 ( c1 yex + s1 yey ) + s32 yez + c 4 ( s1 yex − c1 yey )
(3.24)
Mit:
s = sin – Funktion + Winkelnummer, die mit der Achsennummer übereinstimmt,
c= cos – Funktion , z.B. und c = 32 = cos ( ∂ 3 + ∂ 2 )
Die Funktion arctan2 berechnet den Arcustangens aus den Parametern x und y im
Bereich -π ; π . Dieser entspricht weitgehend dem Arcustangens aus x / y, allerdings
kann hier das Vorzeichen beider Parameter ausgewertet und so der Quadrant des
Ergebnisses bestimmt werden.
Die kartesischen Koordinaten der einzelnen Orientierungswinkel ergeben sich
wieder durch das Gleichsetzen der beiden Formeln (3.9) und (3.10)
(Orientierungswinkel gegeben).
z.B. Xex = cos ϕ cosθ
y
∂1 = arctan2 (3.25)
x
( ( c1× x ) + ( s1× y ) ) + z − a3 − a2
2 2 2 2
∂ 3 = arctan2 (3.26)
2
± 4 a 2 2 a 32 − ( ( c1× x ) + ( s1 × y ) ) + z 2 − a 32 − a 2 2
2
Seite 26
Kapitel 3 Kinematik eines Manipulators
( a 2 + ( a 3 × s3) ) × z + ( ( c1 × x ) +( s1 ×y ) ) ×( a 3 ×c3 )
∂ 2 = arctan2 (3.27)
( ( c1 × x ) +( s1 ×y ) ) ×(a 2 ×( a 3 × s3 ) ) − ( z × a3 × c 3)
s1zex − c1zey
0 = arctan2 (3.28)
c32 ( c1 zex + s1zey ) + s32 zez
∂ 5 = arctan2
{ }
−c 4 c32 ( c1 yex + s1 yey ) + s32 yez + s4 s32 ( c1 yex + s1 yey ) − c32 yez
(3.30)
( s1 yex − c1 yey )
Vorwärtstransformation
Achsenkoordinatensystem Weltkoordinatensystem
Nach [5] ergeben sich folgende Gleichungen für den HDS 06:
Seite 27
Kapitel 3 Kinematik eines Manipulators
yey = −s6[ c5( c4c32 s1 − s4c1) − s5s32s1]− c6[ c4c1− s4c32s1] (3.35)
x = l 4 s32 c1 + a 2c2 c1
y = l 4 s32 s1 + a 2c2 s1 (3.40)
z = −l 4 c32 + a 2s 2
Mit:
s = sin – Funktion + Winkelnummer, die mit der Achsennummer übereinstimmt,
c= cos – Funktion , z.B. und c = 32 = cos ( ∂ 3 + ∂ 2 )
Seite 28
Kapitel 3 Kinematik eines Manipulators
Berechnung der Nick- , Gier- und -Rollwinkel mit (3.9) und (3.10) :
Seite 29
Kapitel 4 Programmierungsarten eines Manipulators
4.1 Teach-in-Programmierung
Diese Programmierungsart wird bei Programmierung von Roboter am meisten
angewendet. Die Programmierung erfolgt mit Hilfe eines Programmierhandgerätes
auch Teachbox genannt vor Ort unter Sichtkontrolle des Programmierers.
Im Zeitalter des Laptops kann die Stellung mit Hilfe eines PCs und dafür entwickelter
Software erreicht und übernommen werden. Die gewünschte Robotersteuerung wird
nach jedem Schritt in den Programmspeicher übernommen. Da der Zeitaufwand sehr
groß ist, wird das Verfahren überwiegend in Serienfertigung angewendet.
Teachbox
Der Trainingsroboter ROB3 lässt sich mit Hilfe der mitgelieferten Teachbox (Abb.4.1)
ohne Computer programmieren.
Seite 30
Kapitel 4 Programmierungsarten eines Manipulators
4.2 Play-Back-Programmierung
Ähnlich wie Teach-in-Programmierung erfolgt bei dieser Programmierungsart
die Programmierung vor Ort unter Sichtkontrolle des Programmierers. Bei Play-Back-
Programmierung wird der Roboter bei abgeschalteten Antrieben mit der Hand an die
gewünschte Position geführt. Die Steuerung speichert die Bewegung und führt sie
dann im Betrieb. Die Play-Back-Programmierung wird fast nur beim Lackieren kleiner
Teile eingesetzt.
4.3 Off-Line-Programmierung
Die Off-Line-Programmierung der Roboterbewegung erfolgt fern vom Roboter
an einem Computer. Bei komplexeren Arbeitsaufgaben wie z. B. Karosseriebau,
müssen off-line erstellte Programme durch die prozessnahe Teach-in
nachprogrammiert werden.
Wie der Name schon sagt, erfolgt diese Programmierung mit Hilfe der Sensoren. Mit
Videokameras und Berührungssensoren werden, meist in Verbindung mit der Off-
Line Programmierung, die Roboterbewegungen erzeugt. Der Roboter bewegt sich
z.B. entlang am Boden befestigten Magnetstreifen oder geklebten Farbstreifen, die
eine am Roboter befestigte Kamera analysiert. Die Flexibilität der Bewegungen ist
bei dieser Methode sehr gering. Der Roboter kann nur entlang der Streifen fahren.
Dazu kommt ein hoher Aufwand bei den Änderungen der Wege (neue S treifen
verlegen, alte beseitigen).
Seite 31
Kapite l 5 Programmieren des Roboters ROB 3
Seite 32
Kapite l 5 Programmieren des Roboters ROB 3
5.1.1 Kommunikationsablauf
Seite 33
Kapite l 5 Programmieren des Roboters ROB 3
Positionier – Kommandos:
Seite 34
Kapite l 5 Programmieren des Roboters ROB 3
Mit der Übernahme des Kommandos wird die vorhergehende Sollposition jeweils
nach Ablauf der Zeit T um einen Schritt erhöht bzw. erniedrigt bis die Endposition
erreicht ist. Die Zeit T errechnet sich aus Zeitfaktor *10 msec.
Bei Zeitfaktor 0 wird der Roboter mit seiner maximalen Geschwindigkeit angefahren.
Seriennummer – Abfrage:
Positions-Abfrage -Kommandos
mit a = Achsennummer (0 – 5)
Rückmeldung:
- Kommando, 1 Byte Istwert (0 -255), ETX
Rückmeldung:
- Kommando, 7 Byte Istwert (0 -255), ETX
Seite 35
Kapite l 5 Programmieren des Roboters ROB 3
Die I/O Testbox besitzt 8 digitale Ein- und Ausgänge und wird direkt an dem Roboter
angeschlossen.
Zusätzlich gibt es an der Testbox einen Schalter, der eine Not – Aus –Funktion hat.
Rückmeldung:
- Kommando, 1 Byte Wert der digitalen Eingänge, ETX
mit u und o:
u o Funktion
1 0 Maske unden(löschen)
1 1 Maske odern(invertieren)
Seite 36
Kapite l 5 Programmieren des Roboters ROB 3
Die Rückmeldung nach dem Erreichen der Position ist das Kommandoschlüsselwort
und ETX.
Seite 37
Kapitel 6 SPS – Programmierung mit ProSys
- den Strukturierten Text (ST) - eignet sich besonders gut für Programmieren von
mathematischen Formeln, Schleifen und bedingten Verzweigungen.
- eine Ablaufsteuerung (AS) - dient zum Erstellen von Ablaufketten, bei denen die
Schritte sequentiell abgearbeitet werden.
Seite 38
Kapitel 6 SPS – Programmierung mit ProSys
Die erste Aktion ist in diesem Fall ein Schritt, der nur beim Start der Ablaufkette
abgearbeitet wird, also eine Initialisierung.
Initialisierung
Transitionen
Aktionen
q1:= ATAN2(y/x);
q1:=q1*57.29578; (* RAD -> GRAD Umrechnung in ProSys - AS*)
Seite 39
Kapitel 6 SPS – Programmierung mit ProSys
achse1soll:=REAL_TO_INT( Rueck1.q1);
achse2soll:=REAL_TO_INT( Rueck1.q2);
achse3soll:=REAL_TO_INT( Rueck1.q3);
achse4soll:=REAL_TO_INT( R ueck1.q4);
achse5soll:=REAL_TO_INT( Rueck1.q5);
Erklärung :
Die Berechnung im Baustein geschieht mit Variabel von Typ REAL, also
Gleitkommazahlen. Die Werte(achse1-5soll), die an die Steuerung weitergegeben
werden, sind als Integerzahlen deklariert. Deswegen muss eine Typwandlung von
Gleitkomma- in Ganzzahlen stattfinden (REAL_TO_INT).
Die für die Rückwärtstransformation benötigte ATAN2 (Kapitel 3.3.2, Seite 26) wird
ebenfalls in ST eingegeben:
(*ATAN2 Berechnung*)
IF (x=0) THEN
IF y<0 THEN
q1:=-180/2 ;
ELSE
q1:=180/2;
END_IF;
ELSE
IF x<0 THEN
Seite 40
Kapitel 6 SPS – Programmierung mit ProSys
IF y<0 THEN
q1:= (ATAN(y/x)*57.29578) -180;
ELSE
q1:=(ATAN(y/x)*57.29578)+180;
END_IF;
ELSE
q1:=ATAN(y/x)*57.29578;
END_IF;
END_IF;
Seite 41
Kapitel 7 Visual Basic(VB)
7.1 Allgemein
Nach dem Öffnen eines neuen Projektes erscheint dem Programmierer die
integrierte Entwicklungsumgebung (IDE Integreted Development Environment) von
VB (Abb.7.1).
Die IDE besteht beim Starten von neuem Projekt grundsätzlich aus der von vielen
Windowsprogrammen bekannten Menüleiste, Werkzeugsammlung (Toolbox) mit
Steuerelementen, dem Eigenschaftsfenster, Projektexplorer und dem
Formularfenster.
Man kann zusätzliche Fenster aktivieren wie z. B. ein Überwachungsfenster
(Debugger), die oben genannten Fenster geben jedoch die wichtigsten Informationen
bei der Erstellung eines VB – Programms.
Seite 42
Kapitel 7 Visual Basic(VB)
Projektexplorer
leeres Formular
Formularfenster
Eigenschaftsfenster
(mit F4 aktivierbar)
Erklärung der
Werkzeugsammlung
Eigenschaften
mit
Steuerelementen
Formulardarstellung
Jedes VB – Programm besteht aus mindestens einem Formular, auf dem die
graphischen Elemente platziert sind. Es sind meistens die Steuerelemente aus der
Werkzeugsammlung, die dann auf die Ereignisse wie z.B. ein Mausklick auf einen
Button reagieren. Die Formulardarstellung zeigt die aktuelle Größe und die Position
des gerade aktivierten Formulars. Hier wird die Position des Formulars geändert, die
Änderung der Größe eines Formulars geschieht über das Formularfenster.
Das Eigenschaftsfenster mit der Erklärung der Funktionen der einzelnen
Eigenschaften kann je nach Wunsch entweder alphabetisch oder nach Kategorien
angezeigt werden.
Seite 43
Kapitel 7 Visual Basic(VB)
Wie in der Abbildung 7.1, ist auf der IDE im ersten Augeblick kein Editor zu sehen, in
dem die eigentliche Programmierung stattfindet. In VB unterscheidet man zwischen
Code und Objekt.
Objekt ist die Bedienoberfläche, in der Entwicklungsphase das Formularfenster, wo
die Steuerelemente platziert werden. Durch einen Doppelklick auf das zugefügte
Steuerelement gelangt man in den Code – Editor von VB, wo die Verarbeitung der
Ereignisse stattfindet.
Die zweite Möglichkeit bietet der Projektexplorer, der die zwei Buttons zum
umschaltet zwischen Code und Objekt besitzt (Abb. 7.2). Selbstverständlich bietet
IDE auch die Möglichkeit mehrere Code- und/oder Objektfenster gleichzeitig offen zu
halten.
Der größte Vorteil bei der VB – Programmierung ist das schnelle Gestalten der
Bedienoberfläche. Nach der Überlegung, wie die Visualisierung zu gestalten ist,
werden die notwendigen Steuerelemente mit der Maus auf das Formular gezogen,
um dann mit Hilfe der Eigenschaften zu parametrieren. Gehören die notwendigen
Steuerelemente nicht zu den Standartsteuerelementen, können weitere
Steuerelemente aus den Bibliotheken in die Werkzeugsammlung eingefügt oder
selbst erstellt werden.
Der Verfasser hat in seiner Arbeit unter anderen für die Ansteuerung der seriellen
Schnittstelle das Steuerele ment „MSComm“ gebraucht.
Über die Menüleiste -> „Projekt“ -> „Komponente“, gelangt der Programmierer zu
dem gesuchten Steuerelement („Microsoft Comm Controll 6.0“).
Seite 44
Kapitel 7 Visual Basic(VB)
Beispiel 7.1 :
Public Sub sendecom1(sollpos1, achse, speed) 'Unterprogrammdeklaration
…………………………..
End Sub
Seite 45
Kapitel 7 Visual Basic(VB)
Seite 46
Kapitel 7 Visual Basic(VB)
Bildfeld (Picture)
OLE (OLE)
TIPP: Nach dem ein Steuerelement in ein Formular eingefügt wurde, ist eine
einheitliche und aussagekräftige Namenskonvention sehr vom Nutzen. Das VB
schlägt selbst einen Namen vor, der für das Verständnis der Prozeduren nicht
gerade hilfsreich ist (z.B. Command17). So hat es sich eingebürgert alle
CommandButtons mit dem Kürzel cmd + Funktionsbezeichnung umzubenennen. Soll
z.B. ein Button eine Multiplikation zweier Zahlen hervorrufen, so wäre eine der
möglichen logischen Bezeichnungen eine cmdMultiplikation.
einige Namenskonventionen der Steuerelemente in VB:
command() ->cmd Funktionsbezeichnung
text() -> txt Funktionsbezeichnung
label() -> lbl Funktionsbezeichnung
picturr() ->pic Funktionsbezeichnung
Ähnlich auch die logische Bezeichnung für ein Formular z.B. das Formular Start
bekommt eine frmStart – Bezeichnung.
Seite 47
Kapitel 7 Visual Basic(VB)
Der Zugriff auf die Eigenschaften der Steuerelemente wird auch von dem
Assistenten begleitet. Nach dem der Programmierer den Namen des
Steuerelementes mit einen zusätzlichen Punkt. im Programm eingegeben hat,
werden alle Eigenschaften des entsprechenden Steuerelementes im einem
Scrollbalken angezeigt (Abb.7.5 lblswitch8). Jetzt kann man die gewünschte
Eigenschaft auswählen und parametrieren.
Visual Basic bietet eine sehr komfortable Methode auf die serielle Schnittstelle
zuzugreifen. Über das Steuerelement „MSComm“ wird die serielle Schnittstelle
parametriert und angesprochen. Das Steuerelement gehört nicht zu den
Standartsteuerelementen und muss deshalb vom Programmierer in die
Werkzeugliste manuell eingefügt werden (Kap. 7.3). Die graphische Darstellung des
„MSComm“ ist auf dem Formular ist auf Abb. 7.6 zu sehen.
Seite 48
Kapitel 7 Visual Basic(VB)
Wie im Kapitel 7.3 erklärt, kann ein VB – Programm mit Hilfe der Eigenschaft
„RThreshold“ mit der seriellen Schnittstelle ereignisgesteuert kommunizieren.
Beim Starten des Formulars wird „Form_Load“ - Ereignis aufgerufen. Hier kann die
serielle Schnittstelle initialisiert werden.
Beispiel für die Konfiguration der seriellen Schnittstelle RS 232 (COM 1):
Beispiel 7.2 :
[Link] = 1
‘Port Nummer 1 für COM1
[Link] = "9600,N,8,1"
‘9600 =Baudrate,
’n = none für keine Parität, even = gerade, odd = ungerade Parität
’8 = Anzahl der Datenbits
’1 = Anzahl der Stoppbits
[Link] = comInputModeText
'Datentyp von den am Input liegenden Daten
[Link] = 0
’ Gibt die Anzahl der Zeichen, die bei jedem Lesezugriff gelesen werden
’ 0 = alle Zeichen lesen
[Link] = True
'serielle Schnittstelle öffnen
MSComm1. RThreshold = 1
Seite 49
Kapitel 7 Visual Basic(VB)
Seite 50
Kapitel 7 Visual Basic(VB)
End If
End Select
End Sub
Mit der Einführung des Betriebssystems Windows stellt Microsoft die Methode des
Dynamic Data Exchange (DDE) vor. Diese Methode arbeitet nach dem Client –
Server – Prinzip. Dabei stellt der Server dem Client die Daten zur Verfügung. Die
Kommunikation kann zwischen mehreren Konversationspartnern gleichzeitig
bestehen (z. B. SPS – Software, Word oder Excel Dokument). Die Adressierung
besteht aus:
- der Anwendung ( Applikation, z. B. SPS Projekt >> „ PROSYS|D:\[Link]“ ),
Datum ( Item, z. B. ein Datenelement als globale Variable >> „.Schalter1“) und
dem Typ der Verbindung( LinkMode, z.B. 1 = vbLinkAutomatic, Verbindung
automatisch bei Änderung der Daten)
Unter Visual Basic 6.0 kann eine DDE – Verbindung zwischen einem Visual – Basic
– Programm und Software –SPS (ProSys) folgendermaßen aussehen:
[Link] = ProjektName
[Link] = ".Schalter1"
Seite 51
Kapitel 7 Visual Basic(VB)
[Link] = vbLinkAutomatic,
wobei in einem Visual – Basic – Programm direkt nur drei Steuerelemente an einer
DDE – Konversation teilnehmen können:
- Bezeichnungsfelder (Label)
- Textfelder (TextBox) und
- Bildfelder (PictureBox)
Wie auf dem Beispiel auf der anderen Seite zusehen ist, hat die Vorsilbe Link immer
etwas mit einer DDE – Verbindung zu tun.
Beim Schließen eines DDE – Kanals („LinkClose“ Ereignis) erscheint sofort eine
Fehlermeldung (MessageBox Abb. 7.8) auf dem Bildschirm, die den Anwender
auffordert das SPS – Programm zu starten oder das VB – Programm zu beenden.
Seite 52
Kapitel 7 Visual Basic(VB)
Option Explicit
Dim ProjektName As String ' Variablen Deklaratio
End Sub
On Error GoTo DDE_Fehler ' DDE - Kommunikationsfehler >> Sprung zur Marke DDE_Fehler
[Link] = ProjektName
[Link] = ".eing2" '
[Link] = vbLinkAutomatic
[Link] = ProjektName
[Link] = ".ausg1" '
Seite 53
Kapitel 7 Visual Basic(VB)
[Link] = vbLinkAutomatic
Exit Sub
DDE_Fehler: ' DDE - Fehler
Mldg = "Starten Sie bitte ProSys -Programm und bestätigen Sie mit OK " & Chr$(10) & " oder
beenden Sie das Programm mit Abbrechen" ' Meldung definieren.
Stil = vbOKCancel + vbExclamation + vbDefaultButton1
'Schaltflächen definieren.
Titel = "DDE - Verbindung zur ProSys unterbrochen" ' Titel definieren.
Antwort = MsgBox(Mldg, Stil, Titel) ' Hilfe, Ktxt) ' Meldung anzeigen.
If Antwort = vbOK Then 'Benutzer hat "OK" gewählt.
Resume 'Fortsetzung bei der Anweisung >> Fehler
Else 'Benutzer hat "Abbrechen" (geht auch über vbCancel)
' oder Abbruch(geht auch über vbAbort)gewählt
End 'Programm beenden
End If
End Sub
Seite 54
Kapitel 7 Visual Basic(VB)
End Sub
Erklärung:
Die Rückgabe zu SPS geschieht über „LinkPoke “ – Methode.
Seite 55
Kapitel 8 Programmbeschreibung
8 Programmbeschreibung
Start - Formular
1. Message Box
Dialog - ProSys
ProSys starten
Dialog - SPS
2. Message Box
je nach Steuerungsart
DDE - Schnittstelle
Haupt – Formular
COM 1
ROB3
Seite 56
Kapitel 8 Programmbeschreibung
Nach der Auswahl der Steuerungsart - SPS (!) wird das zweite Formular
gestartet und das Start – Formular beendet (entladet). Das Formular hat als Funktion
das Programm „ProSys“ zu starten. Der Anwender kann in der Text - Box den Pfad
Seite 57
Kapitel 8 Programmbeschreibung
von „ProSys“ angeben. Der Pfad wird nach der Bestätigung mit „OK“ – Button in die
Ablaufroutine übernommen. Mit „ProSys gestartet“ – Button kann die ProSys -
Startroutine des Programms übersprungen werden und das Dialog - SPS - Formular
gestartet werden.
In der Steuerungsart SPS wird nach dem ProSys – Dialog – Formular das Dialog –
SPS – Formular gestartet (Abb. 8.4). In dem Formular werden der Pfad und der
Name des in ProSys erstellten SPS – Programms zur Ansteuerung des Roboters
gefragt. Es müssen mindestens alle in der Tabelle 8.1 (Kapitel 8.3) SPS – Variabel
im angegebenen SPS – Programm (hier „Rob5“) als globale Variabel deklariert sein.
Seite 58
Kapitel 8 Programmbeschreibung
Beim Starten des Hauptformulars wird der Anwender zuerst über Start –
Button aufgefordert den Roboter ROB3 einzuschalten und zurückzusetzen (Reset –
Taster an der Rückseite).
Wird die Steuerungsart SPS gewählt, versucht das VB – Programm im Haupt
– formular die DDE – Verbindung aufzubauen (Unterprogramm DDE_Verbindung,
siehe dazu Kapitel [Link]). Der Anwender kann die VB – Oberfläche nur als
Meldeoberfläche benutzen, d.h. es besteht keine Möglichkeit die Roboterpositionen
von dieser Oberfläche anzusteuern. Bei erfolgreichem Aufbau der DDE – Verbindung
wird der Anwender nach dem Format der Sollwerte gefragt. Je nach Auswahl wird
dadurch im Programm flag_Winkel gesetzt oder rückgesetzt.
Bei Ansteuerungsart nur über B&B wird sofort das Format der Sollwerte
abgefragt. Dabei besteht keine DDE - Verbindung zum SPS – Programm.
Abhängig von der Steuerungsart gibt es im Hauptformular zwei ähnliche, aber
unterschiedliche Oberflächen (Abb.8.5):
- eine für Ansteuerung des Roboterarmes über SPS und
- eine für Ansteuerung nur über VB – Oberflächen.
Beide Oberflächen bekommen die Ist – Zustände der Roboterachsen
zahlenmäßig (Bezeichnungsfeld, Label) und graphisch (Scrollbalken) angezeigt.
Bei der Vorgabe der Sollwerte bei der Ansteuerungsart ohne SPS – Verbindung kann
der Anwender die Achsensollwerte als Zahlenwert direkt in die Text – Box übergeben
und mit „Position – Übernahme“ – Button bestätigen oder über „Schritt“ – Buttons die
Achsen und der Greifer einzeln ansteuern. Die Schritten können je nach Auswahl in
1-er oder 10-er Schritten erfolgen.
Mit dem „Aktualisieren“ – Button werden die Istwerte auch in die Text – Box der
Sollwerte übertragen.
Zusätzlich werden die Zustände der I/O Testbox graphisch dargestellt. Die I/O Box
kann von beiden Steuerungsarten benutzt werden, vorrausgesetzt man hat sie
eingeschaltet ( Einschaltbutton auf der B&B).
Der Anwender kann in B&B die Kommunikation zum SPS – Programm starten bzw.
beenden. Die Formate der Sollwerte für die Achsen können auch umgeschaltet
werden. Über den „Stop“ – Button wird der Roboter gestoppt (Übergabe der Ist –
Werte als neue Sollwerte). Die Geschwindigkeit des Roboters kann über Buttons
eingestellt werden.
Seite 59
Kapitel 8 Programmbeschreibung
Geschwindigkeit
Seite 60
Kapitel 8 Programmbeschreibung
Hauptformular
Load – Ereignis :
Message Box
„DDE – Verbindung zu ProSys unterbrochen“
DDE_Oberfläche
„Ja“ „Nein“
starten
Unterprogramm flag_SPS =False
DDE_Verbindung
Unterprogramm
No_DDE_
Oberfläche
laden
siehe
oben ®
Seite 61
Kapitel 8 Programmbeschreibung
Seite 62
Kapitel 8 Programmbeschreibung
Seite 63
Kapitel 9 Schlussfolgerung
9 Schlussfolgerung
Seite 64
Kapitel 9 Schlussfolgerung
Der Schwerpunkt der SPS – Programmierung lag in der Erstellung der beiden
Funktionsbausteine, die Vor- und Rückwärtstransformationen durchführen.
Be der Umsetzung der mathematischen Formeln mussten noch ATAN2 - Funktion,
RAD - GRAD – und REAL – INTEGER Umrechnung programmiert werden.
Für die Vorgabe der Sollpositionen wurde eine Ablaufsteuerung programmiert.
Das Hauptziel der Arbeit ( Punkt 2 im Kapitel 1.2.1 ), den Robote rarm auf die von der
SPS vorgegebene Position zu fahren, wurde vollständig erreicht. Je nach Einstellung
kann der Anwender die Position als Winkel oder Integer – Zahl vorgeben.
Der Punkt 1 im Kap. 1.2.1 gesetzten Ziele wurden vollständig erreicht. Die
Entwicklung und die Notwendigkeit der Roboter wurden anhand Beispiele erläutert.
Um das Hauptziel zu erreichen wurde die Schnittstelle zum Antriebscontroller und
Bedien- und Beobachtungsoberfläche programmiert.
Die Vorgabe der Sollwerte kann entweder von der erstellten Bedien- und
Beobachtungsoberfläche (B&B) oder durch ein SPS – Programm erfolgen.
Damit wurden Unterpunkte 2.2 und 2.3 der Aufgabestellung vollständig erreicht.
Der letzte Unterpunkt der Aufgabenstellung, die Sollwerte als Weltkoordinate zu
vorgeben, konnte nicht vollständig erreicht werden. Der Verfasser hat die
Lösungsansätze für die Transformationen und die Denavit – Hartenberg – Methode in
seiner Arbeit beschrieben. Die Gleichungssysteme konnten durch Ihre Komplexität
nicht gelöst werden. Auch die Modifizierung der Lösungen aus der Literatur führten
nicht zu befriedigenden Ergebnissen.
Seite 65
Kapitel 9 Schlussfolgerung
Seite 66
Kapitel 10 Abkürzungen, Fremdwörter und Erläuterungen
Add-Ins - Add-Ins sind Assistenten, die in einem Programm unter Verwendung von
Objekten und Selbstdeklarierten Funktionen die Visual Basic -Umgebung
anpassen und erweitern. Die Add-Ins lassen sich in die IDE von VB einbinden.
AS - Ablaufsprache
AWL - Anweisungs liste
BASIC – Beginners All purpose Symbolic Instruction Code
B&B – Bedien- und Beobachtungsoberfläche
CP-Steuerung – CP = continuos point, Bahnsteuerung der Roboterbewegung
DDE – Dynamic Data Exchange, unter Windows festgelegtes
Kommunikationsprotokoll. Ermöglicht eine Kommunikation mit Windows
Programmen beliebiger Hersteller.
Endeffektor – am Handgelenk des Roboters fest montierte Einrichtung um
bestimmte Aufgaben zu erledigen (z.B. Greifer oder Spritzpistole)
Formular – Fenster des VB – Programms, z.B. Formular - Start
FUP - Funktionsplan
Handshake – Ein Kommunikationsprotokoll, das den Datenfluß über die serielle
->Schnittstelle, etwa z wischen ->Modem und PC, kontrolliert. Man
unterscheidet dabei zwischen Hardware - und Software-Handshake.
Hardware-Handshake ist schneller als Software-Handshake, da dafür keine
Zeichen übertragen werden müssen.
[[Link] ]
IDE – Integreted Development Environment, integrierte Enwicklungsumgebung (VB)
KOP – Kontaktplan
Low – Level – Protokoll - ein nicht standardisiertes Protokoll zur
Nachrichtenübertragung und dient der Ansteuerung des ROB 3 über die
serielle Schnittstelle RS 232.
Pick and Place – Aufnehmen und Ablegen
ProSys – SPS – Entwicklungsumgebung für S5- und S7- Steuerungen
PtP – Steuerung – PtP = point to point, Punkt-zu-Punkt -Steuerung der
Roboterbewegung
Seite 67
Kapitel 10 Abkürzungen, Fremdwörter und Erläuterungen
VB Visual Basic
Seite 68
Kapitel 11 Verzeichnisse
11 Verzeichnisse
11.1 Literaturverzeichnis
Seite 69
Kapitel 11 Verzeichnisse
Seite 70
Kapitel 11 Verzeichnisse
11.2 Abbildungsverzeichnis
ABBILDUNG 1.1 : TRAININGSROBOTER ROB3 DER FIRMA EUROBTEC 1
ABBILDUNG 1.2 : UNTERTEILUNG DER HANDHABUNGSGERÄTE [5] 3
ABBILDUNG 1.3 : SKYWASH BEIM FLUGZEUGPUTZEN [17] 4
ABBILDUNG 1.4 : HAUPTZIELE DER DIPLOMARBEIT 7
ABBILDUNG 2.1 : BEWEGUNGSARTEN EINES ROBOTERS[1] 9
ABBILDUNG 2.2 : INFORMATIONSFLUSS BEI EINER ROBOTERSTEUERUNG [1] 10
ABBILDUNG 3.1 : KINEMATISCHE KETTEN 11
ABBILDUNG 3.2 : FÜNFACHSIGE TRAININGSROBOTER ROB 3 12
ABBILDUNG 3.3 : GRUNDST ELLUNG DES TRAININGSROBOTERS MIT ROB 3 13
ABBILDUNG 3.4 : DER ARBEITSRAUM DES ROBOTERS ROB3 [8] 14
ABBILDUNG 3.5 : GRUNDSTELLUNG DES ROBOTERARMES MIT WELTKOORDINATEN [7] 15
ABBILDUNG 3.6 : ENDEFFEKTOR MIT ORIENTIERUNGSWINKEL [5] 16
ABBILDUNG 3.7 : TRANSFORMATIONEN BEI ROBOTERSTEUERUNG [1] 16
ABBILDUNG 3.8 : SENKRECHTE VERSCHIEBUNG ZWISCHEN BENACHBARTEN GELENKEN 19
ABBILDUNG 3.9 : LOTRECHTE VERSCHIEBUNG Z WISCHEN ZWEI BENACHBA RTEN GELENKEN 20
ABBILDUNG 3.10 : „RECHTE – HAND - REGEL“ 22
ABBILDUNG 3.11 : KOO RDINATENSYSTEM DER EINZELNEN ACHSEN 22
ABBILDUNG 3.12 : DREHUNG UM DIE X – ACHSE BEI ERSTEM GELENK 22
ABBILDUNG 4.1 : TEACH-IN-PROGRAMMIERUNG M IT TEACHBOX DES ROB 3 30
ABBILDUNG 4.2 : PLAY-BACK-PROGRAMMIERUNG 31
ABBILDUNG 5.1. PRINZIP DER PROGRAMMIERUNG UND ANSTEUERUNG DES ROB3 32
ABBILDUNG 5.2 : ÜBER SICHT ÜBER DEN KOMMUNIKATIONSABLAUF 33
ABBILDUNG 5.3 : DIE I/O TESTBOX DER FIRME EUROBTEC 36
ABBILDUNG 6.1 : ABLA UFSPRACHEN-EDITOR 39
ABBILDUNG 7.1 VISUAL- BASIC - ENTWICKLUNGSUMGEBUNG 43
ABBILDUNG 7.2 PROJEKT EXPLORER 44
ABBILDUNG 7.3 AUFRUF DER FUNKTION AUS BSP.7.1 46
ABBILDUNG 7.4 WERKZEUGLISTE MIT STEUERELEMENTEN 47
ABBILDUNG 7.5 ZUGRIFF AUF DIE EIGENSCHAFTEN EINES STEUERELEM ENTES 48
ABBILDUNG 7.6 DAS ST EUERELEMENT „MSCOMM“ 48
ABBILDUNG 7.7 FORMULAR ZUR DDE – TESTANSTEUERUNG 52
ABBILDUNG 7.8 FEHLERMELDUNG BEIM LINKCLO SE EREIGNIS 53
ABBILDUNG 8.1 PROGRAMMABLAUF IN DER ANSTEU ERUNG DES ROB3 56
ABBILDUNG 8.2 STARTFORMULAR 57
ABBILDUNG 8.3 DIALOG – PROSYS – FORMULAR 58
ABBILDUNG 8.4 SPS - PROGRAMM – NAME – FORMULAR 58
ABBILDUNG 8.5 HAUPTFORMULAR 60
Seite 71
Kapitel 11 Verzeichnisse
11.3 Tabellenverzeichnis
Tabelle 3.1 : Winkelbereiche des ROB3 13
Tabelle 3.2 : Variabel für die Denavit – Hartenberg - Matrix 21
Tabelle 3.3 : Vergleich der Gelenke zwischen dem HDS 06 und ROB3 Roboter 25
Tabelle 8.1 : Übergabe - Parameter von/zu SPS 63
Seite 72
Anhang Quellcodes
Anhang
Seite 73
Anhang Quellcodes
Global hilfs4 As Variant, hilfs5 As Variant, hilfs6 As Variant 'Hilfsvar iabel Eingabe der Geschwindigkeit
Global inputzähler As Integer 'Zähler der Zeichen, die über COM1 gekommen
Global speedh1, speedh2
Global kommando As Variant 'Befehl (Kommando)
Global OrakelObjekt As Object
Global Startbutton As Boolean 'Star tbutton gedrückt Abfrage
Global flag_Position_erreicht As Boolean 'Soll Position erreicht >> Positionier Kommando mit Rückmeldung
Global flag_move As Boolean 'Achsen in Bewegung
Global flag_box_ein As Boolean 'I/O Box eingeschaltet
Global demoend_gedrückt As Boolean 'Demo 3 Walzen beendet
Seite 74
Anhang Quellcodes
Option Explicit
Exit Sub
End Sub
Mldg = "Um eine Verbindung zur SPS herzustellen bestätigen Sie mit >>OK " & Chr$(10) & "wählen Sie >> Nein um den
Roboter ohne SPS - Verbindung anzusteuern "
Stil = vbYesNo + vbQuestion + vbDefaultButton1
'Schaltflächen definieren.
Titel = "Wie wollen Sie den Roboter ansteuern ?" ' Titel definieren.
Antwort = MsgBox(Mldg, Stil, Titel) ' Hilfe, Ktxt) ' Meldung anzeigen.
If Antwort = vbYes Then 'Benutzer hat "Ja" gewählt >> Ansteuerung über SPS .
flag_SPS_Wahl = True
[Link]
ElseIf Antwort = vbNo Then 'Benutzer hat "Nein" gewählt >> Ansteuerung nur über Visual Basics
flag_SPS_Wahl = False
[Link]
Seite 75
Anhang Quellcodes
End If
End Sub
Option Explicit
[Link]
Unload DialogProSys
End Sub
[Link] = "Bitte geben Sie den Pfad des SPS -Programms. z.B C: \PROGRAMME\PROSYS\[Link]
Das Programm wird automatisch gestartet"
End Sub
'ProgName = "C:\PROGRAMME\PROSYS\[Link]"
'ProgName = "PROSYS|D:\[Link]" ' nur Programmstart, kein Projekt"
Shell ProgName, 1
[Link] = "ProSys ist gestartet"
Unload DialogProSys
[Link]
End If
[Link]
Unload DialogProSys
'[Link] = "Bitte geben Sie den Pfad des SPS -Programms. Das Programm wird automatisch gestartet"
End Sub
'DialogSPS - Formular >> Funktion Übergabe des Namen SPS - Programms an DDE - Routine
Option Explicit
End
End Sub
Private Sub Form_Load() 'Vorbelegung für den Namen des SPS - Programms
[Link] = "Bitte geben Sie den Namen des SPS -Programms für die Ansteuerung des Roboters
und bestätigen Sie mit OK"
[Link] = "D: \[Link]"
'[Link] = "D: \[Link]"
End Sub
NameSPS = [Link]
Unload DialogSPS 'entlade Formular
[Link] 'gehe zur Hauptformular
End Sub
Seite 77
Anhang Quellcodes
A5 Quellcode – Hauptformular
'Christoph Hyllus Roboteransteuerung 2002 Version 1.0
'Roboter ROB3 Ansteuerung über serielle Schnittstelle mit Low-Level-Protokoll
'Die Bauderate am Roboter wird automatisch nach einem vorangegangenem Reset ( am Roboter, Rückseite des Gehäuses )
'eingestellt
'Haupt - Formular >> Funktion Ansteuerung & Darstellung der Roboterpositi onen
b1 = b1 + 1
[Link] = Chr$(&H13) 'Komandowort zum Setzen eines Bits am digitalen Port (LED)
[Link] = Chr$(1) ' >> Bit Nummer binär kodiert
[Link] = Chr$(ETX)
If b1 = 2 Then
[Link] = &H80FF80 'bit gesetzt
b1 = 0
End If
If b1 = 1 Then
[Link] = &HC0C0C0 'bit zurückgesetzt
End If
End Sub
If b2 = 1 Then
[Link] = &HC0C0C0 'bit zurückgesetzt
End If
End Sub
Seite 78
Anhang Quellcodes
b3 = b3 + 1
[Link] = Chr$(&H13) 'Komandowort zum Setzen eines Bits am digitalen Port (LED)
[Link] = Chr$(4) ' >> Bit Nummer binär kodiert
[Link] = Chr$(ETX)
If b3 = 2 Then
[Link] = &H80FF80 'bit gesetzt
b3 = 0
End If
If b3 = 1 Then
[Link] = &HC0C0C0 'bit zurückgesetzt
End If
End Sub
If b4 = 1 Then
[Link] = &HC0C0C0 'bit zurückgesetzt
End If
End Sub
If b5 = 1 Then
[Link] = &HC0C0C0 'bit zurückgesetzt
End If
End Sub
Seite 79
Anhang Quellcodes
If b6 = 2 Then
[Link] = &H80FF80 'bit gesetzt
b6 = 0
End If
If b6 = 1 Then
[Link] = &HC0C0C0 'bit zurückgesetzt
End If
End Sub
If b7 = 1 Then
[Link] = &HC0C0C0 'bit zurückgesetzt
End If
End Sub
If b8 = 1 Then
[Link] = &HC0C0C0 'bit zurückgesetzt
End If
End Sub
[Link] = Chr$(&H10) 'Kommandowort zum Setzen bzw. Rücksetzen der Bits am digitalem Port
[Link] = Chr$(255) 'hier alle Bits rücksetzen(255 -> 0)
[Link] = Chr$(ETX)
Seite 80
Anhang Quellcodes
End Sub
flag_box_ein = True
End Sub
DDE_Schließen
No_DDE_Oberfläche
End Sub
DDE_Verbindung
End Sub
Seite 81
Anhang Quellcodes
pos1 = Array(4, 127, 127, 127, 127, 127, 127, 0) 'Vorgabe der Werte in Felder, keine Zeiger in VB
pos2 = Array(4, 144, 159, 115, 107, 236, 0)
pos3 = Array(4, 144, 210, 135, 65, 236, 0)
'Walzen greifen
Else
End If
For n = 0 To 5
Move_Rob ' Achsen in Bewegung
[Link] = Chr$(120 + n) '120 + Achsennummer, hier
[Link] = Chr$(pos1(n + 1)) 'Position
Seite 82
Anhang Quellcodes
Sleep (1000)
'Wend
For n = 0 To 5
Move_Rob ' Achsen in Bewegung
[Link] = Chr$(120 + n) '120 + Achsennummer, hier
[Link] = Chr$(pos2(n + 1)) 'Position
[Link] = Chr$(pos2(0)) 'Geschwindigkeit
[Link] = Chr$(ETX)
Next n
Sleep (1000)
'Wend
For n = 0 To 5
Move_Rob ' Achsen in Bewegung
[Link] = Chr$(120 + n) '120 + Achsennummer, hier
[Link] = Chr$(pos3(n + 1)) 'Position
[Link] = Chr$(pos3(0)) 'Geschwindigkeit
[Link] = Chr$(ETX)
Next n
Sleep (1000)
'Wend
Seite 83
Anhang Quellcodes
For n = 0 To 5
Move_Rob ' Achsen in Bewegung
[Link] = Chr$(120 + n) '120 + Achsennummer, hier
[Link] = Chr$(pos4(n + 1)) 'Position
[Link] = Chr$(pos4(0)) 'Geschwindigkeit
[Link] = Chr$(ETX)
Next n
Sleep (1000)
'Wend
For n = 0 To 5
Move_Rob ' Achsen in Bewegung
[Link] = Chr$(120 + n) '120 + Achsennummer, hier
[Link] = Chr$(pos5(n + 1)) 'Position
[Link] = Chr$(pos5(0)) 'Geschwindigkeit
[Link] = Chr$(ETX)
Next n
Sleep (1000)
'Wend
For n = 0 To 5
Move_Rob ' Achsen in Bewegung
[Link] = Chr$(120 + n) '120 + Achsennummer, hier
[Link] = Chr$(pos6(n + 1)) 'Position
[Link] = Chr$(pos6(0)) 'Geschwindigkeit
[Link] = Chr$(ETX)
Next n
Sleep (1000)
'Wend
Seite 84
Anhang Quellcodes
For n = 0 To 5
Move_Rob ' Achsen in Bewegung
[Link] = Chr$(120 + n) '120 + Achsennummer, hier
[Link] = Chr$(pos7(n + 1)) 'Position
[Link] = Chr$(pos7(0)) 'Geschwindigkeit
[Link] = Chr$(ETX)
Next n
Sleep (1000)
'Wend
For n = 0 To 5
Move_Rob ' Achsen in Bewegung
[Link] = Chr$(120 + n) '120 + Achsennummer, hier
[Link] = Chr$(pos8(n + 1)) 'Position
[Link] = Chr$(pos8(0)) 'Geschwindigkeit
[Link] = Chr$(ETX)
Next n
Sleep (1000)
'Wend
Else
End If
For n = 0 To 5
Move_Rob ' Achsen in Bewegung
[Link] = Chr$(120 + n) '120 + Achsennummer, hier
[Link] = Chr$(pos9(n + 1)) 'Position
[Link] = Chr$(pos9(0)) 'Geschwindigkeit
[Link] = Chr$(ETX)
Next n
Sleep (1000)
'Wend
Seite 85
Anhang Quellcodes
For n = 0 To 5
Move_Rob ' Achsen in Bewegung
[Link] = Chr$(120 + n) '120 + Achsennummer, hier
[Link] = Chr$(pos10(n + 1)) 'Position
[Link] = Chr$(pos10(0)) 'Geschwindigkeit
[Link] = Chr$(ETX)
Next n
Sleep (1000)
'Wend
For n = 0 To 5
Move_Rob ' Achsen in Bewegung
[Link] = Chr$(120 + n) '120 + Achsennummer, hier
[Link] = Chr$(pos11(n + 1)) 'Position
[Link] = Chr$(pos11(0)) 'Geschwindigkeit
[Link] = Chr$(ETX)
Next n
Sleep (1000)
'Wend
For n = 0 To 5
Move_Rob ' Achsen in Bewegung
[Link] = Chr$(120 + n) '120 + Achsennummer, hier
[Link] = Chr$(pos12(n + 1)) 'Position
[Link] = Chr$(pos12(0)) 'Geschwindigkeit
[Link] = Chr$(ETX)
Next n
Sleep (1000)
'Wend
Seite 86
Anhang Quellcodes
For n = 0 To 5
Move_Rob ' Achsen in Bewegung
[Link] = Chr$(120 + n) '120 + Achsennummer, hier
[Link] = Chr$(pos13(n + 1)) 'Position
[Link] = Chr$(pos13(0)) 'Geschwindigkeit
[Link] = Chr$(ETX)
Next n
Sleep (1000)
'Wend
For n = 0 To 5
Move_Rob ' Achsen in Bewegung
[Link] = Chr$(120 + n) '120 + Achsennummer, hier
[Link] = Chr$(pos14(n + 1)) 'Position
[Link] = Chr$(pos14(0)) 'Geschwindigkeit
[Link] = Chr$(ETX)
Next n
Exit Sub
Sleep (1000)
'Wend
For n = 0 To 5
Move_Rob ' Achsen in Bewegung
[Link] = Chr$(120 + n) '120 + Achsennummer, hier
[Link] = Chr$(pos15(n + 1)) 'Position
[Link] = Chr$(pos15(0)) 'Geschwindigkeit
[Link] = Chr$(ETX)
Next n
Sleep (1000)
'Wend
Seite 87
Anhang Quellcodes
For n = 0 To 5
Move_Rob ' Achsen in Bewegung
[Link] = Chr$(120 + n) '120 + Achsennummer, hier
[Link] = Chr$(pos16(n + 1)) 'Position
[Link] = Chr$(pos16(0)) 'Geschwindigkeit
[Link] = Chr$(ETX)
Next n
Sleep (1000)
'Wend
For n = 0 To 5
Move_Rob ' Achsen in Bewegung
[Link] = Chr$(120 + n) '120 + Achsennummer, hier
[Link] = Chr$(pos17(n + 1)) 'Position
[Link] = Chr$(pos17(0)) 'Geschwindigkeit
[Link] = Chr$(ETX)
Next n
Sleep (1000)
'Wend
For n = 0 To 5
Move_Rob ' Achsen in Bewegung
[Link] = Chr$(120 + n) '120 + Achsennummer, hier
[Link] = Chr$(pos18(n + 1)) 'Position
[Link] = Chr$(pos18(0)) 'Geschwindigkeit
[Link] = Chr$(ETX)
Next n
Sleep (1000)
'Wend
Seite 88
Anhang Quellcodes
For n = 0 To 5
Move_Rob ' Achsen in Bewegung
[Link] = Chr$(120 + n) '120 + Achsennummer, hier
[Link] = Chr$(pos19(n + 1)) 'Position
[Link] = Chr$(pos19(0)) 'Geschwindigkeit
[Link] = Chr$(ETX)
Next n
Sleep (1000)
'Wend
For n = 0 To 5
Move_Rob ' Achsen in Bewegung
[Link] = Chr$(120 + n) '120 + Achsennummer, hier
[Link] = Chr$(pos20(n + 1)) 'Position
[Link] = Chr$(pos20(0)) 'Geschwindigkeit
[Link] = Chr$(ETX)
Next n
Sleep (1000)
'Wend
For n = 0 To 5
Move_Rob ' Achsen in Bewegung
[Link] = Chr$(120 + n) '120 + Achsennummer, hier
[Link] = Chr$(pos21(n + 1)) 'Position
[Link] = Chr$(pos21(0)) 'Geschwindigkeit
[Link] = Chr$(ETX)
Next n
Sleep (1000)
'Wend
Seite 89
Anhang Quellcodes
For n = 0 To 5
Move_Rob ' Achsen in Bewegung
[Link] = Chr$(120 + n) '120 + Achsennummer, hier
[Link] = Chr$(pos22(n + 1)) 'Position
[Link] = Chr$(pos22(0)) 'Geschwindigkeit
[Link] = Chr$(ETX)
Next n
Sleep (1000)
'Wend
For n = 0 To 5
Move_Rob ' Achsen in Bewegung
[Link] = Chr$(120 + n) '120 + Achsennummer, hier
[Link] = Chr$(pos23(n + 1)) 'Position
[Link] = Chr$(pos23(0)) 'Geschwindigkeit
[Link] = Chr$(ETX)
Next n
Sleep (1000)
'Wend
For n = 0 To 5
Move_Rob ' Achsen in Bewegung
[Link] = Chr$(120 + n) '120 + Achsennummer, hier
[Link] = Chr$(pos24(n + 1)) 'Position
[Link] = Chr$(pos24(0)) 'Geschwindigkeit
[Link] = Chr$(ETX)
Next n
Seite 90
Anhang Quellcodes
Sleep (1000)
'Wend
For n = 0 To 5
Move_Rob ' Achsen in Bewegung
[Link] = Chr$(120 + n) '120 + Achsennummer, hier
[Link] = Chr$(pos25(n + 1)) 'Position
[Link] = Chr$(pos25(0)) 'Geschwindigkeit
[Link] = Chr$(ETX)
Next n
Sleep (1000)
'Wend
For n = 0 To 5
Move_Rob ' Achsen in Bewegung
[Link] = Chr$(120 + n) '120 + Achsennummer, hier
[Link] = Chr$(pos26(n + 1)) 'Position
[Link] = Chr$(pos26(0)) 'Geschwindigkeit
[Link] = Chr$(ETX)
Next n
Sleep (1000)
'Wend
For n = 0 To 5
Move_Rob ' Achsen in Bewegung
[Link] = Chr$(120 + n) '120 + Achsennummer, hier
Seite 91
Anhang Quellcodes
Sleep (1000)
'Wend
For n = 0 To 5
Move_Rob ' Achsen in Bewegung
[Link] = Chr$(120 + n) '120 + Achsennummer, hier
[Link] = Chr$(pos28(n + 1)) 'Position
[Link] = Chr$(pos28(0)) 'Geschwindigkeit
[Link] = Chr$(ETX)
Next n
Sleep (1000)
'Wend
For n = 0 To 5
Move_Rob ' Achsen in Bewegung
[Link] = Chr$(120 + n) '120 + Achsennummer, hier
[Link] = Chr$(pos29(n + 1)) 'Position
[Link] = Chr$(pos29(0)) 'Geschwindigkeit
[Link] = Chr$(ETX)
Next n
Sleep (1000)
'Wend
Seite 92
Anhang Quellcodes
End If
For n = 0 To 5
Move_Rob ' Achsen in Bewegung
[Link] = Chr$(120 + n) '120 + Achsennummer, hier
[Link] = Chr$(pos30(n + 1)) 'Position
[Link] = Chr$(pos30(0)) 'Geschwindigkeit
[Link] = Chr$(ETX)
Next n
Sleep (1000)
End Sub
demoend_gedrückt = True
End Sub
Private Sub cmdspeed7_Click() 'Übergabe der Geschwindigkeit mit den Buttons, umgekehrter Reihenfolge beachten !
speed = 0 '7 = max. Geschw.
End Sub
[Link] = pos0
[Link] = pos1
Seite 93
Anhang Quellcodes
[Link] = pos2
[Link] = pos3
[Link] = pos4
[Link] = pos5
End Sub
Mldg = "Wollen die Sollwerte der Achsen als Grad angeben dann bestätigen Sie mit >>OK " & Chr$(10) & "Wollen Sie die Werte
Byte(0..255) angeben, dann wählen Sie >> Nein "
Stil = vbYesNo + vbQuestion + vbDefaultButton1
'Schaltflächen definieren.
Titel = "Wie wollen Sie den Roboter ansteuern ?" ' Titel definieren.
Antwort = MsgBox(Mldg, Stil, Titel) ' Hilfe, Ktxt) ' Meldung anzeigen.
If Antwort = vbYes Then 'Benutzer hat "Ja" gewählt >> Sollwerte als Grad
[Link] = -30
[Link] = 70
[Link] = pos1
[Link] = -100
[Link] = 0
[Link] = pos2
[Link] = -100
[Link] = 100
[Link] = pos3
[Link] = -100
[Link] = 100
[Link] = pos4
[Link] = 0
[Link] = 255
[Link] = pos5
Seite 94
Anhang Quellcodes
ElseIf Antwort = vbNo Then 'Benutzer hat "Nein" gewählt >> Sollwerte als Byte
'Istwerte_vom_Rob (rückgabe)
'Sleep (1000)
[Link] = 0
[Link] = 255
[Link] = pos1
[Link] = 0
[Link] = 255
[Link] = pos2
[Link] = 0
[Link] = 255
[Link] = pos3
[Link] = 0
[Link] = 255
[Link] = pos4
[Link] = 0
[Link] = 255
[Link] = pos5
End If
End Sub
[Link] = "Bitte Roboter einschalten und zurücksetzen" & Chr$(10) & " RESET - Taster an der Rückseite des Sockels"
Seite 95
Anhang Quellcodes
[Link] = &HC0C0C0 'Vorbelegung der Farbe der Schalter und LED's >> grau
[Link] = &HC0C0C0
[Link] = &HC0C0C0
[Link] = &HC0C0C0
[Link] = &HC0C0C0
[Link] = &HC0C0C0
[Link] = &HC0C0C0
[Link] = &HC0C0C0
[Link] = &HFFFFFF 'Vorbelegung der Farbe der Ist - Position - Labels >> weiss
[Link] = &HFFFFFF
[Link] = &HFFFFFF
[Link] = &HFFFFFF
[Link] = &HFFFFFF
[Link] = &HFFFFFF
[Link] = 6
[Link] = 0
[Link] = speed
Seite 96
Anhang Quellcodes
startabrage = True
[Link] = False ' Hilfslabel für DDE >> LED1-8 I/O Box unsichtbar machen
[Link] = False
[Link] = False
[Link] = False
[Link] = False
[Link] = False
[Link] = False
[Link] = False
End Sub
End If
'Abfrage nach Art der Sollwerte >> Grad oder Byte 0..255
'Meldung definieren.
Mldg = "Wollen die Sollwerte der Achsen als Grad angeben dann bestätigen Sie mit >> OK " & Chr$(10) & "Wollen Sie die
Werte Byte(0..255) angeben, dann wählen Sie >> Nein "
Stil = vbYesNo + vbQuestion + vbDefaultButton1
'Schaltflächen definieren.
Titel = "Wie wollen Sie den Roboter ansteuern ?" ' Titel definieren.
Antwort = MsgBox(Mldg, Stil, Titel) ' Hilfe, Ktxt) ' Meldung anzeigen.
If Antwort = vbYes Then 'Benutzer hat "Ja" gewählt >> Sollwerte als Grad
[Link] = -80
[Link] = 80
[Link] = pos0
[Link] = -30
Seite 97
Anhang Quellcodes
[Link] = 70
[Link] = pos1
[Link] = -100
[Link] = 0
[Link] = pos2
[Link] = -100
[Link] = 100
[Link] = pos3
[Link] = -100
[Link] = 100
[Link] = pos4
[Link] = 0
[Link] = 255
[Link] = pos5
ElseIf Antwort = vbNo Then 'Benutzer hat "Nein" gewählt >> Sollwerte als Grad
[Link] = 0
[Link] = 255
[Link] = pos0
[Link] = 0
[Link] = 255
[Link] = pos1
[Link] = 0
[Link] = 255
[Link] = pos2
[Link] = 0
[Link] = 255
[Link] = pos3
[Link] = 0
[Link] = 255
[Link] = pos4
[Link] = 0
[Link] = 255
[Link] = pos5
Seite 98
Anhang Quellcodes
End If
No_DDE_Oberfläche
cmdDDE_beenden.BackColor = &HFF& 'Button aktiv >> rot
cmdDDE_Verbindung.BackColor = &HE0E0E0 'Button inaktiv >> grau
End Sub
Startbutton = True
[Link] = Chr$(&H10) 'Kommandowort zum Setzen bzw. Rücksetzen der Bits am digitalem Port
[Link] = Chr$(255) 'hier alle Bits rücksetzen(255 -> 0)
[Link] = Chr$(ETX)
[Link] = False ' Commandschaltfläche Start nach dem Anklicken unsichtbar machen
End Sub
Private Sub cmdstop_Click() 'Roboter STOP >> Übergabe der momentanen Istposition als Sollpos.
[Link] = pos0
[Link] = pos1
[Link] = pos2
[Link] = pos3
[Link] = pos4
[Link] = pos5
sollpos0 = pos0 'Sollwert - Vorgabe des Roboters = Ist -Wert >> STOP
sollpos1 = pos1
sollpos2 = pos2
sollpos3 = pos3
sollpos4 = pos4
sollpos5 = pos5
End Sub
Seite 99
Anhang Quellcodes
Exit Sub
End Sub
Exit Sub 'Verbindung absichtlich abgebaut >> keine Reaktion auf Ereignis
Else
DDE_Verbindung 'Verbindung aufbauen
End If
End Sub
Exit Sub
Else
On Error GoTo DDE_Fehler
[Link] 'DDE - Verbindung Wertrückgabe
End If
Exit Sub
End Sub
Exit Sub 'Verbindung absichtlich abgebaut >> keine Reaktion auf Ereignis
Else
Seite 100
Anhang Quellcodes
End Sub
Exit Sub
Else
On Error GoTo DDE_Fehler
[Link] 'DDE - Verbindung Wertrückgabe
End If
Exit Sub
End Sub
Exit Sub 'Verbindung absichtlich abgebaut >> keine Reaktion auf Ereignis
Else
DDE_Verbindung 'Verbindung aufbauen
End If
End Sub
Exit Sub
Else
On Error GoTo DDE_Fehler
[Link] 'DDE - Verbindung Wertrückgabe
End If
Exit Sub
End Sub
Seite 101
Anhang Quellcodes
Exit Sub 'Verbindung absichtlich abgebaut >> keine Reaktion auf Ereignis
Else
DDE_Verbindung 'Verbindung aufbauen
End If
End Sub
Exit Sub
Else
On Error GoTo DDE_Fehler
[Link] 'DDE - Verbindung Wertrückgabe
End If
Exit Sub
End Sub
Exit Sub 'Verbindung absi chtlich abgebaut >> keine Reaktion auf Ereignis
Else
DDE_Verbindung 'Verbindung aufbauen
End If
End Sub
Exit Sub
Else
On Error GoTo DDE_Fehler
[Link] 'DDE - Verbindung Wertrückgabe
End If
Exit Sub
End Sub
Seite 102
Anhang Quellcodes
Exit Sub 'Verbindung absichtlich abgebaut >> keine Reaktion auf Ereignis
Else
DDE_Verbindung 'Verbindung aufbauen
End If
End Sub
If [Link] = 1 Then
[Link] = Chr$(&H13) 'Komandowort zum Setzen eines Bits am digitalen Port (LED)
[Link] = Chr$(1) ' >> Bit Nummer binär kodiert
[Link] = Chr$(ETX)
[Link] = &H80FF80 'bit gesetzt
Else
[Link] = Chr$(&H12) 'Komandowort zum Rücksetzen eines Bits am digitalen Port (LED)
[Link] = Chr$(255 - 1) ' >> Bit Nummer binär kodiert
[Link] = Chr$(ETX)
[Link] = &HC0C0C0 'bit zurückgesetzt
End If
End Sub
Exit Sub 'Verbindung absichtlich abgebaut >> keine Reaktion auf Ereignis
Else
DDE_Verbindung 'Verbindung aufbauen
End If
End Sub
If [Link] = 1 Then
[Link] = Chr$(&H13) 'Komandowort zum Setzen eines Bits am digitalen Port (LED)
[Link] = Chr$(2) ' >> Bit Nummer binär kodiert
[Link] = Chr$(ETX)
[Link] = &H80FF80 'bit gesetzt
Else
[Link] = Chr$(&H12) 'Komandowort zum Rücksetzen eines Bits am digitalen Port (LED)
[Link] = Chr$(255 - 2) ' >> Bit Nummer binär kodiert
[Link] = Chr$(ETX)
Seite 103
Anhang Quellcodes
End Sub
Exit Sub 'Verbindung absichtlich abgebaut >> keine Reaktion auf Ereignis
Else
DDE_Verbindung 'Verbindung aufbauen
End If
End Sub
Private Sub lblLED3_Change() ' I/O Box LED Übergabe
If [Link] = 1 Then
[Link] = Chr$(&H13) 'Komandowort zum Setzen eines Bits am digitalen Port (LED)
[Link] = Chr$(4) ' >> Bit Nummer binär kodiert
[Link] = Chr$(ETX)
[Link] = &H80FF80 'bit gesetzt
Else
[Link] = Chr$(&H12) 'Komandowort zum Rücksetzen eines Bits am digitalen Port (LED)
[Link] = Chr$(255 - 4) ' >> Bit Nummer binär kodiert
[Link] = Chr$(ETX)
[Link] = &HC0C0C0 'bit zurückgesetzt
End If
End Sub
Exit Sub 'Verbindung absichtlich abgebaut >> keine Reaktion auf Ereignis
Else
DDE_Verbindung 'Verbindung aufbauen
End If
End Sub
If [Link] = 1 Then
[Link] = Chr$(&H13) 'Komandowort zum Setzen eines Bits am digitalen Port (LED)
[Link] = Chr$(8) ' >> Bit Nummer binär kodiert
[Link] = Chr$(ETX)
[Link] = &H80FF80 'bit gesetzt
Else
Seite 104
Anhang Quellcodes
[Link] = Chr$(&H12) 'Komandowort zum Rücksetzen eines Bits am digitalen Port (LED)
[Link] = Chr$(255 - 8) ' >> Bit Nummer binär kodiert
[Link] = Chr$(ETX)
[Link] = &HC0C0C0 'bit zurückgesetzt
End If
End Sub
Exit Sub 'Verbindung absichtlich abgebaut >> keine Reaktion auf Ereignis
Else
DDE_Verbindung 'Verbindung aufbauen
End If
End Sub
If [Link] = 1 Then
[Link] = Chr$(&H13) 'Komandowort zum Setzen eines Bits am digitalen Port (LED)
[Link] = Chr$(16) ' >> Bit Nummer binär kodiert
[Link] = Chr$(ETX)
[Link] = &H80FF80 'bit gesetzt
Else
[Link] = Chr$(&H12) 'Komandowort zum Rücksetzen eines Bits am digitalen Port (LED)
[Link] = Chr$(255 - 16) ' >> Bit Nummer binär kodiert
[Link] = Chr$(ETX)
[Link] = &HC0C0C0 'bit zurückgesetzt
End If
End Sub
Exit Sub 'Verbindung absichtlich abgebaut >> keine Reaktion auf Ereignis
Else
DDE_Verbindung 'Verbindung aufbauen
End If
End Sub
If [Link] = 1 Then
[Link] = Chr$(&H13) 'Komandowort zum Setzen eines Bits am digitalen Port (LED)
Seite 105
Anhang Quellcodes
End Sub
Exit Sub 'Verbindung absichtlich abgebaut >> keine Reaktion auf Ereignis
Else
DDE_Verbindung 'Verbindung aufbauen
End If
End Sub
If [Link] = 1 Then
[Link] = Chr$(&H13) 'Komandowort zum Setzen eines Bits am digitalen Port (LED)
MSComm [Link] = Chr$(64) ' >> Bit Nummer binär kodiert
[Link] = Chr$(ETX)
[Link] = &H80FF80 'bit gesetzt
Else
[Link] = Chr$(&H12) 'Komandowort zum Rücksetzen eines Bits am digitalen Port (LED)
[Link] = Chr$(255 - 64) ' >> Bit Nummer binär kodiert
[Link] = Chr$(ETX)
[Link] = &HC0C0C0 'bit zurückgesetzt
End If
End Sub
Exit Sub 'Verbindung absichtlich abgebaut >> keine Reaktion auf Ereignis
Else
DDE_Verbindung 'Verbindung aufbauen
End If
End Sub
Seite 106
Anhang Quellcodes
If [Link] = 1 Then
[Link] = Chr$(&H13) 'Komandowort zum Setzen eines Bits am digitalen Port (LED)
[Link] = Chr$(128) ' >> Bit Nummer binär kodiert
[Link] = Chr$(ETX)
[Link] = &H80FF80 'bit gesetzt
Else
[Link] = Chr$(&H12) 'Komandowort zum Rücksetzen eines Bits am digitalen Port (LED)
[Link] = Chr$(255 - 128) ' >> Bit Nummer binär kodiert
[Link] = Chr$(ETX)
[Link] = &HC0C0C0 'bit zurückgesetzt
End If
End Sub
Exit Sub 'Verbindung absichtlich abgebaut >> keine Reaktion auf Ereignis
Else
DDE_Verbindung 'Verbindung aufbauen
End If
End Sub
Exit Sub
Else
On Error GoTo DDE_Fehler
[Link] 'DDE - Verbindung Wertrückgabe
End If
Exit Sub
End Sub
Exit Sub 'Verbindung absichtlich abgebaut >> keine Reaktion auf Ereignis
Else
Seite 107
Anhang Quellcodes
End Sub
Exit Sub
Else
On Error GoTo DDE_Fehler
[Link] 'DDE - Verbindung Wertrückgabe
End If
Exit Sub
End Sub
Private Sub lblswitch2_LinkClose()
Exit Sub 'Verbindung absichtlich abgebaut >> keine Reaktion auf Ereignis
Else
DDE_Verbindung 'Verbindung aufbauen
End If
End Sub
Exit Sub
Else
On Error GoTo DDE_Fehler
[Link] 'DDE - Verbindung Wertrückgabe
End If
Exit Sub
End Sub
Seite 108
Anhang Quellcodes
Exit Sub 'Verbindung absichtlich abgebaut >> keine Reaktion auf Ereignis
Else
DDE_Verbindung 'Verbindung aufbauen
End If
End Sub
Exit Sub
Else
On Error GoTo DDE_Fehler
[Link] 'DDE - Verbindung Wertrückgabe
End If
Exit Sub
End Sub
Exit Sub 'Verbindung absichtlich abgebaut >> keine Reaktion auf Ereignis
Else
DDE_Verbindung 'Verbindung aufbauen
End If
End Sub
Exit Sub
Else
On Error GoTo DDE_Fehler
[Link] 'DDE - Verbindung Wertrückgabe
End If
Exit Sub
End Sub
Seite 109
Anhang Quellcodes
Exit Sub 'Verbindung absichtlich abgebaut >> keine Reaktion auf Ereignis
Else
DDE_Verbindung 'Verbindung aufbauen
End If
End Sub
Exit Sub
Else
On Error GoTo DDE_Fehler
[Link] 'DDE - Verbindung Wertrückgabe
End If
Exit Sub
End Sub
Exit Sub 'Verbindung absichtlich abgebaut >> keine Reaktion auf Ereignis
Else
DDE_Verbindung 'Verbindung aufbauen
End If
End Sub
Exit Sub
Else
On Error GoTo DDE_Fehler
[Link] 'DDE - Verbindung Wertrückgabe
End If
Exit Sub
Seite 110
Anhang Quellcodes
End Sub
Exit Sub 'Verbindung absichtlich abgebaut >> keine Reaktion auf Ereignis
Else
DDE_Verbindung 'Verbindung aufbauen
End If
End Sub
Exit Sub
Else
On Error GoTo DDE_Fehler
[Link] 'DDE - Verbindung Wertrückgabe
End If
Exit Sub
End Sub
Exit Sub 'Verbindung absichtlich abgebaut >> keine Reaktion auf Ereignis
Else
DDE_Verbindung 'Verbindung aufbauen
End If
End Sub
Seite 111
Anhang Quellcodes
End Select
DDE_Fehler: DDE_Verbindung
End Sub
End Sub
Seite 112
Anhang Quellcodes
If Startbutton = True And flag_box_ein = True Then 'nur wenn Startbutton und I/O Box eingeschaltet
[Link] = Chr$(&H54) 'Kommando Abfrage der digitalen Sensoren
[Link] = Chr$(ETX)
End If
End Sub
Exit Sub 'Verbindung absichtlich abgebaut >> keine Reaktion auf Ereignis
Else
DDE_Verbindung 'Verbindung aufbauen
End If
End Sub
sollpos1 = lblsollpos1_DDE.Caption
achse = 1
speed = lblspeed_DDE.Caption
End Sub
Exit Sub 'Verbindung absichtlich abgebaut >> keine Reaktion auf Ereignis
Else
DDE_Verbindung 'Verbindung aufbauen
End If
End Sub
Seite 113
Anhang Quellcodes
sollpos2 = lblsollpos2_DDE.Caption
achse = 2
speed = lblspeed_DDE.Caption
End Sub
Exit Sub 'Verbindung absichtlich abgebaut >> keine Reaktion auf Ereignis
Else
DDE_Verbindung 'Verbindung aufbauen
End If
End Sub
sollpos3 = lblsollpos3_DDE
achse = 3
speed = lblspeed_DDE.Caption
End Sub
Exit Sub 'Verbindung absichtlich abgebaut >> keine Reaktion auf Ereignis
Else
DDE_Verbindung 'Verbindung aufbauen
End If
End Sub
sollpos4 = lblsollpos4_DDE.Caption
achse = 4
speed = lblspeed_DDE.Caption
End Sub
Seite 114
Anhang Quellcodes
Exit Sub 'Verbindung absichtlich abgebaut >> keine Reaktion auf Ereignis
Else
DDE_Verbindung 'Verbindung aufbauen
End If
End Sub
sollpos5 = lblsollpos5_DDE.Caption
achse = 5
speed = lblspeed_DDE.Caption
End Sub
Exit Sub 'Verbindung absichtlich abgebaut >> keine Reaktion auf Ereignis
Else
End Sub
flagtimeIstAbfrage = True
Seite 115
Anhang Quellcodes
End If
flagtimeIstAbfrage = False
'Istwerte_vom_Rob (rückgabe)
End Sub
Char = Chr(KeyAscii)
sollpos0help1 = Asc(Char) ' Umwandlung ASCII->Integer
End Sub
Private Sub txtsollpos0_Change() ' Eingabe Soll 0, nur wenn Zahlen und/oder "-"
If sollpos0help2 = False And sollpos0help1 <> 8 And Startbutton = False Then '
Else
sollpos0 = Val([Link]) ' Zeichenfolge als numerische Wert zurück
[Link] = sollpos0
End If
Seite 116
Anhang Quellcodes
End Sub
End Sub
Char = Chr(KeyAscii)
sollpos1help1 = Asc(Char) ' Umwandlung ASCII->Integer
If sollpos1help1 > 57 Or sollpos1help1 < 48 Then ' keine Zahlen eingegeben
sollpos1help2 = False
Else
sollpos1help2 = True 'Zahlen eingegeben
End If
End Sub
End If
End Sub
Char = Chr(KeyAscii)
sollpos2help1 = Asc(Char) ' Umwandlung ASCII->Integer
If sollpos2help1 > 57 Or sollpos2help1 < 48 Then ' keine Zahlen eingegeben
sollpos2help2 = False
Else
sollpos2help2 = True 'Zahlen eingegeben
End If
End Sub
Seite 117
Anhang Quellcodes
End Sub
Char = Chr(KeyAscii)
sollpos3help1 = Asc(Char) ' Umwandlung ASCII->Integer
If sollpos3help1 > 57 Or sollpos3help1 < 48 Then ' keine Zahlen eingegeben
sollpos3help2 = False
Else
sollpos3help2 = True 'Zahlen eingegeben
End If
End Sub
End Sub
Char = Chr(KeyAscii)
sollpos4help1 = Asc(Char) ' Umwandlung ASCII->Integer
If sollpos4help1 > 57 Or sollpos4help1 < 48 Then ' keine Zahlen eingegeben
sollpos4help2 = False
Else
sollpos4help2 = True 'Zahlen eingegeben
End If
End Sub
End Sub
Seite 118
Anhang Quellcodes
Char = Chr(KeyAscii)
sollpos5help1 = Asc(Char) ' Umwandlung ASCII->Integer
If sollpos5help1 > 57 Or sollpos5help1 < 48 Then ' keine Zahlen eingegeben
sollpos5help2 = False
Else
sollpos5help2 = True 'Zahlen eingegeben
End If
End Sub
[Link] = sollpos0
[Link] = sollpos1
[Link] = sollpos2
[Link] = sollpos3
[Link] = sollpos4
[Link] = sollpos5
End Sub
End If
klick10 = True
klick1 = False
End Sub
Seite 119
Anhang Quellcodes
If klick10 = True And klick1 = False Then 'Achtung Roboter fährt 10 Schritte ab der jeweiligen Ist - Position
sollpos0 = pos0 - 10 'd.h. bei langsamen Geschw. keine absolute 10-er Schritte möglich
Else
sollpos0 = pos0 - 1
End If
txtsollpos0 = sollpos0
sendecom0 sollpos0, 0, speed 'Übergabe der Werte an die serielle Schnittstelle
End Sub
Private Sub cmdAchse1plus_Click(Index As Integer) 'Achse 1 +
If klick10 = True And klick1 = False Then 'Achtung Roboter fährt 10 Schritte ab der jeweiligen Ist - Position
sollpos0 = pos0 + 10
Else
sollpos0 = pos0 + 1
End If
txtsollpos0 = sollpos0
sendecom0 sollpos0, 0, speed
End Sub
Private Sub cmdAchse2minus_Click(Index As Integer) 'Achse 2-
If klick10 = True And klick1 = False Then 'Achtung Roboter fährt 10 Schritte ab der jeweiligen Ist - Position
sollpos1 = pos1 - 10
Else
sollpos1 = pos1 - 1
End If
txtsollpos1 = sollpos1
sendecom1 sollpos1, 1, speed 'Übergabe der Werte an die serielle Schnittstelle
End Sub
Seite 120
Anhang Quellcodes
If klick10 = True And klick1 = False Then 'Achtung Roboter fährt 10 Schritte ab der jeweiligen Ist - Position
sollpos1 = pos1 + 10
Else
sollpos1 = pos1 + 1
End If
txtsollpos1 = sollpos1
sendecom1 sollpos1, 1, speed 'Übergabe der Werte an die serielle Schnittstelle
End Sub
If klick10 = True And klick1 = False Then 'Achtung Roboter fährt 10 Schritte ab der jeweiligen Ist - Position
sollpos2 = pos2 - 10
Else
sollpos2 = pos2 - 1
End If
txtsollpos2 = sollpos2
sendecom2 sollpos2, 2, speed
End Sub
If klick10 = True And klick1 = False Then 'Achtung Roboter fährt 10 Schritte ab der jeweiligen Ist - Position
sollpos2 = pos2 + 10
Else
sollpos2 = pos2 + 1
End If
txtsollpos2 = sollpos2
sendecom2 sollpos2, 2, speed
Seite 121
Anhang Quellcodes
End Sub
If klick10 = True And klick1 = False Then 'Achtung Roboter fährt 10 Schritte ab der jeweiligen Ist - Position
sollpos3 = pos3 - 10
Else
sollpos3 = pos3 - 1
End If
txtsollpos3 = sollpos3
sendecom3 sollpos3, 3, speed
End Sub
If klick10 = True And klick1 = False Then 'Achtung Roboter fährt 10 Schritte ab der jeweiligen Ist - Position
sollpos3 = pos3 + 10
Else
sollpos3 = pos3 + 1
End If
txtsollpos3 = sollpos3
sendecom3 sollpos3, 3, speed 'Übergabe der Werte an die serielle Schnittstelle
End Sub
If klick10 = True And klick1 = False Then 'Achtung Roboter fährt 10 Schritte ab der jeweiligen Ist - Position
sollpos4 = pos4 - 10
Else
sollpos4 = pos4 - 1
End If
txtsollpos4 = sollpos4
Seite 122
Anhang Quellcodes
End Sub
If klick10 = True And klick1 = False Then 'Achtung Roboter fährt 10 Schritte ab der jeweiligen Ist - Position
sollpos4 = pos4 + 10
Else
sollpos4 = pos4 + 1
End If
txtsollpos4 = sollpos4
sendecom4 sollpos4, 4, speed
End Sub
If klick10 = True And klick1 = False Then 'Achtung Roboter fährt 10 Schritte ab der jeweiligen Ist - Position
sollpos5 = pos5 + 10
Else
sollpos5 = pos5 + 1
End If
txtsollpos5 = sollpos5
sendecom5 sollpos5, 5, speed
End Sub
If klick10 = True And klick1 = False Then 'Achtung Roboter fährt 10 Schritte ab der jeweiligen Ist - Position
sollpos5 = pos5 - 10
Else
sollpos5 = pos5 - 1
End If
Seite 123
Anhang Quellcodes
txtsollpos5 = sollpos5
sendecom5 sollpos5, 5, speed
End Sub
End Sub
Else
End If
If (sollpos0 > 255) Or (sollpos0 < 0) Then 'Übergabe der Werte nur im zulässigen Bereich
sollpos0 = pos0
[Link] = pos0
Seite 124
Anhang Quellcodes
Mldg = "Bitte wählen ein andere Position für die Achse1 " & Chr$(10) & " 80...0..-80 Grad" 'Message Box >>>
Warnung
Else
Mldg = "Bitte wählen ein andere Position für die Achse1 " & Chr$(10) & " 0..255 Grad" 'Message Box >>>
Warnung
End If
End Sub
Else
End If
If (sollpos1 > 255) Or (sollpos1 < 0) Then 'praktisch 0-255 möglich, hier (>>180)Begrenzung wegen Kollisionsgefahr !!!
Seite 125
Anhang Quellcodes
End If
End Sub
sollpos2 = sollpos2real
Else
End If
Seite 126
Anhang Quellcodes
End If
End Sub
Else
End If
Seite 127
Anhang Quellcodes
[Link] = pos3
Else
End If
End Sub
Else
End If
Seite 128
Anhang Quellcodes
End If
End Sub
End If
End Sub
Seite 129
Anhang Quellcodes
End If
Else
On Error GoTo DDE_Fehler
[Link] 'DDE - Verbindung Wertrückgabe
End If
Seite 130
Anhang Quellcodes
Else
On Error GoTo DDE_Fehler
[Link] 'DDE - Verbindung Wertrückgabe
End If
Else
On Error GoTo DDE_Fehler
[Link] 'DDE - Verbindung Wertrückgabe
End If
Seite 131
Anhang Quellcodes
End If
Else
On Error GoTo DDE_Fehler
[Link] 'DDE - Verbindung Wertrückgabe
End If
Else
On Error GoTo DDE_Fehler
[Link] 'DDE - Verbindung Wertrückgabe
End If
Exit Sub
DDE_Fehler: DDE_Verbindung 'Verbindung aufbauen
End Sub
Seite 132
Anhang Quellcodes
If (digout And &H1) Then 'switch1 ' Achtung Bit - Vergleich, nicht Zahlen
[Link] = &HFF& 'Farbe ändern >> rot
End If
Else
[Link] = &HC0C0C0 'Farbe ändern >> grau
End If
End If
Else
[Link] = 1
On Error GoTo DDE_Fehler
[Link] 'DDE - Verbindung Wertrückgabe
End If
Else
[Link] = &HC0C0C0 'Farbe ändern >> grau
'keine Rückgabe an die SPS
Else
[Link] = 0
Seite 133
Anhang Quellcodes
End If
End If
If (digout And &H4) Then 'switch3
Else
[Link] = 1
On Error GoTo DDE_Fehler
[Link] 'DDE - Verbindung Wertrückgabe
End If
Else
[Link] = &HC0C0C0 'Farbe ändern >> grau
Else
[Link] = 0
End If
End If
If (digout And &H8) Then 'switch4
[Link] = &HFF& 'Farbe ändern >> rot
Else
[Link] = 1
On Error GoTo DDE_Fehler
[Link] 'DDE - Verbindung Wertrückgabe
End If
Else
[Link] = &HC0C0C0 'Farbe ändern >> grau
Seite 134
Anhang Quellcodes
Else
[Link] = 0
End If
End If
If (digout And &H10) Then 'switch5
[Link] = &HFF& 'Farbe ändern >> rot
Else
[Link] = 1
On Error GoTo DDE_Fehler
[Link] 'DDE - Verbindung Wertrückgabe
End If
Else
[Link] = &HC0C0C0 'Farbe ändern >> grau
Else
[Link] = 0
End If
End If
If (digout And &H20) Then 'switch6
[Link] = &HFF& 'Farbe ändern >> rot
Else
[Link] = 1
On Error GoTo DDE_Fehler
[Link] 'DDE - Verbindung Wertrückgabe
End If
Else
Seite 135
Anhang Quellcodes
Else
[Link] = 0
On Error GoTo DDE_Fehler
[Link] 'DDE - Verbindung Wertrückgabe
End If
End If
Else
[Link] = 1
On Error GoTo DDE_Fehler
[Link] 'DDE - Verbindung Wertrückgabe
End If
Else
[Link] = &HC0C0C0 'Farbe ändern >> grau
Else
[Link] = 0
On Error GoTo DDE_Fehler
[Link] 'DDE - Verbindung Wertrückgabe
End If
End If
Else
[Link] = 1
On Error GoTo DDE_Fehler
[Link] 'DDE - Verbindung Wertrückgabe
Seite 136
Anhang Quellcodes
End If
Else
[Link] = &HC0C0C0 'Farbe ändern >> grau
Else
[Link] = 0
On Error GoTo DDE_Fehler
[Link] 'DDE - Verbindung Wertrückgabe
End If
End If
Exit Sub
End Sub
flag_Position_erreicht = True
flag_move = False
[Link] = &HFFFFFF
[Link] = &HFFFFFF
[Link] = &HFFFFFF
[Link] = &HFFFFFF
[Link] = &HFFFFFF
[Link] = &HFFFFFF
End Sub
flag_move = True
flag_Position_erreicht = False
[Link] = &H80FFFF
[Link] = &H80FFFF
[Link] = &H80FFFF
[Link] = &H80FFFF
[Link] = &H80FFFF
[Link] = &H80FFFF
End Sub
Seite 137
Anhang Quellcodes
On Error GoTo DDE_Fehler ' DDE - Kommunikationsfehler >> Sprung zur Marke DDE_Fehler
lblsollpos1_DDE.LinkTopic = ProjektName
lblsollpos1_DDE.LinkItem = ".achse2soll" '
lblsollpos1_DDE.LinkMode = vbLinkAutomatic
lblsollpos2_DDE.LinkTopic = ProjektName
lblsollpos2_DDE.LinkItem = ".achse3soll" '
lblsollpos2_DDE.LinkMode = vbLinkAutomatic
lblsollpos3_DDE.LinkTopic = ProjektName
lblsollpos3_DDE.LinkItem = ".achse4soll" '
lblsollpos3_DDE.LinkMode = vbLinkAutomatic
lblsollpos4_DDE.LinkTopic = ProjektName
lblsollpos4_DDE.LinkItem = ".achse5soll" '
lblsollpos4_DDE.LinkMode = vbLinkAutomatic
lblsollpos5_DDE.LinkTopic = ProjektName
lblsollpos5_DDE.LinkItem = ".Greifersoll" '
lblsollpos5_DDE.LinkMode = vbLinkAutomatic
Seite 138
Anhang Quellcodes
[Link] = ProjektName
[Link] = ".Schalter1" '
[Link] = vbLinkAutomatic
[Link] = ProjektNam e
[Link] = ".Schalter2" '
[Link] = vbLinkAutomatic
[Link] = ProjektName
[Link] = ".Schalter3" '
[Link] = vbLinkAutomatic
[Link] = ProjektName
[Link] = ".Schalter4" '
[Link] = vbLinkAutomatic
[Link] = ProjektName
[Link] = ".Schalter5" '
[Link] = vbLinkAutomatic
[Link] = ProjektName
[Link] = ".Schalter6" '
[Link] = vbLinkAutomatic
[Link] = ProjektName
[Link] = ".Schalter7" '
[Link] = vbLinkAutomatic
[Link] = ProjektName
[Link] = ".Schalter8" '
[Link] ode = vbLinkAutomatic
[Link] = ProjektName
Seite 139
Anhang Quellcodes
[Link] = ProjektName
[Link] = ".OUTLED2" '
[Link] = vbLinkAutomatic
[Link] = ProjektName
[Link] = ".OUTLED3" '
[Link] = vbLinkAutomati c
[Link] = ProjektName
[Link] = ".OUTLED4" '
[Link] = vbLinkAutomatic
[Link] = ProjektName
[Link] = ".OUTLED5" '
[Link] = vbLinkAutomatic
[Link] = ProjektName
[Link] = ".OUTLED6" '
[Link] = vbLinkAutomatic
[Link] = ProjektName
[Link] = ".OUTLED7" '
[Link] = vbLinkAutomatic
[Link] = ProjektName
[Link] = ".OUTLED8" '
[Link] = vbLinkAutomatic
lblPos_erreicht.LinkTopic = ProjektName
lblPos_erreicht.LinkItem = ".flag_Pos_erreicht" '
lblPos_erreicht.LinkMode = vbLinkAutomatic
'Abfrage nach Art der Sollwerte >> Grad oder Byte 0..255
Mldg = "Wollen die Sollwerte der Achsen als Grad angeben dann bestätigen Sie mit >>OK " & Chr$(10) & "Wollen Sie die Werte
Byte(0..255) angeben, dann wählen Sie >> Nein "
Stil = vbYesNo + vbQuestion + vbDefaultButton1
'Schaltflächen definieren.
Titel = "Wie wollen Sie den Roboter ansteuern ?" ' Titel definieren.
Antwort = MsgBox(Mldg, Stil, Titel) ' Hilfe, Ktxt) ' Meldung anzeigen.
If Antwort = vbYes Then 'Benutzer hat "Ja" gewählt >> Sollwerte als Grad
ElseIf Antwort = vbNo Then 'Benutzer hat "Ja" gewählt >> Sollwerte als Grad
Seite 140
Anhang Quellcodes
End If
Exit Sub
Mldg = "Starten Sie bitte " & NameSPS & " und bestätigen Sie mit OK " & Chr$(10) & " oder geben Sie den neuen Namen
des SPS - >> Nein " & Chr$(10) & " für die Ansteuerung des Roboters ohne SPS wählen Sie >>Abbrechen" ' Meldung
definieren.
Stil = vbYesNoCancel + vbQuestion + vbDefaultButton1
'Schaltflächen definieren.
Titel = "DDE - Verbindung Fehler !!!" ' Titel definieren.
Antwort = MsgBox(Mldg, Stil, Titel) ' Hilfe, Ktxt) ' Meldung anzeigen.
If Antwort = vbYes Then 'Benutzer hat "Ja" gewählt >> Ansteuerung über SPS .
ElseIf Antwort = vbNo Then 'Benutzer hat "Nein" gewählt >> Ansteuerung über SPS >> neuer Name
flag_SPS_Wahl = True
[Link] = False
[Link] ' Gebe den neuen Namen ein
ElseIf Antwort = vbCancel Then 'Benutzer hat "Abbrechen" gewählt >> Ansteuerung ohne SPS
flag_SPS_Wahl = False
DDE_Schließen
No_DDE_Oberfläche
End If
Seite 141
Anhang Quellcodes
Exit Sub
End Sub
Public Sub DDE_Schließen() 'DDE - Kanäle schließen
lblspeed_DDE.LinkMode = None
lblsollpos0_DDE.LinkMode = None 'beendet DDE - Verbindung
lblsollpos1_DDE.LinkMode = None 'beendet DDE - Verbindung
lblsollpos2_DDE.LinkMode = None 'beendet DDE - Verbindung
lblsollpos3_DDE.LinkMode = None 'beendet DDE - Verbindung
lblsollpos4_DDE.LinkMode = None 'beendet DDE - Verbindung
lblsollpos5_DDE.LinkMode = None 'beendet DDE - Verbindung
End Sub
Else
[Link] = " 0.........255"
[Link] = " 0.........255"
[Link] = " 0.........255"
[Link] = " 0.........255"
[Link] = " 0.........255"
[Link] = " 0.........255"
[Link] = "Winkel"
End If
lbl_1.Left = 480
lbl_1.Top = 2520
lbl_2(0).Left = 480
lbl_2(0).Top = 3360
lbl_3(1).Left = 480
lbl_3(1).Top = 4200
lbl_4(2).Left = 360
lbl_4(2).Top = 5040
lbl_5(3).Left = 480
lbl_5(3).Top = 5880
Seite 142
Anhang Quellcodes
lbl_6(4).Left = 600
lbl_6(4).Top = 6720
[Link] = False
cmdAchse1plus(0).Visible = False
cmdAchse2minus(2).Visible = False
cmdAchse2minus(2).Visible = False
cmdAchse2plus(1).Visible = False
cmdAchse3minus(4).Visible = False
cmdAchse3plus(3).Visible = False
cmdAchse4minus(6).Visible = False
cmdAchse4plus(5).Visible = False
cmdAchse5minus(8).Visible = False
cmdAchse5plus(7).Visible = False
[Link] = False
[Link] = False
[Link] = False
[Link] = False
[Link] = False
[Link] = False
[Link] = False
[Link] = False
[Link] = False
[Link] = False
[Link] = False
End Sub
Seite 143
Anhang Quellcodes
Else
[Link] = " 0.........255"
[Link] = " 0.........255"
[Link] = " 0.........255"
[Link] = " 0.........255"
[Link] = " 0.........255"
[Link] = " 0.........255"
[Link] = "Winkel"
End If
lbl_1.Left = 8925
lbl_1.Top = 2640
lbl_2(0).Left = 8925
lbl_2(0).Top = 3480
lbl_3(1).Left = 8925
lbl_3(1).Top = 4320
lbl_4(2).Left = 8820
lbl_4(2).Top = 5160
lbl_5(3).Left = 8925
lbl_5(3).Top = 6000
lbl_6(4).Left = 9030
lbl_6(4).Top = 6840
[Link] = True
[Link] = True
[Link] = True
[Link] = True
[Link] = True
[Link] = True
[Link] = True
[Link] = True
cmdAchse1plus(0).Visible = True
cmdAchse2minus(2).Visible = True
cmdAchse2minus(2).Visible = True
cmdAchse2plus(1).Visible = True
Seite 144
Anhang Quellcodes
cmdAchse3minus(4).Visible = True
cmdAchse3plus(3).Visible = True
cmdAchse4minus(6).Visible = True
cmdAchse4plus(5).Visible = True
cmdAchse5minus(8).Visible = True
cmdAchse5plus(7).Visible = True
[Link] = True
[Link] = True
[Link] = True
[Link] = True
[Link] = True
[Link] = True
[Link] = True
[Link] = True
[Link] = True
[Link] = True
[Link] = True
End Sub
Seite 145