案例/模板说明
机械臂主控主函数说明
以下为机械臂主控模板代码,包含坐标移动基础模板、坐标移动二次定位模板、轨迹移动同步模板、轨迹移动异步模板。
用户需要根据项目情况,参考模板编写机械臂前台程序,特别需要注意对工控机返回的error_code进行判断。
安川的一部分全局变量已经被占用,用户不允许使用这些全局变量,详见 api界面。
关于模板中的 API 可以查阅 安川 的 “API 说明” 部分。
请注意模板函数并不能直接运行,请一定根据项目现场环境和流程需求进行修改
坐标移动基础模板
XYZCartMoveBasicTpl.JBI
'
' XYZ CartMove Basic Template
'
'
' S1: 初始化
'
CALL JOB:XYZMasterInit
DOUT OT#(1) OFF
'
' S2: 连接到Max
'
CALL JOB:XYZMasterConnect ARGF"192.168.37.101" ARGF11111
'
' 切换任务流图,根据需要添加
'
' 重置任务
CALL JOB:XYZMasterProcCmd ARGF511
CALL JOB:XYZMasterCheckError
'
' S3: 切换成当前工件
'
' set vs_id
SET I003 0
' set item_codename
SET S002 "item1"
CALL JOB:XYZMasterProcCmd ARGF528
CALL JOB:XYZMasterCheckError
'
' S4: 运动到Home点
'
' 需要提前示教Home点
MOVJ P100 VJ=30.00 PL=0
'
' 如果是眼在手上的案例,则设置B010为1,否则设置为0
' B010:
' 0: eye to hand
' 1: eye in hand
SET B010 1
'
'
*LP_MAIN
'
' S5: 眼在手上
'
IFTHENEXP B010=1
'
' S6: 运动到拍照位姿点
' 需要提前示教拍照位姿
'
MOVL P101 V=200.0 PL=0
'
' S7: 发送拍照位姿
'
CALL JOB:XYZMasterProcCmd ARGF513
CALL JOB:XYZMasterCheckError
ENDIF
'
' S8: 请求抓取目标点位
'
' set vs_id
SET I003 0
CALL JOB:XYZMasterProcCmd ARGF507
CALL JOB:XYZMasterCheckError
' save returned token
SET LI000 I022
'
' S9: 获取抓取目标点位
'
' set obtained token
SET I002 LI000
CALL JOB:XYZMasterProcCmd ARGF508
CALL JOB:XYZMasterCheckError
' if no grasp pose
IFTHENEXP I023<1
MSG "no grasp pose"
WAIT T=5.00
JUMP *LP_MAIN
ENDIF
'
' S10: 运动到抓取点位
'
' 首先走到抓取点位上方50mm处
SET P105 P004
' offs 50mm
SET LD000 50000
' get z of grasp pose
GETE LD001 P105 (3)
ADD LD001 LD000
SETE P105 (3) LD001
' move to pre grasp pose
MOVL P105 V=800.0 PL=2
' 抓取
MOVL P004 V=200.0 PL=0
DOUT OT#(1) ON
'
' S11: 运动到放置位姿
'
' 首先走到抓取点位上方100mm处
SET P105 P004
' offs 100mm
SET LD000 100000
' get z of grasp pose
GETE LD001 P105 (3)
ADD LD001 LD000
SETE P105 (3) LD001
' move to post grasp pose
MOVL P105 V=400.0 PL=2
' 走到放置位姿
' 放置位姿需要提前示教好
MOVL P106 V=100.0 PL=0
DOUT OT#(1) OFF
'
JUMP *LP_MAIN
'
'
END
坐标移动二次定位模板
XYZCartMoveRepoTpl.JBI
NOP
'
' XYZ CartMove Repo Template
'
'
' S1: 初始化
'
CALL JOB:XYZMasterInit
DOUT OT#(1) OFF
DOUT OT#(2) OFF
'
' S2: 连接到Max
'
CALL JOB:XYZMasterConnect ARGF"192.168.37.101" ARGF11111
'
' 切换任务流图,根据需要添加
'
' 重置任务
CALL JOB:XYZMasterProcCmd ARGF511
CALL JOB:XYZMasterCheckError
'
' S3: 切换成当前工件
'
' set vs_id
SET I003 0
' set item_codename
SET S002 "item1"
CALL JOB:XYZMasterProcCmd ARGF528
CALL JOB:XYZMasterCheckError
'
' S4: 运动到Home点
'
' 需要提前示教Home点
MOVJ P100 VJ=30.00 PL=0
'
'
*LP_MAIN
'
' S5+S6: 请求+获取抓取目标点位
'
' set vs_id
SET I003 0
CALL JOB:XYZMasterProcCmd ARGF529
CALL JOB:XYZMasterCheckError
'
' S7: 判断是否识别到工件
'
IFTHENEXP I023<1
'
' S15: 没有识别到工件,机械臂外的相机切换识别隔板
'
' set vs_id
SET I003 0
' set item_codename
SET S002 "board"
CALL JOB:XYZMasterProcCmd ARGF528
CALL JOB:XYZMasterCheckError
'
' S16+S17: 请求+获取隔板抓取位姿
'
' set vs_id
SET I003 0
CALL JOB:XYZMasterProcCmd ARGF529
CALL JOB:XYZMasterCheckError
IFTHENEXP I023<1
' 未识别到隔板的处理
MSG "no board"
ABORT
ENDIF
'
' S18: 运动到隔板抓取位姿,并抓取隔板
'
' 首先走到隔板上方50mm
SET P105 P004
' offs 50mm
SET LD000 50000
' get z of grasp pose
GETE LD001 P105 (3)
ADD LD001 LD000
SETE P105 (3) LD001
' move to pre board pose
MOVL P105 V=800.0 PL=2
' 抓隔板
MOVL P004 V=200.0 PL=0
DOUT OT#(1) ON
'
' S19: 运动到隔板的放置位姿
'
' 首先走到隔板上方100mm
SET P105 P004
' offs 100mm
SET LD000 100000
' get z of board
GETE LD001 P105 (3)
ADD LD001 LD000
SETE P105 (3) LD001
' move to post board
MOVL P105 V=400.0 PL=2
' 走到隔壁放置位姿
' 需要提前示教好放置位姿
MOVL P106 V=100.0 PL=0
DOUT OT#(1) OFF
'
' S20: 机械臂外的相机切换成识别当前工件
'
' set vs_id
SET I003 0
' set item_codename
SET S002 "item1"
CALL JOB:XYZMasterProcCmd ARGF528
CALL JOB:XYZMasterCheckError
'
'
ELSE
'
' S8: 运动到拍照位姿
' 需要提前示教好拍照位姿
'
MOVL P101 V=200.0 PL=0
'
' S9: 发送拍照位姿
'
CALL JOB:XYZMasterProcCmd ARGF513
CALL JOB:XYZMasterCheckError
'
' S10: 机械臂上的相机切换成识别当前工件
'
' set vs_id
SET I003 1
' set item_codename
SET S002 "item1"
CALL JOB:XYZMasterProcCmd ARGF528
CALL JOB:XYZMasterCheckError
'
' S11+S12: 机械臂上的相机请求+获取工件的抓取位姿
'
' set vs_id
SET I003 1
CALL JOB:XYZMasterProcCmd ARGF529
CALL JOB:XYZMasterCheckError
IFTHENEXP I023<1
MSG "no object"
ABORT
ENDIF
'
' S13: 运动到抓取点位
'
' 首先走到抓取点位上方50mm
SET P105 P004
' offs 50mm
SET LD000 50000
' get z of grasp pose
GETE LD001 P105 (3)
ADD LD001 LD000
SETE P105 (3) LD001
' move to pre grasp pose
MOVL P105 V=800.0 PL=2
' 抓取
MOVL P004 V=200.0 PL=0
DOUT OT#(2) ON
'
' S14: 运动到放置位姿
'
' 先走到抓取点位上方100mm
SET P105 P004
' offs 100mm
SET LD000 100000
' get z of board
GETE LD001 P105 (3)
ADD LD001 LD000
SETE P105 (3) LD001
' move to post grasp pose
MOVL P105 V=400.0 PL=2
' move to place pose
' define obj place pose first!
MOVL P107 V=100.0 PL=0
DOUT OT#(2) OFF
'
'
ENDIF
'
'
JUMP *LP_MAIN
'
END
轨迹移动同步模板
XYZTrajMoveSyncTpl.JBI
NOP
'
' XYZ TrajMove Sync Template
'
'
' S1: 初始化
'
CALL JOB:XYZMasterInit
DOUT OT#(1) OFF
'
' S2: 连接到Max
'
CALL JOB:XYZMasterConnect ARGF"192.168.37.101" ARGF11111
'
' 切换任务流图,根据需要添加
'
' 重置任务
CALL JOB:XYZMasterProcCmd ARGF511
CALL JOB:XYZMasterCheckError
'
' S3: 切换成当前工件
'
' set vs_id
SET I003 0
' set item_codename
SET S002 "item1"
CALL JOB:XYZMasterProcCmd ARGF528
CALL JOB:XYZMasterCheckError
'
' S4: 运动到Home点
'
' 需要提前示教Home点
MOVJ P100 VJ=30.00 PL=0
'
'
*LP_MAIN
'
' S5: 请求抓取和放置规划
'
' set vs_id
SET I003 0
CALL JOB:XYZMasterProcCmd ARGF517
CALL JOB:XYZMasterCheckError
'
' S6: 获取 pick-in 轨迹
'
' set vs_id
SET I003 0
CALL JOB:XYZMasterProcCmd ARGF518
CALL JOB:XYZMasterCheckError
'
' S7: 检查是否识别到工件
'
' I023: way_point_num
IFTHENEXP I023<1
MSG "no way_points"
ABORT
ENDIF
'
' S8: 执行 pick-in 轨迹
'
CALL JOB:XYZMasterExecPickIn
DOUT OT#(1) ON
'
' S9: 获取 pick-out 轨迹
'
' set vs_id
SET I003 0
CALL JOB:XYZMasterProcCmd ARGF519
CALL JOB:XYZMasterCheckError
'
' S10: 执行 pick-out 轨迹
'
CALL JOB:XYZMasterExecPickOut
'
' S11: 获取 place-in 轨迹
'
' set vs_id
SET I003 0
CALL JOB:XYZMasterProcCmd ARGF520
CALL JOB:XYZMasterCheckError
'
' S12: 执行 place-in 轨迹
'
CALL JOB:XYZMasterExecTraj
DOUT OT#(1) OFF
'
' S13: 获取 place-out 轨迹
'
' set vs_id
SET I003 0
CALL JOB:XYZMasterProcCmd ARGF521
CALL JOB:XYZMasterCheckError
'
' S14: 执行 place-out 轨迹
'
CALL JOB:XYZMasterExecTraj
'
JUMP *LP_MAIN
'
'
END
轨迹移动异步模板
XYZTrajMoveAsyncTpl.JBI
NOP
'
' XYZ TrajMove Async Template
'
'
' S1: 初始化
'
CALL JOB:XYZMasterInit
DOUT OT#(1) OFF
'
' S2: 连接到Max
'
CALL JOB:XYZMasterConnect ARGF"192.168.37.101" ARGF11111
'
' 切换任务流图,根据需要添加
'
' 重置任务
CALL JOB:XYZMasterProcCmd ARGF511
CALL JOB:XYZMasterCheckError
'
' S3: 切换成当前工件
'
' set vs_id
SET I003 0
' set item_codename
SET S002 "item1"
CALL JOB:XYZMasterProcCmd ARGF528
CALL JOB:XYZMasterCheckError
'
' S4: 运动到Home点
'
' 需要提前示教Home点
MOVJ P100 VJ=30.00 PL=0
'
' S5: 请求抓取和放置规划
'
' set vs_id
SET I003 0
CALL JOB:XYZMasterProcCmd ARGF517
CALL JOB:XYZMasterCheckError
'
'
*LP_MAIN
'
' S6: 获取 pick-in 轨迹
'
' set vs_id
SET I003 0
CALL JOB:XYZMasterProcCmd ARGF518
CALL JOB:XYZMasterCheckError
'
' S7: 检查是否识别到工件
'
' I023: way_point_num
IFTHENEXP I023<1
MSG "no way_points"
ABORT
ENDIF
'
' S8: 执行 pick-in 轨迹
'
CALL JOB:XYZMasterExecPickIn
DOUT OT#(1) ON
'
' S9: 获取 pick-out 轨迹
'
' set vs_id
SET I003 0
CALL JOB:XYZMasterProcCmd ARGF519
CALL JOB:XYZMasterCheckError
'
' S10: 执行 pick-out 轨迹
'
CALL JOB:XYZMasterExecPickOut
'
' S11: 请求下一次的抓取和放置规划
'
' set vs_id
SET I003 0
CALL JOB:XYZMasterProcCmd ARGF517
CALL JOB:XYZMasterCheckError
'
' S12: 获取本次 place-in 轨迹
'
' set vs_id
SET I003 0
CALL JOB:XYZMasterProcCmd ARGF520
CALL JOB:XYZMasterCheckError
'
' S13: 执行本次 place-in 轨迹
'
CALL JOB:XYZMasterExecTraj
DOUT OT#(1) OFF
'
' S14: 获取本次 place-out 轨迹
'
' set vs_id
SET I003 0
CALL JOB:XYZMasterProcCmd ARGF521
CALL JOB:XYZMasterCheckError
'
' S15: 执行本次 place-out 轨迹
'
CALL JOB:XYZMasterExecTraj
'
JUMP *LP_MAIN
'
'
END