头文件: 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=自动)
返回值:
使用示例:
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)
返回值:
使用示例:
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)
返回值:
使用示例:
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:输出参数,存储各输入端口状态
返回值:
使用示例:
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;
}