模式与 IO 控制接口

头文件: cpp/interface/nrc_interface.h(模式)和 cpp/interface/nrc_io.h(IO)

1. set_current_mode - 设置机器人模式(切换示教模式和运动模式)

方法: int set_current_mode(SOCKETFD socket_fd, int mode);

功能描述: 切换控制器运行模式:0=示教模式(手动),1=远程模式,2=自动模式(运行作业)。

参数:

  • socket_fd:已连接的句柄
  • mode:模式代号(0=示教,1=远程,2=自动)

返回值:

  • int
    • 0:成功
    • 负值:失败

使用示例:

C++
bool test_set_current_mode(int mode) {
    if (socket_fd_6001_ <= 0) return false;
    // 调用底层接口,切换机械臂的当前运行模式
    int ret = set_current_mode(socket_fd_6001_, mode);
    // 根据传入的模式代码,映射对应的文本描述用于日志输出
    std::string mode_msg = "未知模式";
    switch (mode) {
        case 0: mode_msg = "手动/示教模式"; break;
        case 1: mode_msg = "自动/运行模式"; break;
        case 2: mode_msg = "远程模式"; break;
    }
    CHECK_RET(ret, "设置当前模式为:" + mode_msg);
    return ret == SUCCESS;
}

2. set_digital_output - 设置数字IO输出

方法: int set_digital_output(SOCKETFD socket_fd, int port, int value);

功能描述: 设置指定数字输出端口的状态。value:1高电平,0低电平。

参数:

  • socket_fd:已连接的句柄
  • port:端口号
  • value:电平值(0或1)

返回值:

  • int
    • 0:成功
    • 负值:失败

使用示例:

C++
bool test_set_digital_output(int port, int value) {
    if (socket_fd_6001_ <= 0) return false;
    // 调用底层接口,设置指定端口号的数字量输出(DO)状态值
    int ret = set_digital_output(socket_fd_6001_, port, value);
    // 根据传入的value值(1或0),映射为对应的电平状态描述用于日志输出
    std::string val_msg = (value == 1) ? "高电平(开启)" : "低电平(关闭)";
    CHECK_RET(ret, "设置数字量输出 [端口: " + std::to_string(port) + "] 为 " + val_msg);
    return ret == SUCCESS;
}

3. get_digital_output - 获取所有数字IO输出

方法: int get_digital_output(SOCKETFD socket_fd, std::vector<int>& out_vector);

功能描述: 读取所有数字输出端口的电平状态(通常64路)。

参数:

  • socket_fd:已连接的句柄
  • out_vector:输出参数,存储各端口状态(0或1)

返回值:

  • int
    • 0:成功
    • 负值:失败

使用示例:

C++
bool test_get_digital_output() {
    if (socket_fd_6001_ <= 0) return false;
    // 传入控制端口句柄,获取所有数字量输出(DO)的状态并存入out向量
    std::vector<int> out;
    int ret = get_digital_output(socket_fd_6001_, out);
    if (ret == SUCCESS) {
        // 获取成功,遍历并格式化输出每一路DO的索引和当前状态值
        std::cout << "[成功] 获取数字量输出状态成功, 总路数: " << out.size() << "\n状态详情: ";
        for (size_t i = 0; i < out.size(); ++i) {
            std::cout << "DO_" << i << "=" << out[i] << " ";
        }
        std::cout << std::endl;
        return true;
    }
    // 获取失败,打印对应的错误码
    std::cout << "[失败] 获取数字量输出状态失败,错误码: " << ret << std::endl;
    return false;
}

4. get_digital_input - 获取所有IO输入状态

方法: int get_digital_input(SOCKETFD socket_fd, std::vector<int>& in_vector);

功能描述: 读取所有数字输入端口的电平状态。

参数:

  • socket_fd:已连接的句柄
  • in_vector:输出参数,存储各输入端口状态

返回值:

  • int
    • 0:成功
    • 负值:失败

使用示例:

C++
bool test_get_digital_input() {
    if (socket_fd_6001_ <= 0) return false;
    // 传入控制端口句柄,获取所有数字量输入(DI)的状态并存入in向量
    std::vector<int> in;
    int ret = get_digital_input(socket_fd_6001_, in);
    if (ret == SUCCESS) {
        // 获取成功,遍历并格式化输出每一路DI的索引和当前状态值
        std::cout << "[成功] 获取数字量输入状态成功, 总路数: " << in.size() << "\n状态详情: ";
        for (size_t i = 0; i < in.size(); ++i) {
            std::cout << "DI_" << i << "=" << in[i] << " ";
        }
        std::cout << std::endl;
        return true;
    }
    // 获取失败,打印对应的错误码
    std::cout << "[失败] 获取数字量输入状态失败,错误码: " << ret << std::endl;
    return false;
}