头文件: cpp/interface/nrc_interface.h
1. set_servo_state - 设置伺服就绪状态
方法: int set_servo_state(SOCKETFD socket_fd, int state);
功能描述: 控制电机抱闸与使能。state=1=使能(解锁抱闸),state=0=去使能(抱闸锁死)。
参数:
socket_fd:已连接的句柄
state:1使能,0去使能
返回值:
int
- 0:成功
- -4:操作不允许(如未清除报警)
- 其他负值:失败
使用示例:
C++
bool test_set_servo_state(int state) {
if (socket_fd_6001_ <= 0) return false;
int ret = set_servo_state(socket_fd_6001_, state);
std::string state_msg = (state == 1) ? "使能/上电" : "去使能/断电";
CHECK_RET(ret, "设置伺服状态为:" + state_msg);
return ret == SUCCESS;
}
2. set_servo_poweron - 设置伺服上电状态
方法: int set_servo_poweron(SOCKETFD socket_fd);
功能描述: 闭合强电接触器,为电机供电。需先调用set_servo_state(1)。
参数:
返回值:
int
- 0:成功
- -4:操作不允许(如未清除报警)
- 其他负值:失败
使用示例:
C++
bool test_power_on() {
if (socket_fd_6001_ <= 0) return false;
// 步骤1:开启伺服状态
int ret = set_servo_state(socket_fd_6001_, 1);
if (ret == SUCCESS) {
// 状态设置成功后,硬延时500ms等待硬件响应
std::this_thread::sleep_for(std::chrono::milliseconds(500));
// 步骤2:执行上电使能,并延时1秒等待状态稳定
ret = set_servo_poweron(socket_fd_6001_);
std::this_thread::sleep_for(std::chrono::seconds(1));
CHECK_RET(ret, "上电使能");
return ret == SUCCESS;
}
// 若返回错误码-4,说明机械臂已经是上电状态,直接返回true
if (ret == -4) {
std::cout << "提示: 机械臂已处于上电状态" << std::endl;
return true;
}
CHECK_RET(ret, "设置伺服状态(上电)");
return false;
}
3. set_servo_poweroff - 设置伺服下电状态
方法: int set_servo_poweroff(SOCKETFD socket_fd);
功能描述: 切断强电,电机抱闸锁死。
参数:
返回值:
int
- 0:成功
- -4:操作不允许(如未清除报警)
- 其他负值:失败
使用示例:
C++
bool test_power_off() {
if (socket_fd_6001_ <= 0) return false;
// 调用底层接口执行下电操作
int ret = set_servo_poweroff(socket_fd_6001_);
// 返回SUCCESS或-1(网络因下电主动断连)均视为下电成功,并重置所有端口句柄
if (ret == SUCCESS || ret == -1) {
std::cout << "[成功] 机械臂已成功下电" << std::endl;
socket_fd_6001_ = -1;
socket_fd_7000_ = -1;
return true;
}
// 若返回错误码-4,说明机械臂本身已处于下电状态
if (ret == -4) {
std::cout << "提示: 机械臂已处于下电状态" << std::endl;
return true;
}
CHECK_RET(ret, "下电操作");
return false;
}
4. set_speed - 设置速度
方法: int set_speed(SOCKETFD socket_fd, int speed);
功能描述: 设置全局自动运行速度百分比(1~100)。
参数:
socket_fd:已连接的句柄
speed:速度百分比
返回值:
使用示例:
C++
bool test_set_speed(int speed) {
if (socket_fd_6001_ <= 0) return false;
// 调用底层接口,设置机器人的全局运行速度
int ret = set_speed(socket_fd_6001_, speed);
CHECK_RET(ret, "设置速度 " + std::to_string(speed));
return ret == SUCCESS;
}
5. get_speed - 获取速度
方法: int get_speed(SOCKETFD socket_fd, int& speed);
功能描述: 获取当前全局速度倍率。
参数:
socket_fd:已连接的句柄
speed:输出参数,当前速度百分比
返回值:
使用示例:
C++
int test_get_speed() {
if (socket_fd_6001_ <= 0) return -1;
// 传入控制端口句柄,调用底层接口获取当前机器人的速度倍率
int speed = 0;
int ret = get_speed(socket_fd_6001_, speed);
if (ret == SUCCESS) {
std::cout << "当前速度倍率: " << speed << "%" << std::endl;
return speed;
}
std::cout << "获取速度失败, 错误码=" << ret << std::endl;
return -1;
}
完整Modbus Rtu使用示例见使用示例1所示。