案例/模板说明

机械臂主控模板说明

以下为机械臂主控模板代码,包含坐标移动基础模板、坐标移动二次定位模板、轨迹移动同步模板、轨迹移动异步模板。

关于模板中的 API 可以查阅 Fanuc 的 “API 说明” 部分。

请注意模板函数并不能直接运行,请一定根据项目现场环境和流程需求进行修改

坐标移动基础模板

:   ;
:  !S1: 初始化 ;
:  CALL XYZ_REG_COM    ;
:  RO[1]=OFF ;
:   ;
:   ;
:  !S2: 运行后台程序,连接到Max ;
:  RUN XYZ_BKGD ;
:  WAIT   2.00(sec) ;
:   ;
:  IF (R[5:MAST connect fla]<>1) THEN ;
:  !如果没有连上,则报错 ;
:  UALM[5] ;
:  ENDIF ;
:   ;
:  ! 切换任务流图,根据需要取消注释 ;
:  ! CALL XYZ_SW_TA('cart_basic.t') ;
:  ! CALL XYZ_CK_ERR    ;
:  ;
:  ! 重置任务 ;
:  CALL XYZ_RESET_TA    ;
:  CALL XYZ_CK_ERR    ;
:   ;
:  !S3: 切换成当前工件 ;
:  CALL XYZ_SW_ITEM(0,'item1') ;
:  CALL XYZ_CK_ERR    ;
:   ;
:  !S4: 运动到Home点 ;
:  !需要提前示教Home点 ;
:J P[1] 100% CNT100    ;
:   ;
:  !如果是眼在手上的案例,则将R[101]设置为1,否则设置为0 ;
:  R[101]=0    ;
:   ;
:  LBL[1] ;
:   ;
:  !S5: 眼在手上 ;
:  IF (R[101]=1) THEN ;
:  !S6: 运动到拍照位姿点 ;
:  !需要提前示教好拍照位姿并保存到PR寄存器上,且必须是正交形式 ;
:L PR[41] 100mm/sec FINE    ;
:  !S7: 发送拍照位姿 ;
:  CALL XYZ_S_C_POSE(41) ;
:  CALL XYZ_CK_ERR    ;
:  ENDIF ;
:   ;
:  !S8: 请求抓取目标点位 ;
:  CALL XYZ_R_G_POSE(0) ;
:  CALL XYZ_CK_ERR    ;
:   ;
:  !S9: 获取抓取目标点位 ;
:  R[102]=R[11:MAST parsed int]    ;
:  CALL XYZ_G_G_POSE(R[102]) ;
:  CALL XYZ_CK_ERR    ;
:  IF (R[12:MAST pose num]<1) THEN ;
:  !工作空间中没有工件 ;
:  WAIT   5.00(sec) ;
:  JMP LBL[1] ;
:  ENDIF ;
:   ;
:  !S10: 运动到抓取点位 ;
:  ! 首先走到抓取点位上方;
:  PR[42]=PR[5:MAST cart pose] ;
:  PR[42,3]=PR[42,3] + 100 ;
:L PR[42] 100mm/sec CNT100 ;
:  ! 抓取 ;
:L PR[5:MAST cart pose] 100mm/sec FINE    ;
:  RO[1]=ON ;
:   ;
:  !S11: 运动到放置位姿 ;
:  ! 首先走到抓取点位上方 ;
:  PR[42]=PR[5:MAST cart pose] ;
:  PR[42,3]=PR[42,3] + 200 ;
:L PR[42] 100mm/sec CNT100 ;
:  ;
:  ! 走到放置位姿 ;
:  ! 放置位姿需要提前示教好 ;
:L P[2] 100mm/sec FINE    ;
:  RO[1]=OFF ;
:   ;
:  JMP LBL[1] ;
:   ;

坐标移动二次定位模板

:   ;
:  !S1: 初始化 ;
:  CALL XYZ_REG_COM    ;
:  RO[1]=OFF ;
:  RO[2]=OFF ;
:   ;
:  !S2: 运行后台程序,连接到Max ;
:  RUN XYZ_BKGD ;
:  WAIT   2.00(sec) ;
:   ;
:  IF (R[5:MAST connect fla]<>1) THEN ;
:  !如果没有连上,则报错 ;
:  UALM[5] ;
:  ENDIF ;
:   ;
:  ! 切换任务流图,根据需要取消注释 ;
:  ! CALL XYZ_SW_TA('cart_repo.t') ;
:  ! CALL XYZ_CK_ERR    ;
:  ;
:  ! 重置任务 ;
:  CALL XYZ_RESET_TA    ;
:  CALL XYZ_CK_ERR    ;
:   ;
:  !S3: 切换成当前工件 ;
:  CALL XYZ_SW_ITEM(0,'item1') ;
:  CALL XYZ_CK_ERR    ;
:   ;
:  !S4: 运动到Home点 ;
:  !需要提前示教Home点 ;
:J P[1] 100% CNT100    ;
:   ;
:  LBL[1] ;
:   ;
:  !S5: 请求抓取目标点位 ;
:  CALL XYZ_R_G_POSE(0) ;
:  CALL XYZ_CK_ERR    ;
:   ;
:  !S6: 获取抓取目标点位 ;
:  R[101]=R[11:MAST parsed int]    ;
:  CALL XYZ_G_G_POSE(R[101]) ;
:  CALL XYZ_CK_ERR    ;
:   ;
:  !S7:  处理是否识别到工件 ;
:  IF (R[12:MAST pose num]<1) THEN ;
:   ;
:  !S15: 没有识别到工件,机械臂外的相机切换识别隔板 ;
:  CALL XYZ_SW_ITEM(0,'board') ;
:  CALL XYZ_CK_ERR    ;
:   ;
:  !S16: 请求隔板抓取位姿 ;
:  CALL XYZ_R_G_POSE(0) ;
:  CALL XYZ_CK_ERR    ;
:   ;
:  !S17: 获取隔板的抓取位姿 ;
:  R[101]=R[11:MAST parsed int]    ;
:  CALL XYZ_G_G_POSE(R[101]) ;
:  CALL XYZ_CK_ERR    ;
:  IF (R[12:MAST pose num]<1) THEN ;
:  !未识别到隔板的处理 ;
:  JMP LBL[2] ;
:  ENDIF ;
:   ;
:  !S18: 运动到隔板抓取位姿,并抓取隔板 ;
:  ! 首先走到隔板上方 ;
:  PR[41]=PR[5:MAST cart pose] ;
:  PR[41,3]=PR[41,3] + 100 ;
:L PR[41] 100mm/sec CNT100 ;
:  ! 抓隔板 ;
:L PR[5:MAST cart pose] 100mm/sec FINE    ;
:  RO[1]=ON ;
:   ;
:  !S19: 运动到隔板的放置位姿 ;
:  ! 首先走到隔板上方 ;
:  PR[41]=PR[5:MAST cart pose] ;
:  PR[41,3]=PR[41,3] + 200 ;
:L PR[41] 100mm/sec CNT100 ;
:  ! 走到隔壁放置位姿 ;
:  ! 需要提前示教好放置位姿 ;
:L P[2] 100mm/sec FINE    ;
:  RO[1]=OFF ;
:   ;
:  !S20: 机械臂外的相机切换成识别当前工件 ;
:  CALL XYZ_SW_ITEM(0,'item1') ;
:  CALL XYZ_CK_ERR    ;
:   ;
:  ELSE ;
:   ;
:  !S8: 运动到拍照位姿 ;
:  !需要提前示教好拍照位姿并保存到PR寄存器上,且必须是正交形式 ;
:L PR[50] 100mm/sec FINE    ;
:   ;
:  !S9: 发送拍照位姿 ;
:  CALL XYZ_S_C_POSE(50) ;
:  CALL XYZ_CK_ERR    ;
:   ;
:  !S10: 机械臂上的相机切换成识别当前工件 ;
:  CALL XYZ_SW_ITEM(1,'item1') ;
:  CALL XYZ_CK_ERR    ;
:   ;
:  !S11: 机械臂上的相机请求工件抓取位姿 ;
:  CALL XYZ_R_G_POSE(1) ;
:   ;
:  !S12: 获取工件的抓取位姿 ;
:  R[101]=R[11:MAST parsed int]    ;
:  CALL XYZ_G_G_POSE(R[101]) ;
:   ;
:  IF (R[12:MAST pose num]<1) THEN ;
:  JMP LBL[2] ;
:  ENDIF ;
:   ;
:  !S13: 运动到抓取点位 ;
:  ! 首先走到抓取点位上方 ;
:  PR[41]=PR[5:MAST cart pose] ;
:  PR[41,3]=PR[41,3] + 100 ;
:L PR[41] 100mm/sec CNT100 ;
:  ! 抓取 ;
:L PR[5:MAST cart pose] 100mm/sec FINE    ;
:  RO[2]=ON ;
:   ;
:  !S14: 运动到放置位姿  ;
:  ! 首先走到抓取点位上方 ;
:  PR[41]=PR[5:MAST cart pose] ;
:  PR[41,3]=PR[41,3] + 200 ;
:L PR[41] 100mm/sec CNT100 ;
:  ! 走到放置位姿 ;
:  ! 放置位姿需要提前示教好 ;
:L P[3] 100mm/sec FINE    ;
:  RO[2]=OFF ;
:   ;
:  ENDIF ;
:   ;
:  JMP LBL[1] ;
:   ;
:  !Handle exception ;
:  LBL[2] ;
:  PAUSE ;
:   ;

轨迹移动同步模板

:   ;
:  !S1: 初始化 ;
:  CALL XYZ_REG_COM    ;
:  RO[1]=OFF ;
:   ;
:  !S2: 运行后台程序,连接到Max  ;
:  RUN XYZ_BKGD ;
:  WAIT   2.00(sec) ;
:   ;
:  IF (R[5:MAST connect fla]<>1) THEN ;
:  !如果没有连上,则报错 ;
:  UALM[5] ;
:  ENDIF ;
:   ;
:  ! 切换任务流图,根据需要取消注释 ;
:  ! CALL XYZ_SW_TA('traj_sync.t') ;
:  ! CALL XYZ_CK_ERR    ;
:  ;
:  ! 重置任务 ;
:  CALL XYZ_RESET_TA    ;
:  CALL XYZ_CK_ERR    ;
:   ;
:  !S3: 切换成当前工件 ;
:  CALL XYZ_SW_ITEM(0,'item1') ;
:  CALL XYZ_CK_ERR    ;
:   ;
:  !S4: 运动到Home点 ;
:  !需要提前示教Home点 ;
:J P[1] 100% FINE    ;
:   ;
:  LBL[1] ;
:   ;
:  !S5: 请求抓取和放置规划 ;
:  CALL XYZ_R_PICPLA(0) ;
:  CALL XYZ_CK_ERR    ;
:   ;
:  !S6: 获取 pick-in 轨迹 ;
:  CALL XYZ_G_PICIN(0) ;
:  CALL XYZ_CK_ERR    ;
:   ;
:  !S7: ;
:  IF (R[12:MAST pose num]<1) THEN ;
:  !没有识别到工件 ;
:  JMP LBL[2] ;
:  ENDIF ;
:   ;
:  !S8: 执行 pick-in 轨迹 ;
:  CALL XYZ_EXECTRAJ(2) ;
:  RO[1]=ON ;
:   ;
:  !S9: 获取 pick-out 轨迹 ;
:  CALL XYZ_G_PICOUT(0) ;
:  CALL XYZ_CK_ERR    ;
:   ;
:  !S10: 执行 pick-out 轨迹 ;
:  CALL XYZ_EXECTRAJ(3) ;
:   ;
:  !S11: 获取 place-in 轨迹 ;
:  CALL XYZ_G_PLAIN(0) ;
:  CALL XYZ_CK_ERR    ;
:   ;
:  !S12: 执行 place-in 轨迹 ;
:  CALL XYZ_EXECTRAJ(4) ;
:  RO[1]=OFF ;
:   ;
:  !13: 获取 place-out 轨迹 ;
:  CALL XYZ_G_PLAOUT(0) ;
:  CALL XYZ_CK_ERR    ;
:   ;
:  !S14: 执行 place-out 轨迹 ;
:  CALL XYZ_EXECTRAJ(5) ;
:  JMP LBL[1] ;
:   ;
:  !Hanle no object in LBL2 ;
:  LBL[2] ;
:  PAUSE ;
:   ;

轨迹移动异步模板

:   ;
:  !S1: 初始化 ;
:  CALL XYZ_REG_COM    ;
:  RO[1]=OFF ;
:   ;
:  !S2: 运行后台程序,连接到Max ;
:  RUN XYZ_BKGD ;
:  WAIT   2.00(sec) ;
:   ;
:  IF (R[5:MAST connect fla]<>1) THEN ;
:  !如果没有连上,则报错 ;
:  UALM[5] ;
:  ENDIF ;
:   ;
:  ! 切换任务流图,根据需要取消注释 ;
:  ! CALL XYZ_SW_TA('cart_basic.t') ;
:  ! CALL XYZ_CK_ERR    ;
:  ;
:  ! 重置任务 ;
:  CALL XYZ_RESET_TA    ;
:  CALL XYZ_CK_ERR    ;
:   ;
:  !S3: 切换成当前工件 ;
:  CALL XYZ_SW_ITEM(0,'item1') ;
:  CALL XYZ_CK_ERR    ;
:   ;
:  !S4: 运动到Home点 ;
:  !需要提前示教Home点 ;
:J P[1] 100% CNT100    ;
:   ;
:  !S5: 请求抓取和放置规划 ;
:  CALL XYZ_R_PICPLA(0) ;
:  CALL XYZ_CK_ERR    ;
:   ;
:   ;
:  LBL[1] ;
:   ;
:  !S6: 获取 pick-in 轨迹 ;
:  CALL XYZ_G_PICIN(0) ;
:  CALL XYZ_CK_ERR    ;
:   ;
:  !S7 ;
:  IF (R[12:MAST pose num]<1) THEN ;
:  !没有识别到工件 ;
:  JMP LBL[2] ;
:  ENDIF ;
:   ;
:  !S8: 执行 pick-in 轨迹 ;
:  CALL XYZ_EXECTRAJ(2) ;
:  RO[1]=ON ;
:   ;
:  !S9: 获取 pick-out 轨迹 ;
:  CALL XYZ_G_PICOUT(0) ;
:  CALL XYZ_CK_ERR    ;
:   ;
:  !S10: 执行 pick-out 轨迹 ;
:  CALL XYZ_EXECTRAJ(3) ;
:   ;
:  !S11: 请求下一次的抓取和放置规划 ;
:  CALL XYZ_R_PICPLA(0) ;
:  CALL XYZ_CK_ERR    ;
:   ;
:  !S12: 获取本次 place-in 轨迹 ;
:  CALL XYZ_G_PLAIN(0) ;
:  CALL XYZ_CK_ERR    ;
:   ;
:  !S13: 执行本次 place-in 轨迹 ;
:  CALL XYZ_EXECTRAJ(4) ;
:  RO[1]=OFF ;
:   ;
:  !S14: 获取本次 place-out 轨迹 ;
:  CALL XYZ_G_PLAOUT(0) ;
:  CALL XYZ_CK_ERR    ;
:   ;
:  !S15: 执行本次 place-out 轨迹 ;
:  CALL XYZ_EXECTRAJ(5) ;
:  JMP LBL[1] ;
:   ;
:  !Handle no object ;
:  LBL[2] ;
:  PAUSE ;
:   ;