Skip to content

3.2 ControllerInfo 信息类

概述

ControllerInfo 负责控制器基础状态查询和少量基础控制,包括版本、控制器状态、机器人状态、伺服状态、软模式、用户操作模式,以及上位机保活动作。

使用前提

ControllerInfo 所有接口都依赖 Arm::Connect() 先成功。如果接口模块未绑定:

  • 查询接口返回空字符串或 UNKNOWN ,状态码为 OTHER_ERR
  • 控制接口通常返回 OTHER_ERR
  • AcquireAccess() / ReleaseAccess() 没有状态码;未连接时直接返回

3.2.1 查询接口

3.2.1.1 获取机器人控制器版本

cpp
GetControllerVersion() -> std::pair<std::string, STATUS_CODE>
说明
描述获取捷勃特机器人控制器当前版本
请求参数无参数
返回值std::string: 控制器版本
STATUS_CODE: 函数执行结果
备注Arm::Connect() 内部也会读取该版本,并回填到 arm.version
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

3.2.1.2 获取当前控制器运行状态

cpp
GetCtrlStatus() -> std::pair<CtrlStatusEnum, STATUS_CODE>
说明
描述获取捷勃特机器人控制器当前运行状态
请求参数无参数
返回值CtrlStatusEnum: 控制器运行状态
STATUS_CODE: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

3.2.1.3 获取机器人运行状态

cpp
GetRobotStatus() -> std::pair<RobotStatusEnum, STATUS_CODE>
说明
描述获取捷勃特机器人运行状态
请求参数无参数
返回值RobotStatusEnum: 机器人运行状态
STATUS_CODE: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

3.2.1.4 获取当前伺服控制器状态

cpp
GetServoStatus() -> std::pair<ServoStatusEnum, STATUS_CODE>
说明
描述获取捷勃特机器人伺服控制器当前状态
请求参数无参数
返回值ServoStatusEnum: 伺服控制器状态
STATUS_CODE: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

3.2.1.5 获取当前机器人型号

cpp
GetArmModelInfo() -> std::pair<std::string, STATUS_CODE>
说明
描述获取当前机器人型号信息
请求参数无参数
返回值std::string: 机器人型号如 "GBT-C5A"
STATUS_CODE: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

3.2.1.6 获取机器人当前的软状态

cpp
GetSoftMode() -> std::pair<SoftModeEnum, STATUS_CODE>
说明
描述获取捷勃特机器人当前的软状态(PC 模式下的手 / 自动状态)
请求参数无参数
返回值SoftModeEnum: 软状态
STATUS_CODE: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

3.2.1.7 获取机器人操作模式

cpp
GetOpMode() -> std::pair<OpModeEnum, STATUS_CODE>
说明
描述获取当前机器人操作模式(如机器人 / 虚拟控制器的手动、自动等操作权限状态)。
请求参数无参数
返回值OpModeEnum: 操作模式
STATUS_CODE: 函数执行结果
备注当控制器未返回有效模式时将回退为 OpModeEnum::UNKNOWN
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

3.2.2 控制接口

3.2.2.1 机器人伺服上电

cpp
ServoOn() -> STATUS_CODE
说明
描述使捷勃特机器人伺服上电
请求参数无参数
返回值STATUS_CODE: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

3.2.2.2 机器人伺服下电

cpp
ServoOff() -> STATUS_CODE
说明
描述使捷勃特机器人伺服下电
请求参数无参数
返回值STATUS_CODE: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

3.2.2.3 机器人伺服重置

cpp
ServoReset() -> STATUS_CODE
说明
描述使捷勃特机器人伺服重置
请求参数无参数
返回值STATUS_CODE: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

3.2.2.4 设置机器人当前的软状态

cpp
SetSoftMode(SoftModeEnum mode) -> STATUS_CODE
说明
描述设置机器人当前的软状态(PC 模式下的手 / 自动状态)
请求参数mode : SoftModeEnum 软状态值
返回值STATUS_CODE: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

3.2.2.5 设置机器人操作模式

cpp
SetOpMode(OpModeEnum mode) -> STATUS_CODE
说明
描述设置机器人操作模式,仅支持虚拟机器人 / 仿真控制器。
请求参数mode : OpModeEnum 目标操作模式 (不能为 UNKNOWN )。
返回值STATUS_CODE: 函数执行结果
备注如果传入 OpModeEnum::UNKNOWN ,接口将返回 UNSUPPORTED_PARAMETER
兼容的机器人软件版本协作 (Copper): 仅仿真;工业 (Bronze): 仅仿真

3.2.2.6 设置机器人 LED 指示灯

cpp
SwitchLedLight(bool mode) -> STATUS_CODE
说明
描述控制捷勃特机器人的 LED 指示灯开关
请求参数mode : bool 指示灯状态 (true 打开,false 关闭)
返回值STATUS_CODE: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.1.3+
工业 (Bronze): 不支持

3.2.2.7 机器人紧急停止

cpp
Estop() -> STATUS_CODE
说明
描述使捷勃特机器人紧急停止
请求参数无参数
返回值STATUS_CODE: 函数执行结果
兼容的机器人软件版本协作 (Copper): v7.5.0.0+
工业 (Bronze): v7.5.0.0+

3.2.3 控制权限接口

3.2.3.1 上位机获取操作权限

cpp
AcquireAccess()
说明
描述上位机获取操作权限,使机器人进入 PC 模式。SDK 会定时向控制器发送保活。
请求参数无参数
返回值无返回
行为- 未连接时直接返回
- 每次调用前会先执行一次 ReleaseAccess() ,避免重复注册
- SDK 会在 Arm 专用网络线程上注册一个 2000ms 的保活定时任务
备注仅工业机器人需要调用此接口保持 PC 模式,协作机器人及 P7A 无需使用。
兼容的机器人软件版本协作 (Copper): 不支持
工业 (Bronze): v7.5.0.0+

3.2.3.2 上位机返还操作权限

cpp
ReleaseAccess()
说明
描述上位机返还操作权限,使机器人退出 PC 模式,并停止 AcquireAccess() 注册的保活定时任务。
请求参数无参数
返回值无返回
行为- 取消当前会话上的保活定时任务
- Arm::Disconnect()ControllerInfo::Reset() 和析构流程也会主动调用它
备注仅工业机器人需要调用此接口。
兼容的机器人软件版本协作 (Copper): 不支持
工业 (Bronze): v7.5.0.0+

常见返回值解释

场景返回
未连接时调用查询接口OTHER_ERR ,同时数据位回落到空字符串或 UNKNOWN
未连接时调用控制接口OTHER_ERR
AcquireAccess / ReleaseAccess 在未连接时调用直接返回,无额外错误码

调用建议

  1. 连接后先用 GetControllerVersion()GetArmModelInfo() 做设备识别。
  2. 写模式前先读模式,避免盲写。
  3. AcquireAccess() 常见于 PUMA / 工业机器人 PC 模式保活场景;协作机器人通常不需要。

最小调用示例

cpp
#include <iostream>  // 引入标准输出流,用于打印查询结果
#include "arm_api.h"  // 引入 Arm 主入口,连接后通过 arm.controllerInfo 访问信息接口
#include "status_code.h"  // 引入 STATUS_CODE,用于检查 SDK 调用结果
int main()  // 示例程序入口
{  // 进入示例主函数
    Arm arm;  // 创建机器人会话对象
    STATUS_CODE connectRet = arm.Connect("192.168.110.2", "");  // 连接控制器,示教器地址留空表示使用默认规则
    if (connectRet != STATUS_CODE::OK) {  // 判断连接是否失败
        return 1;  // 连接失败时直接退出
    }  // 结束连接结果判断
    auto [version, versionRet] = arm.controllerInfo.GetControllerVersion();  // 查询控制器版本字符串
    auto [servoStatus, servoRet] = arm.controllerInfo.GetServoStatus();  // 查询当前伺服状态
    auto [softMode, softModeRet] = arm.controllerInfo.GetSoftMode();  // 查询当前软模式
    auto [opMode, opModeRet] = arm.controllerInfo.GetOpMode();  // 查询当前操作模式
    if (versionRet != STATUS_CODE::OK ||  // 判断控制器版本查询是否失败
        servoRet != STATUS_CODE::OK ||  // 判断伺服状态查询是否失败
        softModeRet != STATUS_CODE::OK ||  // 判断软模式查询是否失败
        opModeRet != STATUS_CODE::OK) {  // 判断操作模式查询是否失败
        return 1;  // 任一查询失败时返回错误码
    }  // 结束查询结果判断
    std::cout << "version=" << version << "\n";  // 打印控制器版本
    std::cout << "servo_status=" << static_cast<int>(servoStatus) << "\n";  // 打印伺服状态枚举值
    std::cout << "soft_mode=" << static_cast<int>(softMode) << "\n";  // 打印软模式枚举值
    std::cout << "op_mode=" << static_cast<int>(opMode) << "\n";  // 打印操作模式枚举值
    arm.controllerInfo.AcquireAccess();  // 工业机器人 PC 模式场景下获取操作权限并启动保活
    arm.controllerInfo.ReleaseAccess();  // 示例结束前释放操作权限并停止保活
    return 0;  // 示例正常结束
}  // 结束示例主函数

场景化示例

下面几组片段按 “只读状态、模式设置、动作控制、PC 权限” 交叉覆盖本页 API。片段默认承接最小调用示例里已经连接成功的 arm 对象;会改变机器人状态的调用保持注释,确认现场后再执行。

读取版本、型号和状态

cpp
auto [version, versionRet] = arm.controllerInfo.GetControllerVersion();  // 读取控制器版本
auto [model, modelRet] = arm.controllerInfo.GetArmModelInfo();  // 读取机器人型号
auto [ctrlStatus, ctrlRet] = arm.controllerInfo.GetCtrlStatus();  // 读取控制器运行状态
auto [robotStatus, robotRet] = arm.controllerInfo.GetRobotStatus();  // 读取机器人运行状态
auto [servoStatus, servoRet] = arm.controllerInfo.GetServoStatus();  // 读取伺服状态
if (versionRet == STATUS_CODE::OK && modelRet == STATUS_CODE::OK && ctrlRet == STATUS_CODE::OK && robotRet == STATUS_CODE::OK && servoRet == STATUS_CODE::OK) {  // 判断基础状态查询是否成功
    std::cout << "version=" << version << " model=" << model << "\n";  // 打印版本和型号
    std::cout << "ctrl=" << static_cast<int>(ctrlStatus) << " robot=" << static_cast<int>(robotStatus) << " servo=" << static_cast<int>(servoStatus) << "\n";  // 打印三类运行状态
}  // 结束基础状态查询判断

读取和设置模式

cpp
auto [softMode, softRet] = arm.controllerInfo.GetSoftMode();  // 读取当前软模式
auto [opMode, opRet] = arm.controllerInfo.GetOpMode();  // 读取当前操作模式
if (softRet == STATUS_CODE::OK && opRet == STATUS_CODE::OK) {  // 判断模式读取是否成功
    std::cout << "soft=" << static_cast<int>(softMode) << " op=" << static_cast<int>(opMode) << "\n";  // 打印模式状态
}  // 结束模式读取判断
// STATUS_CODE setSoftRet = arm.controllerInfo.SetSoftMode(softMode);  // 设置软模式会改变控制器模式,确认后再执行
// STATUS_CODE setOpRet = arm.controllerInfo.SetOpMode(opMode);  // 设置操作模式会改变控制器模式,确认后再执行

伺服、LED 和急停动作

cpp
// STATUS_CODE servoOnRet = arm.controllerInfo.ServoOn();  // 请求伺服上电会改变机器人状态,确认安全后再执行
// STATUS_CODE servoOffRet = arm.controllerInfo.ServoOff();  // 请求伺服下电会改变机器人状态,确认现场后再执行
// STATUS_CODE resetRet = arm.controllerInfo.ServoReset();  // 请求伺服复位会改变机器人状态,确认现场后再执行
// STATUS_CODE ledRet = arm.controllerInfo.SwitchLedLight(true);  // 切换 LED 状态会改变控制器输出,确认后再执行
// STATUS_CODE estopRet = arm.controllerInfo.Estop();  // 触发急停会立即改变安全状态,仅在明确需要时执行

工业机器人 PC 权限

cpp
// arm.controllerInfo.AcquireAccess();  // 工业机器人 PC 模式下获取操作权限并启动保活
// arm.controllerInfo.ReleaseAccess();  // 工业机器人 PC 模式下释放操作权限并停止保活

示例代码

cpp17/info_get_controller_version/src/query_version_and_model/run.cpp
cpp
#include <iostream>
#include "arm_api.h"
#include "status_code.h"

#include "query_version_and_model/run.h"

/**
 * 查询版本与型号门面。
 * @return 0 表示成功,否则返回 1。
 */
int RunInfoGetControllerVersionQueryVersionAndModel(void)
{
    // [ZH] 连接机器人,请直接修改下面的魔鬼字符串。
    // [EN] Connect to the robot and edit the hard-coded magic strings below directly.
    Arm arm;
    STATUS_CODE connectRet = arm.Connect("10.27.1.2", "10.27.1.102");
    if (connectRet != STATUS_CODE::OK) {
        std::cerr << "[cpp17_info_basic] 连接机器人失败 / Connect to the robot failed, 状态码 / Status code: "
                  << static_cast<int>(connectRet) << "\n";
        return 1;
    }
    std::cout << "[cpp17_info_basic] 机器人连接成功 / Robot connected successfully\n";
    // [ZH] 获取控制器版本和机械臂型号。
    // [EN] Get the controller version and robot model.
    std::pair<std::string, STATUS_CODE> versionPair = arm.controllerInfo.GetControllerVersion();
    std::pair<std::string, STATUS_CODE> modelPair = arm.controllerInfo.GetArmModelInfo();
    std::cout << "[cpp17_info_basic] GetControllerVersion 状态码 / GetControllerVersion status code: "
              << static_cast<int>(versionPair.second)
              << ", 版本 / Version: " << versionPair.first << "\n";
    std::cout << "[cpp17_info_basic] GetArmModelInfo 状态码 / GetArmModelInfo status code: "
              << static_cast<int>(modelPair.second)
              << ", 型号 / Model: " << modelPair.first << "\n";

    // [ZH] 断开连接,结束示例。
    // [EN] Disconnect and finish the example.
    arm.Disconnect();
    std::cout << "[cpp17_info_basic] 示例结束 / Example finished\n";
    return 0;
}
cpp17/info_state_modes/src/query_state_modes/run.cpp
cpp
#include <iostream>
#include "arm_api.h"
#include "status_code.h"

#include "query_state_modes/run.h"

/**
 * 查询状态与模式门面。
 * @return 0 表示成功,否则返回 1。
 */
int RunInfoStateModesQueryStateModes(void)
{
    // [ZH] 连接机器人,请直接修改下面的魔鬼字符串。
    // [EN] Connect to the robot and edit the hard-coded magic strings below directly.
    Arm arm;
    STATUS_CODE connectRet = arm.Connect("10.27.1.2", "10.27.1.102");
    if (connectRet != STATUS_CODE::OK) {
        std::cerr << "[cpp17_arm_state] 连接机器人失败 / Connect to the robot failed, 状态码 / Status code: "
                  << static_cast<int>(connectRet) << "\n";
        return 1;
    }
    std::cout << "[cpp17_arm_state] 机器人连接成功 / Robot connected successfully\n";
    // [ZH] 获取伺服状态、软模式和操作模式。
    // [EN] Get the servo status, soft mode, and operation mode.
    std::pair<ServoStatusEnum, STATUS_CODE> servoPair = arm.controllerInfo.GetServoStatus();
    std::pair<SoftModeEnum, STATUS_CODE> softPair = arm.controllerInfo.GetSoftMode();
    std::pair<OpModeEnum, STATUS_CODE> opPair = arm.controllerInfo.GetOpMode();
    std::cout << "[cpp17_arm_state] GetServoStatus 状态码 / GetServoStatus status code: "
              << static_cast<int>(servoPair.second)
              << ", 伺服状态 / Servo status: " << static_cast<int>(servoPair.first) << "\n";
    std::cout << "[cpp17_arm_state] GetSoftMode 状态码 / GetSoftMode status code: "
              << static_cast<int>(softPair.second)
              << ", 软模式 / Soft mode: " << static_cast<int>(softPair.first) << "\n";
    std::cout << "[cpp17_arm_state] GetOpMode 状态码 / GetOpMode status code: "
              << static_cast<int>(opPair.second)
              << ", 操作模式 / Operation mode: " << static_cast<int>(opPair.first) << "\n";

    // [ZH] 断开连接,结束示例。
    // [EN] Disconnect and finish the example.
    arm.Disconnect();
    std::cout << "[cpp17_arm_state] 示例结束 / Example finished\n";
    return 0;
}
cpp17/info_state_modes/src/write_back_modes/run.cpp
cpp
#include <iostream>
#include "arm_api.h"
#include "status_code.h"

#include "write_back_modes/run.h"

/**
 * 写回软模式与操作模式门面。
 * @return 0 表示成功,否则返回 1。
 */
int RunInfoStateModesWriteBackModes(void)
{
    // [ZH] 连接机器人,请直接修改下面的魔鬼字符串。
    // [EN] Connect to the robot and edit the hard-coded magic strings below directly.
    Arm arm;
    STATUS_CODE connectRet = arm.Connect("10.27.1.2", "10.27.1.102");
    if (connectRet != STATUS_CODE::OK) {
        std::cerr << "[cpp17_arm_state] 连接机器人失败 / Connect to the robot failed, 状态码 / Status code: "
                  << static_cast<int>(connectRet) << "\n";
        return 1;
    }
    std::cout << "[cpp17_arm_state] 机器人连接成功 / Robot connected successfully\n";
    // [ZH] 读取并写回软模式与操作模式。
    // [EN] Read and write back the soft mode and operation mode.
    std::pair<SoftModeEnum, STATUS_CODE> softPair = arm.controllerInfo.GetSoftMode();
    std::pair<OpModeEnum, STATUS_CODE> opPair = arm.controllerInfo.GetOpMode();
    STATUS_CODE setSoftRet = arm.controllerInfo.SetSoftMode(softPair.first);
    STATUS_CODE setOpRet = arm.controllerInfo.SetOpMode(opPair.first);
    std::cout << "[cpp17_arm_state] SetSoftMode 状态码 / SetSoftMode status code: "
              << static_cast<int>(setSoftRet) << "\n";
    std::cout << "[cpp17_arm_state] SetOpMode 状态码 / SetOpMode status code: "
              << static_cast<int>(setOpRet) << "\n";

    // [ZH] 断开连接,结束示例。
    // [EN] Disconnect and finish the example.
    arm.Disconnect();
    std::cout << "[cpp17_arm_state] 示例结束 / Example finished\n";
    return 0;
}
cpp17/info_state_modes/src/access_control/run.cpp
cpp
#include <iostream>
#include "arm_api.h"
#include "status_code.h"

#include "access_control/run.h"

/**
 * 获取和归还控制权门面。
 * @return 0 表示成功,否则返回 1。
 */
int RunInfoStateModesAccessControl(void)
{
    // [ZH] 连接机器人,请直接修改下面的魔鬼字符串。
    // [EN] Connect to the robot and edit the hard-coded magic strings below directly.
    Arm arm;
    STATUS_CODE connectRet = arm.Connect("10.27.1.2", "10.27.1.102");
    if (connectRet != STATUS_CODE::OK) {
        std::cerr << "[cpp17_arm_state] 连接机器人失败 / Connect to the robot failed, 状态码 / Status code: "
                  << static_cast<int>(connectRet) << "\n";
        return 1;
    }
    std::cout << "[cpp17_arm_state] 机器人连接成功 / Robot connected successfully\n";
    // [ZH] 获取并归还 SDK 控制权。
    // [EN] Acquire and release the SDK access token.
    arm.controllerInfo.AcquireAccess();
    std::cout << "[cpp17_arm_state] 已获取控制权 / SDK access acquired\n";
    arm.controllerInfo.ReleaseAccess();
    std::cout << "[cpp17_arm_state] 已归还控制权 / SDK access released\n";

    // [ZH] 断开连接,结束示例。
    // [EN] Disconnect and finish the example.
    arm.Disconnect();
    std::cout << "[cpp17_arm_state] 示例结束 / Example finished\n";
    return 0;
}
cpp17/info_state_modes/src/action_apis/run.cpp
cpp
#include <iostream>
#include "arm_api.h"
#include "status_code.h"

#include "action_apis/run.h"

/**
 * 动作接口门面。
 * @return 0 表示成功,否则返回 1。
 */
int RunInfoStateModesActionApis(void)
{
    // [ZH] 连接机器人,请直接修改下面的魔鬼字符串。
    // [EN] Connect to the robot and edit the hard-coded magic strings below directly.
    Arm arm;
    STATUS_CODE connectRet = arm.Connect("10.27.1.2", "10.27.1.102");
    if (connectRet != STATUS_CODE::OK) {
        std::cerr << "[cpp17_arm_state] 连接机器人失败 / Connect to the robot failed, 状态码 / Status code: "
                  << static_cast<int>(connectRet) << "\n";
        return 1;
    }
    std::cout << "[cpp17_arm_state] 机器人连接成功 / Robot connected successfully\n";
    // [ZH] 顺序执行全部动作接口。
    // [EN] Execute all action APIs in sequence.
    STATUS_CODE servoOnRet = arm.controllerInfo.ServoOn();
    STATUS_CODE servoOffRet = arm.controllerInfo.ServoOff();
    STATUS_CODE ledRet = arm.controllerInfo.SwitchLedLight(true);
    STATUS_CODE resetRet = arm.controllerInfo.ServoReset();
    STATUS_CODE estopRet = arm.controllerInfo.Estop();
    std::cout << "[cpp17_arm_state] ServoOn 状态码 / ServoOn status code: "
              << static_cast<int>(servoOnRet) << "\n";
    std::cout << "[cpp17_arm_state] ServoOff 状态码 / ServoOff status code: "
              << static_cast<int>(servoOffRet) << "\n";
    std::cout << "[cpp17_arm_state] SwitchLedLight 状态码 / SwitchLedLight status code: "
              << static_cast<int>(ledRet) << "\n";
    std::cout << "[cpp17_arm_state] ServoReset 状态码 / ServoReset status code: "
              << static_cast<int>(resetRet) << "\n";
    std::cout << "[cpp17_arm_state] Estop 状态码 / Estop status code: "
              << static_cast<int>(estopRet) << "\n";

    // [ZH] 断开连接,结束示例。
    // [EN] Disconnect and finish the example.
    arm.Disconnect();
    std::cout << "[cpp17_arm_state] 示例结束 / Example finished\n";
    return 0;
}