- 选型指南
- 概述
- 入门指南
- 机械臂参数
- 示教器使用
-
二次开发
-
API(C++)
- 快速开始
- 接口说明
- 7000端口接口说明
- 使用示例
- 返回值说明
-
API(Python)
- 快速开始
- 接口说明
- 7000端口接口说明
- 使用示例
- 返回值说明
- ROS2开发
-
API(C++)
- 相关下载
作业运动控制接口
头文件:include/tl_job_operate.h
相关示例代码:examples\cpp\ex_job_control.cpp
1. job_create - 创建作业文件名
方法:Result job_create(SOCKETFD socketFd, const std::string& jobName);
功能描述:在控制器内新建一个空的作业文件(自动防止重名)。
参数:
- socketFd:已连接的句柄。
- jobName:作业文件名。
返回值:
- 0:成功。
- 非0:失败(如文件已存在)。
使用示例:
// 创建作业文件
std::string job_name = "TEST_CPP";
auto ret = tl::job_create(socket_fd, job_name);
if (ret != tl::Result::SUCCESS) {
std::cerr << "[ERROR] 创建作业文件失败,错误码: " << ret << std::endl;
return -1;
}
std::cout << "[信息] 创建作业文件成功" << std::endl;
2. job_open - 打开指定作业文件
方法:Result job_open(SOCKETFD socketFd, const std::string& jobName);
功能描述:打开已存在的作业文件,使其成为当前激活程序(后续插入指令将写入该文件)。
参数:
- socketFd:已连接的句柄。
- jobName:作业文件名(如 "MY_JOB" 或 "MY_JOB.JOB")。
返回值:
- 0:成功。
- 非0:失败(文件不存在等)。
使用示例:
// 打开作业文件
auto ret = tl::job_open(socket_fd, job_name);
if (ret != tl::Result::SUCCESS) {
std::cerr << "[ERROR] 打开作业文件失败,错误码: " << ret << std::endl;
return -1;
}
std::cout << "[信息] 打开作业文件成功" << std::endl;
3. job_insert_moveJ - 作业里添加关节空间运动
方法:Result job_insert_moveJ(SOCKETFD socketFd, int line, MoveCmd moveCmd);
功能描述:在作业文件指定行插入一条关节空间运动(MoveJ)指令。
参数:
- socketFd:已连接的句柄。
- line:行号(从1开始)。
- moveCmd:运动命令结构体,需设置以下成员:
- targetPosType:目标位置类型,PosType 枚举(data / PType / E_TYPE / RP_TYPE / AP_TYPE / GPType / GEType)
- targetPosName:目标位置名称(如 "P0001")
- coord:坐标系,Coord 枚举(JOINT / BASE / TOOL / USER)
- velocity:速度
- acc:加速度
- dec:减速度
- pl:平滑度(0表示精确到达)
- targetPosValue:目标位置数据,长度 14(前 7 位本体值,后 7 位外部轴值)
返回值:
- 0:成功。
- 非0:失败(行号越界、参数错误等)。
使用示例:
// 作业文件插入 MoveJ(P 变量模式)
int line = 1;
tl::MoveCmd cmd;
cmd.targetPosType = tl::PosType::PType; // 使用 P 变量
cmd.targetPosName = "P0001";
cmd.coord = tl::Coord::JOINT; // 关节坐标系
cmd.velocity = 40;
cmd.acc = 10;
cmd.dec = 10;
cmd.pl = 0; // 精确到达
cmd.targetPosValue = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
auto ret = tl::job_insert_moveJ(socket_fd, line, cmd);
if (ret != tl::Result::SUCCESS) {
std::cerr << "[ERROR] 作业文件插入 MoveJ 失败,错误码: " << ret << std::endl;
return -1;
}
std::cout << "[信息] 作业文件插入 MoveJ 成功" << std::endl;
4. job_insert_moveL - 作业里添加笛卡尔空间直线运动
方法:Result job_insert_moveL(SOCKETFD socketFd, int line, MoveCmd moveCmd);
功能描述:插入笛卡尔空间直线运动(MoveL)指令。
参数:
- socketFd:已连接的句柄。
- line:行号(从1开始)。
- moveCmd:运动命令结构体,成员同 3.。
返回值:
- 0:成功。
- 非0:失败。
使用示例:
// 作业文件插入 MoveL(P 变量模式)
int line = 2;
tl::MoveCmd cmd;
cmd.targetPosType = tl::PosType::PType;
cmd.targetPosName = "P0002";
cmd.coord = tl::Coord::BASE; // 基坐标系(直角)
cmd.velocity = 40;
cmd.acc = 10;
cmd.dec = 10;
cmd.pl = 0;
cmd.targetPosValue = {280, 0.0, 380, 3.14, 0.0, 0.0}; // X, Y, Z, Rx, Ry, Rz
auto ret = tl::job_insert_moveL(socket_fd, line, cmd);
if (ret != tl::Result::SUCCESS) {
std::cerr << "[ERROR] 作业文件插入 MoveL 失败,错误码: " << ret << std::endl;
return -1;
}
std::cout << "[信息] 作业文件插入 MoveL 成功" << std::endl;
5. job_insert_moveC - 作业里添加笛卡尔空间圆弧运动
方法:Result job_insert_moveC(SOCKETFD socketFd, int line, MoveCmd moveCmd);
功能描述:插入笛卡尔空间圆弧运动(MoveC)指令。通常需要连续插入两条 MoveC 指令,第一条为圆弧中间点,第二条为终点。
参数:
- socketFd:已连接的句柄。
- line:行号(从1开始)。
- moveCmd:运动命令结构体,成员同 3.。
返回值:
- 0:成功。
- 非0:失败。
使用示例:
// 作业文件插入 MoveC(圆弧中间点 + 终点,共两条)
int line = 3;
tl::MoveCmd cmd;
cmd.targetPosType = tl::PosType::PType;
cmd.targetPosName = "P0003";
cmd.coord = tl::Coord::TOOL; // 工具坐标系
cmd.velocity = 40;
cmd.acc = 10;
cmd.dec = 10;
cmd.pl = 0;
// 第一条:圆弧中间点
cmd.targetPosValue = {270, 0.0, 380, 3.14, 0.0, 0.0};
auto ret = tl::job_insert_moveC(socket_fd, line, cmd);
if (ret != tl::Result::SUCCESS) {
std::cerr << "[ERROR] 作业文件插入 MoveC(中间点)失败,错误码: " << ret << std::endl;
return -1;
}
// 第二条:圆弧终点
cmd.targetPosValue = {240, 0.0, 380, 3.14, 0.0, 0.0};
ret = tl::job_insert_moveC(socket_fd, line, cmd);
if (ret != tl::Result::SUCCESS) {
std::cerr << "[ERROR] 作业文件插入 MoveC(终点)失败,错误码: " << ret << std::endl;
return -1;
}
std::cout << "[信息] 作业文件插入 MoveC 成功" << std::endl;
6. job_run - 启动指定作业文件
方法:Result job_run(SOCKETFD socketFd, const std::string& jobName);
功能描述:启动运行已打开的作业文件(该功能需要在运行模式下使用,调用该接口时,控制器会自动进行伺服模式切换)。
参数:
- socketFd:已连接的句柄。
- jobName:作业文件名。
返回值:
- 0:成功。
- 非0:失败(文件未打开、未使能等)。
使用示例:
// 运行作业文件
auto ret = tl::job_run(socket_fd, job_name);
if (ret != tl::Result::SUCCESS) {
std::cerr << "[ERROR] 运行作业文件失败,错误码: " << ret << std::endl;
return -1;
}
std::cout << "[信息] 运行作业文件成功" << std::endl;
7. job_get_all_jobfile_name - 获取全部作业文件名
方法:Result job_get_all_jobfile_name(SOCKETFD socketFd, std::vector<std::vector<std::string>>& robotsFile);
功能描述:获取控制器内所有作业文件列表(按机器人分组,通常只有一组)。
参数:
- socketFd:已连接的句柄。
- robotsFile:输出参数,二维字符串数组,每个元素是一个分组内的文件名列表。
返回值:
- 0:成功。
- 非0:失败。
使用示例:
// 获取所有作业文件名
std::vector<std::vector<std::string>> all_job_names;
auto ret = tl::job_get_all_jobfile_name(socket_fd, all_job_names);
if (ret != tl::Result::SUCCESS) {
std::cerr << "[ERROR] 获取作业文件名失败,错误码: " << ret << std::endl;
return -1;
}
int i = 1;
for (const auto& names : all_job_names) {
for (const auto& name : names) {
std::cout << "[信息] 作业文件 " << i++ << " 名称: " << name << std::endl;
}
}
