连接管理接口

头文件: cpp/interface/nrc_interface.h

1. connect_robot - 创建机械臂双端口连接控制句柄

方法: SOCKETFD connect_robot(const std::string& ip, const std::string& port);

功能描述: 建立与机械臂控制器的网络通信通道。需要分别连接指令端口(6001)和实时端口(7000)以获得两个独立的句柄。

参数:

  • ip:机械臂控制器IP地址,例如"192.168.1.13"
  • port:端口号字符串,指令通道"6001",实时跟踪通道"7000"

返回值:

  • int:连接句柄
    • >0:成功,返回套接字句柄
    • ≤0:失败,返回负错误码

使用示例:

C++
bool connect() {
    // 调用底层接口连接机器人控制端口 (6001)
    socket_fd_6001_ = connect_robot(robot_ip_, port6001_);
    if (socket_fd_6001_ <= 0) return false;
    // 调用底层接口连接机器人数据端口 (7000)
    socket_fd_7000_ = connect_robot(robot_ip_, port7000_);
    if (socket_fd_7000_ <= 0) {
        // 若端口 7000 连接失败,则断开已连接的端口 6001 并重置句柄
        disconnect_robot(socket_fd_6001_);
        socket_fd_6001_ = -1;
        return false;
    }
    return true;
}

2. disconnect_robot - 关闭机械臂通信句柄

方法: int disconnect_robot(SOCKETFD socket_fd);

功能描述: 安全关闭指定的网络连接,释放资源。

参数:

  • socket_fd:要关闭的句柄

返回值:

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

使用示例:

C++
void disconnect() {
    if (socket_fd_6001_ > 0) {
        // 控制端口关闭前,先对机器人进行下电并关闭伺服状态
        set_servo_poweroff(socket_fd_6001_);
        set_servo_state(socket_fd_6001_, 0);
        disconnect_robot(socket_fd_6001_);
        socket_fd_6001_ = -1; // 释放句柄后重置为无效值
    }
    if (socket_fd_7000_ > 0) {
        // 断开数据端口连接并重置句柄
        disconnect_robot(socket_fd_7000_);
        socket_fd_7000_ = -1;
    }
    
    std::cout << "已断开连接" << std::endl;
}

最佳实践:

  • 建议在程序退出前调用disconnect_robot释放连接资源
  • 断开连接前建议先下使能