《工業(yè)機(jī)器人現(xiàn)場(chǎng)編程》課件-任務(wù)4.3編輯調(diào)試碼垛程序_第1頁(yè)
《工業(yè)機(jī)器人現(xiàn)場(chǎng)編程》課件-任務(wù)4.3編輯調(diào)試碼垛程序_第2頁(yè)
《工業(yè)機(jī)器人現(xiàn)場(chǎng)編程》課件-任務(wù)4.3編輯調(diào)試碼垛程序_第3頁(yè)
《工業(yè)機(jī)器人現(xiàn)場(chǎng)編程》課件-任務(wù)4.3編輯調(diào)試碼垛程序_第4頁(yè)
《工業(yè)機(jī)器人現(xiàn)場(chǎng)編程》課件-任務(wù)4.3編輯調(diào)試碼垛程序_第5頁(yè)
已閱讀5頁(yè),還剩66頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

編輯調(diào)試碼垛程序工業(yè)機(jī)器人現(xiàn)場(chǎng)編程3421課堂導(dǎo)入新知學(xué)習(xí)訓(xùn)練鞏固評(píng)價(jià)總結(jié)知識(shí)目標(biāo)掌握碼垛工作站程序常用指令掌握碼垛工作站程序常用功能程序了解工業(yè)機(jī)器人的運(yùn)動(dòng)控制指令理解高級(jí)運(yùn)動(dòng)控制指令的含義及指令結(jié)構(gòu)了解工程素養(yǎng)知識(shí)技能目標(biāo)能熟練掌握指令的用法能夠排除工業(yè)機(jī)器人程序的語(yǔ)法錯(cuò)誤能熟練使用功能程序能夠正確分析指令結(jié)構(gòu)能夠熟練掌握指令應(yīng)用的環(huán)境培養(yǎng)良好的工程素養(yǎng)習(xí)慣重點(diǎn)難點(diǎn)1.掌握碼垛工作站程序常用指令;2.了解工業(yè)機(jī)器人的運(yùn)動(dòng)控制指令3.理解高級(jí)運(yùn)動(dòng)控制指令的含義及指令結(jié)構(gòu)1.能夠排除工業(yè)機(jī)器人程序的語(yǔ)法錯(cuò)誤;2.理解高級(jí)運(yùn)動(dòng)控制指令的含義及指令結(jié)構(gòu)WHILE-只要...便重復(fù)WHILE

只要給定表達(dá)式為TRUE,就重復(fù)循環(huán)。指令格式:WHILEConditionDO…ENDWHILE應(yīng)用:

當(dāng)前指令通這判斷相應(yīng)條件,如果符合判斷條件

執(zhí)行循環(huán)內(nèi)指令,直至判斷條件不滿足才跳出循環(huán),繼續(xù)執(zhí)行循環(huán)以后指令,需要注意,當(dāng)前指令存在死循環(huán)。判斷條件(bool)一、認(rèn)識(shí)碼垛工作站程序常用指令例1VARnumreg1;......WHILEreg1<reg2

DOreg1:=reg1+1;ENDWHILE

只要reg1<reg2,則重復(fù)WHILE塊中的指令。例2VARnumreg1;......WHILETRUEDOreg1:=reg1+1;ENDWHILE

死循環(huán)重復(fù)WHILE塊中的自加指令。IF-如果滿足條件,那么...;否則...IF指令的格式:IFConditionTHEN…{ELSEIFConditionTHEN…}[ELST…]ENDIFCondition: 判斷條件 (bool)應(yīng)用:

當(dāng)前指令通過判斷相應(yīng)條件,控制需要執(zhí)行的相應(yīng)指令,是機(jī)器人程序流程基本指令。IF條件判斷指令

IF條件判斷指令,就是根據(jù)不同的條件去執(zhí)行不同的指令。如果num1為1,則flag1會(huì)賦值為TRUE。

如果num1為2,則flag1會(huì)賦值為FALSE.

除了以上兩種條件之外,則執(zhí)行do1置位為1。

條件判定的條件數(shù)量可以根據(jù)實(shí)際情況進(jìn)行增加與減少。【案例解析】機(jī)器人碼垛編程方法與技巧1.WHILE/IF指令實(shí)現(xiàn)碼垛功能程序如下:PROCmain()TPErase;!清屏nCount:=0;!計(jì)數(shù)清零Resetdo00_VacuumOpen;!復(fù)位信號(hào)MoveJPhome,v1000,z50,Tool1_Grip\WObj:=Wobj1_Pallet;WHILETRUEDOIFnCount<8ANDdi01_BoxInPos=1ANDdi02_PalletInPos=1THEN!判斷產(chǎn)品數(shù)量、流水線產(chǎn)品到位信號(hào)、碼垛盤到位信號(hào)是否滿足【案例解析】機(jī)器人碼垛編程方法與技巧IFnCount=0THENpPick_Base:=Offs(pPick1,0,0,0);pPlace_Base:=Offs(pPlace1,0*(100+10),0*(100+10),0);ELSEIFnCount=1THENpPick_Base:=Offs(pPick1,0,0,0);pPlace_Base:=Offs(pPlace1,0*(100+10),1*(100+10),0);

ELSEIFnCount=2THEN......

FOR-重復(fù)給定的次數(shù)指令格式:FORLoopcounterFROMStartvalueTOEndvalue

[STEPStepvalue]DO…ENDFOR循環(huán)計(jì)數(shù)標(biāo)識(shí)標(biāo)識(shí)初始值標(biāo)識(shí)最終值計(jì)數(shù)更改值

(identifier)(num)

(num)(num)

任務(wù)6-4常用RAPID程序指令例1FORiFROM1TO10DOroutine1;ENDFOR例2FORiFROM2TO10STEP2DOnum{i}:=num{i}+2;ENDFOR將數(shù)組中的數(shù)值向上調(diào)整應(yīng)用:通常情況下,初始值.最終值與更改值為整數(shù),循環(huán)判斷標(biāo)識(shí)使用i、k、j等小寫字母(不需要定義),是標(biāo)準(zhǔn)的機(jī)器人循環(huán)指令,常在通訊口讀寫,數(shù)組數(shù)據(jù)賦值等數(shù)據(jù)處理時(shí)例用。【案例解析】機(jī)器人碼垛編程方法與技巧FOR指令實(shí)現(xiàn)碼垛功能程序如下:(碼垛抓放程序參考WHILE/IF)PROCmain()TPErase;!清屏nCount:=0;!計(jì)數(shù)清零Resetdo00_VacuumOpen;!復(fù)位信號(hào)WHILETRUEDOFORJFROM0TO2DOFORIFROM0TO2DOIFdi01_BoxInPos=1ANDdi02_PalletInPos=1THEN!判斷流水線產(chǎn)品到位信號(hào)、碼垛盤到位信號(hào)是否滿足

【案例解析】機(jī)器人碼垛編程方法與技巧pPick_Base:=Offs(pPick1,0,0,0);pPlace_Base:=Offs(pPlace1,I*(100+10),J*(100+10),0);rPick;!調(diào)用碼垛抓取程序rPlace;!調(diào)用碼垛放置程序nCount:=nCount+1;!碼垛產(chǎn)品計(jì)數(shù)累加TPWrite"nCount:="\Num:=nCount;!示教器顯示碼垛產(chǎn)品計(jì)數(shù)ELSEMoveJPhome,v1000,z50,Tool1_Grip\WObj:=Wobj1_Pallet;ENDIF......TEST-根據(jù)表達(dá)式的值...指令格式:TESTTestdata...CASE...Testvalue

...DEFAULT:...ENDTESTTestdata數(shù)據(jù)類型:所有用于比較測(cè)試值的數(shù)據(jù)或表達(dá)式。Testvalue數(shù)據(jù)類型:與testdata相同測(cè)試數(shù)據(jù)必須擁有的值,以供執(zhí)行相關(guān)的指令。應(yīng)用:當(dāng)前指令通過判斷相應(yīng)數(shù)據(jù)變量與其所對(duì)應(yīng)的值,控制需要執(zhí)行的相應(yīng)指令。例TESTreg1CASE1:

routine1;CASE

2,3:

routine2;CASE4:

routine3;DEFAULT:TPWrite"Illegalchoice";Stop;ENDTEST根據(jù)reg1的值,執(zhí)行不同的指令。如果該值為1,則執(zhí)行routine1,2或3時(shí),則執(zhí)行routine2。如果該值為4,則執(zhí)行routine3。否則,打印出錯(cuò)誤消息,并停止執(zhí)行?!景咐馕觥繖C(jī)器人碼垛編程方法與技巧TEST指令實(shí)現(xiàn)碼垛功能程序如下:(碼垛抓放程序參考WHILE/IF)PROCmain()TPErase;

!清屏nCount:=0;

!計(jì)數(shù)清零Resetdo00_VacuumOpen;MoveJPhome,v1000,z50,Tool1_Grip\WObj:=Wobj1_Pallet;

【案例解析】機(jī)器人碼垛編程方法與技巧WHILETRUEDOIFnCount<8ANDdi01_BoxInPos=1ANDdi02_PalletInPos=1THEN!判斷產(chǎn)品數(shù)量、流水線產(chǎn)品到位信號(hào)、碼垛盤到位信號(hào)是否滿足TESTnCountCASE0:pPick_Base:=Offs(pPick1,0,0,0);pPlace_Base:=Offs(pPlace1,0*(100+10),0*(100+10),0);CASE1:pPick_Base:=Offs(pPick1,0,0,0);pPlace_Base:=Offs(pPlace1,0*(100+10),1*(100+10),0);CASE2:pPick_Base:=Offs(pPick1,0,0,0);pPlace_Base:=Offs(pPlace1,0*(100+10),2*(100+10),0);......WHILE...ENDWHILE直到型循環(huán)判斷。重復(fù)指令序列,直到滿足給定條件;FOR...ENDFOR次數(shù)控制型循環(huán)判斷。重復(fù)一段程序多次;(i、j、k)TEST...ENDTEST選擇分支型判斷?;诒磉_(dá)式的數(shù)值執(zhí)行不同指令;※思考工廠產(chǎn)品除了碼垛堆放,還需要拆跺,試著利用FOR的嵌套循環(huán)將下面的3*3*3的跺型進(jìn)行拆跺?數(shù)組功能的實(shí)現(xiàn)碼垛功能在一些的工程師中,拿到了碼垛項(xiàng)目時(shí),匆忙下手編程與調(diào)試,到頭來自己忙的不可開交,而且效率還不高,那針對(duì)碼垛這類的項(xiàng)目或者案例我們有沒有什么方法能使我們高效編程呢?答案是有的?。ㄒ訟BB機(jī)器人舉例介紹)首先,我們來分析一下,我們碼垛產(chǎn)品的時(shí)候是有行有列的(或者說橫向縱向),那么這時(shí)候我們就可以聯(lián)想到數(shù)組也剛好有這一特性。由此,我們可以利用數(shù)組對(duì)機(jī)器人進(jìn)行編程!要想編好程序,我們應(yīng)該先理解數(shù)組了。所謂數(shù)組,是有序的元素序列。若將有限個(gè)類型相同的變量的集合命名,那么這個(gè)名稱為數(shù)組名。組成數(shù)組的各個(gè)變量稱為數(shù)組的分量,也稱為數(shù)組的元素,有時(shí)也稱為下標(biāo)變量。數(shù)組功能的實(shí)現(xiàn)碼垛功能舉例:inta[10];說明整型數(shù)組a,有10個(gè)元素。若要表示第10個(gè)元素,則使用a[9]。第一個(gè)則是a[0]。floatb[10],c[20];說明實(shí)型數(shù)組b,有10個(gè)元素,實(shí)型數(shù)組c,有20個(gè)元素。charch[20];說明字符數(shù)組ch,有20個(gè)元素。在ABB機(jī)器人中,數(shù)組分為一維數(shù)組、二維數(shù)組、三維數(shù)組,那它們的區(qū)別在哪里呢?我們編程需要用到幾維數(shù)組呢?那我們來看看例子:數(shù)組功能的實(shí)現(xiàn)碼垛功能一維數(shù)組:當(dāng)數(shù)組中每個(gè)元素都只帶有一個(gè)下標(biāo)時(shí),稱這樣的數(shù)組為一維數(shù)組。注意:ABB機(jī)器人中第一個(gè)元素為:num1{1},而非num1{0},所以num1中有三個(gè)元素,第一個(gè)元素值為5,而非第0個(gè)元素值為5。數(shù)組功能的實(shí)現(xiàn)碼垛功能二維數(shù)組:理解完了數(shù)組之后,我們來看一下,具體編程案例吧!如圖中,有4個(gè)點(diǎn)需要計(jì)算,以第1點(diǎn)位基準(zhǔn)。(每個(gè)方塊的長(zhǎng)寬都是200mm*200mm)數(shù)組功能的實(shí)現(xiàn)碼垛功能數(shù)組建立:接下來我們來看一下在示教器里怎么編輯吧?。ㄐ陆ㄒ粋€(gè)數(shù)組reg6{4,3}),建立好了數(shù)組之后編程就按上述方式即可!數(shù)組功能的實(shí)現(xiàn)碼垛功能1.新建一個(gè)4行3列的數(shù)組,名稱為reg6。2.把計(jì)算出來的偏移值填進(jìn)去。{1,1}代表第一個(gè)產(chǎn)品X軸偏移值,{1,2}代表第一個(gè)產(chǎn)品Y軸偏移值,{1,1}代表第一個(gè)產(chǎn)品z軸偏移值。【案例解析】ABB機(jī)器人碼垛編程方法與技巧如果是兩層的碼垛(8個(gè)產(chǎn)品),則只需要建立reg6{8,3}數(shù)組,XY值不變,只是Z軸位置改變了。最后我們看到的程序就是這樣的:CASE1:pick:=Offs(p10,reg6{1,1},reg6{1,2},reg6{1,3});CASE2:pick:=Offs(p10,reg6{2,1},reg6{2,2},reg6{2,3});CASE3:pick:=Offs(p10,reg6{3,1},reg6{3,2},reg6{3,3});CASE4:pick:=Offs(p10,reg6{4,1},reg6{4,2},reg6{4,3});CASE5:pick:=Offs(p10,reg6{5,1},reg6{5,2},reg6{5,3});CASE6:pick:=Offs(p10,reg6{6,1},reg6{6,2},reg6{6,3});CASE7:pick:=Offs(p10,reg6{7,1},reg6{7,2},reg6{7,3});CASE8:pick:=Offs(p10,reg6{8,1},reg6{8,2},reg6{8,3});【案例解析】機(jī)器人碼垛編程方法與技巧創(chuàng)建一個(gè)robtarget類型的二維數(shù)組pPlace{3,3},分別用來存儲(chǔ)1#-9#碼垛放置位置,以下程序參考實(shí)例1。程序如下:PROCmain()TPErase;!清屏nCount:=0;!計(jì)數(shù)清零Resetdo00_VacuumOpen;!復(fù)位信號(hào)

【案例解析】機(jī)器人碼垛編程方法與技巧WHILETRUEDOFORJFROM1TO3DOFORIFROM1TO3DOIFnCount<8ANDdi01_BoxInPos=1ANDdi02_PalletInPos=1THEN!判斷產(chǎn)品數(shù)量、流水線產(chǎn)品到位信號(hào)、碼垛盤到位信號(hào)是否滿足pPick_Base:=pPick;pPlace_Base:=pPlace{I,J};rPick;!調(diào)用碼垛抓取程序......中斷指令(1)關(guān)聯(lián)中斷指令CONNECT-將中斷與軟中斷程序相連CONNECTInterruptWITHTraproutine;Interrupt: 中斷數(shù)據(jù)名稱。(intnum)Traproutine: 中斷數(shù)據(jù)程序。(identifier)應(yīng)用:將機(jī)器人相應(yīng)中斷數(shù)據(jù)連接到相應(yīng)的中斷處理程序,是機(jī)器人中斷功能必不可少的組成部分,必須同指令I(lǐng)SignalDI,ISignalDO,ISignalAI,ISignalAO或ITimer聯(lián)合使用。中斷程序---Interrupts中斷的定義:當(dāng)某個(gè)事件發(fā)生時(shí),CPU停止運(yùn)行正在執(zhí)行的程序,而轉(zhuǎn)去執(zhí)行處理該事件的程序,處理該事件后,還可以返回原程序繼續(xù)正確的執(zhí)行下去。實(shí)例:VARintnum,intInspect;PROCmain()…CONNECTintInspectWITHrAlarm;ISignalDIdi01_Vacuum,0,intInspect;…ENDPROCTRAPrAlarmTPWrite“GripError”;Stop;WaitDIdi01_Vacuum,1;ENDTRAP注:中斷數(shù)據(jù)的數(shù)據(jù)類型必須為變量(VAR)一個(gè)中斷數(shù)據(jù)不允許同時(shí)連接到多個(gè)中斷處理程序,但多個(gè)中斷數(shù)據(jù)可以共享一個(gè)中斷處理程序當(dāng)一個(gè)中斷數(shù)據(jù)完成連接后,這個(gè)中斷數(shù)據(jù)不允許再次連接到任何中斷處理程序(包括已經(jīng)連接的中斷處理程序)。如果需要再次連接至任何中斷程序,必須先使用指令I(lǐng)Delete將原連接支除。(2)IDelete-取消中斷IDeleteInterrupt;Interrupt: 中斷數(shù)據(jù)名稱。(intnum)應(yīng)用:將機(jī)器人相應(yīng)中斷數(shù)據(jù)與相應(yīng)的中斷處理程序之間原連接去除。實(shí)例:…CONNECTintInspectWITHrAlarm;ISigalDIdi01_Vacuum,0,intInspect;…IdeleteintInspect;限制:

執(zhí)行指令I(lǐng)delete后,當(dāng)前中斷數(shù)據(jù)的連接被完全清除,如需再次使用這個(gè)中斷數(shù)據(jù)必須重新用指令CONNECT連接至相應(yīng)的中斷處理程序。在以下列情況下,中斷將被自動(dòng)去除:1、重新載入新的運(yùn)行程序。2、機(jī)器人運(yùn)行程序被重置,程序指針回到主程序第一行(StartfromBeginning)。

3、機(jī)器人程序指針被移至任意一個(gè)例行程序第一行。(MovepptoRoutine)(3)ISignalDI-下達(dá)數(shù)字信號(hào)輸入信號(hào)中斷指令結(jié)構(gòu):ISignalDI[\Single],Signal,TriggValue,Interrupu;[\Single]: 單次中斷開關(guān)。(switch)Signal: 觸發(fā)中斷信號(hào)。(signaldi)TriggValue: 觸發(fā)信號(hào)值。 (dionum)Interrupu: 中斷信號(hào)名稱。(intnum)應(yīng)用:使用相應(yīng)的數(shù)字信號(hào)輸入信號(hào)觸發(fā)相應(yīng)的中斷功能,必須同指令CONNECT聯(lián)合使用。實(shí)例:CONNECTint1WITHiroutine1;中斷功能在單次觸發(fā)后失效ISignalDI\Signaldi01,1,int1;CONNECTint2WITHiroutine2;ISignalDIdi02,1,int2;注:當(dāng)一個(gè)中斷數(shù)據(jù)完成連接后,這個(gè)中斷數(shù)據(jù)不允許再次連接到任何中斷處理程序(包括已經(jīng)連接的中斷處理程序)。如果需要再次連接至任何中斷處理程序,必須先使用指令I(lǐng)Delete將原連接去除。1、 中斷在工程領(lǐng)域應(yīng)用十分重要,通常用于處理一些突發(fā)狀況,中斷是指由中斷信號(hào)關(guān)聯(lián)中斷標(biāo)志符,中斷標(biāo)志符連接中斷程序,機(jī)器人執(zhí)行預(yù)定義的中斷程序的過程2、中斷條件為真,會(huì)觸發(fā)中斷。發(fā)生中斷會(huì)引起正常程序執(zhí)行被終止,轉(zhuǎn)由軟中斷程序進(jìn)行控制3、中斷程序使用技巧:

設(shè)置中斷輸入信號(hào)與中斷識(shí)別號(hào)相關(guān)聯(lián)

設(shè)置中斷識(shí)別號(hào)與中斷程序相關(guān)聯(lián)

即可完成中斷功能的基本設(shè)定4、中斷程序涉及到的指令比較多,寫起來也比較繁瑣,學(xué)生的英語(yǔ)水平普遍不好,所以,可能應(yīng)用起來有些難度,還需要加強(qiáng)相關(guān)的練習(xí)。(4)ISleep-停用一個(gè)中斷結(jié)構(gòu):IsleepInterrupt;Interrupt: 中斷數(shù)據(jù)名稱。(intnum)應(yīng)用:機(jī)器人相應(yīng)中斷數(shù)據(jù)暫時(shí)失效,直到執(zhí)行指令I(lǐng)Watch后才恢復(fù)。實(shí)例:VARintnumsig1int;PROCmain()CONNECTsig1intWITHiroutine1;ISignalDIdi1,1,sig1int;...ISleepsig1int;weldpart1;IWatchsig1int;在執(zhí)行weldpart1程序期間,信號(hào)di1不允許中斷。(5)IWatch-啟用中斷Interrupt: 中斷數(shù)據(jù)名稱。(intnum)應(yīng)用:激活機(jī)器人已失效的相應(yīng)中斷數(shù)據(jù),正常情況下,與指令I(lǐng)Sleep配合使用。實(shí)例:…CONNECTintInspectWITHrAlarm;ISignalDIdi01_vacuum,0,intInspect;…ISleepintInspect;…IWatchintinspect;…ErrorHandler:ERR_UNKINO無(wú)法找到當(dāng)前的中斷數(shù)據(jù)。(6)IEnable-啟用中斷(7)IDisable-禁用中斷結(jié)構(gòu):IEnable;IDisable;應(yīng)用:使機(jī)器人相應(yīng)中斷功能暫時(shí)不執(zhí)行,直到執(zhí)行指令I(lǐng)Enable后,才進(jìn)入中斷處理程序,此指令使用于機(jī)器人正在執(zhí)行不希望被打斷的操作期間,例如:通過通信口讀寫數(shù)據(jù)實(shí)例:…IDisable;FORiFROM1TO100D0character[i]:=ReadBin(sensor);ENDFORIEnable;IDelete:用于取消(刪除)中斷預(yù)定。如果中斷僅臨時(shí)禁用,則應(yīng)當(dāng)使用指令I(lǐng)Sleep或IdisableIDisable:臨時(shí)禁止程序所有中斷IEnable:?jiǎn)⒂弥袛郔Sleep:暫停程序中的一個(gè)中斷舉例:Isleepintnol;說明:停用intnol1號(hào)中斷【案例解析】ABB機(jī)器人碼垛編程方法與技巧任務(wù)要求:1)碼垛前機(jī)器人處于一個(gè)安全位置,當(dāng)(物料、托盤到位狀態(tài))準(zhǔn)備好時(shí)后開始運(yùn)行。2)工件經(jīng)過傳送帶到達(dá)傳送帶末端后,機(jī)器人開始進(jìn)行抓取工件操作3)抓取完成后,在碼垛盤已到位且未碼滿一層的前提下,將工件搬運(yùn)到碼垛區(qū)域。4)計(jì)算出當(dāng)前工件的碼垛位置坐標(biāo)后,將工件進(jìn)行碼,然后回到安全點(diǎn)。若碼滿1層,通知外部更換碼盤。直至新碼盤到位后重新開始碼垛(利用中斷指令對(duì)產(chǎn)品計(jì)數(shù)及計(jì)時(shí)清零、機(jī)器人狀態(tài)及碼垛托盤狀態(tài)復(fù)位)。5)運(yùn)行速度合適,碼垛完成后垛堆應(yīng)該整齊工件應(yīng)該碼放均勻?!景咐馕觥緼BB機(jī)器人碼垛編程方法與技巧②初始化程序PROCrinitall()TPErase;!清屏nCount:=0;!計(jì)數(shù)清零bPalletFullok:=FALSE;!碼垛盤滿跺狀態(tài)復(fù)位Resetdo00_VacuumOpen;!吸盤信號(hào)復(fù)位Resetdo01_PalletFull;!滿垛信號(hào)復(fù)位IDeleteiPallet;!斷開、刪除中斷連接CONNECTiPalletWITHtPallet;!連接中斷ISignalDIdi02_PalletInPos,0,iPallet;!換碼垛盤時(shí)托盤在位信號(hào)di02=0觸發(fā)中斷ISleepiPallet;!休眠中斷程序,防止未搬運(yùn)完時(shí)中途觸發(fā)中斷造成意外MoveJPhome,v1000,z50,Tool1_Grip\WObj:=Wobj1_Pallet;ENDPROC【案例解析】ABB機(jī)器人碼垛編程方法與技巧⑥中斷程序TRAPtPalletTPErase;!示教器清屏nCount:=0;!計(jì)數(shù)清零Resetdo01_PalletFull;!吸盤信號(hào)復(fù)位bPalletFullok:=FALSE;!碼垛盤空載狀態(tài)TPWrite"bPalletFullok:="\Bool:=bPalletFullok;WaitDIdi02_PalletInPos,1;!碼垛盤到位信號(hào)TPWrite"Pallethasbeenchanged";!示教器顯示托盤已經(jīng)更換WaitTime1;ISleepiPallet;!休眠中斷程序ENDTRAP【作用】功能程序(Functions,簡(jiǎn)稱FUNC)又稱有返回值程序,是一種具有運(yùn)算、比較等功能,能向調(diào)用該程序的模塊、程序返回執(zhí)行結(jié)果的參數(shù)化編程模塊。調(diào)用功能程序時(shí),不僅需要指定程序名稱,且必須有程序參數(shù)。程序參數(shù)是用于參數(shù)化編程的變量,讓需要在程序名稱后附加的括號(hào)內(nèi)定義。一般程序不采用參數(shù),但需要保留名稱Routine()后面的括號(hào),中斷程序(Trap)在任何情況下均要被可能被調(diào)用,故不能使用程序參數(shù),名稱后面也無(wú)括號(hào),功能程序(FUNC)采用的是參數(shù)化編程,故必須定義程序參數(shù)。功能程序二、編輯功能程序說明【格式】全局功能程序直接以程序類型FUNC起始,用ENDFUNC結(jié)束。FUNC返回?cái)?shù)據(jù)類型功能程序名稱(傳遞的程序數(shù)據(jù)定義)程序指令………RETURN返回?cái)?shù)據(jù)名稱ENDFUNC功能程序的起始行為程序聲明。全局功能程序直接以程序類型FUNC起始,后面依次接返回結(jié)果的數(shù)據(jù)類型、功能程序的名稱,名稱后括號(hào)內(nèi)注明與調(diào)用程序之間進(jìn)行傳遞的程序數(shù)據(jù)的類型及名稱。功能程序中可通過各程序指令編寫控制程序,其中必須包含返回執(zhí)行結(jié)果的指令RETUN,以指明結(jié)果通過那個(gè)程序數(shù)據(jù)進(jìn)行返回。功能程序最后用ENDFUNC指令結(jié)束。碼垛應(yīng)用【案例解析】ABB機(jī)器人碼垛編程方法與技巧機(jī)器人自動(dòng)運(yùn)行前需要進(jìn)行回原點(diǎn)判斷,確保工作安全。(1)!檢測(cè)原點(diǎn)位置例行程序PROCrCheckHomePos()VARrobtargetpActualPos;IFNOTCurrentpos(phome,Tool1_Grip)THENpActualPos:=cRobt(\Tool:=Tool1_Grip\WObj:=Wobj1_Pallet);pActualPos.trans.z:=phome.trans.z;MovejpActualPos,v1000,z50,Tool1_Grip\WObj:=Wobj1_Pallet;MoveJphome,v1000,z50,Tool1_Grip\WObj:=Wobj1_Pallet;ENDIFENDPROC【案例解析】ABB機(jī)器人碼垛編程方法與技巧(2)!檢測(cè)原點(diǎn)位置被調(diào)用功能程序FUNCboolCurrentpos(robtargetComparePos,inouttooldataTCP)VARnumnFC;VARrobtargetActualpos;Actualpos:=cRobt(\Tool:=TCP\WObj:=Wobj1_Pallet);!讀取機(jī)器人當(dāng)前位置IFActualpos.trans.x>ComparePos.trans.x-25ANDActualpos.trans.x<ComparePos.trans.x+25

nFC:=nFC+1;IFActualpos.trans.y>ComparePos.trans.y-25ANDActualpos.trans.y<ComparePos.trans.y+25

nFC:=nFC+1;IFActualpos.trans.z>ComparePos.trans.z-25ANDActualpos.trans.z<ComparePos.trans.z+25

nFC:=nFC+1;【案例解析】ABB機(jī)器人碼垛編程方法與技巧Actualpos.rot.q1<ComparePos.rot.q1+0.1

nFC:=nFC+1;IFActualpos.rot.q2>ComparePos.rot.q2-0.1ANDActualpos.rot.q2<ComparePos.rot.q2+0.1

nFC:=nFC+1;IFActualpos.rot.q3>ComparePos.rot.q3-0.1ANDActualpos.rot.q3<ComparePos.rot.q3+0.1

nFC:=nFC+1;IFActualpos.rot.q4>ComparePos.rot.q4-0.1ANDActualpos.rot.q4<ComparePos.rot.q4+0.1

nFC:=nFC+1;RETURNnFC=7;ENDFUNC三、調(diào)試碼垛機(jī)器人程序

高級(jí)運(yùn)動(dòng)控制指令(1)AccSet-降低加速度(全局控制)格式AccSetAccRamp;可選變量Acc數(shù)據(jù)類型:num;加速度和減速度占正常值的百分比。100%相當(dāng)于最大加速度。最大值:100%。輸入值<20%,得出最大加速度的20%Ramp數(shù)據(jù)類型:num;加速度和減速度增加的速率占正常值的百分比。通過降低該值,可限制頓挫。100%相當(dāng)于最大速率。最大值:100%。輸入值<10%,得出最大速率的10%。[\FinePointRamp]減速度降低的速率占正常值的百分比

高級(jí)運(yùn)動(dòng)控制指令(1)AccSet-降低加速度(全局控制)格式AccSetAccRamp;舉例1AccSet50,100;將加速度限制在正常值的50%舉例2AccSet100,50;將加速坡度限制在正常值的50%舉例3AccSet100,100\FinePointRamp:=50;當(dāng)減速時(shí),將減速坡度限制在正常值的50%

高級(jí)運(yùn)動(dòng)控制指令(1)AccSet-降低加速度(全局控制)結(jié)構(gòu):AccSetAcc,Ramp;Acc:機(jī)器人加速度百分比(num)Ramp:機(jī)器人加速度坡度(num)應(yīng)用:當(dāng)機(jī)器人運(yùn)行速度改變時(shí),對(duì)所產(chǎn)生的相應(yīng)加速度進(jìn)行限制,使機(jī)器人高速運(yùn)行時(shí)更平緩,但會(huì)延長(zhǎng)循環(huán)時(shí)間,系統(tǒng)默認(rèn)值為AccSet100,100;例:AccSet30,100;注:機(jī)器人加速度百分率值最小為20,小于20以20計(jì),機(jī)器人加速度坡度值最小為10,小于10以10計(jì)機(jī)器人冷啟動(dòng),新程序載入與程序重置后,系統(tǒng)自動(dòng)設(shè)置為默認(rèn)值。(2)VelSet-設(shè)定TCP最大速度(全局控制)結(jié)構(gòu):VelSetOverride,Max;Override:所需速率占編程速率的百分比。100%相當(dāng)于編程速率。(num)Max:最大TCP速率,以mm/s計(jì)。(num)應(yīng)用:VelSet用于增加或減少所有后續(xù)定位指令的編程速率。該執(zhí)行同時(shí)用于使速率最大化。注:機(jī)器人冷啟動(dòng),新程序載入與程序重置后,系統(tǒng)自動(dòng)設(shè)置為默認(rèn)值。機(jī)器人運(yùn)動(dòng)使用參變量[\T]時(shí),最大運(yùn)行速度將不起作用。Override對(duì)速度數(shù)據(jù)(speeddata)內(nèi)所有項(xiàng)都起作用,例如:TCP.方位及外軸。但對(duì)焊接參數(shù)welddata與Seamdata內(nèi)機(jī)器人運(yùn)行速度不起作用Max只對(duì)速度數(shù)據(jù)(speeddata)內(nèi)TCP這項(xiàng)起作用。實(shí)例:Velset50,800;Movelp1,v1000,z10,tool1; ----500mm/sMovelp2,v1000\V:=2000,z10,tool1;----800mm/sMovelp2,v1000\T:=5,z10,tool1; ----10sVelset80,1000MoveLp1,v1000,z10,tool1; ----800mm/sMoveLp2,v5000,z10,tool1;----1000mm/sMoveLp3,v1000\V:=2000,z10,tool1;----1000mm/sMoveLp3,v1000\T:=5,z10,tool1;----6.25s(3)ConfJ-關(guān)節(jié)軸移動(dòng)期間,控制配置結(jié)構(gòu):Confj [\on][\off];[\on]啟動(dòng)軸配置數(shù)據(jù)。(switch)關(guān)節(jié)運(yùn)動(dòng)時(shí),機(jī)器人移動(dòng)至絕對(duì)Modpos點(diǎn),如果無(wú)法到達(dá),程序?qū)⑼V惯\(yùn)行。[\off]默認(rèn)軸配置數(shù)據(jù)。(switch)關(guān)節(jié)運(yùn)動(dòng)時(shí),機(jī)器人移運(yùn)至Modpos點(diǎn),軸配值數(shù)據(jù)默認(rèn)為當(dāng)前最接近值。應(yīng)用:對(duì)機(jī)器人運(yùn)行姿態(tài)進(jìn)行限制與調(diào)整,程序運(yùn)行時(shí),

使機(jī)器人運(yùn)行姿態(tài)得到控制。系統(tǒng)默認(rèn)值為Confj\on。實(shí)例:Confj\on;Confj\off注:機(jī)器人冷啟動(dòng),新程序載入與程序重置后,系統(tǒng)自動(dòng)設(shè)置為默認(rèn)值。(4)SingArea-確定奇點(diǎn)周圍的插補(bǔ)結(jié)構(gòu):SingArea[\Wrist][\off];[\Wrist]:啟用位置方位調(diào)整。(switch)機(jī)器人運(yùn)動(dòng)時(shí),為了避免死機(jī),位值點(diǎn)允許其方位有些改變,例如:在五軸零度時(shí),機(jī)器人四六軸平行。[\off]:關(guān)閉位置方位調(diào)整。(switch)機(jī)器人運(yùn)動(dòng)時(shí),不允許位置點(diǎn)方位改變,是機(jī)器人默認(rèn)狀態(tài)。應(yīng)用:當(dāng)前指令通過對(duì)機(jī)器人位置點(diǎn)姿態(tài)進(jìn)行些改變,可以絕對(duì)避免機(jī)器人運(yùn)行時(shí)死機(jī),但是,機(jī)器人運(yùn)行路徑會(huì)受影響,姿態(tài)得不到控制,通常使用于復(fù)雜姿態(tài)點(diǎn)。絕對(duì)不能作為工作點(diǎn)使用。實(shí)例:SingArea\wrist;SingArea\off;注:以下情況機(jī)器人將自動(dòng)恢復(fù)默認(rèn)值SingArea\off。1機(jī)器人冷啟動(dòng),2系統(tǒng)載入新的程序(5)PathResol-覆蓋路徑分辨率結(jié)構(gòu):PathResolPathSampleTime;PathSampleTime:路徑控制%。(num)應(yīng)用:當(dāng)前指令用于更改機(jī)器人主機(jī)系統(tǒng)參數(shù),調(diào)整機(jī)器人路徑采樣時(shí)間,從而達(dá)到控制機(jī)器人運(yùn)行路徑的效果,通過此指令可以提高機(jī)器人運(yùn)行精度或縮短循環(huán)時(shí)間,路徑控制默認(rèn)值為100%,調(diào)整范圍為25%-400%,路徑控制百分比越小,運(yùn)動(dòng)精度越高,占用CPU資源也越多。實(shí)例:Movejp1,v1000,fine,tool1;Pathresol150;(6)SoftAct-啟用軟伺服結(jié)構(gòu):SoftAct[\MechUnit,]Axis,Softness[\Ramp];[\MechUnit]; 軟化外軸名稱。(mecunnit)Axis: 軟化外軸號(hào)碼。(mum)Softness: 軟化值%(mum)[\Ramp]: 軟化坡度%。(mum)應(yīng)用:當(dāng)前指令用于軟化機(jī)器人主機(jī)或外軸伺服系統(tǒng),軟化值范圍0%-100%,軟化坡度范圍>=100%,此指令必須與指令SoftDeact同時(shí)使用,通常不使用工作位置。實(shí)例:Softact3,20;Softact1,90\R

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論