案例/模板说明

机械臂主控主函数说明

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

用户需要根据项目情况,参考模板编写机械臂前台程序,特别需要注意对工控机返回的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