報名人數298905
          資訊中心 > 課程相關資訊 > 機器人培訓 > 機器人培訓 >?東莞工業機器人培訓專家為你講解功能程序的編程應用示例

          東莞工業機器人培訓專家為你講解功能程序的編程應用示例

          時間:2021-06-16 16:50 來源:

          功能程序編程應用示例

          為了鞏固大家對功能程序的理解,下面工業機器人培訓專家給出一些功能程序的編程應用示例。期望大家能夠通過這些示例,熟練掌握系統內置功能程序和自定義功能程序的編程應用。
           

          例1:現有如圖10-20所示的軌跡,請編寫程序,使得程序運行時TCP沿該軌跡運動,要求只能示教一個目標點。
              
                                  圖10-20                                                         圖10-21



          解:經過對圖10-20中的圖形進行簡單的分析,可發現,如果對圖10-21中的P1~P15這15個目標點進行示教,即可以用MOVEJ、MOVEC等指令再現軌跡。因為題目中要求只允許示教1個目標點,所以我們還需要通過一個點搭配對應的偏移值,將其余各點表示出來。經過觀察,我們發現P1點搭配對應的偏移值,能夠很方便的將其他點表示出來。因此我們可以用下面給出的程序(已省略程序數據聲明語句),完成例1的編程任務。
             
          PROC main()
          P2:=offs(p1,0,50,0);
          P3:=offs(p1,50,0,0);
          P4:=offs(p1,50,50,0);
          P5:=offs(p1,50,0,0);
          P6:=offs(p1,25,25,0);
          P7:=offs(p1,-25,-25,0);
          P8:=offs(p1,0,50,0);
          P9:=offs(p1,0,50,0);
          P10:=offs(p1,0,50,0);
          P11:=offs(p1,0,50,0);
          P12:=offs(p1,0,50,0);
          P13:=offs(p1,0,50,0);
          P14:=offs(p1,0,50,0);
          P15:=offs(p1,0,50,0);
          MoveJ offs(p2,0,0,20),v400,fine,mytoolWObj:=wobj1;
          Movej p2,v400,fine,mytoolWObj:=wobj1;
          MoveC p3,p4,v400,fine,mytoolWObj:=wobj1;
          MoveC p5,p2,v400,fine,mytoolWObj:=wobj1;
          MoveC p6,p1,v400,fine,mytoolWObj:=wobj1;
          MoveC p7,p4,v400,fine,mytoolWObj:=wobj1;
          MoveJ offs(p8,0,0,20),v400,fine,mytoolWObj:=wobj1;
          MoveJ p8,v400,fine,mytoolWObj:=wobj1;
          MoveC p9,p10,v400,fine,mytoolWObj:=wobj1;
          MoveC p11,p8,v400,fine,mytoolWObj:=wobj1;
          MoveJ offs(p12,0,0,20),v400,fine,mytoolWObj:=wobj1;
          MoveJ p12,v400,fine,mytoolWObj:=wobj1;
          MoveC p13,p14,v400,fine,mytoolWObj:=wobj1;
          MoveC p15,p12,v400,fine,mytoolWObj:=wobj1;
          MoveJ offs(p12,0,0,20),v400,fine,mytoolWObj:=wobj1;
          ENDPROC
           
          例2:如圖10-22所示,P1~P4是圓的象限點,圓的半徑R=50mm,請閱讀下面一段程序(已省略聲明語句中數據的初值),然后判斷程序執行后完后,TCP經過的軌跡是怎樣的。

                                   圖10-22 

          PERS robtarget p3:=[......];
          PERS robtarget p4:= [......];
          PERS robtarget p1:=[ [......];
          PERS robtarget p2:= [......];
          PROC main()
          FOR engle FROM 0 TO 180 STEP 9 DO
            MoveJ p3,v400,fine,MyTool;
          MoveC Offs(p4,0,50*(1-Cos(engle)),50*sin(engle)),p1,v400,fine,MyTool;
            MoveC Offs(p2,0,-50*(1-Cos(engle)),-50*Sin(engle)),p3,v400,fine,MyTool;
          ENDFOR
          ENDPROC
           
          解:main程序內只有一個for循環體,循環體內的三條運動指令可以再現一個圓形。點P1、P2、P3、P4所在的圓半徑R=50,因此第一條圓弧指令中的P4點的Y方向偏移量(1-cos(engle))可以視作,圓沿直徑P1P3旋轉一定度數后,P4點旋轉前后的Y坐標數據的差值。sin(engle)可視作,P4點旋轉前后的Z軸坐標數據差值。而第二條圓弧運動指令中的-50*(1-cos(engle)))和-50*Sin(engle)則是P2點旋轉前后在Y軸、Z軸方向的坐標數據差值,示意圖見圖10-23。θ角以9度為增量,由0度增加到180度,因此上述程序執行效果,相當于圓P1P2P3P4繞直徑P1P3旋轉9*N度,程序運行結束后機器人TCP經過的軌跡為圖10-24所示的球體。
           
          圖10-23   
           
          圖10-24



          例3:假設機器人當前處于靜止狀態,請編寫一個RAPID程序,用以判斷機器人tool0的TCP當前位置的在基坐標系下的Z軸坐標值是否大于500,如果TCP當前位置高度大于500,由當前位置線性運動到P1點,然后由P1點線性運動到Phome點。如果TCP當前位置高度不大于500,則由當前位置直接關節運動至Phome點。P1、Phome是已聲明并正確示教的robtarget位置數據。
           
          解:程序如下:
          PROC main()
          p_tcp := CRobT();
          IF p_tcp.trans.z > 500 THEN
          MoveL p1, v1000, fine, tool0;
          MoveL Phome, v1000, fine, tool0;
          ELSEIF p_tcp.trans.z <= 500 THEN
          MoveJ Phome, v1000, fine, tool0;
          ENDIF
          ENDPROC

          例4:九宮格工件搬運編程練習,如圖10-25所示 ,工件會在A位置處源源不斷產生,請編寫程序將A位置處的工件拾取放置到B處的料盤內,直到將料盤的九個位置放滿。要求所編寫的程序最多示教兩個robtarget位置點。料盤格子的間隔尺寸如圖10-26所示。
                     
          圖10-25     
           
                                                                                                   
          圖10-26


          解:題目要求只能示教兩個點位,料盤的尺寸間隔又是有規可尋的,因此可以考慮使用offs功能程序進行編程。
          (1)以料盤的右上角端點為原點,以長邊為X軸,以短邊為Y軸,定義工件坐標系wobj1;
          (2)示教拾取A位置工件的點為p_pick,將夾起的工件正確放置到料盤右上角格子的位置示教為p_place;
          (3)配置do信號DO_1Gripper用于控制夾爪;
          (4)編寫如下程序用以完成編程任務:
          PROC main()
          PulseDOPLength:=0.2,DO_1Gripper;
          WHILE reg_H*reg_L<6 DO
          Incr CNT;
          IF reg_L<3 THEN
          IF reg_H<3 THEN
          MoveJ Offs(p_take,0,0,100),v1000,z20,tool0WObj:=wobj1;
          MoveL p_take,v200,fine,tool0WObj:=wobj1;
          Set DO_1Gripper;
          WaitTime 0.2;
          MoveL Offs(p_take,0,0,100),v1000,z20,tool0WObj:=wobj1;
          MoveJ Offs(p_put,reg_H*100,reg_L*70,100),v1000,z20,tool0WObj:=wobj1;
          MoveL Offs(p_put,reg_H*100,reg_L*70,0),v200,fine,tool0WObj:=wobj1;
          Reset DO_1Gripper;
          WaitTime 0.5;
          MoveL Offs(p_put,reg_H*100,reg_L*70,100),v1000,z20,tool0WObj:=wobj1;
          reg_H:=reg_H+1;
          ELSE
          reg_H:=0;
          reg_L:=reg_L+1;
          ENDIF
          ELSE
          reg_H:=0;
          reg_L:=0;
          ENDIF
          ENDWHILE
          ENDPROC
           

          本例題有配套的虛擬工作站打包文件,請在提供的虛擬工作站,完成本例題的編程任務。本例還可以利用其它指令和循環結構體來完成,工業機器人培訓專家請大家舉一反三,嘗試利用多種方法來完成本例題的編程任務,然后比較哪一種方法最簡潔。