案例/模板说明
机械臂主控主函数说明
以下为机械臂主控模板代码,包含坐标移动基础模板、坐标移动二次定位模板、轨迹移动同步模板、轨迹移动异步模板。
用户需要根据项目情况,参考模板程序编写机械臂前台主程序。
nachi的一部分全局变量已经被占用,用户不允许使用这些全局变量,详见nachi api界面。
关于模板中的 API 可以查阅 nachi 的 “API 说明” 部分。
请注意模板函数并不能直接运行,请一定根据项目现场环境和流程需求进行修改
坐标移动基础模板
MZ04-01-A.001
INCLUDE "XYZSETUP"
'
' S1: 初始化
'
' 初始化
CallProc MasterInit()
' 关闭用户任务300
KILLMCR 300, 0, 10000
DELAY 2
' 启动用户任务300
FORKMCR 300, 10000
DELAY 2
' io设置
RESET O1
'
' S2: 连接到Max
'
' 设置服务端ip地址(ip地址的最后一段)
MST_IP = 101
' 设置端口号
MST_PORT = 11111
CallProc xyzMasterConnect()
' 切换任务流图,根据需要取消注释
' MST_TASK_CODENAME = "cart_basic.t"
' CallProc xyzSwitchTask()
' CallProc CheckErrorCode()
' 重置任务
CallProc xyzResetTask()
CallProc CheckErrorCode()
'
' S3: 切换成当前工件
'
' 设置视觉服务id
MST_VS_ID = 0
' 设置工件代号
MST_ITEM_CODENAME = "item1"
CallProc xyzSwitchItem()
CallProc CheckErrorCode()
'
' S4: 运动到Home点
'
' 需要提前示教Home点
MOVEX A=1P, AC=0, SM=0, M1X, P, (100.0,200.0,300.0,0.0,0.0,0.0),R=100.0,MS
' 如果是眼在手上的案例,则将V%[100]设置为1,否则设置为0
V%[100] = 1
*MAIN_LOOP
'
' S5: 眼在手上
'
IF V%[100] = 1
'
' S6: 运动到拍照位姿点
' 需要提前示教拍照位姿
MOVEX A=1P, AC=0, SM=0, M1X, L, (100.0,200.0,300.0,0.0,0.0,0.0),R=100.0,MS
'
' S7: 发送拍照位姿
'
CallProc xyzSendCurrentCartPose()
CallProc CheckErrorCode()
ENDIF
'
' S8: 请求抓取目标点位
'
MST_VS_ID = 0
CallProc xyzReqGraspPose()
CallProc CheckErrorCode()
V%[101] = MST_OUT_TOKEN
'
' S9: 获取抓取目标点位
'
MST_SET_TOKEN = V%[101]
CallProc xyzGetGraspPose()
CallProc CheckErrorCode()
IF MST_POSE_NUM < 1
DELAY 5
GOTO *MAIN_LOOP
ENDIF
'
' S10: 运动到抓取点位
'
' 首先走到抓取点位上方
MOVEX A=3, AC=0, SM=0, M1X, L, (MST_POSE_X,MST_POSE_Y,MST_POSE_Z+100,MST_POSE_A,MST_POSE_B,MST_POSE_C),R=100.0,MS
' 抓取
MOVEX A=1P, AC=0, SM=0, M1X, L, (MST_POSE_X,MST_POSE_Y,MST_POSE_Z,MST_POSE_A,MST_POSE_B,MST_POSE_C),R=100.0,MS
SET O1
'
' S11: 运动到放置位姿
'
' 首先走到抓取点位上方
MOVEX A=3, AC=0, SM=0, M1X, L, (MST_POSE_X,MST_POSE_Y,MST_POSE_Z+200,MST_POSE_A,MST_POSE_B,MST_POSE_C),R=100.0,MS
' 走到放置位姿
' 放置位姿需要提前示教好
MOVEX A=1P, AC=0, SM=0, M1X, L, (100.0,200.0,300.0,0.0,0.0,0.0),R=100.0,MS
RESET O1
GOTO *MAIN_LOOP
END
坐标移动二次定位模板
MZ04-01-A.002
INCLUDE "XYZSETUP"
'
' S1: 初始化
'
' 初始化
CallProc MasterInit()
' 关闭用户任务300
KILLMCR 300, 0, 10000
DELAY 2
' 启动用户任务300
FORKMCR 300, 10000
DELAY 2
' io设置
RESET O1
RESET O2
'
' S2: 连接到Max
'
' 设置服务端ip地址(ip地址的最后一段)
MST_IP = 101
' 设置端口号
MST_PORT = 11111
CallProc xyzMasterConnect()
' 切换任务流图,根据需要取消注释
' MST_TASK_CODENAME = "cart_repo.t"
' CallProc xyzSwitchTask()
' CallProc CheckErrorCode()
' 重置任务
CallProc xyzResetTask()
CallProc CheckErrorCode()
'
' S3: 切换成当前工件
'
' 视觉服务id
MST_VS_ID = 0
' 工件代号
MST_ITEM_CODENAME = "item1"
CallProc xyzSwitchItem()
CallProc CheckErrorCode()
'
' S4: 运动到Home点
'
' 需要提前示教Home点
MOVEX A=1P, AC=0, SM=0, M1X, P, (100.0,200.0,300.0,0.0,0.0,0.0),R=100.0,MS
*MAIN_LOOP
'
' S5+S6: 请求+获取抓取目标点位
'
MST_VS_ID = 0
CallProc xyzCalculateGraspPose()
CallProc CheckErrorCode()
'
' S7: 判断是否识别到工件
'
IF MST_POSE_NUM < 1
'
' S15: 没有识别到工件,机械臂外的相机切换识别隔板
'
' set vs_id
MST_VS_ID = 0
' set item_codename
MST_ITEM_CODENAME = "board"
CallProc xyzSwitchItem()
CallProc CheckErrorCode()
'
' S16+S17: 请求+获取隔板抓取位姿
'
MST_VS_ID = 0
CallProc xyzCalculateGraspPose()
CallProc CheckErrorCode()
IF MST_POSE_NUM < 1
' 未识别到隔板的处理
GOTO *ERROR_EXIT
ENDIF
'
' S18: 运动到隔板抓取位姿,并抓取隔板
'
' 首先走到隔板上方
MOVEX A=3, AC=0, SM=0, M1X, L, (MST_POSE_X,MST_POSE_Y,MST_POSE_Z+100,MST_POSE_A,MST_POSE_B,MST_POSE_C),R=100.0,MS
' 抓隔板
MOVEX A=1P, AC=0, SM=0, M1X, L, (MST_POSE_X,MST_POSE_Y,MST_POSE_Z,MST_POSE_A,MST_POSE_B,MST_POSE_C),R=100.0,MS
SET O1
'
' S19: 运动到隔板的放置位姿
'
' 首先走到隔板上方
MOVEX A=3, AC=0, SM=0, M1X, L, (MST_POSE_X,MST_POSE_Y,MST_POSE_Z+200,MST_POSE_A,MST_POSE_B,MST_POSE_C),R=100.0,MS
' 走到隔壁放置位姿
' 需要提前示教好放置位姿
MOVEX A=1P, AC=0, SM=0, M1X, L, (100.0,200.0,300.0,0.0,0.0,0.0),R=100.0,MS
RESET O1
'
' S20: 机械臂外的相机切换成识别当前工件
'
' set vs_id
MST_VS_ID = 0
' set item_codename
MST_ITEM_CODENAME = "item1"
CallProc xyzSwitchItem()
CallProc CheckErrorCode()
ELSE
'
' S8: 运动到拍照位姿
' 需要提前示教好拍照位姿
MOVEX A=1P, AC=0, SM=0, M1X, L, (100.0,200.0,300.0,0.0,0.0,0.0),R=100.0,MS
'
' S9: 发送拍照位姿
'
CallProc xyzSendCurrentCartPose()
CallProc CheckErrorCode()
'
' S10: 机械臂上的相机切换成识别当前工件
'
' set vs_id
MST_VS_ID = 1
' set item_codename
MST_ITEM_CODENAME = "item1"
CallProc xyzSwitchItem()
CallProc CheckErrorCode()
'
' S11+S12: 机械臂上的相机请求+获取工件的抓取位姿
'
MST_VS_ID = 1
CallProc xyzCalculateGraspPose()
CallProc CheckErrorCode()
IF MST_POSE_NUM < 1
GOTO *ERROR_EXIT
ENDIF
'
' S13: 运动到抓取点位
'
' 首先走到抓取点位上方
MOVEX A=3, AC=0, SM=0, M1X, L, (MST_POSE_X,MST_POSE_Y,MST_POSE_Z+100,MST_POSE_A,MST_POSE_B,MST_POSE_C),R=100.0,MS
' 抓取
MOVEX A=1P, AC=0, SM=0, M1X, L, (MST_POSE_X,MST_POSE_Y,MST_POSE_Z,MST_POSE_A,MST_POSE_B,MST_POSE_C),R=100.0,MS
SET O2
'
' S14: 运动到放置位姿
'
' 先走到抓取点位上方
MOVEX A=3, AC=0, SM=0, M1X, L, (MST_POSE_X,MST_POSE_Y,MST_POSE_Z+200,MST_POSE_A,MST_POSE_B,MST_POSE_C),R=100.0,MS
' 走到放置位姿
' 放置位姿需要提前示教好
MOVEX A=1P, AC=0, SM=0, M1X, L, (100.0,200.0,300.0,0.0,0.0,0.0),R=100.0,MS
RESET O2
ENDIF
GOTO *MAIN_LOOP
*ERROR_EXIT
STOP
END
轨迹移动同步模板
MZ04-01-A.003
INCLUDE "XYZSETUP"
'
' S1: 初始化
'
' 初始化
CallProc MasterInit()
' 关闭用户任务300
KILLMCR 300, 0, 10000
DELAY 2
' 启动用户任务300
FORKMCR 300, 10000
DELAY 2
' io设置
RESET O1
'
' S2: 连接到Max
'
' 设置服务端ip地址(ip地址的最后一段)
MST_IP = 101
' 设置端口号
MST_PORT = 11111
CallProc xyzMasterConnect()
' 切换任务流图,根据需要取消注释
' MST_TASK_CODENAME = "traj_sync.t"
' CallProc xyzSwitchTask()
' CallProc CheckErrorCode()
' 重置任务
CallProc xyzResetTask()
CallProc CheckErrorCode()
'
' S3: 切换成当前工件
'
' set vs_id
MST_VS_ID = 0
' set item_codename
MST_ITEM_CODENAME = "item1"
CallProc xyzSwitchItem()
CallProc CheckErrorCode()
'
' S4: 运动到Home点
'
' 需要提前示教Home点
MOVEX A=1P, AC=0, SM=0, M1X, P, (100.0,200.0,300.0,0.0,0.0,0.0),R=100.0,MS
*MAIN_LOOP
'
' S5: 请求抓取和放置规划
'
' set vs_id
MST_VS_ID = 0
CallProc xyzReqPickPlace()
CallProc CheckErrorCode()
'
' S6: 获取 pick-in 轨迹
'
' set vs_id
MST_VS_ID = 0
CallProc xyzGetPickIn()
CallProc CheckErrorCode()
'
' S7: 检查是否识别到工件
'
IF MST_POSE_NUM < 1
GOTO *ERROR_EXIT
ENDIF
'
' S8: 执行 pick-in 轨迹
'
CallProc xyzExecPickInTraj()
SET O1
'
' S9: 获取 pick-out 轨迹
'
' set vs_id
MST_VS_ID = 0
CallProc xyzGetPickOut()
CallProc CheckErrorCode()
'
' S10: 执行 pick-out 轨迹
'
CallProc xyzExecPickOutTraj()
'
' S11: 获取 place-in 轨迹
'
' set vs_id
MST_VS_ID = 0
CallProc xyzGetPlaceIn()
CallProc CheckErrorCode()
'
' S12: 执行 place-in 轨迹
'
CallProc xyzExecGeneralTraj()
RESET O1
'
' S13: 获取 place-out 轨迹
'
' set vs_id
MST_VS_ID = 0
CallProc xyzGetPlaceOut()
CallProc CheckErrorCode()
'
' S14: 执行 place-out 轨迹
'
CallProc xyzExecGeneralTraj()
GOTO *MAIN_LOOP
*ERROR_EXIT
STOP
END
轨迹移动异步模板
MZ04-01-A.004
INCLUDE "XYZSETUP"
'
' S1: 初始化
'
' 初始化
CallProc MasterInit()
' 关闭用户任务300
KILLMCR 300, 0, 10000
DELAY 2
' 启动用户任务300
FORKMCR 300, 10000
DELAY 2
' io设置
RESET O1
'
' S2: 连接到Max
'
' 设置服务端ip地址(ip地址的最后一段)
MST_IP = 101
' 设置端口号
MST_PORT = 11111
CallProc xyzMasterConnect()
' 切换任务流图,根据需要取消注释
' MST_TASK_CODENAME = "traj_async.t"
' CallProc xyzSwitchTask()
' CallProc CheckErrorCode()
' 重置任务
CallProc xyzResetTask()
CallProc CheckErrorCode()
'
' S3: 切换成当前工件
'
' set vs_id
MST_VS_ID = 0
' set item_codename
MST_ITEM_CODENAME = "item1"
CallProc xyzSwitchItem()
CallProc CheckErrorCode()
'
' S4: 运动到Home点
'
' 需要提前示教Home点
MOVEX A=1P, AC=0, SM=0, M1X, P, (100.0,200.0,300.0,0.0,0.0,0.0),R=100.0,MS
'
' S5: 请求抓取和放置规划
'
' set vs_id
MST_VS_ID = 0
CallProc xyzReqPickPlace()
CallProc CheckErrorCode()
*MAIN_LOOP
'
' S6: 获取 pick-in 轨迹
'
' set vs_id
MST_VS_ID = 0
CallProc xyzGetPickIn()
CallProc CheckErrorCode()
'
' S7: 检查是否识别到工件
'
IF MST_POSE_NUM < 1
GOTO *ERROR_EXIT
ENDIF
'
' S8: 执行 pick-in 轨迹
'
CallProc xyzExecPickInTraj()
SET O1
'
' S9: 获取 pick-out 轨迹
'
' set vs_id
MST_VS_ID = 0
CallProc xyzGetPickOut()
CallProc CheckErrorCode()
'
' S10: 执行 pick-out 轨迹
'
CallProc xyzExecPickOutTraj()
'
' S11: 请求下一次的抓取和放置规划
'
' set vs_id
MST_VS_ID = 0
CallProc xyzReqPickPlace()
CallProc CheckErrorCode()
'
' S12: 获取本次 place-in 轨迹
'
' set vs_id
MST_VS_ID = 0
CallProc xyzGetPlaceIn()
CallProc CheckErrorCode()
'
' S13: 执行本次 place-in 轨迹
'
CallProc xyzExecGeneralTraj()
RESET O1
'
' S14: 获取本次 place-out 轨迹
'
' set vs_id
MST_VS_ID = 0
CallProc xyzGetPlaceOut()
CallProc CheckErrorCode()
'
' S15: 执行本次 place-out 轨迹
'
CallProc xyzExecGeneralTraj()
GOTO *MAIN_LOOP
*ERROR_EXIT
STOP
END