ROBOTIIKAN JATKOKURSSI 1. RAPID ohjelmointikieli (4 x 3 h

ROBOTIIKAN JATKOKURSSI
Sisältö:
1. RAPID ohjelmointikieli (4 x 3 h)
Kertausta (Rapidkertaus.docx)
Uudet käskyt ja funktiot
Robottien konfigurointi (Virtuaalirobotilla harjoitellaan)
Laboraatiot (IRB 4400 ja IRB 6620)
-work-objektien ja työkalujen määrittely(Laboraatio 1)
- keskeytykset ja virheenkäsittelyt (Laboraatio 2)
-Search yms. edistykselliset käskyt (sis. Laboraatio 2)
-analogia antureiden käyttö (Laboraatio 4, IRB4400)
2. Robot Studio ohjelman käyttö (4 x 3 h)
Kertausta
Robotin luonti
Geometrian luontia
Liikeradan luonti geometriasta ja synkronointi oikean robotin IRB6620 kanssa
Screen Makerin käyttö
Virtuaaliharjoitus (Laboraatio 3)
3. Voimaohjaus (3 x 3 h)
Teoriaa ja käytännön testit IRB6620 robotilla (Laboraatio 4)
4. MultiMove RobotStudiolla (1 x 3 h)
Harjoitellaan virtuaalirobotilla.
Rapid ohjelmointikieli
a)Kerrataan peruskurssin materiaali ja harjoitellaan RST -ohjelman avulla.
b)Käydään ensin teoriassa työkalupisteiden ja workobjektien luonti. Seuraavaksi harjoitellaan RSTohjelman avulla ja lopuksi IRB6620 (voimaohjaustappi-työkalulla) ja IRB4400 (laseranturi-työkalulla).
Parametrien tallennus ja lataus sekä luonti harjoittelemalla virtuaalirobotilla.
c) Hyödylliset käskyt ja funktiot sekä näiden tarvitsemat datatiedot
Datat:
loaddata, confdata
intnum, errnum (Err_Wait_MaxTime, Err_WHL_Search)
tooldata, wobjdata
Käskyt:
SearchL, RAISE, RETRY
Keskeytykset
Ohjelman siirros (ProgDisp. jne)
Multitasking ja edistykselliset liikekäskyt
Funktiot:
DefDFrame, DefFrame
DATAT
CONFDATA
Käytetään määriteltäessä robotin akselien konfiguraatiota.
Kuvaus:
Kaikki robotin paikoitukset ovat määritetty ja tallennettu käyttäen suorakulmaisia koordinaatteja. Kun
lasketaan vastaavan akselin asema, niin usein on kaksi tai useampia mahdollisia ratkaisuja.
Tämä tarkoittaa, että robotti kykenee saavuttamaan saman aseman toisin sanoen työkalu on samassa
asemassa ja samassa suuntauksessa useissa eri paikoissa tai robottien akselien määrittelyissä.
Yksiselitteisesti osoitettaessa vain yksi mahdollinen asento, robotin konfiguraatio on määritetty neljällä
akseliarvolla. Pyörivälle akselille arvo määritellään sen hetkisellä robottiakselin neljänneksellä.
Neljännekset ovat numeroitu 0, 1, 2, jne (ne voivat myös olla negatiivisia). Neljänneksen numero liittyy
sen hetkiseen akselin numeroon. Kunkin akselin quadrant 0 on ensimmäinen neljänneskierros, 0-90 °
positiiviseen suuntaan nolla-asennosta. Quadrant 1 on seuraava neljänneskierros, 90-180 °, jne.
Neljännes ‑1 on neljänneskierros 0 ° (‑90 °), jne..
Kuva 1 Konfiguraatio neljännekselle 6-akselilla
Robotin konfiguraation datat robottimalleille IRB 1400, 2400, 3400,4400,6400
-
vain kolme parametria: cf1, cf4 ja cf6 ovat käytössä eli vastaavasti akselit 1, 4 ja 6
-
esim.
VAR confdata omakonf:=[1,-1,0]
akselin 1 neljännes 1 (90-180 astetta)
akselin 4 neljännes -1 (0-(-90) astetta)
akselin 6 neljännes 0 (0-90 astetta)
ERRNUM
Errnum datalla määritellään kaikki korjattavat virheet (non fatal), jotka ilmenevät ohjelman ajon aikana.
Jos robotti havaitsee virheen ohjelman suorituksen aikana, se voidaan käsitellä rutiinin virheenkäsittelijä
rutiinilla(ErrorHandler). Tällaisia virheitä ovat esimerkiksi liian suuret arvot ja jako nollalla.
Järjestelmämuuttujan ERRNO tyyppi on errnum, joka määritetään virheen tyypin mukaisesti.
Virheenkäsittelyrutiini voi korjata virheen lukemalla tämä muuttuja ja sitten ohjelman suoritus voi edetä
oikein.
Mahdollinen virhe voidaan luoda myös ohjelmassa käyttämällä RAISE käskyä. Tällainen virhe havaitaan
virheenkäsittelyn virhenumeron (1 – 90) määrittelyn avulla.
Esimerkkejä:
reg1 := reg2 / reg3;
ERROR
IF ERRNO = ERR DIVZERO THEN
reg3 := 1;
RETRY;
ENDIF
IF di1=0 RAISE machine_error;
ERROR
IF ERRNO=machine_error RAISE;
Harjoituksessa testataan ERR_WAIT_MAXTIME (TimeOut suoritettaessa WaitDI tai WaitUntil käskyjä)
sekä ERR_WHLSEARCH (SEARCHL käskyn aikana ei tapahdu pysähdystä ennen loppupaikkaa).
INTNUM
Intnum (interrupt numeerinen) käytetään tunnistamaan keskeytys.
Kun muuttuja (tyyppi intnum) liitetään keskeytysrutiiniin, sille annetaan tietty arvo tunnistamaan
keskeytys. Tämä muuttuja on käytössä kaikissa tilanteissa keskeytyksen käsittelyssä, kuten
pyydettäessä tai poistuessa keskeytyksestä. Useampi keskeytys voidaan liittää samaan
keskeytysrutiiniin(trap routine). Järjestelmämuuttuja INTNO:a voidaan käyttää näin keskeytysrutiinin
määrittelyssä.
Esimerkkejä:
VAR intnum feeder_error;
CONNECT feeder_error WITH correct_feeder;
ISignalDI di1, 1, feeder error;
Keskeytys syntyy, kun tulo di1 on 1. Tämän tapahtuessa kutsutaan correct_feeder
keskeytysrutiinia.
VAR intnum feeder1_error;
VAR intnum feeder2_error;
PROC init_interrupt();
CONNECT feeder1_error WITH correct_feeder;
ISignalDI di1, 1, feeder1 error;
CONNECT feeder2_error WITH correct_feeder;
ISignalDI di2, 1, feeder2 error;
ENDPROC
TRAP correct_feeder
IF INTNO=feeder1_error THEN
..
ELSE
…
ENDIF
ENDTRAP
LOADDATA
Loaddata tyyppistä muuttuja käytetään määrittelemään robotin työkaluun kiinnitettyä kuormaa. Käskyllä
GripLoad otetaan ennalta määritelty kuorma käyttöön. Työkalun tooldata tyyppinen muuttuja puolestaan
sisältää työkalun painon.
Käytettäessä kuormituksen määrittelyä robotin liikkeen ohjaus toimii optimaalisesti. Väärin määritellyt
kuormitukset voivat aiheuttaa robotin mekaanisen rikkoutumisen.
loaddata
mass (num): kuorman paino kg
cog (pos): kuorman painopiste(x,y,z) mm:ssä työkalukoordinaatistossa
aom (orient):kuormituksen sisäisten akselien orientaatio (q1, q2, q3,q4)
ix, iy, iz (num): kuormituksen inertia, merkitystä käsiteltäessä pinta-alaltaan
suuria kappaleita, käytettäessä 0 arvoja on kysymyksessä pistemäinen massa
Esimerkki:
PERS loaddata piece1: [ 5, [50, 0, 50], [1, 0, 0, 0], 0, 0, 0];
- Weight 5 kg.
- The centre of gravity is x = 50, y = 0 and z = 50 mm in the tool coordinate system.
- The payload is a point mass.
Set gripper; WaitTime 0.3;
GripLoad piece 1;
Reset gripper; WaitTime 0.3;
GripLoad load0;
PERS loaddata load0:= [ 0.001, [0, 0, 0.001],[1, 0, 0, 0],0,0,0 ];
TOOLDATA
Tooldata tyyppistä muuttujaa käytetään työkalun määrittelyyn, kuten esim. hitsauspistoolin tai tarttujan.
Työkalu tiedot vaikuttavat robotin liikkeeseen seuraavasti:
- työkalun keskipiste (TCP) viittaa kohtaan, jossa täyttyy määritetty rata ja liikenopeus
tooldata
robhold (bool): onko robotissa kiinni vai ei
tframe (pose):
Työkalukoordinaatistossa:
TCP (x, y ja z) ilmaistuna mm:ssä suhteessa ranteen koordinaatistoon ja työkalun
orientaatio (q 1, q2, q3 and q4) .
tload (loaddata): työkalun paino kg
cog (pos): kuorman painopiste(x,y,z) mm:ssä ranteen koordinaatistossa
aom (orient):kuormituksen sisäisten akselien orientaatio (q1, q2, q3,q4) suhteessa ranteen
ranteen koordinaatistoon
ix, iy, iz (num): työkalun inertia, käytettäessä 0 arvoja on kysymyksessä pistemäinen massa
Esimerkki:
PERS tooldata gripper:= [ TRUE, [[97.4, 0, 223.1], [0.924, 0, 0.383 ,0]], [5, [23, 0, 75], [1, 0, 0, 0], 0, 0,
0]];
Yllä olevassa kuvassa olevan työkalun määrittelyt:
- Työkalu on kiinni robotissa.
- TCP sijaitsee pisteessä, joka on 223.1 mm suoraan ulospäin akselista 6 ja 97.4 mm sivussa X-akselin
suuntaan
- X- and Z-suunnassa työkalu on kiertynyt 45° suhteessa ranteen koordinaatistoon.
- Työkalu painaa 5 kg.
- Työkalun painopiste on pisteessä, joka on75 mm suoraan ulospäin akselista 6 and 23 mm sivussa Xakselin suunnassa
- Työkalun massakuorma on pistemäinen ilman inertiaa
Esimerkki:
gripper.tframe.trans.z := 225.2;
Säädetään työkalun arvoksi 225.2 mm z-suunnassa
gripper.tframe.trans.z := gripper.tframe.trans.z + 1.1;
Lisätään työkalun z-arvoon 1.1 mm
PERS tooldata tool0 := [ TRUE, [ [0, 0, 0], [ 1, 0, 0 ,0] ],
[0.001, [0, 0, 0.001], [1, 0, 0, 0], 0, 0, 0] ];
WOBJDATA
Liikekäskyjen yhteyteen voidaan liittää ennalta määrätty työkohde(wobj), jonka suhteen robotti liikkuu.
Edut:
1) Jos paikoitustiedot annetaan manuaalisesti, kuten off-line ohjelmoinnissa usein tehdään, niin
paikoitusarvot voidaan ottaa suoraan kuvasta.
2) Ohjelmat ovat nopeasti uudelleen käytettävissä huomioon ottaen muutokset robotin
asennuksessa.
3) Työkohteessa tapahtuvat muutokset voidaan kompensoida. Tällöin käytetään jotakin anturia
mittaamaan työkohteen sijainti.
4) Liikutettaessa robottia ohjaussauvalla saadaan se liikkumaan työkohteen koordinaattiakselien
suuntaisesti.
5) Nykyinen paikka nähdään heti suhteessa työkohteen origoon.
wobjdata
robhold (bool): onko wobj robotissa vai ympäristössä
ufprog (bool): käytetäänkö kiinteätä vai liikkuvaa käyttäjäkoordinaatistoa
ufmec (string):mekaaninen laite, jonka suhteen robotin liikkeet ovat määriteltyjä
uframe (pose): käyttäjäkoordinaatisto (kuva), origo annetaan (x,y,z) mm:ssä ja kierto
quaternioina (q1,q2,q3,q4)
oframe (pose): kohdekoordinaatisto, joka määritellään suhteessa
käyttäjäkoordinaatistoon(kuva)
Esimerkki:
PERS wobjdata wobj2 :=[ FALSE, TRUE, "", [ [300, 600, 200], [1, 0, 0 ,0] ], [ [0, 200, 30], [1,
0, 0 ,0] ] ];
Työkohde ei ole robottiin kiinnitettynä.(FALSE)
Kiinteä käyttäjäkoordinaatisto on käytössä (TRUE)
Käyttäjäkoordinaatiston origon arvot ovat: x=300, y=600 ja z=200 (maailman koordinaatiston
origosta mitattuna) ja kiertoa ei ole( [1, 0, 0 ,0]).
Kohdekoordinaatiston origon arvot ovat: x=0, y=200 ja z=30 (käyttäjäkoordinaatiston
origosta mitattuna) ja kiertoa ei ole( [1, 0, 0 ,0]).
Esimerkki:
wobj2.oframe.trans.z := 38.3;
Säädetään wobj2 arvoksi 38.3 mm z-suunnassa
PERS wobjdata wobj0 := [ FALSE, TRUE, "", [ [0, 0, 0], [1, 0, 0 ,0] ], [ [0, 0, 0], [1,0 0,0] ]],
FUNKTIOT ja KÄSKYT
DefDFrame
DefDFrame (define displacement frame) on käytössä, kun halutaan laskea kehyksen siirtymä kolmen
alkuperäisen pisteen ja kolmen siirrospisteen avulla.
CONST robtarget p1 :_ [...];
CONST robtarget p2 :_ [...];
CONST robtarget p3 :_ [...];
VAR robtarget p4;
VAR robtarget p5;
VAR robtarget p6;
VAR pose frame1;
! Etsitään uudet pisteet
SearchL sen 1, p4, *, v50, tool1;
SearchL sen1, p5, *, v50, tool 1;
SearchL sen1, p6, *, v50, tool1;
frame := DefDframe (p 1, p2, p3, p4, p5, p6);
! Aktivoidaan kehyksen frame1 siirros käskyllä PDispSet frame1;
DefFrame
DefFrame (Define Frame) on käytössä, kun halutaan määritellä kehys kolmen pisteen avulla.
Vallitsevassa kohdekoordinaatissa olevat kolme pistettä määrittelevät uuden koordinaatiston(kehyksen),
frame1. Ensimmäinen piste p1 määrittelee uuden kehyksen origon ja toinen piste p2 määrittelee xakselin suunnan ja kolmas piste p3 määrittelee xy -tason sijainnin.
CONST robtarget p1 := [...];
CONST robtarget p2 := [...];
CONST robtarget p3 := [...];
VAR pose frame 1;
frame1 := DefFrame (p1, p2, p3);
! Aktivoidaan kehyksen frame1 siirros käskyllä PDispSet
frame1;
PDispSet
PDispSet (Program Displacement Set) on käytössä, kun määritellään ja aktivoidaan ohjelman siirros
käyttäen arvoja.
Tämä on hyödyllinen toiminta, kun esimerkiksi tehdään samanlaisia robotin liikesarjoja useissa
erilaisissa paikoissa samassa ohjelmassa. Esimerkiksi alla olevassa siirretään kaikkia mahdollisia
ohjelmoituja paikoituksia 100 mm x-akselin positiiviseen suuntaan. Aktivoitu ohjelman siirros poistetaan
käytöstä käskyllä PDispOff tai kun robotti käynnistetään uudestaan, ladataan uusi ohjelma sekä
tilanteissa, joissa ohjelman suoritus aloitetaan aivan alusta.
VAR pose xp100 := [ [100, 0, 0], [1, 0, 0, 0] ];
PDispSet xp100;
PDispOn
PDispOn (Program Displacement On) on käytössä, kun määritellään ja aktivoidaan ohjelman siirros
käyttäen kahta robotin paikoitusta.
PDispOn [ \Rot ] [ \ExeP ] ProgPoint Tool [ \WObj ]
[\Rot ]
(Rotation)
Data type: switch
Erot työkalun orientaatiossa otetaan huomioon ja tämän huomioidaan siis ohjelman
suorituksessa.
[\ExeP ]
(Executed Point)
Data type: robtarget
Robotin uusi paikoituspiste ohjelman ajon aikana. Jos tämä argumentti ei ole valittuna, niin
nykyinen paikoituspiste on käytössä ohjelman ajon aikana.
[ProgPoint] (Programmed Point)
Robotin alkuperäinen paikoituspiste.
Data type: robtarget
Esimerkkejä:
MoveL p 10, v500, z10, tool1;
PDispOn \ExeP:= p10, p20, tool1 ;
! Aktivoidaan ohjelman siirros (liikkeen aikana)
paikoitusten p10 ja p20 erotuksella. Tällöin
kaikki ohjelmoidut pisteet siirtyvät.
PDispOn \Rot\ExeP:= p10, p20, tool1;
PROC nelio()
PDispOn *, tool1;
MoveL *,v500,z10,tool1;
MoveL *,v500,z10,tool1;
MoveL *,v500,z10,tool1;
MoveL *,v500,z10,tool1;
PDispOff;
ENDPROC
PROC piirrra_neliot()
MoveL p10,v500,fine,tool1;
nelio;
MoveL p20,v500,fine,tool1;
nelio;
MoveL p30,v500,fine,tool1;
nelio;
SearchL sen1, pseacrh,p60, v100, tool1\Wobj:= Kuljetin1;
PDispOn \ExeP:=psearch, *, tool1 \Wobj:=Kuljetin1;
PDispOff
PDispOff (Program Displacement Off) on käytössä, kun ohjelman siirros otetaan pois käytöstä.
MoveL p 10, v500, z 10, tool 1;
PDispOn \ExeP:=p10, p11, tool1 ;
MoveL p20, v500, z10, tool1;
MoveL p30, v500, z10, tool1;
PDispOff;
MoveL p40, v500, z10, tool1;
SearchL
SearchL (Search Linear) toteuttaa lineaarisen etsintäliikkeen, jonka aikana valvotaan digitaalisen tulon
muuttumista. Tämän muuttuessa robotti lukee sen hetkisen paikoituksen.
SearchL, anturi1, paikka, kohdepaikka, v100, tarttuja1;
Anturi1:n arvon muuttuessa mentäessä kohti kohdepaikkaa tallennetaan
sen hetkinen asema muuttujaan paikka.
SearchL \Stop, anturi1, paikka, kohdepaikka, v100, tarttuja1;
…….ja robotti pysähtyy välittömästi.
SearchL
[ \Stop ] I [ \PStop ] I[ \Sup ] Signal [ \Flanks ] SearchPoint ToPoint Speed [ \V ] I [ \T ] Tool [
\WObj ] [ \Corr ]
[ \Stop ]
Robotti pysähtyy mahdollisimman nopeasti välittämättä siitä pysyykö TCP ohjelmoidulla
liikeradalla.(hard stop)
[ \PStop ]
(Path Stop) Robotti pysähtyy mahdollisimman nopeasti pitäen TCP:n ohjelmoidulla
liikeradalla. (soft stop)
[ \Sup ]
(Supervision) Etsintä toiminto on herkkä anturitilan muutoksille liikkeen aikana eli jos etsintä
liikkeen aikana tulee enemmän kuin yksi muutos anturin tilassa, niin ohjelman suoritus
pysähtyy. Jos mikään [\Stop ] I [ \PStop ] I[ \Sup ] –argumenteista ei ole valittuna, niin [ \Sup
] – argumentti on tavallaan toiminnollisesti valittuna.
[ \Flanks ]
Molemmat anturin tilat ovat valittuna eli huomioidaan sekä positiivisen että negatiivisen
anturitilan muutos.
[ \Corr ]
Käskyllä CorrWrite lisätty korjaustieto lisätään rataan ja kohdepaikkaan
GripLoad
GripLoad on käytössä, kun määritellään robotin tarttujassa olevan kappaleen kuorma.
GripLoad piece1; ! Tarttujassa on piece1(loaddata)
GripLoad load0; ! Tarttujassa ei ole mitään.
ISignalDI
ISignalDI (Interrupt Signal Digital In) on käytössä, kun pyydetään ja sallitaan keskeytyksiä
digitaalisen tulotiedon perusteella. Myös systeemin signaalit voivat generoida keskeytyksiä.
VAR intnum sig1int;
CONNECT sig1int WITH iroutine 1;
ISignaIDI di1, 1, sig1int;
ISignaIDI\Single di1, 1, sig1int;
! Pyytää keskeytystä vain kerran di1:n tilan muuttuessa arvoon 1.
CONNECT
CONNECT on käytössä, kun tunnistetaan keskeytys ja liitetään se valittuun keskeytysrutiiniin.
VAR intnum feeder_low;
CONNECT feeder_low WITH feeder_empty;
ISignalDI di1, 1, feeder_low;
Keskeytys syntyy, kun tulo di1 on 1. Tämän tapahtuessa kutsutaan feeder_empty
keskeytysrutiinia.
IEnable ja IDisable
IEnable (Interrupt Enable) on käytössä, kun ohjelman suorituksen aikana sallitaan keskeytykset.
IDisable (Interrupt Disable) on käytössä, kun väliaikaisesti halutaan estää keskeytykset.
IDisable;
FOR i FROM 1 TO 100 DO
character[i]:=ReadBin(sensor);
ENDFOR
IEnable;
! Niin kauan kuin luetaan sarjaporttia ei sallita keskeytyksiä, mutta kun luku on suoritettu
sallitaan taas keskeytykset.
IDelete
IDelete (Interrupt Delete) on käytössä, kun keskeytys halutaan peruuttaa tai poistaa Jos halutaan
vain väliaikaisesti estää keskeytys, niin tällöin käytetään käskyä IDisable tai ISleep.
IDelete feeder_low;
ErrWrite
ErrWrite (Error Write) on käytössä, kun halutaan TeachPendant/FlexPendant- laitteelle
virheilmoitukset näkyviin sekä myös kirjoittaa ne robotin logi- tiedostoon.
ErrWrite "PLC error", "Fatal error in PLC" \RL2:="Call service";
Stop;
! Viesti kirjoitetaan logiin ja näytetään se näytöllä.
ErrWrite \ W " Search error", "No hit for the first search";
RAISE try-search-again;
! Viesti kirjoitetaan ainoastaan logiin ja ohjelman suoritus jatkuu.
ErrWrite [ \W ] Header Reason [ \RL2] [ \RL3] [ \RL4]
[ \W ] (Warning)
Kirjoitetaan vain logiin, ei näytetä
Header
Viestin sisältö (max. 24 merkkiä).
Reason
Virheen syy riville 1 (max. 40 merkkiä)
[ \RL2]
(Reason Line 2)
[ \RL3]
(Reason Line 3)
[ \RL4]
(Reason Line 4)
RAISE
Raise on käytössä, kun luodaan virhe ohjelmaan ja sitten kutsutaan rutiinin virheen
käsittelijä. Sitä voidaan myös käyttää virheenkäsittelijässä lisäämään sen hetkinen virhe
rutiinin virheenkäsittelijän kutsuun. Esimerkiksi hypätään korkeammalle tasolle kuten main
rutiinin virheenkäsittelijään alirutiinin virheenkäsittelijästä.
IF ...
RAISE escape;
ERROR
IF ERRNO =escape RAISE;
! Hypätään sen rutiinin virheenkäsittelijään, josta kutsu tähän rutiinin on tehty.
RAISE [Error no.]
Virhenumero: väliltä 1 - 90, jota virheenkäsittely voi käyttää (ERRNO järjestelmä muuttuja)..
Virhenumero on määritettävä ulkopuolella virheenkäsittelijästä, jossa on käytetty RAISE
käskyä.
RETRY
Retry on käytössä, kun halutaan uudelleen käynnistää ohjelman virheenkäsittelyn jälkeen.
reg2 := reg3/reg4;
ERROR
IF ERRNO = ERR_DIVZERO THEN
reg4 := 1;
RETRY;
ENDIF
TRYNEXT
Trynext on käytössä, kun halutaan hypätä sen käskyn yli, missä virhe tapahtui.
reg2 :=reg3/reg4;
! Hypätään tähän TRYNEXT käskyllä eli ensin on sijoitettu reg2:n arvoksi 0, jos siis jakajana
eli reg4 on nolla
ERROR
IF ERRNO = ERR_DIVZERO THEN
reg2:=0;
TRYNEXT;
ENDIF
VOIMAOHJAUS (RobotWare Machining FC)
RobotWareFC koneistus mahdollistaa korkea tasoisen pintojen viimeistelyn ja hionnan,
samoin se mahdollistaa valukappaleiden jäysteen poiston optimaalisesti.
RobotWare Machining FC tarjoaa kolme kehittynyttä ohjelmistollista ominaisuutta.
1) Helpon tavan luoda toimiva ohjelma sekä automaattinen, tarkka ja nopea radan
muodostaminen. Graafinen käyttöliittymä helpottaa ohjelmien luomista. Ensin opetetaan
manuaalisesti tarvittavat pisteet ja tämän jälkeen annetaan robotin automaattisesti seurata
pintaa, johon pisteet on luotu, jolloin tapahtuu lopullinen radan muodostus.
2) FCPressure mahdollistaa robotin käytön hionnassa, kiillottamisessa ja työstössä siten,
että voima pysyy vakiona työkalun ja työstettävän kappaleen välillä. Graafinen
käyttöliittymä mahdollistaa selkeän ja yksinkertaisen parametrionnin.
3) FCSpeedChange mahdollistaa robotin käytön liikenopeuden valvontaan perustuvaan
jäysteenpoistoon . Tällöin tunnistetaan esimerkiksi eri korkuiset hitsaussaumat
muuttuvana työstövoimana, jolloin robotti hidastaa työstönopeuttaan ja toistaa paksumman
kohdan hionnan useampaan kertaan.
Ominaisuuksia:
- jopa 90%:n ajan säästö verrattuna perinteiseen ohjelmointitapaan
- 20% nopeampi ohjelman kiertoaika
- 20% pidempi työkalun käyttöikä
- kallis
- helppokäyttöinen
- parempi työstön lopputulos
Voimaohjauspaketti:
- ohjelmistopaketti sisältäen graafisen käyttöliittymän
- voima-anturin kaapeleineen ja kiinnitysadapterit
- IRC5 ohjaimeen tarvittava liityntäkortti
ATI Force Sensors
In addition, ABB uses ATI Force/Torque sensors – models
Delta, Theta and Omega – with IP60 or IP65 pr otection and
Viton seals for aggressive environments
Multimove -toiminto, (Robot Studio-ohjelmassa)
Laitteisto:Ohjainmoduuli, joka ohjaa samanaikaisesti useampia robotteja,
tarvitsee lisäksi jokaiselle robotille oman liikeohjausmoduulin (max. neljä
kappaletta, näistä yksi on integroitu ohjainmoduuliin).
Järjestelmäparametrit
1) Synkronoimaton kahden robotin hitsausasema
Molemmat robotit liikkuvat itsenäisesti eli eivät ole yhteistoiminnassa
millään tavalla, eivätkä odota toinen toisiaan. Toinen ”hitsaa” (ei käytetä
kuitenkaan ArcL-käskyä, vaan MoveL-käskyä) suorakaiteen muotoisen
sauman ja toinen ympyrän. Hallinta on kuitenkin yhden ohjainmoduulin
takana ja ohjelma sisältää kaksi taskia.
KONFIGURAATIOT:
Molemmille roboteille on omat taskit, T_ROB1 ja T_ROB2.
HARJOITUS
Ensin luodaan uusia asema (Empty Station). Seuraavaksi valitaan kaksi
haluttua robottimallia (ABB Library) sekä kaksi hitsauspoltinta (Import Library,
Equipment).
Robot System valikosta valitaan toiminto From Layout, jonka avulla luodaan
robottisysteemi. Seuraavana tehtävänä on luoda edellisellä sivulla olevan
kuvan mukainen graafinen ympäristö eli pöytätaso, särmiö ja sylinteri.
Pöydän kulmaan tehdään käyttäjäkoordinaatisto HitsausPoyta ja sen suhteen
kohdekoordinaatistot Sylinteri ja Kuutio.
Jatketaan alla oleva ohjelma loppuun ja testataan toiminta.
T_ROB1 task program
Module module1
CONST robtarget p11:=….
CONST robtarget p12:=….
CONST robtarget p13:=….
CONST robtarget p14:=….
PERS tooldata AW_Gun:=[TRUE,[[119.5,0,352],
[0.890213743,0,0.455543074,0]],[10,[0,0,100], [1,0,0,0],….
TASK PERS wobjdata Wobj_HitsausPoyta:=[FALSE,TRUE,"",[[800,1700,850],[1,0,0,0]],[[0,0,0],…
TASK PERS wobjdata Wobj_Sylinteri:=[FALSE,TRUE,"",[[800,1700,850],[1,0,0,0]],[[399.286302309,400,300],
PROC main()
MoveJ Kotipaikka, v1000, z50, ……
IndependentMove;
Stop;
ENDPROC
PROC IndependentMove()
MoveL …
MoveL….
MoveC …
MoveC ….
MoveL …
Return;
ENDPROC
T_ROB2 task program
Module module2
CONST robtarget p21:=….
CONST robtarget p22:=….
CONST robtarget p23:=….
CONST robtarget p24:=….
PROC main()
IndependentMove;
Stop;
ENDPROC
PROC IndependentMove()
MoveL …
MoveL….
MoveL…
MoveL ….
MoveL …
Return;
ENDPROC
2) Synkronoitu kahden robotin hitsausasema
Molemmat robotit hitsaavat nyt samaa kappaletta, jota pyöritetään
kääntölaitteen avulla eli käytössä on myös mekaaninen yksikkö.
KONFIGURAATIOT:
Molemmille roboteille on omat taskit, T_ROB1 ja T_ROB2 sekä
kääntöpöydälle myös oma taskinsa T_STN1.
HARJOITUS 2
Ensin luodaan uusia asema (Empty Station). Seuraavaksi valitaan kaksi
haluttua robottimallia (ABB Library) sekä kaksi hitsauspoltinta (Import Library,
Equipment).
Lisäksi valitaan haluttu kääntölaite (ABB Library).
Robot System valikosta valitaan toiminto From Layout, jonka avulla luodaan
robottisysteemi. Seuraavana tehtävänä on luoda edellisellä sivulla olevan
kuvan mukainen hitsattava kappale.
Jatketaan alla oleva ohjelma loppuun ja testataan toiminta.
T_STN1 task program
MODULE Module3
VAR syncident sync1;
VAR syncident sync2;
VAR syncident sync3;
PERS tasks all_tasks{3}:=[["T_ROB1"],["T_ROB2"],["T_STN1"]];
CONST jointtarget angle_0:=
[[9E9,9E9,9E9,9E9,9E9,9E9],[0,9E9,9E9,9E9,9E9,9E9]];
CONST jointtarget angle_neg90:= [[90,9E9,9E9,9E9,9E9,9E9],[0,9E9,9E9,9E9,9E9,9E9]];
PROC main()
ActUnit STN1;
SemiSyncMove;
ENDPROC
PROC SemiSyncMove ()
MoveExtJ angle_0, vrot50, fine;
!Annetaan robottien liikkua
WaitSyncTask sync1, all_tasks;
! Odotetaan, että robotit ovat liikkuneet
WaitSyncTask sync2, all_tasks;
MoveExtJ angle_neg90, vrot50, fine;
WaitSyncTask sync3, all_tasks;
ENDPROC
ENDMODULE
T_ROB1 task program
MODULE Module1
PERS tooldata AW_Gun:=[TRUE,[[119.5,0,352],
[0.890213743,0,0.455543074,0]],[1,[0,0,100],[1,0,0,0],0,0,0]];
TASK PERS wobjdata wobj_stn1:=[FALSE,FALSE,"STN1",[[958.6860193,282.036870591,951.326845806],[0.490081572,-0.490081572,-0.509725468,0.509725468]],[[0,0,250],[1,0,0,0]]];
VAR syncident sync1;
VAR syncident sync2;
VAR syncident sync3;
PERS tasks all_tasks{3}:=[["T_ROB1"],["T_ROB2"],["T_STN1"]];
CONST robtarget alkupaikka:=[[1386.50,0.00,1365.43],[0.307359,4.41207E-08,0.951594,1.66481E-08],[0,0,1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
PROC main()
MoveJ alkupaikka, v200, z50, AW_Gun\WObj:=wobj_stn1;
SemiSyncMove;
ENDPROC
PROC SemiSyncMove()
! Odotetaan kääntöpöytää
WaitSyncTask sync1, all_tasks;
!Kääntöpöytä liikkuu
WaitSyncTask sync2, all_tasks;
! Odotetaan kääntöpöytää
WaitSyncTask sync3, all_tasks;
ENDPROC
ENDMODULE
T_ROB2 task program
MODULE Module1
PERS tooldata AW_Gun:=[TRUE,[[119.5,0,352],
[0.890213743,0,0.455543074,0]],[1,[0,0,100],[1,0,0,0],0,0,0]];
TASK PERS wobjdata wobj_stn1:=[FALSE,FALSE,"STN1",[[958.6860193,282.036870591,951.326845806],[0.490081572,-0.490081572,-0.509725468,0.509725468]],[[0,0,250],[1,0,0,0]]];
VAR syncident sync1;
VAR syncident sync2;
VAR syncident sync3;
PERS tasks all_tasks{3}:=[["T_ROB1"],["T_ROB2"],["T_STN1"]];
CONST robtarget alkupaikka:=[[1386.50,1091.03,1411.45],
[0.307358,3.10588E-09,0.951594,9.56258E-09],[-1,0,1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
PROC main()
MoveJ alkupaikka, v200, z50, AW_Gun\WObj:=wobj_stn1;
SemiSyncMove;
ENDPROC
PROC SemiSyncMove()
! Odotetaan kääntöpöytää
WaitSyncTask sync1, all_tasks;
!Kääntöpöytä liikkuu
WaitSyncTask sync2, all_tasks;
! Odotetaan kääntöpöytää
WaitSyncTask sync3, all_tasks;
ENDPROC
ENDMODULE