Het was de bedoeling de basisbewegingen van een
robot te kunnen demonstreren door de verschillende motoren te sturen via de parallelle
poort. Door de oneindige mogelijkheden van de programmeeromgeving is echter
meer mogelijk. WYTIWYG What you think is what you get
Om de robot in beweging te krijgen volstaat het
6 gelijkstroommotoren van gelijkspanning te voorzien .
+ - = links
- + = rechtse draaizin.
Motor 0 bevindt zich in de voet van de robot .
motor 1 is het schoudergewricht, motor 2 de elleboog motor 3,4,en 5 het
polsgewricht (Pitch,Roll,Yaw).
Op elke printerpoort bevinden zich 12 uitgangen
en 5 ingangen, voldoende voor de bediening van
6 motoren en 5 sensoren.De printerpoort wordt
gebufferd met optocouplers die de vermogentrap sturen en zorgen voor een
galvanische scheiding.
De snelheid van de motoren wordt geregeld door
pulsbreedtemodulatie. Een db-programma zorgt voor de verschillende parameters
voor die pulsbreedteregeling :periode,aan-tijd ,uit-tijd. In het scherm parameters
kunnen de verschillende parameters nog aangepast worden volgens PC, Robot
en toepassing Bij het opstarten van het robotprogramma wordt automatisch
printerpoort 2 geselecteerd. Via het menu kan ook gekozen worden voor LPT1.
Met de bedieningsknoppen in het scherm handbediening
kan de robot in zijn initiële stand gezet worden alvorens over te gaan naar de
automatische werking. Met de 5 sensoren krijgt men een indicatie van de
initiële stand.
Willen we een automatische sturing van een
aantal opeenvolgende bewegingen, dan volstaat het de opeenvolgende coördinaten
in te geven in een excel-programma.Dit programma zorgt voor de omrekening van
cartesiaanse coördinaten naar poolcoördinaten of hoekcoördinaten .
Het resultaat van de berekeningen wordt in een
vast gedefinieerde tabel opgeslagen in databaseformaat .Bij het opstarten van
het robotprogramma wordt programma1.db geladen Deze file moet zich bevinden in
dezelfde directory als het robotprogramma . Andere programma’s kunnen opgehaald
worden via menu of knop “programma”
Het
robotprogramma leest de G-code en bepaald hiermee volgens welk algoritme
de opeenvolgende coördinaten bereikt worden.De gewenste snelheid kan opgegeven
worden in de kolom Feed mm/min
Het db-programma moet rekening houden met
eventuele hindernissen onderweg, dit is dan ook een opdracht voor de
programmamaker. Door gebruik te maken van de gepaste G-code ,boog , hoek,
lineair , motorvolgorde enz kan men hindernissen omzeilen en het aantal
programmaregels beperken .
Door één druk op de muisknop wordt een heel
mechanisme in werking gesteld, daarom is alleen een verantwoord gebruik
toegelaten. De kracht van de motoren wordt om veiligheidsredenen begrensd.
Bij noodgevallen moet de dodemansknop of de
noodstop gebruikt worden want bij een druk op de knop “Stop” op het scherm
wordt de actuele cyclus afgewerkt. Om een situatie op te lossen waarbij iemand
klem zit kan gebruik gemaakt worden van de handbediening. Een veiligheidsscherm
wordt echter voorzien rond de robot Het spreekt voor zich dat dit dan ook nooit
overbrugd wordt of op één of andere manier omzeild wordt. Gebruik van een
paswoord zal in de tweede versie ingebouwd worden om alleen gebruik door
bevoegden toe te laten. Nu wordt gebruik gemaakt van een sleutel om de spanning
in te schakelen .
Foutmeldingen beperken zich nu nog tot de
foutmeldingen van Windows 98.
Bij onoordeelkundig gebruik zal het voorkomen
dat het programma opnieuw moet opgestart worden.
Een goede voorbereiding spaart dus tijd en
frustraties.
Laat niet na om uw bevindingen in het
elektronische dagboek neer te schrijven . Zie knop “dagboek” in het
hoofdscherm .Bij voldoende informatie over uw wensen en bevindingen zal het
programma aangepast worden. Het dagboek kan ook gebruikt worden om uw
ervaringen door te geven aan andere gebruikers .Het is de bedoeling in de
volgende versie met een joystick te werken voor handbediening en met sensoren
om de bewegingen te sturen bij automatisch gebruik
Zelfs gebruik van een camera voor positionering
wordt in overweging genomen.
Motor 5
Motor 4
Motor 3
Motor 2
Motor 1
Motor 0
Handbediening : Het handbedieningsscherm wordt geopend
Bewegingstypen: Een scherm met verschillende basisbewegingen (nog niet af)
Parameters: Gegevens over het soort robot: lengte, spanning, gewicht ..
Paswoord : Een paswoord moet ingetypt worden.
Programma: Een ander databasedocument kan opgehaald worden
Help: Oplossing voor veel voorkomende problemen
Service: Elementaire parameters kunnen aangepast worden.
Registratie van de werking kan bekeken worden.(nog niet)
Dagboek Een tekstboek verschijnt met de laatst ingetypte verslagen.
Communicatiemiddel met de gebruiker + geheugensteuntje
Hieraan wordt nog verdergewerkt.
De beginrecord en de eindrecord uit het databasedocument worden ingevuld.
Het aantal cycli wordt bijgehouden .
Als je bevoegd bent en het paswoord kent mag je op start drukken.
Bij het drukken op stop wordt de volledige cyclus eerst afgewerkt.
Een cyclus wordt bepaald door begin- en eindrecord .
Bij éénmaal drukken op de startknop wordt één cyclus afgewerkt
De focus wordt op de stop gezet
Wanneer nogmaals gedrukt wordt op de startknop werkt de robot continu.
De focus wordt op de stop gezet
De volgorde en de benaming van de kolommen ligt vast in het robotprogramma.
De lengte van het programma of het aantal records is niet van belang
Het is aangewezen opeenvolgende N-blok nummers te gebruiken
De G-code geeft informatie aan het programma voor het te volgen algoritme.
De gebruiker van de robot moet in het excelprogramma de X,Y,Z coordinaten opgeven en de hoek waaronder de effector het object moet benaderen PITCH,ROLL en YAW De robotcoordinaten worden hieruit berekend. Met FEED kan de gewenste snelheid opgegeven worden deze wordt dan bewerkt met parameters.
De snelheid van motor 0 wordt gecorrigeerd
De snelheid van motor 1 wordt gecorrigeerd
De snelheid van motor 2 wordt gecorrigeerd
De snelheid van motor 3 wordt gecorrigeerd
De snelheid van motor 4 wordt gecorrigeerd
De snelheid van motor 5 wordt gecorrigeerd
De toestand 0 of 1 komt in het witte vlakje naast de sensor
De TCP-coördinaten en de robotcoördinaten worden weergegeven op de figuur.
X=0,Y=0,Z=2260
M1=0° M1=0° M2=0°
Op de grond wordt een X,Y assenstelsel getekend met een verdeling volgens de
X en Y-coördinaten De robot wordt met het center van de basis op X=0,Y=0 gezet
De hoogte is de Z-as.
X=0, Y
=1299mm ,Z 1046mm
M0=0,M1=45°,M2=45°,M3=45°
Het openen van een dbf-bestand kan op twee manieren :
Via het menu
Via de bedieningsknop : programma
De keuze van printerpoort 1 of 2 gebeurt via het menu
LPT1 heeft als basisadres 0x278 tot 0x27A
LPT2 heeft als basisadres 0x378 tot 0x37F
Dit volgens het evangelie van Microsoft Systeminfo
Zie bijlage voor volledige sourcecode van de verschillende files
Bevat de declaraties van variabelen, functies,objecten en componenten voor
het hoofdscherm.
Bevat alle code voor de bedieningen en uitlezingen in het hoofdscherm.
Bevat de declaraties van variabelen, functies,objecten en componenten voor
het handbedieningsscherm.
Bevat alle code voor de bedieningen en uitlezingen in het handbedieningsscherm.
Teksten met helpfiles(nog niet af)
Informatie over de robot (nog niet af)
Bevat de assembleercode voor het sturen van de printerpoort.
Het laat een hoge snelheid van inlezen en uitlezen toe.
Deze manier van werken wordt niet toegelaten bij Windows NT en 2000
Declaraties voor bovenstaande file
Bevat het cijfermateriaal voor een geautomatiseerde sturing van de verschillende motoren.
Code en declaraties van het project zelf
if ( OpenDialog1->Execute()) // geijkte procedure om een file te
openen
{ Table1->Close();
AnsiString s= OpenDialog1->FileName;
AnsiString dir, tabel;
int i,idel;
for (i=0;i< s.Length();i++)
if (s.IsPathDelimiter(i)) idel=i;
if (idel)
{dir = s.SubString(1,idel);
tabel=s.SubString(idel+1,s.Length());
}
else return;
Table1->DatabaseName= dir; //Tabel invoegen
Table1->TableName= tabel;
Table1->Open();
}
Rij
1 noemen we de Setwaarde:= huidige toestand
Rij
2 de Solwaarde =
gewenste waarde
//Motor0 links
for (;M0Sol<M0Set;M0Set--)
// Algoritme om een motor spaning te geven
{Sensoren(); //
Toestand van de sensoren binnenlezen
for (j=0;j<M0On;j++) // spanning
outport(port,M0L);
for
(k=0;k<=M0Off;k++) // geen spanning
outport(port,0x00);
teller0--; //
positieteller voor motor 0 bijhouden
Application->ProcessMessages(); //
andere acties toelaten
}
//Motor0 rechts
for (;M0Sol>M0Set;M0Set++)
{Sensoren();
for (j=0;j<M0On;j++)
outport(port,M0R);
for (k=0;k<=M0Off;k++)
outport(port,0x00);
teller0++;
Application->ProcessMessages();
}
De snelheid wordt veranderd door de verhouding MoOn en MoOff te wijzigen
Dit gebeurt bij de samenstelling van periode Aan-tijd en Uit-tijd
int
Snelheid=Edit1Snelheid->Text.ToIntDef(10000)*1;
int
Snelheid0=EditSnelheid0->Text.ToIntDef(10000)*1;
int
Snelheid1=EditSnelheid1->Text.ToIntDef(10000)*1;
int
Snelheid2=EditSnelheid2->Text.ToIntDef(10000)*1;
int
Snelheid3=EditSnelheid3->Text.ToIntDef(10000)*1;
int
Snelheid4=EditSnelheid4->Text.ToIntDef(10000)*1;
int
Snelheid5=EditSnelheid5->Text.ToIntDef(10000)*1;
int M0On=Snelheid0*Snelheid; // Aan-tijd van motor
0
int M1On=Snelheid1*Snelheid; // Aan-tijd van motor 1
int M2On=Snelheid2*Snelheid; // Aan-tijd van motor
2
int M3On=Snelheid3*Snelheid; // Aan-tijd van motor
3
int M4On=Snelheid4*Snelheid; // Aan-tijd van motor
4
int M5On=Snelheid5*Snelheid; // Aan-tijd van motor
5
int Periode= Snelheid*100;
int M0Off=Periode-M0On; // Offtijd van motor 0
int M1Off=Periode-M1On; // Offtijd van motor 1
int M2Off=Periode-M2On; // Offtijd van motor 2
int M3Off=Periode-M3On; // Offtijd van motor 3
int M4Off=Periode-M4On; // Offtijd van motor 4
int M5Off=Periode-M5On; // Offtijd van motor 5
Bovenstaand algoritme zorgt ervoor dat bij het verhogen van de snelheid alleen de aan-tijd vergroot en niet de gehele periode.
Bij het vergroten van de snelheid algemeen vergroten alle aan-tijden met eenzelfde percentage.
De gewenste auditieve mededelingen worden aangeboden in een file audio.wav
De belangrijkste richtlijnen i.v.m. veiligheid en gebruik kunnen hierin medegedeeld worden.
void
TMainForm::Audio()
{
PlaySound("audio.wav",
hInst,SND_NOSTOP | SND_ASYNC );
}
// auditieve mededelingen i.v.m. veiligheid. Een
extra dimensie
void __fastcall
TMainForm::About1Click(TObject *Sender) {
AboutBox->ShowModal();
}
//About de versie en de auteur
void __fastcall
TMainForm::Button2Click(TObject *Sender) {
HelpScherm->ShowModal();
}
// Helpscherm
openenen
void TMainForm::Sensoren() //inlezen
toestand van de 5 sensoren
{PinA=((inportb
(0x279) & 0x8) == 0x8);
PinB=((inportb(0x279) & 0x40) == 0x40);
PinC=((inportb(0x279) & 0x20) == 0x20);
PinD= ((inportb(0x279) & 0x10) == 0x10);
PinE=((inportb(0x279) & 0x80) == 0x80);
if ( PinA)
{
Label1->Caption=
PinA ;
}
else
{Label1->Caption=
"0 " ;
}
if (PinB)
{
Label2->Caption=
PinB ;
}else
{Label2->Caption=
"0 " ;
}
if (PinC)
{
Label3->Caption=
PinC ;
}else
{Label3->Caption=
"0 " ;
}
if (PinD)
{
Label4->Caption=
PinD ;
}else
{Label4->Caption=
"0 " ;
}
if (!PinE)
{
Label5->Caption =
"1" ;
}else
{Label5->Caption=
"0" ;
}
De functies inportb worden gedefinieerd in de file ports.c
en ports.h
en werken bevredigend bij gebruik met W98.
Voor toepassingen met WNT en W2000 moet uitgekeken
worden naar een andere oplossing W98 ziet dit voorlopig door de vingers.
Door
in alle lussen gebruik te maken van de functie Application->ProcessMessages();
is
het gebruik van Threads voorlopig niet nodig. Hierdoor is het mogelijk om
tijdens het uitvoeren van een for lus andere acties uit te voeren . Alle
windowacties blijven eveneens mogeliik .
Het
is ook mogelijk tijdens de werking van de motoren de toestand van de sensoren
binnen te lezen. Deze toestanden zullen later gebruikt worden om de motoren
vroegtijdig te stoppen wanneer een sensor bediend wordt.
vb
for (;M0Sol>M0Set;M0Set++)
{Sensoren();
for (j=0;j<M0On;j++)
outport(port,M0R);
for (k=0;k<=M0Off;k++)
outport(port,0x00);
teller0++;
Application->ProcessMessages();
Om de robot
een gestroomlijnd uiterlijk te geven worden de verschillende onderdelen licht
conisch getekend . Dit gebeurt door 360 lijntjes die elkaar gedeeltelijk
overlappen. Voor de juist positie van de lijntjes wordt gebruik gemaakt van de
tellerstand uit bovenstaande functie. De tellerstand bevat de hoek waaronder
een lijn moet getekend worden t.o.v. de vorige lijn. Na een beetje gegoochel
met sinussen en cosinussen komt de robot in de juiste positie tevoorschijn. Om
het kleur van de werkelijke robot na te bootsen werd gekozen voor kleur nr
0x002266ff
// De voet
// De gewrichten
Muis
Toetsenbord
Programmingunit
Afstandsbediening
Joystick
Camera
Afstandsbediening
Joystick
Door
gebruik te maken van een compatibel keyboard met kleinere afmetingen is het
mogelijk het bedieningsgemak te verhogen.
De operator
kan zich vrij bewegen met het toetsenbord in de hand voor zover de kabel dit
toelaat.
De
functietoetsen kunnen gebruikt worden om de basisbewegingen te demonstreren.
Het
toetsenbord laat toe een folie te gebruiken met de symbolen op met de basisbewegingen.
De
15 kanaal afstandsbediening kan dezelfde vermogentrappen sturen als de
didactische robotsturing. De afstandsbediening kan vooral gebruikt worden voor
het bewegen van de robot naar zijn initiële stand en voor testdoeleinden.
Door
het binnenhalen van de adressen van schakelaars en potmeters van de joystick
moet het mogelijk zijn de robot te sturen als handbediening.
De
combinatie van de knoppen kan de verschillende motoren selecteren.
De
stand van de potmeters kan de snelheid van die motoren sturen.
De
adressen van knoppen en potmeters zijn de vinden in een PC-Hardware boek.
Door
de multi-user en multitasking mogelijkheden van W98 moet het mogelijk zijn
snapshots van de situatie onder het TCP te nemen en met het gepaste algortime
een positionering te voorzien. Hierbij kan gedacht worden aan een CCD camera
aangesloten op een video of TV-kaart ofwel een webcam.
WYTIWYG.
Play-back
besturing: bewegingen worden met de hand voorgedaan en opgenomen
Numerieke
besturing: de bewegingen worden d.m.v. een programma ingegeven.
Vrije beweging
Sensorgestuurde beweging
Interne taken: synchroon
aansturen assen na startsignaal
Externe
taken: lassen
sensormetingen
bandsynchronisatie enz
Binair signaal: starten en stoppen
Scalair
signaal: encoders
positieopnemers
tachometers
servo’s
van robotassen
Vektorieel signaal:
meerdimensioneel camerabeeld
ruimtelijke
krachtmeting
ruimtelijke
bewegingsopdracht
Interrupt Sequentieel afvragen
Bescherming van mens en
machine
Noodstop
Run/
standby
Dodemansknop
Robot en periferie
Functionele bescherming
Bescherming
van het besturingssyssteem
Testen
van het programma op programmeerfouten
Baanbewaking
Testen
van in en uitgangssignalen
Initiele
stand
Enable
servo’s
Run/standby
Load/reset
Start/stop
Noodstop
Programmeren
Dodemansknop
Noodstop
Communicatie
Satus van de
besturing
Tekstverwerker
om programma te schrijven op wijzigen
NC-programmeertaal
Computertaal
met robotcommando’s
Geavanceerde
programmeertalen
Uitvoeren
van bewegingen
Meten
van sensoren
Aansturen
van devices
Ingave met
editor of functietoetsen
Testen
op programmeerfouten
Simuleren
Off-line
schrijven en testen
On-line
programmering
Harde schijf, floppy ,
RAM-geheugen
Robotparameters
calibratiewaarden
instellingen
voor assenregeling
Via
externe interface
Down-loaden
programma’s
MAP-
Manufacturing Automation Protocol
MMS
– Manufacturing Message Specification
Vertalen robotinstructie
naar bewegingscommando’s voor de assen
Eindpunt en evt
steunpunten opgeven
Direct
of via teach in methode m.b.v. de robot inleren
Opgeven van verplaatsing
Relatief
t.o.v. de effector met extra parameters
Lijn,
cirkelboog,snelheid,versnelling,voorwaarden
Cartesische coördinaten
Robotcoördinaten
Point-to-point
De motoren draaien zodanig
dat ze gelijktijdig in het eindpunt aankomen
De motoren draaien op
maximum snelheid tot ze hun eindpunt bereiken
De TCP (ToolCenterPoint) volgt de cartesiaanse
coördinaten van beginpunt naar eindpunt
De TCP (ToolCenterPoint) volgt de cartesische
koördinaten van beginpunt naar eindpunt via een circulaire beweging.
Interpolatietechnieken
Directe
functieberekening
Digital
differential analyser DDA
Interpolerende curvemethode
(met polynoom)
Tweetrapsinterpolatie (
om de 100ms)
Steunpunten (evt playback) als signaal voor de
regelaars
Regelalgoritmen
Terugkoppeling
SISO
(Single Input Single Output)
MIMO
(Multiple Inputs Multiple Outputs
Feedforward
canceling en feedback cancelling
Bewaakte beweging
Flexibele beweging
Interactie