API 说明 ============================ fanuc 工控机主控支持的 API ++++++++++++++++++++++++++++++++++++++++++ +--------+-------------------------+----------+ | 指令号 | 命令 | 支持情况 | +========+=========================+==========+ | 100 | 获取机械臂程序版本号 | 支持 | +--------+-------------------------+----------+ | 101 | 发送速度数据 | 支持 | +--------+-------------------------+----------+ | 102 | 发送加速度数据 | 支持 | +--------+-------------------------+----------+ | 103 | 发送圆滑过渡参数 | 支持 | +--------+-------------------------+----------+ | 104 | 发送工具坐标系(TCP)参数 | 支持 | +--------+-------------------------+----------+ | 105 | 设置数字量输出 | 支持 | +--------+-------------------------+----------+ | 106 | SetJointsMovej | 支持 | +--------+-------------------------+----------+ | 107 | SetCartMovel | 支持 | +--------+-------------------------+----------+ | 108 | SetJoinsMovel | 支持 | +--------+-------------------------+----------+ | 109 | SetCartMovej | 支持 | +--------+-------------------------+----------+ | 110 | MovejSequence | 支持 | +--------+-------------------------+----------+ | 111 | MovelSequence | 支持 | +--------+-------------------------+----------+ | 112 | SetJointsMovejDo | 不支持 | +--------+-------------------------+----------+ | 113 | SetCartMovelDo | 不支持 | +--------+-------------------------+----------+ | 114 | SetJointsMovelDo | 不支持 | +--------+-------------------------+----------+ | 115 | SetJointsMovejGroupDo | 不支持 | +--------+-------------------------+----------+ | 116 | SetCartMovelGroupDo | 不支持 | +--------+-------------------------+----------+ | 117 | SetJointsMovelGroupDo | 不支持 | +--------+-------------------------+----------+ | 118 | MovelUntil | 支持 | +--------+-------------------------+----------+ | 119 | 获取数字量输入状态 | 支持 | +--------+-------------------------+----------+ | 120 | 获取数字量输出状态 | 支持 | +--------+-------------------------+----------+ | 121 | 获取模拟量输入口数值 | 不支持 | +--------+-------------------------+----------+ | 122 | 获取机械臂当前角度 | 支持 | +--------+-------------------------+----------+ | 123 | 获取机械臂当前位姿 | 支持 | +--------+-------------------------+----------+ | 200 | 机械臂后台发送状态 | 支持 | +--------+-------------------------+----------+ fanuc 机械臂主控支持的 API +++++++++++++++++++++++++++++++++++ XYZ Studio Max 1.5.4 及更新版本,请不要在用户的机器人程序中使用以下地址的寄存器: - R寄存器不要使用 R[1~100] - PR寄存器不要使用 PR[1~40] - SR寄存器不要使用 SR[1~12] XYZ Studio Max 1.5.4 及更新版本,Fanuc寄存器占用情况具体如下: +-------------------------------------------------------------------------------------------------------------------+ | R寄存器 | +------------+---------------------------------------------------------------------------------+--------------------+ | 寄存器地址 | 含义 | 说明(用户是否可写) | +------------+---------------------------------------------------------------------------------+--------------------+ | R[1~4] | 内部占用 | x | +------------+---------------------------------------------------------------------------------+--------------------+ | R[5] | 内部通讯标志位 | read only | +------------+---------------------------------------------------------------------------------+--------------------+ | R[6] | 内部占用 | x | +------------+---------------------------------------------------------------------------------+--------------------+ | R[7] | 心跳周期(单位s),默认会设置为600s,一般情况下不要修改,如需修改请联系支持人员。 | √ | +------------+---------------------------------------------------------------------------------+--------------------+ | R[8~9] | 前台 XYZ_EXECTRAJ中占用 | x | +------------+---------------------------------------------------------------------------------+--------------------+ | R[10] | 上位机返回的错误代码 | read only | +------------+---------------------------------------------------------------------------------+--------------------+ | R[11] | 上位机返回的token值 | read only | +------------+---------------------------------------------------------------------------------+--------------------+ | R[12] | (grasp_pose/object_pose/轨迹等)的点位数量 | read only | +------------+---------------------------------------------------------------------------------+--------------------+ | R[13] | pipeline num | read only | +------------+---------------------------------------------------------------------------------+--------------------+ | R[14] | register num | read only | +------------+---------------------------------------------------------------------------------+--------------------+ | R[15~19] | 前台 XYZ_EXECTRAJ中占用 | x | +------------+---------------------------------------------------------------------------------+--------------------+ | R[20~49] | 轨迹中的way_point_type值 | x | +------------+---------------------------------------------------------------------------------+--------------------+ | R[50~59] | 指令XYZ_USR_CMD的10个int输入参数 | √ | +------------+---------------------------------------------------------------------------------+--------------------+ | R[60~69] | 指令XYZ_USR_CMD的10个real输入参数 | √ | +------------+---------------------------------------------------------------------------------+--------------------+ | R[70~79] | 指令XYZ_USR_CMD的10个int输出值 | read only | +------------+---------------------------------------------------------------------------------+--------------------+ | R[80~89] | 指令XYZ_USR_CMD的10个real输出值 | read only | +------------+---------------------------------------------------------------------------------+--------------------+ | R[90~95] | 指令XYZ_C_G_POSE和XYZ_C_O_POSE的6个int输出值 | read only | +------------+---------------------------------------------------------------------------------+--------------------+ | R[96] | 前台 XYZ_EXECTRAJ中占用 | x | +------------+---------------------------------------------------------------------------------+--------------------+ | R[97~100] | 内部预留,请勿使用 | x | +------------+---------------------------------------------------------------------------------+--------------------+ +----------------------------------------------------------------------------------+ | PR寄存器 | +------------+------------------------------------------------+--------------------+ | 寄存器地址 | 含义 | 说明(用户是否可写) | +------------+------------------------------------------------+--------------------+ | PR[1] | 内部占用 | x | +------------+------------------------------------------------+--------------------+ | PR[2] | 指令XYZ_USR_CMD的关节输出值 | read only | +------------+------------------------------------------------+--------------------+ | PR[3] | 指令XYZ_USR_CMD的关节输入参数 | √ | +------------+------------------------------------------------+--------------------+ | PR[4] | 用来设定轨迹移动中,笛卡尔坐标点的Config参考值 | √ | +------------+------------------------------------------------+--------------------+ | PR[5] | grasp_pose/object_pose/place_pose等 | read only | +------------+------------------------------------------------+--------------------+ | PR[6] | 指令XYZ_USR_CMD的笛卡尔坐标输出值 | read only | +------------+------------------------------------------------+--------------------+ | PR[7] | 指令XYZ_USR_CMD的笛卡尔坐标输入参数 | √ | +------------+------------------------------------------------+--------------------+ | PR[8~9] | 内部预留,请勿使用 | x | +------------+------------------------------------------------+--------------------+ | PR[10~39] | 轨迹点 | read only | +------------+------------------------------------------------+--------------------+ | PR[40] | 内部预留,请勿使用 | x | +------------+------------------------------------------------+--------------------+ +----------------------------------------------------------------------+ | SR寄存器 | +------------+------------------------------------+--------------------+ | 寄存器地址 | 含义 | 说明(用户是否可写) | +------------+------------------------------------+--------------------+ | SR[1] | object_name | read only | +------------+------------------------------------+--------------------+ | SR[2~6] | 指令XYZ_USR_CMD的5个字符串输入参数 | √ | +------------+------------------------------------+--------------------+ | SR[7~11] | 指令XYZ_USR_CMD的5个字符串输出值 | read only | +------------+------------------------------------+--------------------+ | SR[12] | 内部预留,请勿使用 | x | +------------+------------------------------------+--------------------+ 以下为XYZ Studio Max 1.5.4 及更新版本的 API .. function:: RUN XYZ_BKGD :noindex: 运行后台程序 后台程序会和工控机进行通信连接和收发数据。连接是否成功的的状态会写到R[5]中,成功会给R[5]赋值为1,失败则R[5]赋值为0。不过R[5]只在运行了XYZ_BAKG以后才是真实值,如果强制终止程序,则R[5]为之前的遗留值。 .. function:: CALL XYZ_ABT_BKGD :noindex: 中止后台程序XYZ_BKGD的运行 中止时也会关闭后台套接字和工控机的连接。 .. function:: CALL XYZ_REG_COM :noindex: 初始化寄存器注释程序 必须在初始化的时候运行该程序 .. function:: CALL XYZ_CK_ERR :noindex: 检查指令执行后收到的Max错误代码,如果有错误则机器人会报错停机 调用发送给Max的指令后,不可以直接使用指令的返回值,必须调用 CALL XYZ_CK_ERR 判断Max是否返回错误。 .. function:: CALL XYZ_SW_TA(task_codename) :noindex: 切换任务 :param task_codename: 任务代号, 如 '1.t' :type task_codename: string .. function:: CALL XYZ_SW_TOOL(tool_id) :noindex: 切换工具 :param tool_id: 工具id :type tool_id: INT .. function:: CALL XYZ_C_V_CMD(vs_id, vision_codename) :noindex: 呼叫视觉 :param vs_id: 视觉服务 id :type vision_service_id: INT :param vision_codename: 呼叫视觉的指令代号 :type vision_codename: string .. function:: CALL XYZ_R_G_POSE(vs_id) :noindex: 请求抓取目标点位 返回的token值存放在R[11]中 :param vs_id: 视觉服务id :type vs_id: INT .. function:: CALL XYZ_G_G_POSE(token) :noindex: 获取抓取目标点位 返回的“当前可供抓取的点位数量”存放在R[12]中 返回的运动流程编号(pipeline_num)存放在R[13]中 返回的抓取序号(register_num)存放在R[14]中 返回的6个int值存放在R[90]~R[95]中 返回的抓取位姿存放在PR[5]中 :param token: “请求抓取目标点位”中返回的token :type token: INT .. function:: CALL XYZ_R_O_POSE(vs_id) :noindex: 请求物体位姿 返回的token值存放在R[11]中 :param vs_id: 视觉服务id :type vs_id: INT .. function:: CALL XYZ_G_O_POSE(token) :noindex: 获取物体位姿 返回的“当前物体位姿个数”存放在R[12]中 返回的“物体名称”放在SR[1]中 返回的6个int值存放在R[90]~R[95]中 返回的物体位姿存放在PR[5]中 :param token: “请求物体位姿”中返回的token :type token: INT .. function:: CALL XYZ_RESET_TA() :noindex: 重置任务 .. function:: CALL XYZ_S_JOINTS(rgx_number) :noindex: 发送特定关节角,需要注意上位机接收到的J3是J2/J3干涉角,而不是示教器上的J3 :param rgx_number: PR寄存器号,请从41及之后开始使用,且该PR寄存器类型需要是关节型 :type rgx_number: INT .. function:: CALL XYZ_S_C_POSE(rgx_number) :noindex: 发送特定笛卡尔位姿 :param rgx_number: PR寄存器号,请从41及之后开始使用,且该PR寄存器类型需要是正交型 :type rgx_number: INT .. function:: CALL XYZ_S_EXT_J(rgx_number) :noindex: 发送机器扩展轴坐标 :param rgx_number: PR寄存器号,请从41及之后开始使用,且该PR寄存器类型需要是关节型且具有扩展轴才可以。后台提取第7~9轴的数据进行发送。 :type rgx_number: INT .. function:: CALL XYZ_R_PICPLA(vs_id) :noindex: 请求抓放规划 :param vs_id: 视觉服务id :type vs_id: INT .. function:: CALL XYZ_G_PICIN(vs_id) :noindex: 获取取料入框轨迹 返回的“轨迹中的点位数量”存放在R[12]中 返回的运动流程编号(pipeline_num)存放在R[13]中 返回的抓取序号(register_num)存放在R[14]中 返回的轨迹点和轨迹点位姿类型分别存放在PR[10~39] 和 R[20~49] 中,PR[10~39]的Config信息来源于PR[4]。 用户可以通过调用 CALL XYZ_EXECTRAJ(2) 来执行这段轨迹。 如果执行轨迹过程中报“位置形态信息不一致”或者“超行程错误”,则需要在合适位置示教PR[4]。 :param vs_id: 视觉服务id :type vs_id: INT .. function:: CALL XYZ_G_PICOUT(vs_id) :noindex: 获取取料出框轨迹 返回的“轨迹中的点位数量”存放在R[12]中 返回的运动流程编号(pipeline_num)存放在R[13]中 返回的抓取序号(register_num)存放在R[14]中 返回的轨迹点和轨迹点位姿类型分别存放在PR[10~39] 和 R[20~49] 中,PR[10~39]的Config信息来源于PR[4]。 用户可以通过调用 CALL XYZ_EXECTRAJ(3) 来执行这段轨迹。 如果执行轨迹过程中报“位置形态信息不一致”或者“超行程错误”,则需要在合适位置示教PR[4]。 :param vs_id: 视觉服务id :type vs_id: INT .. function:: CALL XYZ_G_PLAIN(vs_id) :noindex: 获取放料入框轨迹 返回的“轨迹中的点位数量”存放在R[12]中 返回的运动流程编号(pipeline_num)存放在R[13]中 返回的抓取序号(register_num)存放在R[14]中 返回的轨迹点和轨迹点位姿类型分别存放在PR[10~39] 和 R[20~49] 中,PR[10~39]的Config信息来源于PR[4]。 用户可以通过调用 CALL XYZ_EXECTRAJ(4) 来执行这段轨迹。 如果执行轨迹过程中报“位置形态信息不一致”或者“超行程错误”,则需要在合适位置示教PR[4]。 :param vs_id: 视觉服务id :type vs_id: INT .. function:: CALL XYZ_G_PLAOUT(vs_id) :noindex: 获取放料出框轨迹 返回的“轨迹中的点位数量”存放在R[12]中 返回的运动流程编号(pipeline_num)存放在R[13]中 返回的抓取序号(register_num)存放在R[14]中 返回的轨迹点和轨迹点位姿类型分别存放在PR[10~39] 和 R[20~49] 中,PR[10~39]的Config信息来源于PR[4]。 用户可以通过调用 CALL XYZ_EXECTRAJ(5) 来执行这段轨迹。 如果执行轨迹过程中报“位置形态信息不一致”或者“超行程错误”,则需要在合适位置示教PR[4]。 :param vs_id: 视觉服务id :type vs_id: INT .. function:: CALL XYZ_U_T_POSE(vs_id) :noindex: 料箱重定位 :param vs_id: 视觉服务id :type vs_id: INT .. function:: CALL XYZ_U_OBJ_IH() :noindex: 工件在手上的二次定位 返回的放置位姿存放在PR[5]中 .. function:: CALL XYZ_SW_ITEM(vs_id,item_codename) :noindex: 切换工件 :param vs_id: 视觉服务id :type vs_id: INT :param item_codename: 工件代号 :type item_codename: string .. function:: CALL XYZ_C_G_POSE(vs_id) :noindex: 计算抓取目标点位,该指令等价于 CALL XYZ_R_G_POSE + CALL XYZ_G_G_POSE 返回的“当前可供抓取的点位数量”存放在R[12]中 返回的运动流程编号(pipeline_num)存放在R[13]中 返回的抓取序号(register_num)存放在R[14]中 返回的6个int值存放在R[90]~R[95]中 返回的抓取位姿存放在PR[5]中 :param vs_id: 视觉服务id :type vs_id: INT .. function:: CALL XYZ_C_O_POSE(vs_id) :noindex: 计算物体位姿,该指令等价于 CALL XYZ_R_O_POSE + CALL XYZ_G_O_POSE 返回的“当前物体位姿个数”存放在R[12]中 返回的“物体名称”放在SR[1]中 返回的6个int值存放在R[90]~R[95]中 返回的物体位姿存放在PR[5]中 :param vs_id: 视觉服务id :type vs_id: INT .. function:: CALL XYZ_USR_CMD() :noindex: 用户自定义指令,用于基础指令不支持的情况下,配合任务流图完成用户特定功能。各个参数的含义取决于任务流图中设定的输入输出。 该指令不直接带参数,所有输入输出均直接读写寄存器。 指令输入: - 5个字符串输入:SR[2~6],没用到的值请初始化为空或者0 - 10个int输入:R[50~59],没用到的值请初始化为0。不可以在这些寄存器上输入小数值,如12.1,否则会被解析成0,造成数据混乱! - 10个real输入:R[60~69],没用到的值请初始化为0。不可以在这些寄存器上输入整数值,如12, 否则会被解析成0,造成数据混乱! - 1个关节输入:PR[3],需要确保PR是关节类型,需要注意上位机接收到的J3是J2/J3干涉角,而不是示教器上的J3 - 1个笛卡尔输入:PR[7],需要确保PR为正交类型 如果PR[3]不是关节类型或者PR[7]不是正交类型,则运行该指令会报错“参数还没有设定”错误! 指令返回: - 5个字符串输出:SR[7~11] - 10个int输出:R[70~79] - 10个real输出:R[80~89] - 1个关节输出:PR[2],需要注意下发给机器人的J3体现在机器人上是J2/J3干涉角 - 1个笛卡尔输出:PR[6],PR[6]要提前设置好Config值,否则可能报“位置形态信息不一致”或者“超行程错误” .. function:: CALL XYZ_EXECTRAJ(traj_flag) :noindex: 执行轨迹 如果执行轨迹时速度/加速度/圆滑不合适,可以在前台根据需要修改 XYZ_EXECTRAJ 程序。 如果执行的轨迹中有笛卡尔坐标点,则坐标点的Config信息来源于PR[4],需要提前示教好PR[4],否则会报“位置形态信息不一致”或者“超行程错误” :param traj_flag: 执行轨迹标志位。若为 2,执行XYZ_G_PICIN轨迹;若为 3,执行XYZ_G_PICOUT轨迹;若为 4,执行XYZ_G_PLAIN轨迹;若为 5,执行XYZ_G_PLAOUT轨迹。 .. function:: CALL XYZ_S_SR(sreg_id, str_value) :noindex: 设置SR寄存器的值 这是个功能函数,不涉及和Max的直接通信,可以用到CALL XYZ_USR_CMD()之前设置输入的SR寄存器的值。 由于SR寄存器不能直接在示教器前台程序中直接定义字符串,所以提供这个功能函数方便用户使用。 如 CALL XYZ_S_SR(1, 'hello'),这会将SR[1]的内容设置为'hello' :param sreg_id: SR寄存器号 :type sreg_id: INT :param str_value: 字符串值 :type str_value: string