案例/模板说明
机械臂主控主函数说明
以下为机械臂主控模板代码,包含坐标移动基础模板, 坐标移动二次定位模板和轨迹移动同步模板,轨迹移动异步模板。
坐标移动基础模板
!S1: 初始化 ;
CALL XYZ_REG_COM ;
RO[1]=OFF ;
;
;
!S2: 连接到工控机;
RUN XYZ_BKGD ;
WAIT 1.00(sec) ;
;
IF (R[5]<>1) THEN ;
!如果没连接到工控机,示教器会报警提示 ;
UALM[5] ;
ENDIF ;
;
!切换任务流图 ,默认被注释掉,如果需求可以取消注释
//CALL XYZ_SW_FLW('cart_basic.t') ;
//CALL XYZ_CK_ERR ;
;
!S3: 切换成当前工件 ;
CALL XYZ_SW_ITEM(0,'item1') ;
CALL XYZ_CK_ERR ;
;
! S4: 运动到 home 位 ;
! 首先移动到 home 点。注意需要先定义 home_pose 的关节角度值;
! 或者用使用其他点来替代 ;
J P[1:home pose] 100% CNT100 ;
;
!如果是眼在机械臂上的应用形式 ;
!请修改 R[99]=1 ;
R[99]=0 ;
;
LBL[1] ;
;
!S5: 眼在机械臂上 ;
IF (R[99]=1) THEN ;
!S6: 运动到拍照位姿 ;
!注意需要先定义 scan_pose 的位姿 ;
!或者用使用其他点来替代 ;
!scan pose 必须定义在位置寄存器里,不然后台读取不到 ;
L PR[99] 100mm/sec FINE ;
!S7: 发送拍照位姿 ;
CALL XYZ_S_C_POSE(99) ;
CALL XYZ_CK_ERR ;
ENDIF ;
;
!S8: 请求抓取点位 ;
CALL XYZ_R_G_POSE(0) ;
CALL XYZ_CK_ERR ;
;
!S9: 获取抓取点位 ;
R[98]=R[11:MAST parsed int] ;
CALL XYZ_G_G_POSE(R[98]) ;
CALL XYZ_CK_ERR ;
IF (R[12:MAST pose num]<1) THEN ;
!工作空间中没有工件 ;
WAIT 5.00(sec) ;
JMP LBL[1] ;
ENDIF ;
;
!S10: 运动到抓取点并抓取工件 ;
!这里需要添加过渡点,防止机器人运动过程中发生碰撞 ;
L PR[5:MAST cart pose] 100mm/sec FINE ;
RO[1]=ON ;
;
!S11: 运动到放置点并放置工件 ;
!这里需要添加过渡点,防止机器人运动过程中发生碰撞 ;
L P[2:place pose] 100mm/sec FINE ;
RO[1]=OFF ;
;
JMP LBL[1] ;
;
坐标移动重定位模板
!S1: 初始化 ;
CALL XYZ_REG_COM ;
RO[1]=OFF ;
RO[2]=OFF ;
;
!S2: 连接到工控机 ;
RUN XYZ_BKGD ;
WAIT 1.00(sec) ;
;
IF (R[5]<>1) THEN ;
!如果没连接到工控机,示教器会报警提示 ;
UALM[5] ;
ENDIF ;
;
!切换任务流图 ,默认被注释掉,如果需求可以取消注释
//CALL XYZ_SW_FLW('cart_repo.t') ;
//CALL XYZ_CK_ERR ;
;
!S3: 机械臂外的相机切换成识别当前工件;
CALL XYZ_SW_ITEM(0,'item1') ;
CALL XYZ_CK_ERR ;
;
!S4: 运动到home pose ;
! 首先移动到 home 点。注意需要先定义 home_pose 的关节角度值;
! 或者用使用其他点来替代 ;
J P[1:home pose] 100% CNT100 ;
;
LBL[1] ;
;
!S5: 请求工件的抓取位姿 ;
CALL XYZ_R_G_POSE(0) ;
CALL XYZ_CK_ERR ;
;
!S6: 获取工件的抓取位姿 ;
R[98]=R[11:MAST parsed int] ;
CALL XYZ_G_G_POSE(R[98]) ;
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[98]=R[11:MAST parsed int] ;
CALL XYZ_G_G_POSE(R[98]) ;
CALL XYZ_CK_ERR ;
IF (R[12:MAST pose num]<1) THEN ;
!no board.maybe tote empty ;
JMP LBL[2]
ENDIF ;
;
!S18: 运动到隔板抓取位姿,并抓取隔板 ;
!这里需要添加过渡点,防止机器人运动过程中发生碰撞 ;
L PR[5:MAST cart pose] 100mm/sec FINE ;
RO[1]=ON ;
;
!S19: 运动到隔板的放置位姿 ;
!这里需要添加过渡点,防止机器人运动过程中发生碰撞 ;
L P[3:board place pose] 100mm/sec FINE ;
RO[1]=OFF ;
;
!S20: 机械臂外的相机切换成识别当前工件;
CALL XYZ_SW_ITEM(0,'item1') ;
CALL XYZ_CK_ERR ;
;
ELSE ;
;
!S8: 运动到拍照位姿 ;
!注意需要先定义 scan_pose 的位姿 ;
!或者用使用其他点来替代 ;
L PR[99] 100mm/sec FINE ;
;
!S9: 发送拍照位姿 ;
CALL XYZ_S_C_POSE(99) ;
CALL XYZ_CK_ERR ;
;
!S10: 机械臂上的相机切换成识别当前工件;
CALL XYZ_SW_ITEM(1,'item1') ;
CALL XYZ_CK_ERR ;
;
!S11: 请求机械臂上的相机获取工件抓取位姿 ;
CALL XYZ_R_G_POSE(1) ;
;
!S12: 获取工件的抓取位姿 ;
R[98]=R[11:MAST parsed int] ;
CALL XYZ_G_G_POSE(R[98]) ;
;
IF (R[12:MAST pose num]<1) THEN ;
JMP LBL[2] ;
ENDIF ;
;
!S13: 运动到工件的抓取位姿并进行抓取 ;
!这里需要添加过渡点,防止机器人运动过程中发生碰撞 ;
L PR[5:MAST cart pose] 100mm/sec FINE ;
RO[2]=ON ;
;
!S14: 运动到工件的放置位姿 ;
!这里需要添加过渡点,防止机器人运动过程中发生碰撞 ;
L P[4:object place pos] 100mm/sec FINE ;
RO[2]=OFF ;
;
ENDIF ;
;
JMP LBL[1] ;
;
!处理未识别到工件的情况 ;
LBL[2] ;
;
轨迹移动同步模板
;
!S1: 初始化 ;
CALL XYZ_REG_COM ;
RO[1]=OFF ;
;
!S2: 连接到工控机 ;
RUN XYZ_BKGD ;
WAIT 1.00(sec) ;
;
IF (R[5]<>1) THEN ;
!如果没连接到工控机,示教器会报警提示 ;
UALM[5] ;
ENDIF ;
;
!切换任务流图 ,默认被注释掉,如果需求可以取消注释
//CALL XYZ_SW_FLW('traj_async.t') ;
//CALL XYZ_CK_ERR ;
;
!S3: 切换成当前工件 ;
CALL XYZ_SW_ITEM(0,'item1') ;
CALL XYZ_CK_ERR ;
;
!S4: 运动到home pose ;
! 首先移动到 home 点。注意需要先定义 home_pose 的关节角度值;
! 或者用使用其他点来替代 ;
J P[1:home pose] 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]<>0) THEN ;
!no object ;
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) ;
;
!13: 获取 place-out 轨迹;
CALL XYZ_G_PLAOUT(0) ;
CALL XYZ_CK_ERR ;
;
!S14: 执行 place-out 轨迹;
CALL XYZ_EXECTRAJ(5) ;
JMP LBL[1] ;
;
!处理未识别到工件的情况 ;
LBL[2] ;
;
轨迹移动异步模板
!S1: 初始化 ;
CALL XYZ_REG_COM ;
RO[1]=OFF ;
;
!S2: 连接到工控机 ;
RUN XYZ_BKGD ;
WAIT 1.00(sec) ;
;
IF (R[5]<>1) THEN ;
!如果没连接到工控机,示教器会报警提示 ;
UALM[5] ;
ENDIF ;
;
!切换任务流图 ,默认被注释掉,如果需求可以取消注释
//CALL XYZ_SW_FLW('traj_sync.t') ;
//CALL XYZ_CK_ERR ;
;
!S3: 切换成当前工件 ;
CALL XYZ_SW_ITEM(0,'item1') ;
CALL XYZ_CK_ERR ;
;
!S4: 运动到home pose ;
! 首先移动到 home 点。注意需要先定义 home_pose 的关节角度值;
! 或者用使用其他点来替代 ;
J P[1:home pose] 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]=0) THEN ;
!no object ;
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) ;
;
!S14: 获取本次 place-out 轨迹;
CALL XYZ_G_PLAOUT(0) ;
CALL XYZ_CK_ERR ;
;
!S15: 执行本次 place-out 轨迹;
CALL XYZ_EXECTRAJ(5) ;
JMP LBL[1] ;
;
!处理未识别到工件的情况 ;
LBL[2] ;
;