作业运动控制接口

作业控制接口

头文件:include/tl_interface.h

1. job_insert_moveJ - 作业里添加关节运动关节空间运动

方法:job_insert_moveJ(SOCKETFD socketFd, int line, MoveCmd moveCmd);

功能描述:在作业文件指定行插入一条关节空间运动(MoveJ)指令,需使用P 变量模式。

参数:

  • socketFd:已连接的句柄。
  • line:插入的位置行号。
  • moveCmd:运动指令结构体MoveCmd,包含目标位置和运动参数
    • targetPosType:设为 PosType::PType。
    • targetPosName:点位变量名,如 "P0001"。
    • coord:0(关节坐标系)。
    • targetPosValue:std::vector<double>,长度至少6,存储目标角度(度)。
    • velocity:速度百分比(1~100)。
    • acc、dec:加速度/减速度百分比。
    • pl:平滑度(0表示精确到达)。

返回值:

  • 0:成功
  • 非 0:失败

使用示例:

Python
import tl_interface as tl

# 建立连接

socket_fd = tl.connect_robot("192.168.1.13", "6001")

cmd = tl.MoveCmd()

cmd.targetPosType = tl.PosType.PType

cmd.targetPosName = "P0001"

cmd.coord = 0                # 关节坐标系

cmd.velocity = 40

cmd.acc = 10

cmd.dec = 10

cmd.pl = 0

cmd.targetPosValue = tl.VectorDouble([0.0] * 14)

ret = tl.job_insert_moveJ(socket_fd, 1, cmd)

if ret == 0:

    print("[INFO] 作业文件插入MoveJ成功")

else:

    print(f"[ERROR] 作业文件插入MoveJ失败,错误码:{ret}")

2. job_insert_moveL - 作业里添加关节运动笛卡尔空间直线运动

方法:job_insert_moveL(SOCKETFD socketFd, int line, MoveCmd moveCmd);

功能描述:插入笛卡尔空间直线运动(MoveL)指令。

参数:

  • socketFd:已连接的句柄。
  • line:插入的位置行号。
  • moveCmd:运动指令结构体MoveCmd,包含目标位置和运动参数。
    • targetPosType:设为 PosType::PType。
    • targetPosName:点位变量名,如 "P0001"。
    • coord:1(直角坐标系)。
    • targetPosValue:X(mm),Y(mm),Z(mm),RX(rad),RY(rad),RZ(rad)X(mm),Y(mm),Z(mm),RX(rad),RY(rad),RZ(rad)。
    • velocity:速度百分比(1~100)。
    • acc、dec:加速度/减速度百分比。
    • pl:平滑度(0表示精确到达)。

返回值:

  • 0:成功
  • 非 0:失败

使用示例:

Python
import tl_interface as tl

# 建立连接

socket_fd = tl.connect_robot("192.168.1.13", "6001")

cmd = tl.MoveCmd()

cmd.targetPosName = "P0002"

cmd.coord = 1                       # 直角坐标系

cmd.velocity = 40

cmd.acc = 10

cmd.dec = 10

cmd.pl = 0

cmd.targetPosValue = tl.VectorDouble([280, 0.0, 380, 3.14, 0.0, 0.0])

ret = tl.job_insert_moveL(socket_fd, 2, cmd)

if ret == 0:

    print("[INFO] 作业文件插入MoveL成功")

else:

    print(f"[ERROR] 作业文件插入MoveL失败,错误码:{ret}")

3. job_insert_moveC - 作业里添加关节运动笛卡尔空间圆弧运动

方法:job_insert_moveC(SOCKETFD socketFd, int line, MoveCmd moveCmd);

功能描述:插入笛卡尔空间圆弧运动(MoveC)指令。通常需要连续插入两条 MoveC 指令,第一条为圆弧中间点,第二条为终点。

参数:

  • socketFd:已连接的句柄。
  • line:插入的位置行号。
  • MoveCmd:运动指令结构体,包含目标位置和运动参数。
    • targetPosType:设为 PosType::PType。
    • targetPosName:点位变量名,如 "P0001"。
    • coord:1(直角坐标系)。
    • targetPosValue:为终点坐标,X(mm),Y(mm),Z(mm),RX(rad),RY(rad),RZ(rad)X(mm),Y(mm),Z(mm),RX(rad),RY(rad),RZ(rad)。
    • velocity:速度百分比(1~100)。
    • acc、dec:加速度/减速度百分比。
    • pl:平滑度(0表示精确到达)。

返回值:

  • 0:成功
  • 非 0:失败

使用示例:

Python
import tl_interface as tl

# 建立连接

socket_fd = tl.connect_robot("192.168.1.13", "6001")

cmd = tl.MoveCmd()

cmd.targetPosName = "P0003"

cmd.coord = 2                       # 工具坐标系

cmd.velocity = 40

cmd.acc = 10

cmd.dec = 10

cmd.pl = 0

cmd.targetPosValue = tl.VectorDouble([270, 0.0, 380, 3.14, 0.0, 0.0])

ret = tl.job_insert_moveC(socket_fd, 3, cmd)

if ret == 0:

    print("[INFO] 作业文件插入MoveC成功")

else:

    print(f"[ERROR] 作业文件插入MoveC失败,错误码:{ret}")

4. job_open - 打开指定作业文件

方法:job_open(SOCKETFD socketFd, const std::string& jobName);

功能描述:打开已存在的作业文件,使其成为当前激活程序(后续插入指令将写入该文件)。

参数:

  • socketFd:已连接的句柄。
  • jobName:作业文件名称。

返回值:

  • 0:成功
  • 非 0:失败

使用示例:

Python
import tl_interface as tl

# 建立连接

socket_fd = tl.connect_robot("192.168.1.13", "6001")

jobName = "TEST_PY"

ret = tl.job_open(socket_fd, jobName)

if ret == 0:

    print("[INFO] 打开作业文件成功")

else:

    print(f"[ERROR] 打开作业文件失败,错误码:{ret}")

5. job_create - 创建作业文件名

方法:job_create(SOCKETFD socketFd, const std::string& jobName);

功能描述:在控制器内新建一个空的作业文件(自动防止重名)。

参数:

  • socketFd:已连接的句柄。
  • jobName:作业文件名称。

返回值:

  • 0:成功
  • 非 0:失败

使用示例:

Python
# ----创建作业文件----

jobName = "TEST_PY"

print("[INFO] **********创建作业文件**********")

ret = job_create(socket_fd, jobName)

if ret != SUCCESS:

    print("[ERROR] 创建作业文件失败,程序退出!")

    return -1

print("[INFO] 创建作业文件成功")

6. job_get_all_jobfile_name - 获取全部作业文件名

方法:job_get_all_jobfile_name(SOCKETFD socketFd,std::vector<std::vector<std::string>>& robotsFile);

功能描述:获取控制器内所有作业文件列表(按机器人分组,通常只有一组)。

参数:

  • socketFd:已连接的句柄。
  • robotsFile:作业文件名称,二维数组,一维长度是4,对应4个机器人。

返回值:

  • 0:成功
  • 非 0:失败

使用示例:

Python
import tl_interface as tl

# 建立连接

socket_fd = tl.connect_robot("192.168.1.13", "6001")

all_job_names = tl.VectorVectorString()

ret = tl.job_get_all_jobfile_name(socket_fd, all_job_names)

if ret == 0:

    i = 1

    for job_names in all_job_names:

        for name in job_names:

            print(f"作业文件 {i} 名称: {name}")

            i += 1

else:

    print(f"获取作业文件名失败,错误码:{ret}")

7. job_run - 启动指定作业文件

方法: job_run(SOCKETFD socketFd, const std::string& jobName);

功能描述:启动运行已打开的作业文件(该功能需要在运行模式下使用,调用该接口时,控制器会自动进行伺服模式切换)。

参数:

  • socketFd:已连接的句柄。
  • jobName:作业文件名称。

返回值:

  • 0:成功
  • 非 0:失败

使用示例:

Python
# ----运行作业文件----

print("[INFO] **********运行作业文件**********")

jobName = "TEST_PY"

ret = job_run(socket_fd, jobName)

if ret != SUCCESS:

    print("[ERROR] 运行作业文件失败,程序退出!")

    return -1

print("[INFO] 运行作业文件成功")

print()