跳到主要内容

10.6 寄存器

10.6.1 寄存器概述

寄存器表示机器人内的可用变量,一般用来与外部设备进行数据通信,从而达到控制机器人、获取机器人状态的目的。寄存器也可以在当前 RL 工程中作为变量使用,支持两种操作寄存器变量的方式:指令式和赋值式。

注意:

  • 寄存器是机器人本身的概念,而不是属于总线设备。某个寄存器,可以在其新建或者编辑时,指定绑定到哪个总线设备上,从而进行通信。

  • 每个寄存器占 2 个字节。不同类型的变量占用的寄存器数量不同。

10.6.2 寄存器参数配置

在“通信”→“寄存器”页面,可查看现有寄存器,以及进行添加、编辑、删除操作。

10.6.2 1

寄存器列表

寄存器导入导出按钮:点击后,切换到寄存器导入导出页面,进行导入、导出操作。

寄存器操作按钮: 从左至右依次是:新建、编辑、删除。

10.6.2 2

寄存器列表各列参数说明如下表:

参数 说明

名称

在 RL 中,可以通过该名称,访问寄存器变量。
注意:列表中不可重名,也不可以和 RL 中任何列表中的变量重名,否则 RL 将存在变量冲突,可能产生不可预知的后果。

类型

目前支持六种:bit、byte、bool、int16、float、int32。

起始寄存器

同一总线设备内的同一读写属性的寄存器地址不可交叉占用。另外,Modbus 总线设备内不同读写属性的寄存器地址也不可交叉占用。
例如:定义某寄存器占用 41000~41003,就不能定义另一个寄存器从 41002 开始。

读写

读写属性,表示该寄存器在机器人的视角(而不是主站或从站视角)下是对其进行读操作还是写操作。只写寄存器用于机器人对外输出状态;只读寄存器用于机器人获取外部设备发过来的命令。

是否保持

当寄存器设置为保持时,该寄存器值在机器人重启、关机或者断电、RL 停止时,会保持在非易失的存储介质上。当机器人重新上电或者 RL 重新运行时,此寄存器的值就会恢复成关机、RL 停止运行前的保持值。

长度

长度表示该变量的数量。对于大于 1 的变量,可以使用数组的方式进行变量引用,下标从 1 开始。
注意:此项要区别于寄存器数量。举例:寄存器40140~40153,该变量类型为float,每个float占用2个寄存器,长度为7,因此占用的寄存器数量为2*7=14个。

位偏移

位偏移,代表bit类型寄存器映射到寄存器的位置。一个寄存器占两个字节,即16位,位偏移是指对应寄存器的位置,偏移值为1-16。创建bit类型寄存器时,如果元素个数为1时,可以设置偏移量;反之,则不可以。

字节偏移

字节偏移代表Byte类型寄存器映射到寄存器的位置。一个寄存器占两个字节即16位,而byte变量只需要8位。因此,在创建byte寄存器变量时,需要选择是映射到寄存器的低地址8位(1-8)或者高地址8位(9-16)。

结束寄存器

结束寄存器表示寄存器变量所占用的最后一个寄存器地址。在寄存器变量连续排布时,通过该值,用户可以快速了解寄存器占用的空间。
举例:可以通过此项的数值加 1,来确定下一个寄存器的起始地址。

设备名称

设备名称是“总线设备”创建时定义的名称,表示寄存器绑定到哪一个总线设备上。支持将寄存器绑定到 CC-Link、CC-Link IE Field Basic、Modbus、EtherCAT 设备上。

功能

这一列中的内容是一些固定的功能码,表示该寄存器对应的机器人功能。功能码分为只读和只写功能码,详见下文寄存器功能码章节。

10.6.3 寄存器类型

类型 说明

bit

仅占用一个寄存器某 1 位,bit 数组需要以 16 位的整数倍出现。举例:起始地址 41000 的 bit 类型寄存器,长度为 64,则占用 41000~41003 这 4 个寄存器。

byte

仅占用一个寄存器的某 8 位,可以选择占据低地址位(寄存器的前 8 位)或者高地址位(寄存器的后 8 位)。创建 byte 寄存器数组时,默认低地址位,不可变更高低地址位。

bool

占用 1 个寄存器。

int16

占用 1 个寄存器。

float

占用 2 个寄存器。

int32

占用 2 个寄存器。注意:设备类型为 PROFINET 时,不支持创建。

bit 类型寄存器的几点说明:

10.6.3 1

元素个数

位偏移。如上图所示,如果元素个数为 1,表示占用一个寄存器某一位,可以设置位偏移数量,可选值为 1-16。

bit 类型的寄存器元素个数大于 1 时,即 bit 变量数组时,不允许设置偏移数量,不允许进行功能绑定。
bit 类型的寄存器输入元素个数大于 1 时,自动隐藏偏移量选项,偏移量设置为 1。

byte 类型寄存器的几点说明:

10.6.3 2

元素个数

字节地址

如上图所示,如果元素个数为1,表示占用一个寄存器某8 位,可以设置字节地址,可选值为:低字节位(1-8)和高字节位(9-16)
byte 类型的寄存器元素个数大于1 时,即byte 变量数组,不允许设置字节地址,默认全部是低地址位。

注意:当有绑定了暂停功能的寄存器或系统 IO 没有复位时,不允许通过寄存器启动程序。

10.6.4 寄存器功能码

10.6.4.1 只读类型功能码

只读类型多用于控制信号,控制信号通常是外部设备发给机器人,指示机器人执行相应的动作。对于机器人来说,这些寄存器是只读的。目前支持的控制信号:

功能码名称

支持绑定类型

对应功能

空白

无功能,用户自定义输入。

ctrl_clear_alarm

bit/bool/byte/int16

清除伺服报警。0 到 1 上升沿:清除报警;置 0:复位。

ctrl_estop_reset

bit/bool/byte/int16

急停复位。0 到 1 上升沿:急停复位;置 0:复位。

ctrl_jjwc_A

bit/bool/byte/int16

触发类型为脉冲触发,高电平有效。信号 0→1 时,机器人停止,该信号触发的停止,不能继续运行,只能 pptomain、pptofunc 或 ppto光标后才能重新运行程序,当机器人停止后,sta_jjwc_B 信号置为 1(高电平)。信号 1→0 时,sta_jjwc_B 信号置为 0(低电平)。

ctrl_motor_off

bit/bool/byte/int16

执行下电操作。0 到 1 上升沿:下电;置 0:复位。

ctrl_motor_on

bit/bool/byte/int16

执行上电操作。0 到 1 上升沿:上电;置 0:复位。

ctrl_motor_on_off

bit/bool/byte/int16

电机上电或下电:1,上电;0,下电。

ctrl_motoron_pptomain_start

bit/bool/byte/int16

依次执行上电、程序指针到 main、启动程序。
0 到 1 上升沿:下电;置 0:复位。
触发功能码后,若示教器报警提示“程序未同步至控制器,启动失败”,请同步程序后,再次触发该功能码。

ctrl_motoron_start

bit/bool/byte/int16

依次执行上电、启动程序。
0 到 1 上升沿:下电;置 0:复位。
触发功能码后,若示教器报警提示“程序未同步至控制器,启动失败”,请同步程序后,再次触发该功能码。

ctrl_pause_motoroff

bit/bool/byte/int16

暂停程序并执行下电操作。0 到 1 上升沿:下电;置 0:复位。

ctrl_pptomain

bit/bool/byte/int16

程序指针到 main。0 到 1 上升沿:下电;置 0,复位。

ctrl_program_start

bool/byte/int16

开始运行 RL 程序。
0 到 1 上升沿:下电;置 0,复位。
触发功能码后,若示教器报警提示“程序未同步至控制器,启动失败”,请同步程序后,再次触发该功能码。

ctrl_program_start_stop

bit/bool/byte/int16

程序运行/停止。置 1:程序运行;置 0:程序停止。

ctrl_program_stop

bit/bool/byte/int16

停止运行 RL 程序。0 到 1 上升沿:下电;置 0:复位。

ctrl_set_program_speed

bit/bool/byte/int16

设置程序运行速率。输入值为速率,例:输入 10,则速率为 10。

ctrl_soft_estop

bit/bool/int16

控制机器人软急停,1:不触发软急停;0:触发软急停。

ctrl_switch_auto_motoron

bit/int16/byte/bool

先切换自动模式,然后上电。0 到 1 上升沿:下电;置 0:复位。

ctrl_switch_operation_auto

bool/byte/int16

切换自动模式。0 到 1 上升沿:切换自动;置 0:复位。

ctrl_switch_operation_auto_manu

bit/bool/byte/int16

切换自动模式和手动模式,置 1:自动模式;置 0:手动模式。

ctrl_switch_operation_manu

bit/bool/byte/int16

切手动模式。0 到 1 上升沿:切换手动;置 0:复位。

enable_safe_region01~enable_safe_region10

bit/bool/byte/int16

开启对应的安全区域。0 到 1 上升沿:开启安全区域;置 0:复位。

ext_cmd_set

bit/bool/int16

远程控制功能:下发指令见“远程控制”。

ext_request_data

int16 数组

远程控制功能:指令功能码。数组,固定长度 8 寄存器。

ext_reset

bit/bool/int16

远程控制功能:整体功能重置。见“远程控制”。

ext_resp_get

bit/bool/int16

远程控制功能:确认并清除上一条命令的响应。

ctrl_estop_reset_and_clear_alarm

bit/bool/byte/int16

复位急停状态并清除报警。0 到 1 上升沿:复位急停状态并清除报警;置 0:复位。

ctrl_reduced_mode

bit/bool/byte/int16

触发机器人缩减模式。0 到 1 上升沿:触发机器人缩减模式;置 0:复位。

ctrl_reset_cursor_state

bit/bool/byte/int16

重置前瞻指针变化标记(sta_cursor_state)。0 到 1 上升沿:重置 sta_cursor_state 为 0。

ctrl_change_prog

int16/int32

触发工程切换,输入值为工程切换列表中的 ID 值。

说明:以上系统寄存器,所有的系统输入均为脉冲触发,为了保证 xCore 系统正确接收外部的指令,请保证外部输入的脉冲宽度不小于 60 毫秒。

前置条件/注意事项

上电

机器人处于自动模式;
机器人无报警。

10.6.4.1 1

下电

10.6.4.1 2

程序启动

机器人处于自动模式;
存在机器人程序指针;
机器人处于上电状态;
机器人无报警。

10.6.4.1 3

程序暂停

外部设备通过寄存器发送一个程序暂停操作(不下电)。

10.6.4.1 4

急停处理

拍下急停信号或者触发外部急停时序逻辑。(注意:拍下急停后,程序会停止。同时电机下电,指针丢失,在下一次启动的时候需要先执行清报警、上电、程序到 main 指令。)

10.6.4.1 5

机器人开机启动全流程

操作顺序:
(1) 机器人切到手动模式;
(2) 清除报警(清伺服报警或者控制器错误报警);
(3) 电机上电;
(4) 指针到 main(工程越大,pptomain 指令耗时越长,建议预留 2s 的执行时间,指令执行完以后再发程序启动信号);
(5) 启动程序。

10.6.4.1 6

10.6.4.2 只写类型功能码

只写类型多用于状态信号,状态信号是指机器人对外发出的信号,对外反馈机器人的状态,包括上电状态、程序运行状态等。对于机器人来说,寄存器是只写代表可以绑定该状态信号。目前支持的状态信号有以下几种:

功能码名称

支持绑定类型

对应功能

空白

无功能,用户自定义输出。

ext_error_code

int16

远程控制功能:错误码。

ext_resp_set

bit/bool/int16

远程控制功能:指令执行完毕的响应。

ext_response_data

int16 数组

远程控制功能:需要反馈的数据。数组,固定长度 8 寄存器。

sta_alarm

bit/bool/byte/int16

伺服报警状态,1:有伺服报警;0:无报警。

sta_board_DI0~sta_board_DI3

bit/bool/byte/int16

实时输出自研 IO 板和实点 IO 每个信号的状态。

sta_board_DO0~sta_board_DO3

bit/bool/byte/int16

实时输出自研 IO 板和实点 IO 每个信号的状态。

sta_collision

bit/bool/byte/int16

碰撞检测状态,1:检测到碰撞;0:无碰撞。

sta_collision_alarm

bit/bool/byte/int16

碰撞检测报警,1:检测到碰撞;0:无碰撞;只有清除报警可清除该报警。

sta_collision_open

bit/bool/byte/int16

碰撞检测开启状态。1:碰撞检测开启;0:碰撞检测未开启。

sta_controller_is_running

bit/bool/byte/int16

控制器开机信号,1:控制器正在运行;0:控制器未运行。

sta_encoder_low_battery

bit/bool/byte/int16

编码器低电压报警状态或电池到维护保养日期报警。

sta_grease

bit/bool/byte/int16

润滑脂更换报警状态。

sta_routine_maintenance

bit/bool/byte/int16

常规维护报警状态。

sta_error_code

int16

机器人上报错误码,该错误码与机器人日志中的错误码数值相差 30000。举例,机器人日志“超出运动范围”的错误码编号 50002,通过 sta_error_code 获取的为 20002。

sta_estop

bit/bool/byte/int16

急停状态
此状态值受急停触发电平类型设置的影响,当设置为高电平时,1:当前触发急停;0:正常;当设置为低电平时,0:当前触发急停;1:正常。

sta_heartbeat

bit/bool/byte/int16

心跳信号,只写,在“设置-控制器设置”设置心跳周期。

sta_home

bit/bool/byte/int16

机器人各关节是否在 home 点,1:处于 home 点;0:不在 home 点。

sta_jjwc_B

bit/bool/byte/int16

实时状态输出。触发动作:被动触发。当 ctrl_jjwc_A 信号 0→1 时,sta_jjwc_B 信号置为 1;当 ctrl_jjwc_A 信号 1→0 时,sta_jjwc_B 信号置为 0。

sta_motor

bit/bool/byte/int16

电机上电状态,1:已上电;0:未上电。

sta_operation_mode

bit/bool/byte/int16

当前操作模式,1:自动模式;0:手动模式。

sta_program

bit/bool/byte/int16

当前是否处于程序运行状态,1:程序运行中;0:空闲。

sta_program_full

byte/int16

RL 的暂停状态,0:初始化状态;1:RL 运行中;2:HMI 暂停;3:系统 IO 暂停;4:寄存器功能码暂停;5:外部通讯暂停;6:SDK 暂停;7:Pause 指令暂停;10:急停;11:安全门;12:其他因素暂停。

sta_program_not_run

bool/byte/int16

RL 程序未运行,1:程序未运行;0:程序正在运行。

sta_program_reset

bool/byte/int16

程序复位成功信号,当程序指针在 main 函数第一行,且程序未开始运行时,输出 1;否则输出 0。

sta_program_speed

int16

查询当前程序运行速度,百分比的数值。

sta_robot_is_busy

bit/bool/byte/int16

当前机器人是否在执行 pptomain 等耗时操作,1:正在执行;0:空闲。

sta_robot_moving

bit/bool/byte/int16

代表机器人是否在运动,1:表示机器人运动中;0:表示机器人静止。
只检测 RL 程序中运动指令和 Jog 时,机器人运动状态。(注意:辨识、拖动、力控、拖动回放等情况下,机器人即使在运动,该输出也是机器人静止。)

sta_safe_door

bit/bool/byte/int16

打开安全门时,寄存器绑定状态信号输出有效;关闭安全门时,寄存器绑定状态输出无效。(高电平有效,低电平无效)。

sta_safe_jnt_pos1~sta_safe_jnt_pos8

bool/byte/int16

安全位置触发状态,1:到达安全位置;0:未到达安全位置。

sta_safe_region01~sta_safe_region10

bool/byte/int16

安全区域触发状态。1 为安全区域触发。

sta_soft_estop

bit/bool/int16

软急停状态的输出。此状态值受急停触发电平类型设置的影响,当设置为高电平时,触发软急停时此状态值为 1,未触发时值为 0;当设置为低电平时,触发软急停时此状态值为 0,未触发时值为 1。

sta_cart_pose

float 数组

查询当前机器人工具 TCP 相对于世界坐标系的值,绑定寄存器的要求:float 数组,长度为 7。

sta_cart_vel

float 数组

机器人笛卡尔速度。

sta_jnt_pose

float 数组

查询当前机器关节角度,绑定寄存器的要求:float 数组,长度为 8。

sta_jnt_trq

float 数组

查询当前机器人关节力矩,绑定寄存器的要求:float 数组,长度为 8,单位 N·m。

sta_jnt_vel

float 数组

查询当前机器人关节速度,绑定寄存器的要求:float 数组,长度为 8,单位 rad/s。

sta_tcp_pose

float 数组

机器人工具 TCP 相对于世界坐标系的值,绑定寄存器的要求:float 数组,长度为 7。

sta_tcp_vel

float 数组

机器人 TCP 速度,绑定寄存器的要求:float 数组,长度为 7。

sta_tcp_vel_mag

float

机器人 TCP 合成线速度。

sta_ext_estop

bool/byte/int16

外部急停状态。
1:外部急停状态;0:非外部急停状态。
安全板为 mini 板,且固件版本不低于 1.0.8.7。

sta_ext_jnt_pose

float 数组

查询外部轴位置。
1. 对于不同的外部轴,功能码返回数据具有不同的物理含义。
2. 目前仅支持导轨,对于导轨,返回数据表示导轨相对于标定零点的位姿。

sta_hand_estop

bool/byte/int16

手持急停状态。
1:外部急停状态;0:非外部急停状态。
安全板为 mini 板,且固件版本不低于 1.0.8.7。

sta_sys_stop_di

bit/bool/byte/int16

输出绑定系统暂停信号的值,“暂停程序”和“暂停程序 1”任意一路信号触发 sta_sys_stop_di 输出 1,两路信号都不触发时输出 0。

sta_reduced_mode

bit/bool/byte/int16

机器人是否处于缩减模式。1 为处于缩减模式。

sta_on_path

bit/bool/byte/int16

机器人当前位置是否在预设轨迹上。
1:是,如程序运行过程中或点击暂停,机器人在预设路径上。
0:否,如偏离路径(JOG 等)、点击 pptomain、重新加载工程、ppto光标后。
注意事项:
1、按下急停后,由于存在伺服震荡、下电抖动,控制器认为机器人已偏离预设轨迹,故 sta_on_path 功能码值为 0。
2、打开安全门,触发安全停止后 sta_on_path 功能码值为 0。

sta_near_path

bit/bool/byte/int16

机器人当前位置是否在预设轨迹附近。
1:是,满足偏离路径球体半径条件且满足偏离路径球体角度条件。
0:否,其他情况。
在“设置”、“控制器设置”、“高级设置”中设置偏离路径球体半径、偏离路径球体角度参数。
当偏离路径球体半径=0,偏离路径姿态角度=0 时,等同于 sta_on_path。

sta_task_state

int16/int32/byte

机器人的任务状态输出。
0:就绪;
1:JOG;
2:负载辨识;
3:动力学辨识;
4:拖动打开;
5:程序运行中;
7:RCI;
8:调试;
9:摩擦力辨识。

sta_drag

int16/int32/byte/bit/bool

机器人是否处于拖动状态(只在协作机型生效)。
0:未处于拖动状态;
1:处于拖动状态。

sta_drag_button1

int16/int32/byte/bit/bool

机器人拖动按钮 1 状态(只在协作机型生效)。
0:未按下按钮;
1:按下按钮。

sta_drag_button2

int16/int32/byte/bit/bool

机器人拖动按钮 1 状态(只在非 SR 的协作机型生效)(对于只有一个按钮的 CR 机型,按下按钮 sta_drag_button1 和 sta_drag_button2 同时输出 1)。
0:未按下按钮;
1:按下按钮。

sta_cursor_state

bit/bool/byte/int16

前瞻指针位置是否变动。
成功 pptoline/pptofunc 时,前瞻指针位置变化,为 1;
未 pptoline/pptofunc 或者使用 ctrl_reset_cursor_state 重置后,为 0。

sta_tcp_ref_base_vel_mag

float

TCP 相对机器人基坐标系的合成线速度,单位 mm/s。

sta_tcp_ref_world_vel_mag

float

TCP 相对世界坐标系的合成线速度,单位 mm/s。

sta_tcp_ref_base_pose

float 数组

TCP 相对机器人基坐标系的位姿,数组长度 7(位置 mm、四元数)。

sta_tcp_ref_world_pose

float 数组

TCP 相对机器人世界坐标系的位姿,数组长度 7(位置 mm、四元数)。

sta_robot_jnt_pos

float 数组

机器人关节位置,数组长度 7,单位 rad 或 mm。

sta_robot_jnt_vel

float 数组

机器人关节速度,数组长度 7,单位 rad/s 或 mm/s。

sta_robot_jnt_trq

float 数组

机器人关节转矩,数组长度 7,单位 N·mm。

sta_ext_jnt_pos

float 数组

附加轴关节位置,数组长度 6,单位 rad 或 mm。

sta_ext_jnt_vel

float 数组

附加轴关节速度,数组长度 6,单位 rad/s 或 mm/s。

sta_ext_jnt_trq

float 数组

附加轴关节转矩,数组长度 7,单位 N·mm。

10.6.5 RL 读写寄存器示例

控制系统提供两种方式来对寄存器进行读取、修改操作,分别是:指令式和赋值式。
指令式提供 WriteRegByNameReadRegByName 两条指令。赋值式则更直观简单些,使用操作符 =

10.6.5.1 指令式

WriteRegByName(modbus_reg[index], rl_symbol)
modbus_reg 是“通信”→“寄存器”配置的寄存器名称,可以使用 [index] 在对应寄存器的首地址再进行偏移,index 范围 [1, 寄存器最大长度],默认 index = 1

控制系统中的数据,可以通过寄存器,输出到其绑定的设备中。
举例:控制系统中定义了 int rl_value,想把它输出到外部设备,可以约定一个寄存器,比如 mtcp_wo_i 的第一个寄存器,在 RL 语言中添加一条 WriteRegByName 指令,该值将发送到 mtcp_wo_i 关联的外部设备。

10.6.5.1

ReadRegByName(modbus_reg[index], rl_symbol)
该指令与 WriteRegByName 类似,作用是将寄存器的值,更新到 RL 程序变量中。例如用来控制 RL 程序的执行流程、运动参数等。

10.6.5.2 赋值式

直接使用操作符 =,例如 mtcp_wo_i[1] = 1 是将寄存器 mtcp_wo_i 的第一个元素的值更新为 1。同理,a = mtcp_wo_i[1] 是将寄存器 mtcp_wo_i 的第一个元素的值更新到 RL 程序的变量 a 中。

10.6.6 寄存器远程控制

远程控制是一项组合功能,由 7 种不同功能的寄存器配合使用,按照特定的时序可完成复杂业务逻辑交互。外部设备可以通过远程控制功能实现机器人 Jog、更新点位、获取机器人位置、状态等功能。

寄存器功能
外部设备对机器人进行控制时,需要使用 4 种寄存器,对机器人而言属于只读寄存器。

功能码名称 属性 类型 长度 对应功能

ext_cmd_set

只读

int16/bool/bit

1

下发指令:
1、命令执行时通过将请求信号设定为 1 进行请求,当命令为 1 时才响应请求。
2、为了防止误动作,请务必将命令数据设定到数据区域后再执行。(数据暂时放到缓存区,只有该位变为 1 才响应数据)。
3、命令执行完毕后,将该位进行清除(置为 0)。

ext_reset

只读

int16/bool/bit

1

功能重置:
1、用于开启远程控制功能的信号。功能使用过程中,请始终保持该寄存器为 1 状态。
2、0 状态下功能处于停止状态。
3、接口功能发生异常进行重置或中断动作命令时也使用该信号。

ext_resp_get

只读

int16/bool/bit

1

确认并清除上一条命令的响应,重置 ext_resp_set 信号为 0。

ext_request_data

只读

int16

8

指令功能码。数组,固定长度 8 寄存器。具体功能详见功能码部分介绍。

外部设备希望获取机器人的状态时,需要使用 3 种寄存器,对机器人而言是只写寄存器。

功能码名称 属性 类型 长度 对应功能

ext_error_code

只写

int16

1

远程控制功能:错误码。

ext_resp_set

只写

int16/bool/bit

1

机器人响应控制指令后,会设定该寄存器为 1,表示指令执行完成。

ext_response_data

只写

int16

8

远程控制功能:需要反馈的数据。数组,固定长度 8 寄存器。

10.6.6.1 使用流程

7种寄存器使用配合及流程控制如下图所示。

10.6.6.1

10.6.6.2 指令格式

指令和响应分别使用 8 个寄存器实现。

命令信号 ext_request_data(占用八个寄存器,reg0 — reg7),用于指定命令和相关参数的数据信号区域。命令由多字构成:

  • 字:一个寄存器(16 位)构成。

  • 命令形式:命令最多由 8 个字构成。可根据使用的命令变化。最小的命令为 1 个字。

命令编号

命令编号1

命令编号2

……

命令编号7

响应信号 ext_response_data(占用八个寄存器,reg0 — reg7),用于获取响应的数据信号区域。响应由多字构成:

  • 字:一个寄存器(16 位)构成。

  • 响应形式:响应最多由 8 个字构成。可根据收到的命令变化。最小的响应为 1 个字。但是,如果是异常响应则固定占用 3 个字。

命令编号

响应1

响应2

……

响应7

具体可用的命令编号如下表:

命令类别

说明

命令码

命令长度

命令

响应

JOG

设置 jog 空间

1

2

3

获取 jog 空间

2

1

4

设置 jog 速度

3

2

3

获取 jog 速度

4

1

4

设置 jog 步长

5

2

3

获取 jog 步长

6

1

4

开始 jog

7

4

2

停止 jog(不带参数)

8

1

2

更新点位

9

2

2

运动到点

10

2

2

设置信息

设置工具

11

2

3

获取当前工具 id

12

1

4

设置工件

13

2

3

获取当前工件 id

14

1

4

10.6.6.3 指令详解

(1)设置 jog 空间:

命令/回复 命令码 参数1 参数2

设置 jog 空间

1

坐标系:
1:轴空间
2:世界坐标系
3:法兰坐标系
4:基坐标系
5:工具坐标系
6:工件坐标系

N/A

回复

1

设置结果:0 成功;1 失败

错误码

(2)获取 jog 空间:

命令/回复

命令码

参数1

参数2

参数3

获取 jog 空间

2

N/A

N/A

N/A

回复

2

设置结果:
0 成功;1 失败

错误码

坐标系:
1:轴空间
2:世界坐标系
3:法兰坐标系
4:基坐标系
5:工具坐标系
6:工件坐标系

(3)设置 jog 速度:

命令/回复 命令码 参数1 参数2

设置 jog 速度

3

Jog 速度(1~100)

N/A

回复

3

设置结果:0 成功;1 失败

错误码

(4)获取 jog 速度:

命令/回复

命令码

参数1

参数2

参数3

获取 jog 速度

4

N/A

N/A

N/A

回复

4

设置结果:
0 成功;1 失败

错误码

Jog 速度(1~100)

(5)设置 jog 步长:

命令/回复 命令码 参数1 参数2

设置 jog 步长

5

1:连续
2:10mm步长
3:1mm步长
4:0.1mm步长
5:0.01mm步长

N/A

回复

5

设置结果:0 成功;1 失败

错误码

(6)获取 jog 步长:

命令/回复

命令码

参数1

参数2

参数3

获取 jog 步长

6

N/A

N/A

N/A

回复

6

设置结果:
0 成功;1 失败

错误码

1:连续
2:10mm步长
3:1mm步长
4:0.1mm步长
5:0.01mm步长

(7)开始 jog:

该指令依赖命令码 1:设置 jog 空间。如果是轴空间,参数 1 的值表示的是关节编号(J1~J7,1 代表 J1,7 代表 J7);如果是笛卡尔空间,参数 1 的值表示的是(x,y,z,a,b,c,elb)的编号(1 表示 x,7 表示 elb)。

命令/回复

命令码

参数1

参数2

开始 jog

7

运行方式:
轴空间表示关节编号;
笛卡尔空间(x,y,z,a,b,c,elb)

Jog 方向:
1:负方向;
2:正方向

回复

7

设置结果:0 成功;1 失败

错误码

(8)停止 jog:

命令/回复

命令码

参数1

停止 jog

8

N/A

回复

8

设置结果:0 成功;1 失败

(9)更新点位:

命令/回复 命令码 参数1 参数2

更新点位

9

RL 工程点位列表中的编号

N/A

回复

9

设置结果:0 成功;1 失败

错误码

(10)运动到点位:

命令/回复

命令码

参数1

参数2

运动到点位

10

运动方式:
1:MoveAbsJ;
2:MoveJ;
3:MoveL

RL 工程点位列表中的编号

回复

10

设置结果:0 成功;1 失败

错误码

(11)设置当前工具:

命令/回复 命令码 参数1 参数2

设置当前工具

11

RL 工程工具列表中的编号

N/A

回复

11

设置结果:0 成功;1 失败

错误码

(12)获取当前工具的编号:

命令/回复

命令码

参数1

参数2

参数3

获取当前工具的编号

12

N/A

N/A

N/A

回复

12

设置结果:0 成功;1 失败

错误码

当前工具编号

(13)设置当前工件:

命令/回复 命令码 参数1 参数2

设置当前工件

13

RL 工程工件列表中的编号

N/A

回复

13

设置结果:0 成功;1 失败

错误码

(14)获取当前工件的编号:

命令/回复

命令码

参数1

参数2

参数3

获取当前工件的编号

14

N/A

N/A

N/A

回复

14

设置结果:0 成功;1 失败

错误码

当前工件编号

10.6.6.4 错误码

在进行命令设置时,如参数错误、机器人状态不匹配或者其他情况下,可能发生设置失败。此时可以通过错误码观察机器人出现问题。

控制系统有三种错误码:

  • 指令执行结果的错误码(ext_response_data 中)(命令执行结果)。

  • ext_error_code 错误码(命令无法执行,比如机器人忙碌,远程控制标志位不正确等)。

  • sta_error_code,机器人错误码(jog 运动过程中出现的停止报错,可以读这个寄存器)。

正常情况下用户需要按照流程来使用错误码:
发完执行指令之后(ext_cmd_set=1),先读 ext_error_code,如果没有错误码,那么再读 ext_response_data 的返回值,如果返回值不为零,那么就读 ext_response_data 的错误码。
对于运动操作(jog 和运动到点位),如果上面返回值都成功了,还应该读一下 sta_error_code,看运动中是否有错导致的停止(比如奇异点和超限位)。

ext_error_code 含义:

错误码 含义 备注

01

不支持的命令

02

参数不合法

03

控制标志不正确

需要确认:ExtRespSet 为 0,ExtRespSet 为 1

04

机器人忙碌

机器人正在执行指令中,禁止响应别的指令

05

找不到对应的编号

工具、点位、工件的 id

06

点位类型和运动类型不匹配

针对运动至到某个点的指令,点位类型和运动类型不匹配,比如关节空间只能用 MoveAbsJ 指令,笛卡尔类型点只能用 MoveJ 或 MoveL

07

输入的轴数和机型不匹配

11

手自动模式不对

12

机器人状态不对,请检查机器人是否是 jog 状态

机器人处于 jog 状态时可以被 jog,若处于拖动模式等非 jog 状态,则不允许被 jog。

13

上电状态不对

机器人只有在上电之后才能 Jog。

14

机器人处于非位置模式,不允许 jog

与 12 类似。

15

启动 jog 失败,算法报错

由于诸多原因导致无法 jog 时会报该错误。

20

遇到奇异点

21

已经运动到目标点

若已经运动至某点再次运动至该点时,会报该错误。

10.6.7 寄存器导入导出

寄存器导入、导出功能可将一台机器人中的寄存器配置快速复制到另一台机器人,无需重新配置寄存器。

10.6.7.1 寄存器导出

在寄存器页面,点击左下角按钮10.6.7.1 1,进入寄存器导出界面

10.6.7.1 2

寄存器导出目标文件(包含路径)

寄存器导出选择列表

寄存器导出操作按钮

筛选框,可支持全部和部分导出

导出操作步骤:首先在①中输入或选择寄存器导出目标文件路径,然后在②寄存器列表中,勾选要导出的寄存器,最后点击③中的“下一步”按钮执行导出,即可在①中对应路径下生成导出的寄存器文件。

10.6.7.2 寄存器导入

在寄存器页面,点击左下角按钮10.6.7.2 1,进入寄存器导入界面

10.6.7.2 2

寄存器导入文件

寄存器导入选项,对于冲突项的处理策略

寄存器导入选择条目

寄存器导入操作按钮

导入操作步骤:首先在①中选择要导入的寄存器文件,其次在②中设置冲突寄存器策略,之后在③中选择要导入的寄存器,最后点击④中的“下一步”执行导入操作,即可将选择的寄存器导入到本机。

10.6.7.3 寄存器导入时冲突检查

同一设备,同一寄存器属性(读写),寄存器地址不能一样。如果一样的话,若导入选项设置为不导入,则以原寄存器为准,冲突寄存器不进行导入;若导入选项设置为自动替换,则以新导入的为准,同时把原有冲突的寄存器覆盖,冲突时弹窗提示用户选择是否替换当前寄存器。
ext 开头的 7 个寄存器:ext_cmd_setext_resp_setext_resp_getext_resetext_response_dataext_request_dataext_error_code 在创建时,如果该寄存器被寄存器地址绑定过了,就不能再被别的寄存器绑定了。以上 7 个寄存器在导入时,如果该功能码已经在 HMI 里绑定使用了,且新导入寄存器列表里也有该功能码,以新导入的为准,同时把原有冲突的寄存器覆盖,冲突时弹窗提示用户选择是否替换当前寄存器。