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
© Copyright 2024