案例/模板说明 ============================ 机械臂主控主函数说明 ++++++++++++++++++++++++++++++++ 以下为机械臂主控模板,这里介绍前台程序的用法以及相关寄存器的用途,寄存器的全部定义请参照lua文件的开头部分。 .. code-block:: -------------------------cart_move_basic.jbi---------------------------------- // NOP S1:连接到上位机 // start backend connection // xyz_bkgd is the first lua script STARTLUA INDEX=1 //启用xyz_master.lua脚本 S2: 初始化参数 // init communication CALL JOB:xyz_init //调用初始化程序 // switch flow SET B002 502 //设置cmd寄存器值为502 SET B004 1 //elite没有字符串寄存器,后台预留了五个字符串 //B004的值代表选用的是第几个字符串,现在选用第一个作为flow name CALL JOB:xyz_send_recv //调用通讯程序 S3: 切换工件 // switch item SET B002 528 //设置cmd寄存器值为502 SET B004 2 //选用后台预留的第二个作字符串为item name SET B011 0 //设置ws_id CALL JOB:xyz_send_recv //调用通讯程序 DOUT OT# (1) OFF //设置DO S4: 移动到home点,需要提前设置好home点位置 MOVJ P001 VJ=50 PL=0 ACC=50 DEC=50 //运动到某一示教点 SET LB000 0 SET LB001 0 // loop start //循环开始 WHILE LB000=0 DO LABEL *loop_start S5: 眼在手上 // send current pose IF LB001=0 THEN S6: 移动到拍照位 MOVJ P001 VJ=50 PL=0 ACC=50 DEC=50 S7: 发送拍照位姿给上位机 SET B002 513 //设置cmd寄存器值为513 SET V002 0,0,0,0,0,0 //设置要发送给上位机的cart pose CALL JOB:xyz_send_recv //调用通讯程序 ENDIF S8: 请求抓取位姿 // request grasp pose SET B002 507 //设置cmd寄存器值为507 SET B011 0 //设置ws_id CALL JOB:xyz_send_recv //调用通讯程序 S9: 获取抓取位姿 // get grasp pose SET B002 508 //设置cmd寄存器值为508 SET B013 0 //设置token CALL JOB:xyz_send_recv //调用通讯程序 IF B014 < 1 THEN TIMER T=5 //未识别,重新拍照 JUMP *loop_start ENDIF S10: 移动到抓取位并抓取 注意,可能需要添加一些过渡点 MOVL V001 AV=400.0 MM/S CR =10.0MM //移动到grasp pose DOUT OT# (1) ON //触发DO抓取 TIMER T=0.5 S11: 移动到放置位并放置 MOVL V003 AV=400.0 MM/S CR =10.0MM //移动至放置点 DOUT OT# (1) OFF //触发DO放置 ENDWHILE END -------------------------cart_move_repo.jbi---------------------------------- // NOP S1: 连接到上位机 // start backend connection // xyz_bkgd is the first lua script STARTLUA INDEX=1 //启用xyz_master.lua脚本 S2: 初始化参数 // init communication CALL JOB:xyz_init //调用初始化程序 // switch flow SET B002 502 //设置cmd寄存器值为502 SET B004 1 //elite没有字符串寄存器,后台预留了五个字符串 //B004的值代表选用的是第几个字符串,现在选用第一个作为flow name CALL JOB:xyz_send_recv //调用通讯程序 S3: 切换工件 // switch item SET B002 528 //设置cmd寄存器值为502 SET B004 2 //选用后台预留的第二个作字符串为item name SET B011 0 //设置ws_id CALL JOB:xyz_send_recv //调用通讯程序 DOUT OT# (1) OFF //设置DO DOUT OT# (2) OFF S4: 移动到home点,需要提前设置好home点位置 MOVJ P001 VJ=50 PL=1 ACC=50 DEC=50 //运动到某一示教点 S5: 请求抓取位姿 // request grasp pose SET B002 507 //设置cmd寄存器值为507 SET B011 0 //设置ws_id CALL JOB:xyz_send_recv //调用通讯程序 SET LB000 0 // loop start //循环开始 WHILE LB000=0 DO LABEL *loop_start S6: 获取抓取位姿 // get grasp pose SET B002 508 //设置cmd寄存器值为508 SET B013 0 //设置token CALL JOB:xyz_send_recv //调用通讯程序 S7: IF B014 < 1 THEN S15: 上位机切换至识别隔板, 工作空间中已经没有工件,需要先取走隔板 // switch item SET B002 528 //设置cmd寄存器值为502 SET B004 3 //选用后台预留的第三个作字符串为item name SET B011 0 //设置ws_id CALL JOB:xyz_send_recv //调用通讯程序 S16: 请求隔板抓取位姿 // request grasp pose SET B002 507 //设置cmd寄存器值为507 SET B011 0 //设置ws_id CALL JOB:xyz_send_recv //调用通讯程序 S17: 获取隔板抓取位姿 // get grasp pose SET B002 508 //设置cmd寄存器值为508 SET B013 0 //设置token CALL JOB:xyz_send_recv //调用通讯程序 S18: 移动到抓取位并抓取隔板 MOVL V001 AV=400.0 MM/S CR =10.0MM //移动到抓取点 DOUT OT# (1) ON S19: 移动到放置位并放置 MOVL V001 AV=400.0 MM/S CR =10.0MM //移动到放置点 DOUT OT# (1) OFF S20: 上位机切换至识别工件 // switch item SET B002 528 //设置cmd寄存器值为502 SET B004 2 //选用后台预留的第三个作字符串为item name SET B011 0 //设置ws_id CALL JOB:xyz_send_recv //调用通讯程序 // request grasp pose SET B002 507 //设置cmd寄存器值为507 SET B011 0 //设置ws_id CALL JOB:xyz_send_recv //调用通讯程序 JUMP *loop_start ELSE S8: 移动到拍照位,需要先示教该拍照位 MOVL V003 AV=400.0 MM/S CR =10.0MM S9: 发送拍照位姿 // send current pose SET B002 513 //设置cmd寄存器值为513 SET V002 0,0,0,0,0,0 //设置要发送给上位机的cart pose CALL JOB:xyz_send_recv //调用通讯程序 S10: 上位机切换至识别工件 // switch item SET B002 528 //设置cmd寄存器值为502 SET B004 2 //选用后台预留的第三个作字符串为item name SET B011 1 //设置ws_id CALL JOB:xyz_send_recv //调用通讯程序 S11: 请求抓取位姿 // request grasp pose SET B002 507 //设置cmd寄存器值为507 SET B011 1 //设置ws_id CALL JOB:xyz_send_recv //调用通讯程序 S12: 获取抓取位姿 // get grasp pose SET B002 508 //设置cmd寄存器值为508 SET B013 0 //设置token CALL JOB:xyz_send_recv //调用通讯程序 S13: 移动到抓取位并抓取 MOVL V001 AV=400.0 MM/S CR =10.0MM //移动到放置点 DOUT OT# (2) ON S14: 移动到放置位并放置 MOVL V004 AV=400.0 MM/S CR =10.0MM DOUT OT# (2) OFF ENDIF // switch item SET B002 528 //设置cmd寄存器值为502 SET B004 2 //选用后台预留的第二个作字符串为item name SET B011 0 //设置ws_id CALL JOB:xyz_send_recv //调用通讯程序 // request grasp pose SET B002 507 //设置cmd寄存器值为507 SET B011 0 //设置ws_id CALL JOB:xyz_send_recv //调用通讯程序 ENDWHILE END -------------------------traj_move_sync.jbi---------------------------------- // NOP S1: 连接上位机 // start backend connection // xyz_bkgd is the first lua script STARTLUA INDEX=1 //启用xyz_master.lua脚本 S2: 初始化参数 // init communication CALL JOB:xyz_init //调用初始化程序 // switch flow SET B002 502 //设置cmd寄存器值为502 SET B004 1 //elite没有字符串寄存器,后台预留了五个字符串 //B004的值代表选用的是第几个字符串,现在选用第一个作为flow name CALL JOB:xyz_send_recv //调用通讯程序 S3: 切换工件 // switch item SET B002 528 //设置cmd寄存器值为502 SET B004 2 //选用后台预留的第二个作字符串为item name SET B011 0 //设置ws_id CALL JOB:xyz_send_recv //调用通讯程序 DOUT OT# (1) OFF //设置DO S4: 移动到home点,需要提前设置好home点位置 MOVJ P001 VJ=50 PL=0 ACC=50 DEC=50 //运动到某一示教点 SET LB000 0 // loop start //循环开始 WHILE LB000=0 DO LABEL *loop_start S5: 请求抓取和放置规划 // request pick and place SET B002 517 //设置cmd寄存器值为517 SET B011 0 //设置ws_id CALL JOB:xyz_send_recv //调用通讯程序 S6: 获取抓取入筐轨迹 // get pick in result SET B002 518 //设置cmd寄存器值为518 SET B011 0 //设置ws_id CALL JOB:xyz_send_recv //调用通讯程序 PAUSE IF B014 < 1 //清筐 S7: 执行抓取入筐轨迹 CALL JOB:xyz_exectraj //执行轨迹 DOUT OT# (1) ON S8: 获取抓取出筐轨迹 // get pick out result SET B002 519 //设置cmd寄存器值为519 SET B011 0 //设置ws_id CALL JOB:xyz_send_recv //调用通讯程序 S9: 执行抓取出筐轨迹 CALL JOB:xyz_exectraj //执行轨迹 S10: 获取放置入筐轨迹 // get place in result SET B002 520 //设置cmd寄存器值为520 SET B011 0 //设置ws_id CALL JOB:xyz_send_recv //调用通讯程序 S11: 执行放置入筐轨迹 CALL JOB:xyz_exectraj //执行轨迹 DOUT OT# (1) OFF S12: 获取放置出筐轨迹 // get place out result SET B002 521 //设置cmd寄存器值为521 SET B011 0 //设置ws_id CALL JOB:xyz_send_recv //调用通讯程序 S13: 执行放置出筐轨迹 CALL JOB:xyz_exectraj //执行轨迹 ENDWHILE END -------------------------traj_move_async.jbi---------------------------------- // NOP S1: 连接到上位机 // start backend connection // xyz_bkgd is the first lua script STARTLUA INDEX=1 //启用xyz_master.lua脚本 S2: 初始化参数 // init communication CALL JOB:xyz_init //调用初始化程序 // switch flow SET B002 502 //设置cmd寄存器值为502 SET B004 1 //elite没有字符串寄存器,后台预留了五个字符串 //B004的值代表选用的是第几个字符串,现在选用第一个作为flow name CALL JOB:xyz_send_recv //调用通讯程序 S3: 切换工件 // switch item SET B002 528 //设置cmd寄存器值为502 SET B004 2 //选用后台预留的第二个作字符串为item name SET B011 0 //设置ws_id CALL JOB:xyz_send_recv //调用通讯程序 DOUT OT# (1) OFF //设置DO S4: 移动到home点,需要提前设置好home点位置 MOVJ P001 VJ=50 PL=0 ACC=50 DEC=50 //运动到某一示教点 S5: 请求抓取和放置规划 // request pick and place SET B002 517 //设置cmd寄存器值为517 SET B011 0 //设置ws_id CALL JOB:xyz_send_recv //调用通讯程序 SET LB000 0 // loop start //循环开始 WHILE LB000=0 DO LABEL *loop_start S6: 获取抓取入筐轨迹 // get pick in result SET B002 518 //设置cmd寄存器值为518 SET B011 0 //设置ws_id CALL JOB:xyz_send_recv //调用通讯程序 PAUSE IF B014 < 1 //清筐 S7: 执行抓取入筐轨迹 CALL JOB:xyz_exectraj //执行轨迹 DOUT OT# (1) ON S8: 获取抓取出筐轨迹 // get pick out result SET B002 519 //设置cmd寄存器值为519 SET B011 0 //设置ws_id CALL JOB:xyz_send_recv //调用通讯程序 S9: 执行抓取出筐轨迹 CALL JOB:xyz_exectraj //执行轨迹 S10: 请求下一次的抓取和放置规划 // request pick and place SET B002 517 //设置cmd寄存器值为517 SET B011 0 //设置ws_id CALL JOB:xyz_send_recv //调用通讯程序 S11: 获取放置入框轨迹 // get place in result SET B002 520 //设置cmd寄存器值为520 SET B011 0 //设置ws_id CALL JOB:xyz_send_recv //调用通讯程序 S12: 执行放置入筐轨迹 CALL JOB:xyz_exectraj //执行轨迹 DOUT OT# (1) OFF S13: 获取放置出筐轨迹 // get place out result SET B002 521 //设置cmd寄存器值为521 SET B011 0 //设置ws_id CALL JOB:xyz_send_recv //调用通讯程序 S14: 执行放置出筐轨迹 CALL JOB:xyz_exectraj //执行轨迹 ENDWHILE END