Skip to content
🤖 AI 助手 / 自动化工具:先读 《AI 助手先读》 《Agent 开发指引》 《生成前信息采集清单》;机器可读入口 /llms.txt;技能包(SKILL)直链:SKILL.md

七、作业文件操作(nrc_job_operate.h) ​

功能概述 ​

作业文件(.JBR)是控制器的核心程序文件,由多条指令组成。本模块提供作业文件的上传/下载/新建/删除/打开、运行控制(运行/单步/暂停/继续/停止)、内容读取与编辑(按行查询/删除/插入指令)等完整操作能力。

作业文件生命周期: 上传/新建 → 打开 → 编辑(插入/修改指令)→ 运行 → 暂停/继续 → 停止

7.1 作业文件管理 ​

job_get_all_jobfile_name ​

获取所有作业文件名。

函数原型:

cpp
Result job_get_all_jobfile_name(SOCKETFD socketFd, std::vector<std::vector<std::string>>& robotsFile);

参数说明:

参数类型说明
socketFdSOCKETFD连接句柄
robotsFilestd::vector<std::vector<std::string>>&输出参数,二维数组,一维长度 4,对应 4 个机器人的作业文件列表

返回值: SUCCESS(0) 表示成功,负数表示失败。

使用示例:

cpp
std::vector<std::vector<std::string>> files;
Result result = job_get_all_jobfile_name(fd, files);
if (result == SUCCESS) {
    printf("机器人1的作业文件: \n");
    for (const auto& name : files[0]) {
        printf("  %s\n", name.c_str());
    }
}

job_upload_by_directory ​

根据文件夹上传一整个文件夹的作业文件。

函数原型:

cpp
Result job_upload_by_directory(SOCKETFD socketFd, const std::string& directoryPath);

参数说明:

参数类型说明
socketFdSOCKETFD连接句柄
directoryPathconst std::string&目录的完整路径

返回值: SUCCESS(0) 表示成功,负数表示失败。

使用示例:

cpp
Result result = job_upload_by_directory(fd, "C:/jobs/robot1");

job_upload_by_file ​

根据文件名上传一个作业文件。

函数原型:

cpp
Result job_upload_by_file(SOCKETFD socketFd, const std::string& filePath);

参数说明:

参数类型说明
socketFdSOCKETFD连接句柄
filePathconst std::string&文件的完整路径

返回值: SUCCESS(0) 表示成功,负数表示失败。

使用示例:

cpp
Result result = job_upload_by_file(fd, "C:/jobs/main.JBR");

job_sync_job_file ​

上传作业文件后同步刷新示教器文件列表。

函数原型:

cpp
Result job_sync_job_file(SOCKETFD socketFd);

参数说明:

参数类型说明
socketFdSOCKETFD连接句柄

返回值: SUCCESS(0) 表示成功,负数表示失败。

调用 job_upload_by_directory / job_upload_by_file 后建议调用本接口刷新示教器显示。


job_download_by_directory ​

下载所有作业文件到指定文件夹。

函数原型:

cpp
Result job_download_by_directory(SOCKETFD socketFd, const std::string& directoryPath, bool isCover);

参数说明:

参数类型说明
socketFdSOCKETFD连接句柄
directoryPathconst std::string&目录的完整路径
isCoverbool是否覆盖已存在的文件

返回值: SUCCESS(0) 表示成功,负数表示失败。


log_download_by_quantity ​

下载指定数量的日志文件到指定文件夹。

函数原型:

cpp
Result log_download_by_quantity(SOCKETFD socketFd, int counts, const std::string& directoryPath);

参数说明:

参数类型说明
socketFdSOCKETFD连接句柄
countsint文件数量
directoryPathconst std::string&目录的完整路径

返回值: SUCCESS(0) 表示成功,负数表示失败。


backup_system ​

一键备份系统,保存至当前执行程序目录下。

函数原型:

cpp
Result backup_system(SOCKETFD socketFd);

参数说明:

参数类型说明
socketFdSOCKETFD连接句柄

返回值: SUCCESS(0) 表示成功,负数表示失败。


job_create / job_create_robot ​

新建作业文件。

函数原型:

cpp
Result job_create(SOCKETFD socketFd, const std::string& jobName);
Result job_create_robot(SOCKETFD socketFd, int robotNum, const std::string& jobName);

参数说明:

参数类型说明
socketFdSOCKETFD连接句柄
robotNumint机器人编号 (1-4),仅 _robot 版本
jobNameconst std::string&作业文件名,只允许字母开头,字母数字组合

返回值: SUCCESS(0) 表示成功,负数表示失败。

使用示例:

cpp
// 新建 QQQ.JBR
Result result = job_create(fd, "QQQ");

job_delete / job_delete_robot ​

删除指定的作业文件。

函数原型:

cpp
Result job_delete(SOCKETFD socketFd, const std::string& jobName);
Result job_delete_robot(SOCKETFD socketFd, int robotNum, const std::string& jobName);

参数说明:

参数类型说明
socketFdSOCKETFD连接句柄
robotNumint机器人编号 (1-4),仅 _robot 版本
jobNameconst std::string&作业文件名

返回值: SUCCESS(0) 表示成功,负数表示失败。

使用示例:

cpp
// 删除 QQQ.JBR
Result result = job_delete(fd, "QQQ");

job_open / job_open_robot ​

打开指定的作业文件(打开后才能进行内容读取/编辑操作)。

函数原型:

cpp
Result job_open(SOCKETFD socketFd, const std::string& jobName);
Result job_open_robot(SOCKETFD socketFd, int robotNum, const std::string& jobName);

参数说明:

参数类型说明
socketFdSOCKETFD连接句柄
robotNumint机器人编号 (1-4),仅 _robot 版本
jobNameconst std::string&作业文件名

返回值: SUCCESS(0) 表示成功,负数表示失败。

使用示例:

cpp
// 打开 QQQ.JBR
Result result = job_open(fd, "QQQ");

7.2 作业内容操作 ​

job_get_command_total_lines / job_get_command_total_lines_robot ​

获取当前打开作业文件的总行数。

函数原型:

cpp
Result job_get_command_total_lines(SOCKETFD socketFd, int& totalLines);
Result job_get_command_total_lines_robot(SOCKETFD socketFd, int robotNum, int& totalLines);

参数说明:

参数类型说明
socketFdSOCKETFD连接句柄
robotNumint机器人编号 (1-4),仅 _robot 版本
totalLinesint&输出参数,总行数

返回值: SUCCESS(0) 表示成功,负数表示失败。

使用示例:

cpp
int total = 0;
Result result = job_get_command_total_lines(fd, total);
printf("作业文件共 %d 行\n", total);

job_get_command_content_by_line / job_get_command_content_by_line_robot ​

获取指定行号的作业文件内容。

函数原型:

cpp
Result job_get_command_content_by_line(SOCKETFD socketFd, int line, int& commandType, std::string& jobContent);
Result job_get_command_content_by_line_robot(SOCKETFD socketFd, int robotNum, int line, int& commandType, std::string& jobContent);

参数说明:

参数类型说明
socketFdSOCKETFD连接句柄
robotNumint机器人编号 (1-4),仅 _robot 版本
lineint行号
commandTypeint&输出参数,指令类型
jobContentstd::string&输出参数,该行指令内容

返回值: SUCCESS(0) 表示成功,负数表示失败。

使用示例:

cpp
int cmdType = 0;
std::string content;
Result result = job_get_command_content_by_line(fd, 3, cmdType, content);
if (result == SUCCESS) {
    printf("第3行: %s\n", content.c_str());
}

job_delete_command_by_line / job_delete_command_by_line_robot ​

删除指定行号的指令。

函数原型:

cpp
Result job_delete_command_by_line(SOCKETFD socketFd, int line);
Result job_delete_command_by_line_robot(SOCKETFD socketFd, int robotNum, int line);

参数说明:

参数类型说明
socketFdSOCKETFD连接句柄
robotNumint机器人编号 (1-4),仅 _robot 版本
lineint要删除的行号

返回值: SUCCESS(0) 表示成功,负数表示失败。


7.3 作业运行控制 ​

断点与续跑

哪些操作会清除断点、续跑为什么会失败、什么时候该从头运行,见 §7.9 断点与续跑。

job_run / job_run_robot ​

运行指定的作业文件。

函数原型:

cpp
Result job_run(SOCKETFD socketFd, const std::string& jobName);
Result job_run_robot(SOCKETFD socketFd, int robotNum, const std::string& jobName);

参数说明:

参数类型说明
socketFdSOCKETFD连接句柄
robotNumint机器人编号 (1-4),仅 _robot 版本
jobNameconst std::string&作业文件名

返回值: SUCCESS(0) 表示成功,负数表示失败。

使用示例:

cpp
// 运行 QQQ.JBR
Result result = job_run(fd, "QQQ");

job_step / job_step_robot ​

单步运行指定的作业文件的某一行。

函数原型:

cpp
Result job_step(SOCKETFD socketFd, const std::string& jobName, int line);
Result job_step_robot(SOCKETFD socketFd, int robotNum, const std::string& jobName, int line);

参数说明:

参数类型说明
socketFdSOCKETFD连接句柄
robotNumint机器人编号 (1-4),仅 _robot 版本
jobNameconst std::string&作业文件名
lineint行号,范围 [1, 最大行号]

返回值: SUCCESS(0) 表示成功,负数表示失败。

使用示例:

cpp
// 单步运行 QQQ.JBR 的第一行
Result result = job_step(fd, "QQQ", 1);

job_pause / job_pause_robot ​

暂停当前运行的作业文件。

函数原型:

cpp
Result job_pause(SOCKETFD socketFd);
Result job_pause_robot(SOCKETFD socketFd, int robotNum);

参数说明:

参数类型说明
socketFdSOCKETFD连接句柄
robotNumint机器人编号 (1-4),仅 _robot 版本

返回值: SUCCESS(0) 表示成功,负数表示失败。


job_continue / job_continue_robot ​

继续运行暂停的作业文件。

函数原型:

cpp
Result job_continue(SOCKETFD socketFd);
Result job_continue_robot(SOCKETFD socketFd, int robotNum);

参数说明:

参数类型说明
socketFdSOCKETFD连接句柄
robotNumint机器人编号 (1-4),仅 _robot 版本

返回值: SUCCESS(0) 表示成功,负数表示失败。

需要运行模式。


job_stop / job_stop_robot ​

停止作业文件(不会下电)。

函数原型:

cpp
Result job_stop(SOCKETFD socketFd);
Result job_stop_robot(SOCKETFD socketFd, int robotNum);

参数说明:

参数类型说明
socketFdSOCKETFD连接句柄
robotNumint机器人编号 (1-4),仅 _robot 版本

返回值: SUCCESS(0) 表示成功,负数表示失败。


job_run_times / job_run_times_robot ​

设置作业文件运行次数。

函数原型:

cpp
Result job_run_times(SOCKETFD socketFd, int index);
Result job_run_times_robot(SOCKETFD socketFd, int robotNum, int index);

参数说明:

参数类型说明
socketFdSOCKETFD连接句柄
robotNumint机器人编号 (1-4),仅 _robot 版本
indexint运行次数,0=无限次

返回值: SUCCESS(0) 表示成功,负数表示失败。


job_break_point_run / job_break_point_run_robot ​

断点续跑指定的作业文件(从上次中断位置继续运行)。

函数原型:

cpp
Result job_break_point_run(SOCKETFD socketFd, const std::string& jobName);
Result job_break_point_run_robot(SOCKETFD socketFd, int robotNum, const std::string& jobName);

参数说明:

参数类型说明
socketFdSOCKETFD连接句柄
robotNumint机器人编号 (1-4),仅 _robot 版本
jobNameconst std::string&作业文件名

返回值: SUCCESS(0) 表示成功,负数表示失败。

需要运行模式。


job_get_current_file / job_get_current_file_robot ​

获取当前打开的作业文件名称(std::string 版本)。

函数原型:

cpp
Result job_get_current_file(SOCKETFD socketFd, std::string& jobName);
Result job_get_current_file_robot(SOCKETFD socketFd, int robotNum, std::string& jobName);

参数说明:

参数类型说明
socketFdSOCKETFD连接句柄
robotNumint机器人编号 (1-4),仅 _robot 版本
jobNamestd::string&输出参数,当前打开的作业文件名

返回值: SUCCESS(0) 表示成功,负数表示失败。


job_get_current_file_csharp / job_get_current_file_csharp_robot ​

获取当前打开的作业文件名称(std::vector<char> 版本,供 C# 使用)。

函数原型:

cpp
Result job_get_current_file_csharp(SOCKETFD socketFd, std::vector<char>& jobName);
Result job_get_current_file_csharp_robot(SOCKETFD socketFd, int robotNum, std::vector<char>& jobName);

参数说明:

参数类型说明
socketFdSOCKETFD连接句柄
robotNumint机器人编号 (1-4),仅 _robot 版本
jobNamestd::vector<char>&输出参数,当前打开的作业文件名

返回值: SUCCESS(0) 表示成功,负数表示失败。


job_get_current_line / job_get_current_line_robot ​

获取当前打开的作业文件运行到的行数。

函数原型:

cpp
Result job_get_current_line(SOCKETFD socketFd, int& line);
Result job_get_current_line_robot(SOCKETFD socketFd, int robotNum, int& line);

参数说明:

参数类型说明
socketFdSOCKETFD连接句柄
robotNumint机器人编号 (1-4),仅 _robot 版本
lineint&输出参数,运行到的行数

返回值: SUCCESS(0) 表示成功,负数表示失败。


7.4 点位操作 ​

job_insert_local_position / job_insert_local_position_robot ​

作业文件插入一个局部点位。

函数原型:

cpp
Result job_insert_local_position(SOCKETFD socketFd, PositionData posData);
Result job_insert_local_position_robot(SOCKETFD socketFd, int robotNum, PositionData posData);

参数说明:

参数类型说明
socketFdSOCKETFD连接句柄
robotNumint机器人编号 (1-4),仅 _robot 版本
posDataPositionData位置数据

返回值: SUCCESS(0) 表示成功,负数表示失败。


job_set_local_position / job_set_local_position_robot ​

根据点位名修改当前作业文件局部点位。

函数原型:

cpp
Result job_set_local_position(SOCKETFD socketFd, const std::string& posName, std::vector<double> posInfo);
Result job_set_local_position_robot(SOCKETFD socketFd, int robotNum, const std::string& posName, std::vector<double> posInfo);

参数说明:

参数类型说明
socketFdSOCKETFD连接句柄
robotNumint机器人编号 (1-4),仅 _robot 版本
posNameconst std::string&需要修改的点位名
posInfostd::vector<double>点位数据,长度 14:[0]坐标系(0=关节,1=直角,2=工具,3=用户);[1]角度制(0)/弧度制(1);[2]形态;[3]工具手坐标序号;[4]用户坐标序号;[5][6]备用;[7-13]点位信息

返回值: SUCCESS(0) 表示成功,负数表示失败。


7.5 运动指令插入 ​

向作业文件指定行号插入运动指令,所有接口均提供 _robot 版本。

插入只改文件,不影响正在运行的程序:插入完成后需要重新运行作业才生效。行号会随插入/删除变化,批量插入时建议从后往前插,或每插一条重读 job_get_command_total_lines。

接口指令说明
job_insert_moveJMoveJ关节运动指令
job_insert_moveLMoveL直线运动指令
job_insert_moveCMoveC圆弧运动指令
job_insert_imoveIMOVE增量运动指令(moveCmd.targetPosType = 3,moveCmd.targetPosName = "RP0001")
job_insert_moveCommmoveComm外部点指令,moveType 为插补方式 "MovJ"/"MovL",参数含速度/加速度/减速度/时间/平滑度
job_insert_samov_commandSAMOV定点移动指令(点位数据用 PositionData)
job_insert_EImoveLEImoveL外部轴直线运动
job_insert_EImoveCEImoveC外部轴圆弧运动
job_insert_EImoveCAEImoveCA外部轴圆弧绝对运动

moveJ/moveL/moveC 函数原型:

cpp
Result job_insert_moveJ(SOCKETFD socketFd, int line, MoveCmd moveCmd);
Result job_insert_moveL(SOCKETFD socketFd, int line, MoveCmd moveCmd);
Result job_insert_moveC(SOCKETFD socketFd, int line, MoveCmd moveCmd);

moveComm 函数原型:

cpp
Result job_insert_moveComm(SOCKETFD socketFd, int line, std::string moveType, double m_vel, double m_acc, double m_dec, int m_time, int m_pl);

使用示例(插入 MoveJ 指令):

cpp
MoveCmd cmd;
cmd.coord = 0;          // 关节坐标
cmd.velocity = 80;      // 速度 80%
cmd.acc = 50;
cmd.dec = 50;

// 在第 5 行插入 MoveJ 指令
Result result = job_insert_moveJ(fd, 5, cmd);

7.6 延迟、IO、逻辑控制指令插入 ​

接口指令说明
job_insert_timer_commandTIMER延时指令,time 单位秒
job_insert_io_out_commandIO_OUTIO 输出指令,参数 IOCommandParams
job_insert_untilUNTIL直到循环开始(条件组 + 逻辑类型)
job_insert_end_untilEND_UNTIL直到循环结束
job_insert_whileWHILE条件循环开始
job_insert_end_whileEND_WHILE条件循环结束
job_insert_ifIF条件判断开始
job_insert_end_ifEND_IF条件判断结束
job_insert_labelLABEL标签指令,label 为标签名
job_insert_jumpJUMP跳转指令(条件组 + 跳转条件标志 + 目标标签)

条件指令通用参数:

参数类型说明
conditionGroupsstd::vector<std::vector<Condition>>条件组的二维向量
logicstd::vector<int>第一层逻辑类型,0=与,1=或
logicGroupstd::vector<std::vector<int>>第二层逻辑类型,0=与,1=或

使用示例(插入延时指令):

cpp
// 在第 3 行插入 2 秒延时
Result result = job_insert_timer_command(fd, 3, 2.0);

使用示例(插入 IF 指令):

cpp
std::vector<std::vector<Condition>> conds;   // 构造条件组...
std::vector<int> logic = {0};                // 第一层"与"
std::vector<std::vector<int>> logicGroup = {{0}};

Result result = job_insert_if(fd, 5, conds, logic, logicGroup);

7.7 工艺指令插入 ​

视觉工艺指令 ​

接口指令说明
job_insert_vision_craft_startVISION_RUN开始视觉,参数 id 为工艺号
job_insert_vision_craft_get_posVISION_POS获取视觉位置,posName 为存放位置变量名(如 GP0001)
job_insert_vision_craft_trajectoryVISION_TARCE获取视觉轨迹位置(24.03 可用),参数 VisualTrajectoryPosition
job_insert_vision_craft_visual_triggerVISION_POS触发视觉,参数 id 为工艺号
job_insert_vision_craft_visual_endVISION_END视觉结束,参数 id 为工艺号

使用示例:

cpp
// 在第 5 行插入视觉开始指令(工艺号 1)
Result result = job_insert_vision_craft_start(fd, 5, 1);

传送带工艺指令 ​

接口指令说明
job_insert_conveyor_check_posCONVEYOR_CHECKPOS传送带工件检测开始
job_insert_conveyor_check_endCONVEYOR_CHECKEND传送带工件检测结束
job_insert_conveyor_onCONVEYOR_ON传送带跟踪开始(posTtype:0=手动传点位,1=默认工件点;vel 范围 [2,2000]mm/s;acc 范围 [1,100]%)
job_insert_conveyor_offCONVEYOR_OFF传送带跟踪结束
job_insert_conveyor_posCONVEYOR_POS获取传送带跟踪位置,posName 为全局点位名
job_insert_conveyor_clearCONVEYOR_POS清除传送带跟踪目标(removeType:0=全部目标,1=本次目标)
job_insert_conveyor_waitCONVEYOR_Wait传送带等料(24.03 可用),参数含超时时间/来料结果/来料位置

CONVEYOR_ON 函数原型:

cpp
Result job_insert_conveyor_on(SOCKETFD socketFd, int line, int id, int postype, std::vector<double> pos, int vel, int acc);

使用示例:

cpp
// 在第 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_cilCIL相贯线指令(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 ​

插入声明协调参数指令。

函数原型:

cpp
Result job_insert_tasks(SOCKETFD socketFd, int line, int crafId, std::vector<int> robotGroup);
Result job_insert_tasks_rbobt(SOCKETFD socketFd, int robotNum, int line, int crafId, std::vector<int> robotGroup);

参数说明:

参数类型说明
socketFdSOCKETFD连接句柄
robotNumint机器人编号 (1-4),仅 _robot 版本
lineint插入位置
crafIdint协调任务号,范围 1-999
robotGroupstd::vector<int>需要同步的机器人组,传入需要同步的机器人编号 1-4

返回值: SUCCESS(0) 表示成功,负数表示失败。

使用示例:

cpp
// 声明协调任务 1,同步机器人 1 和 2
std::vector<int> group = {1, 2};
Result result = job_insert_tasks(fd, 10, 1, group);

job_insert_wait_sync_task / job_insert_wait_sync_task_rbobt ​

插入等待任务同步点指令。

函数原型:

cpp
Result job_insert_wait_sync_task(SOCKETFD socketFd, int line, int crafId, std::string waitSignal);
Result job_insert_wait_sync_task_rbobt(SOCKETFD socketFd, int robotNum, int line, int crafId, std::string waitSignal);

参数说明:

参数类型说明
socketFdSOCKETFD连接句柄
robotNumint机器人编号 (1-4),仅 _robot 版本
lineint插入位置
crafIdint协调任务号,范围 1-999
waitSignalstd::string同步信号量

返回值: SUCCESS(0) 表示成功,负数表示失败。

使用示例:

cpp
// 等待协调任务 1 的同步信号 "SYNC_1"
Result result = job_insert_wait_sync_task(fd, 12, 1, "SYNC_1");

7.9 断点与续跑 ​

断点续跑能省掉现场重新对位的时间,但断点什么时候会丢一直没有成文口径,导致「昨天还能续跑,今天不行」。本节说明断点的产生、清除条件、续跑与从头启动。

上位机侧只有续跑入口,断点由控制器管理

断点是控制器侧状态,清除条件由控制器决定。本节涉及的 NRC_* 接口属控制器二开 API(不在 nrc_*.h 里),见控制器 · 作业文件-指令操作;上位机侧的续跑入口只有 job_break_point_run。

断点是什么 ​

  • 作业运行过程中,控制器会记录「当前作业文件 + 当前行号 + 运行上下文」,用于中断后从原位置继续。
  • 断点属于控制器侧状态,不是上位机保存的;上位机断开连接、重启程序不会清除断点。
  • 是否允许续跑,取决于断点是否仍然「有效」(见下方「旧断点失效」)。

断点清除条件 ​

下表为现场确认口径,按触发类型分组。固件版本不同可能有增删,升级后请以实测为准。

一、正常与人工操作

条件说明
作业正常运行结束跑完即无断点
急停,且配置了 IO 复位复位动作会清断点
在示教器上导入程序覆盖作业内容
使用 startOver=true 从头启动JSON 协议重头运行见程序运行控制
回复位点 / 执行复位程序现场恢复流程的一部分

二、旧断点失效(断点还在,但判定为不可恢复)

出现任一情况,控制器不再允许从旧断点续跑:

  • 没有原运行上下文(控制器重启后上下文丢失);
  • 作业文件名不一致;
  • 断点行号小于 1;
  • 当前行所属作业与断点记录的作业不一致;
  • 断点保存模式与当前模式不同;
  • 调用程序或子程序被修改;
  • 工艺状态不允许恢复。

三、异常与失败

条件说明
作业打开失败、文件为空、语法错误、插补错误等异常退出运行未正常建立
断点续跑计算失败或恢复超时续跑请求本身失败

四、配置与模式变更

条件说明
修改机型、轴映射、DH、关节参数机器人对象重建,断点上下文失效
切换追加运行等特殊模式与作业运行上下文不兼容

五、接口主动触发

条件说明
自定义错误 NRC_TriggerErrorReport(控制器侧接口)会主动发送清断点命令,见控制器 · 作业文件-指令操作
带「保留断点」语义的错误上报接口(控制器侧)按版本提供,是否可用见本节「版本差异与待核」

续跑与从头启动 ​

需求做法说明
从中断位置继续job_break_point_run(jobName)需要运行模式,见 §7.3
从头重新跑job_run + JSON 协议 startOver=1C++ 接口无 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)在客户群中已被提及为新增能力,但当前仓库文档与头文件中尚未收录,使用前请向研发确认所在版本,不要按本节描述直接调用。
  • 断点清除条件清单来自现场核对,个别条目(如「切换追加运行」)与固件版本相关,升级后建议回归验证。
  • 断点是否跨控制器重启保留,各版本行为不一致,属待补项。