Skip to content

七、作业文件操作(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 作业运行控制

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_insert_moveJMoveJ关节运动指令
job_insert_moveLMoveL直线运动指令
job_insert_moveCMoveC圆弧运动指令
job_insert_imoveIMOVE增量运动指令(moveCmd.targetPosType = 3moveCmd.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");