八、队列运动模式(Python)
本页对应 C++ 版。函数名与参数顺序与 C++ 完全一致(Python SDK 由 C++ 经 SWIG 生成),差异只在两处:
- 返回值形态:C++ 用引用参数回填数据;Python 的返回形态由 SWIG 绑定决定,逐接口实测,不按类型推断。
- 少数接口在 Python 中不可直接调用(绑定缺陷),页面内已逐个标注。
本页共 20 个接口,其中 20 个在 Python SDK 中存在。
使用说明
8.1 队列模式控制
queue_motion_set_status / queue_motion_set_status_robot
打开/关闭队列运动模式。打开或关闭都将清空远端队列。
queue_motion_set_status
def queue_motion_set_status(socketFd, status):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
queue_motion_set_status_robot
def queue_motion_set_status_robot(socketFd, robotNum, status):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
queue_motion_get_status / queue_motion_get_status_robot
查询队列运动模式状态。
queue_motion_get_status
def queue_motion_get_status(socketFd, status):返回值:list,共 2 个元素,形如 [结果码, 数据...]。下标 0 是结果码,下标 1 是出参值。(实测为 list 而非 tuple,解包写法 ret, val = ... 同样可用。)
示例:
import nrc_interface as nrc
fd = nrc.connect_robot("192.168.1.13", "6001")
ret, val = nrc.queue_motion_get_status(fd, False)
print(ret, val) # 返回 list,可直接解包queue_motion_get_status_robot
def queue_motion_get_status_robot(socketFd, robotNum, status):返回值:list,共 2 个元素,形如 [结果码, 数据...]。下标 0 是结果码,下标 1 是出参值。(实测为 list 而非 tuple,解包写法 ret, val = ... 同样可用。)
示例:
import nrc_interface as nrc
fd = nrc.connect_robot("192.168.1.13", "6001")
ret, val = nrc.queue_motion_get_status_robot(fd, 1, False)
print(ret, val) # 返回 list,可直接解包queue_motion_clear_Data / queue_motion_clear_Data_robot
清空缓存的运动队列数据。
queue_motion_clear_Data
def queue_motion_clear_Data(socketFd):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
示例:
import nrc_interface as nrc
fd = nrc.connect_robot("192.168.1.13", "6001")
ret = nrc.queue_motion_clear_Data(fd)
print(ret)queue_motion_clear_Data_robot
def queue_motion_clear_Data_robot(socketFd, robotNum):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
示例:
import nrc_interface as nrc
fd = nrc.connect_robot("192.168.1.13", "6001")
ret = nrc.queue_motion_clear_Data_robot(fd, 1)
print(ret)queue_motion_size / queue_motion_size_robot
查询队列长度。
queue_motion_size
def queue_motion_size(socketFd, size):返回值:list,共 2 个元素,形如 [结果码, 数据...]。下标 0 是结果码,下标 1 是出参值。(实测为 list 而非 tuple,解包写法 ret, val = ... 同样可用。)
示例:
import nrc_interface as nrc
fd = nrc.connect_robot("192.168.1.13", "6001")
ret, val = nrc.queue_motion_size(fd, 0)
print(ret, val) # 返回 list,可直接解包queue_motion_size_robot
def queue_motion_size_robot(socketFd, robotNum, size):返回值:list,共 2 个元素,形如 [结果码, 数据...]。下标 0 是结果码,下标 1 是出参值。(实测为 list 而非 tuple,解包写法 ret, val = ... 同样可用。)
示例:
import nrc_interface as nrc
fd = nrc.connect_robot("192.168.1.13", "6001")
ret, val = nrc.queue_motion_size_robot(fd, 1, 0)
print(ret, val) # 返回 list,可直接解包queue_motion_get_queuelen / queue_motion_get_queuelen_robot
查询队列剩余指令数。
queue_motion_get_queuelen
def queue_motion_get_queuelen(socketFd, len):返回值:list,共 2 个元素,形如 [结果码, 数据...]。下标 0 是结果码,下标 1 是出参值。(实测为 list 而非 tuple,解包写法 ret, val = ... 同样可用。)
示例:
import nrc_interface as nrc
fd = nrc.connect_robot("192.168.1.13", "6001")
ret, val = nrc.queue_motion_get_queuelen(fd, 0)
print(ret, val) # 返回 list,可直接解包queue_motion_get_queuelen_robot
def queue_motion_get_queuelen_robot(socketFd, robotNum, len):返回值:list,共 2 个元素,形如 [结果码, 数据...]。下标 0 是结果码,下标 1 是出参值。(实测为 list 而非 tuple,解包写法 ret, val = ... 同样可用。)
示例:
import nrc_interface as nrc
fd = nrc.connect_robot("192.168.1.13", "6001")
ret, val = nrc.queue_motion_get_queuelen_robot(fd, 1, 0)
print(ret, val) # 返回 list,可直接解包queue_motion_send_to_controller / queue_motion_send_to_controller_robot
发送队列数据到控制器。size: [0,31],0=全部发送。
queue_motion_send_to_controller
def queue_motion_send_to_controller(socketFd, size, isContinue=False):返回值:int 结果码(0 成功,负数为错误码)。数据通过出参容器原地填充——先创建容器对象传入,调用成功后用 list(obj) 读取。
queue_motion_send_to_controller_robot
def queue_motion_send_to_controller_robot(socketFd, robotNum, size, isContinue=False):返回值:int 结果码(0 成功,负数为错误码)。数据通过出参容器原地填充——先创建容器对象传入,调用成功后用 list(obj) 读取。
queue_motion_suspend / queue_motion_suspend_robot
暂停连续运动。
queue_motion_suspend
def queue_motion_suspend(socketFd):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
示例:
import nrc_interface as nrc
fd = nrc.connect_robot("192.168.1.13", "6001")
ret = nrc.queue_motion_suspend(fd)
print(ret)queue_motion_suspend_robot
def queue_motion_suspend_robot(socketFd, robotNum):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
示例:
import nrc_interface as nrc
fd = nrc.connect_robot("192.168.1.13", "6001")
ret = nrc.queue_motion_suspend_robot(fd, 1)
print(ret)queue_motion_restart / queue_motion_restart_robot
暂停后重启队列运动。
queue_motion_restart
def queue_motion_restart(socketFd):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
示例:
import nrc_interface as nrc
fd = nrc.connect_robot("192.168.1.13", "6001")
ret = nrc.queue_motion_restart(fd)
print(ret)queue_motion_restart_robot
def queue_motion_restart_robot(socketFd, robotNum):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
示例:
import nrc_interface as nrc
fd = nrc.connect_robot("192.168.1.13", "6001")
ret = nrc.queue_motion_restart_robot(fd, 1)
print(ret)queue_motion_stop / queue_motion_stop_robot
停止连续运动(已废弃,建议用 stop_not_power_off)。
queue_motion_stop
def queue_motion_stop(socketFd):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
示例:
import nrc_interface as nrc
fd = nrc.connect_robot("192.168.1.13", "6001")
ret = nrc.queue_motion_stop(fd)
print(ret)queue_motion_stop_robot
def queue_motion_stop_robot(socketFd, robotNum):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
示例:
import nrc_interface as nrc
fd = nrc.connect_robot("192.168.1.13", "6001")
ret = nrc.queue_motion_stop_robot(fd, 1)
print(ret)queue_motion_stop_not_power_off / queue_motion_stop_not_power_off_robot
停止连续运动(保持上电)。
queue_motion_stop_not_power_off
def queue_motion_stop_not_power_off(socketFd):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
示例:
import nrc_interface as nrc
fd = nrc.connect_robot("192.168.1.13", "6001")
ret = nrc.queue_motion_stop_not_power_off(fd)
print(ret)queue_motion_stop_not_power_off_robot
def queue_motion_stop_not_power_off_robot(socketFd, robotNum):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
示例:
import nrc_interface as nrc
fd = nrc.connect_robot("192.168.1.13", "6001")
ret = nrc.queue_motion_stop_not_power_off_robot(fd, 1)
print(ret)8.2 队列运动指令插入
MoveCmd
push_back_move* 系列都收一个 MoveCmd(nrc_define.h),字段如下:
| 字段 | 类型 | 默认 | 说明 |
|---|---|---|---|
targetPosType | PosType | data(0) | 点位类型:data=自定义数组,P/AP/GP/GE=系统点位 |
targetPosValue | vector<double> | 长度 14 | 目标位置。前 7 位本体关节,后 7 位外部轴;data 类型必须填 |
targetPosName | string | 空 | 用系统点位时填名称,如 "GP0001"(仅作业文件模式有效) |
coord | int | 0 | 坐标类型:0 关节 / 1 直角 / 2 工具 / 3 用户 |
velocity | double | 50 | 速度 |
velocitySync | double | 0 | 外部轴速度同步值 |
acc / dec | double | 50 | 加速度 / 减速度 |
pl | int | 0 | 平滑等级 |
time | int | 0 | 提前执行时间 |
toolNum | int | 0 | 该点位使用的工具手编号;运行时机器人当前工具手与此不一致 → 报错 |
userNum | int | 0 | 该点位使用的用户坐标编号;运行时机器人当前用户坐标与此不一致 → 报错 |
configuration | int | 0 | 形态(关节解的分支) |
posidtype | int | 0 | 0=一级变量(GP0001),1=二级变量(GP[I001]) |
spin | int | 0 | 仅 MOVCA 用:0 姿态不变 / 1 六轴不转 / 2 六轴旋转 |
parasync | bool | false | 外部轴是否同步 |
工具手 / 用户坐标必须与机器人当前值一致,否则运行时报错
MoveCmd.toolNum / userNum 是该点位所属的工具手编号和用户坐标编号,不是「用不用工具」的开关。运行到这个点时,控制器会比对机器人当前的工具手 / 用户坐标:
- 一致:正常执行,按该工具/用户坐标换算;
- 不一致:直接报错,不会自动切换过去。
因此队列里的点位要用哪把工具、哪个用户坐标,就把对应编号显式填进去;不要在示教器上临时切了工具/用户坐标再跑同一条队列。切换后要么同步修改队列里的编号,要么重新下发。
Python 中定义:nrc_interface.MoveCmd(构造:nrc.MoveCmd())。
可用字段(共 16 个,实测 dir()):
acc、configuration、coord、dec、parasync、pl、posidtype、spin、targetPosName、targetPosType、targetPosValue、time、toolNum、userNum、velocity、velocitySync