七、作业文件操作(Python)
本页对应 C++ 版。函数名与参数顺序与 C++ 完全一致(Python SDK 由 C++ 经 SWIG 生成),差异只在两处:
- 返回值形态:C++ 用引用参数回填数据;Python 的返回形态由 SWIG 绑定决定,逐接口实测,不按类型推断。
- 少数接口在 Python 中不可直接调用(绑定缺陷),页面内已逐个标注。
本页共 47 个接口,其中 47 个在 Python SDK 中存在。
功能概述
7.1 作业文件管理
job_get_all_jobfile_name
获取所有作业文件名。
def job_get_all_jobfile_name(socketFd, robotsFile):返回值:⚠️ 该接口在 Python 中不可调用。C++ 原型的出参为std::vector<std::vector<std::string>>&,SWIG 未生成该嵌套容器的可用填充绑定,调用会抛 TypeError。请改用 C++ SDK 调用该接口。
参数说明(与 C++ 一致):
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotsFile | std::vector<std::vector<std::string>>& | 输出参数,二维数组,一维长度 4,对应 4 个机器人的作业文件列表 |
C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。
job_upload_by_directory
根据文件夹上传一整个文件夹的作业文件。
def job_upload_by_directory(socketFd, directoryPath):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
参数说明(与 C++ 一致):
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| directoryPath | const std::string& | 目录的完整路径 |
C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。
job_upload_by_file
根据文件名上传一个作业文件。
def job_upload_by_file(socketFd, filePath):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
参数说明(与 C++ 一致):
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| filePath | const std::string& | 文件的完整路径 |
C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。
job_sync_job_file
上传作业文件后同步刷新示教器文件列表。
def job_sync_job_file(socketFd):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
示例:
import nrc_interface as nrc
fd = nrc.connect_robot("192.168.1.13", "6001")
ret = nrc.job_sync_job_file(fd)
print(ret)参数说明(与 C++ 一致):
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。
job_download_by_directory
下载所有作业文件到指定文件夹。
def job_download_by_directory(socketFd, directoryPath, isCover):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
参数说明(与 C++ 一致):
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| directoryPath | const std::string& | 目录的完整路径 |
| isCover | bool | 是否覆盖已存在的文件 |
C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。
log_download_by_quantity
下载指定数量的日志文件到指定文件夹。
def log_download_by_quantity(socketFd, counts, directoryPath):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
参数说明(与 C++ 一致):
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| counts | int | 文件数量 |
| directoryPath | const std::string& | 目录的完整路径 |
C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。
backup_system
一键备份系统,保存至当前执行程序目录下。
def backup_system(socketFd):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
示例:
import nrc_interface as nrc
fd = nrc.connect_robot("192.168.1.13", "6001")
ret = nrc.backup_system(fd)
print(ret)参数说明(与 C++ 一致):
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。
job_create / job_create_robot
新建作业文件。
job_create
def job_create(socketFd, jobName):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
job_create_robot
def job_create_robot(socketFd, robotNum, jobName):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
参数说明(与 C++ 一致):
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
| jobName | const std::string& | 作业文件名,只允许字母开头,字母数字组合 |
C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。
job_delete / job_delete_robot
删除指定的作业文件。
job_delete
def job_delete(socketFd, jobName):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
job_delete_robot
def job_delete_robot(socketFd, robotNum, jobName):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
参数说明(与 C++ 一致):
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
| jobName | const std::string& | 作业文件名 |
C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。
job_open / job_open_robot
打开指定的作业文件(打开后才能进行内容读取/编辑操作)。
job_open
def job_open(socketFd, jobName):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
job_open_robot
def job_open_robot(socketFd, robotNum, jobName):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
参数说明(与 C++ 一致):
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
| jobName | const std::string& | 作业文件名 |
C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。
7.2 作业内容操作
job_get_command_total_lines / job_get_command_total_lines_robot
获取当前打开作业文件的总行数。
job_get_command_total_lines
def job_get_command_total_lines(socketFd, totalLines):返回值: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.job_get_command_total_lines(fd, 0)
print(ret, val) # 返回 list,可直接解包job_get_command_total_lines_robot
def job_get_command_total_lines_robot(socketFd, robotNum, totalLines):返回值: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.job_get_command_total_lines_robot(fd, 1, 0)
print(ret, val) # 返回 list,可直接解包参数说明(与 C++ 一致):
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
| totalLines | int& | 输出参数,总行数 |
C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。
job_get_command_content_by_line / job_get_command_content_by_line_robot
获取指定行号的作业文件内容。
job_get_command_content_by_line
def job_get_command_content_by_line(socketFd, line, commandType, jobContent):返回值:⚠️ 该接口在 Python 中不可调用。C++ 原型为字符串引用出参(std::string&),SWIG 生成的绑定要求按值传 str,调用后字符串内容不会回填,实际无法取到结果。请改用 C++ SDK 调用该接口。
job_get_command_content_by_line_robot
def job_get_command_content_by_line_robot(socketFd, robotNum, line, commandType, jobContent):返回值:⚠️ 该接口在 Python 中不可调用。C++ 原型为字符串引用出参(std::string&),SWIG 生成的绑定要求按值传 str,调用后字符串内容不会回填,实际无法取到结果。请改用 C++ SDK 调用该接口。
参数说明(与 C++ 一致):
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
| line | int | 行号 |
| commandType | int& | 输出参数,指令类型 |
| jobContent | std::string& | 输出参数,该行指令内容 |
C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。
job_delete_command_by_line / job_delete_command_by_line_robot
删除指定行号的指令。
job_delete_command_by_line
def job_delete_command_by_line(socketFd, line):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
job_delete_command_by_line_robot
def job_delete_command_by_line_robot(socketFd, robotNum, line):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
参数说明(与 C++ 一致):
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
| line | int | 要删除的行号 |
C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。
7.3 作业运行控制
job_run / job_run_robot
运行指定的作业文件。
job_run
def job_run(socketFd, jobName):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
job_run_robot
def job_run_robot(socketFd, robotNum, jobName):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
参数说明(与 C++ 一致):
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
| jobName | const std::string& | 作业文件名 |
C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。
job_step / job_step_robot
单步运行指定的作业文件的某一行。
job_step
def job_step(socketFd, jobName, line):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
job_step_robot
def job_step_robot(socketFd, robotNum, jobName, line):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
参数说明(与 C++ 一致):
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
| jobName | const std::string& | 作业文件名 |
| line | int | 行号,范围 [1, 最大行号] |
C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。
job_pause / job_pause_robot
暂停当前运行的作业文件。
job_pause
def job_pause(socketFd):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
示例:
import nrc_interface as nrc
fd = nrc.connect_robot("192.168.1.13", "6001")
ret = nrc.job_pause(fd)
print(ret)job_pause_robot
def job_pause_robot(socketFd, robotNum):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
示例:
import nrc_interface as nrc
fd = nrc.connect_robot("192.168.1.13", "6001")
ret = nrc.job_pause_robot(fd, 1)
print(ret)参数说明(与 C++ 一致):
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。
job_continue / job_continue_robot
继续运行暂停的作业文件。
job_continue
def job_continue(socketFd):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
示例:
import nrc_interface as nrc
fd = nrc.connect_robot("192.168.1.13", "6001")
ret = nrc.job_continue(fd)
print(ret)job_continue_robot
def job_continue_robot(socketFd, robotNum):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
示例:
import nrc_interface as nrc
fd = nrc.connect_robot("192.168.1.13", "6001")
ret = nrc.job_continue_robot(fd, 1)
print(ret)参数说明(与 C++ 一致):
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。
job_stop / job_stop_robot
停止作业文件(不会下电)。
job_stop
def job_stop(socketFd):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
示例:
import nrc_interface as nrc
fd = nrc.connect_robot("192.168.1.13", "6001")
ret = nrc.job_stop(fd)
print(ret)job_stop_robot
def job_stop_robot(socketFd, robotNum):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
示例:
import nrc_interface as nrc
fd = nrc.connect_robot("192.168.1.13", "6001")
ret = nrc.job_stop_robot(fd, 1)
print(ret)参数说明(与 C++ 一致):
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。
job_run_times / job_run_times_robot
设置作业文件运行次数。
job_run_times
def job_run_times(socketFd, index):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
job_run_times_robot
def job_run_times_robot(socketFd, robotNum, index):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
参数说明(与 C++ 一致):
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
| index | int | 运行次数,0=无限次 |
C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。
job_break_point_run / job_break_point_run_robot
断点续跑指定的作业文件(从上次中断位置继续运行)。
job_break_point_run
def job_break_point_run(socketFd, jobName):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
job_break_point_run_robot
def job_break_point_run_robot(socketFd, robotNum, jobName):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
参数说明(与 C++ 一致):
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
| jobName | const std::string& | 作业文件名 |
C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。
job_get_current_file / job_get_current_file_robot
获取当前打开的作业文件名称(std::string 版本)。
job_get_current_file
def job_get_current_file(socketFd, jobName):返回值:⚠️ 该接口在 Python 中不可调用。C++ 原型为字符串引用出参(std::string&),SWIG 生成的绑定要求按值传 str,调用后字符串内容不会回填,实际无法取到结果。请改用 C++ SDK 调用该接口。
job_get_current_file_robot
def job_get_current_file_robot(socketFd, robotNum, jobName):返回值:⚠️ 该接口在 Python 中不可调用。C++ 原型为字符串引用出参(std::string&),SWIG 生成的绑定要求按值传 str,调用后字符串内容不会回填,实际无法取到结果。请改用 C++ SDK 调用该接口。
参数说明(与 C++ 一致):
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
| jobName | std::string& | 输出参数,当前打开的作业文件名 |
C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。
job_get_current_file_csharp / job_get_current_file_csharp_robot
获取当前打开的作业文件名称(std::vector<char> 版本,供 C# 使用)。
job_get_current_file_csharp
def job_get_current_file_csharp(socketFd, jobName):返回值:int 结果码(0 成功,负数为错误码)。数据通过出参对象原地填充——先创建出参对象传入,调用成功后从该对象读取。
job_get_current_file_csharp_robot
def job_get_current_file_csharp_robot(socketFd, robotNum, jobName):返回值:int 结果码(0 成功,负数为错误码)。数据通过出参对象原地填充——先创建出参对象传入,调用成功后从该对象读取。
参数说明(与 C++ 一致):
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
| jobName | std::vector<char>& | 输出参数,当前打开的作业文件名 |
C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。
job_get_current_line / job_get_current_line_robot
获取当前打开的作业文件运行到的行数。
job_get_current_line
def job_get_current_line(socketFd, line):返回值: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.job_get_current_line(fd, 0)
print(ret, val) # 返回 list,可直接解包job_get_current_line_robot
def job_get_current_line_robot(socketFd, robotNum, line):返回值: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.job_get_current_line_robot(fd, 1, 0)
print(ret, val) # 返回 list,可直接解包参数说明(与 C++ 一致):
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
| line | int& | 输出参数,运行到的行数 |
C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。
7.4 点位操作
job_insert_local_position / job_insert_local_position_robot
作业文件插入一个局部点位。
job_insert_local_position
def job_insert_local_position(socketFd, posData):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
job_insert_local_position_robot
def job_insert_local_position_robot(socketFd, robotNum, posData):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
参数说明(与 C++ 一致):
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
| posData | PositionData | 位置数据 |
C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。
job_set_local_position / job_set_local_position_robot
根据点位名修改当前作业文件局部点位。
job_set_local_position
def job_set_local_position(socketFd, posName, posInfo):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
job_set_local_position_robot
def job_set_local_position_robot(socketFd, robotNum, posName, posInfo):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
参数说明(与 C++ 一致):
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
| posName | const std::string& | 需要修改的点位名 |
| posInfo | std::vector<double> | 点位数据,长度 14:[0]坐标系(0=关节,1=直角,2=工具,3=用户);[1]角度制(0)/弧度制(1);[2]形态;[3]工具手坐标序号;[4]用户坐标序号;[5][6]备用;[7-13]点位信息 |
C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。
7.5 运动指令插入
7.6 延迟、IO、逻辑控制指令插入
7.7 工艺指令插入
视觉工艺指令
| 接口 | 指令 | 说明 |
|---|---|---|
job_insert_vision_craft_start | VISION_RUN | 开始视觉,参数 id 为工艺号 |
job_insert_vision_craft_get_pos | VISION_POS | 获取视觉位置,posName 为存放位置变量名(如 GP0001) |
job_insert_vision_craft_trajectory | VISION_TARCE | 获取视觉轨迹位置(24.03 可用),参数 VisualTrajectoryPosition |
job_insert_vision_craft_visual_trigger | VISION_POS | 触发视觉,参数 id 为工艺号 |
job_insert_vision_craft_visual_end | VISION_END | 视觉结束,参数 id 为工艺号 |
使用示例:
// 在第 5 行插入视觉开始指令(工艺号 1)
Result result = job_insert_vision_craft_start(fd, 5, 1);传送带工艺指令
| 接口 | 指令 | 说明 |
|---|---|---|
job_insert_conveyor_check_pos | CONVEYOR_CHECKPOS | 传送带工件检测开始 |
job_insert_conveyor_check_end | CONVEYOR_CHECKEND | 传送带工件检测结束 |
job_insert_conveyor_on | CONVEYOR_ON | 传送带跟踪开始(posTtype:0=手动传点位,1=默认工件点;vel 范围 [2,2000]mm/s;acc 范围 [1,100]%) |
job_insert_conveyor_off | CONVEYOR_OFF | 传送带跟踪结束 |
job_insert_conveyor_pos | CONVEYOR_POS | 获取传送带跟踪位置,posName 为全局点位名 |
job_insert_conveyor_clear | CONVEYOR_POS | 清除传送带跟踪目标(removeType:0=全部目标,1=本次目标) |
job_insert_conveyor_wait | CONVEYOR_Wait | 传送带等料(24.03 可用),参数含超时时间/来料结果/来料位置 |
CONVEYOR_ON 函数原型:
Result job_insert_conveyor_on(SOCKETFD socketFd, int line, int id, int postype, std::vector<double> pos, int vel, int acc);使用示例:
// 在第 8 行插入传送带跟踪开始(工艺号 1,使用工件点,速度 500mm/s)
std::vector<double> pos(14, 0);
Result result = job_insert_conveyor_on(fd, 8, 1, 1, pos, 500, 50);相贯线与独立轴指令
| 接口 | 指令 | 说明 |
|---|---|---|
job_insert_cil | CIL | 相贯线指令(MoveCmd + 工艺号) |
job_insert_axis_motion_position | 轴点动 | 轴点到点运行控制(AXISPostion) |
job_insert_axis_motion_velocity | 轴恒转速 | 轴恒转速控制(AxisVelocity) |
job_insert_axis_motion_torque | 轴恒转矩 | 轴恒转矩控制(AxisTorque) |
job_insert_axis_motion_stop | 轴停止 | 轴运动停止,axisNum 为轴号 |
job_insert_axis_motion_cancel_independent_control | 取消独立控制 | 取消独立轴控制,axisNum 为轴号 |
job_insert_axis_motion_speed_judge | 轴速度判断 | 轴运动速度判断(Axisspeedjudge) |
job_insert_axis_motion_position_stop | 主轴准停 | 主轴准停指令,angle 为准停角度 |
7.8 多机协调指令插入
job_insert_tasks / job_insert_tasks_rbobt
插入声明协调参数指令。
job_insert_tasks
def job_insert_tasks(socketFd, line, crafId, robotGroup):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
job_insert_tasks_rbobt
def job_insert_tasks_rbobt(socketFd, robotNum, line, crafId, robotGroup):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
参数说明(与 C++ 一致):
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
| line | int | 插入位置 |
| crafId | int | 协调任务号,范围 1-999 |
| robotGroup | std::vector<int> | 需要同步的机器人组,传入需要同步的机器人编号 1-4 |
C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。
job_insert_wait_sync_task / job_insert_wait_sync_task_rbobt
插入等待任务同步点指令。
job_insert_wait_sync_task
def job_insert_wait_sync_task(socketFd, line, crafId, waitSignal):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
job_insert_wait_sync_task_rbobt
def job_insert_wait_sync_task_rbobt(socketFd, robotNum, line, crafId, waitSignal):返回值:int 结果码(0 成功,负数为错误码)。本接口无数据出参。
参数说明(与 C++ 一致):
| 参数 | 类型 | 说明 |
|---|---|---|
| socketFd | SOCKETFD | 连接句柄 |
| robotNum | int | 机器人编号 (1-4),仅 _robot 版本 |
| line | int | 插入位置 |
| crafId | int | 协调任务号,范围 1-999 |
| waitSignal | std::string | 同步信号量 |
C++ 侧返回值描述:SUCCESS(0) 表示成功,负数表示失败。
7.9 断点与续跑
断点是什么
- 作业运行过程中,控制器会记录「当前作业文件 + 当前行号 + 运行上下文」,用于中断后从原位置继续。
- 断点属于控制器侧状态,不是上位机保存的;上位机断开连接、重启程序不会清除断点。
- 是否允许续跑,取决于断点是否仍然「有效」(见下方「旧断点失效」)。
断点清除条件
下表为现场确认口径,按触发类型分组。固件版本不同可能有增删,升级后请以实测为准。
一、正常与人工操作
| 条件 | 说明 |
|---|---|
| 作业正常运行结束 | 跑完即无断点 |
| 急停,且配置了 IO 复位 | 复位动作会清断点 |
| 在示教器上导入程序 | 覆盖作业内容 |
使用 startOver=true 从头启动 | JSON 协议重头运行见程序运行控制 |
| 回复位点 / 执行复位程序 | 现场恢复流程的一部分 |
二、旧断点失效(断点还在,但判定为不可恢复)
出现任一情况,控制器不再允许从旧断点续跑:
- 没有原运行上下文(控制器重启后上下文丢失);
- 作业文件名不一致;
- 断点行号小于 1;
- 当前行所属作业与断点记录的作业不一致;
- 断点保存模式与当前模式不同;
- 调用程序或子程序被修改;
- 工艺状态不允许恢复。
三、异常与失败
| 条件 | 说明 |
|---|---|
| 作业打开失败、文件为空、语法错误、插补错误等异常退出 | 运行未正常建立 |
| 断点续跑计算失败或恢复超时 | 续跑请求本身失败 |
四、配置与模式变更
| 条件 | 说明 |
|---|---|
| 修改机型、轴映射、DH、关节参数 | 机器人对象重建,断点上下文失效 |
| 切换追加运行等特殊模式 | 与作业运行上下文不兼容 |
五、接口主动触发
| 条件 | 说明 |
|---|---|
自定义错误 NRC_TriggerErrorReport(控制器侧接口) | 会主动发送清断点命令,见控制器 · 作业文件-指令操作 |
| 带「保留断点」语义的错误上报接口(控制器侧) | 按版本提供,是否可用见本节「版本差异与待核」 |
续跑与从头启动
| 需求 | 做法 | 说明 |
|---|---|---|
| 从中断位置继续 | job_break_point_run(jobName) | 需要运行模式,见 §7.3 |
| 从头重新跑 | job_run + JSON 协议 startOver=1 | C++ 接口无 startOver 参数,重头运行走 JSON 协议或先停止再运行 |
| 只跑一步 | job_step | 调试用,不产生可续跑断点 |
判断能否续跑
先确认两件事:作业文件没被改过(内容/子程序)、机器人配置没动过。这两条命中「旧断点失效」或「配置与模式变更」的任一条件,续跑都会失败,直接从头跑更快。
判断能否续跑
先确认两件事:作业文件没被改过(内容/子程序)、机器人配置没动过。这两条命中「旧断点失效」或「配置与模式变更」的任一条件,续跑都会失败,直接从头跑更快。
常见场景处置
| 场景 | 建议动作 |
|---|---|
| 客户现场断电后想续跑 | 控制器重启会丢上下文,按「旧断点失效」判断;不行就从头跑并检查安全点位 |
| 示教点位改了,想接着跑 | 改点位属于修改作业,断点失效,需从头运行 |
| 报错提示后作业停了,想续跑 | 若用的是 NRC_TriggerErrorReport,断点已被清除;改用保留断点的上报方式(按版本) |
| 换了机器人配置/换了机型 | 断点必然失效,重新运行 |
| 续跑接口返回失败 | 先用 job_get_current_file / job_get_current_line 看当前状态,再决定是否从头运行 |
相关接口
| 接口 | 用途 | 前置 |
|---|---|---|
job_run / job_run_robot | 运行作业 | 作业已上传 |
job_step | 单步 | 运行模式 |
job_pause / job_continue | 暂停 / 继续 | 作业运行中 |
job_stop | 停止 | — |
job_run_times | 设置循环次数 | 0=无限次 |
job_break_point_run | 断点续跑 | 运行模式 |
job_get_current_file / job_get_current_line | 查当前作业与行号 | — |
版本差异与待核
- 「保留断点的错误上报」接口(
NRC_TriggerErrorReportKeepBreakpoint)在客户群中已被提及为新增能力,但当前仓库文档与头文件中尚未收录,使用前请向研发确认所在版本,不要按本节描述直接调用。 - 断点清除条件清单来自现场核对,个别条目(如「切换追加运行」)与固件版本相关,升级后建议回归验证。
- 断点是否跨控制器重启保留,各版本行为不一致,属待补项。