Appearance
HAL
简介
纳博特Ethercat主站控制器主站抖动时间小于20us,可用于工业自动化控制系统的开发,特别适用于机器人、伺服电机控制等实时性要求高的场景。
版本信息
| 二次开发版本 | 公司 | | 1.0.0 | INEXBOT |
版本迭代
| 版本 | 修改日期 | 修改人 | 描述 | | 1.0.0 | 20250310 | EA | 初始版本 |
概述
关于文档
本文旨在帮助用户使用纳博特libhal_sdk的C++库。
关于libhal_sdk库
该库为纳博特系统硬件抽象层,统一了用户接口,方便用户使用。
开发环境要求
| 操作系统 | Ubuntu 20.04 LTS | | 系统架构 | x86_64 | | 编译器 | GCC version 9.4.0/GLIBC 2.31-0ubuntu9.2 GCC version 4.8.2/EGLIBC 2.19-0ubuntu6.15 | | 依赖库 | Libpthread、librt、libdl、libm |
函数库API说明
使用概述
1. 将 libhal_sdk.a 静态库文件复制到项目的 lib 目录
2. 将 include文件夹下的头文件复制到项目的 include 目录
3. 在编译时链接 libhal_sdk.a 库
demo下载
类列表
| 类名 | 含义 | | Device类 | 该类是所有设备对象的基类。 | | DeviceManager类 | 该类是device设备的管理器类。 | | AnalogIO类 | 该类是模拟io设备的抽象。 | | CANDevice类 | 该类是can设备的抽象。 | | DigitalIO类 | 该类是数字IO的抽象。 | | EncoderDevice类 | 该类是编码器设备的抽象。 | | PwmDevice类 | 该类是pwm设备的抽象。 | | SerialDevice类 | 该类是Serial设备的抽象。 | | UpsDevice类 | 该类是ups设备的抽象。 |
hal_sdk使用流程图

使用示例
demo.cpp
#include <hal/device_manager.h>
#include <hal/devices/digital_io.h>
#include <hal/devices/analog_io.h>
#include <hal/devices/can_device.h>
#include <hal/devices/pwm_device.h>
#include <hal/devices/encoder_device.h>
#include <hal/devices/ups_device.h>
#include <iostream>
#include <thread>
#include <chrono>
void print_device_info(const std::vector<std::string>& devices) {
std::cout << "Devices:" << std::endl;
for (const auto& name : devices) {
std::cout << "- " << name << std::endl;
}
std::cout << std::endl;
}
int main() {
auto& manager = hal::DeviceManager::instance();
try {
// 1. 展示设备管理器的查询功能
std::cout << "\n=== 设备查询 ===" << std::endl;
auto all_devices = manager.get_all_device_name_list();
std::cout << "所有设备:" << std::endl;
print_device_info(all_devices);
// 获取特定类型设备列表
auto dio_devices = manager.get_device_name_list(hal::DeviceType::DIGITAL_IO_);
std::cout << "数字IO设备:" << std::endl;
print_device_info(dio_devices);
// 2. 通过DeviceManager获取设备并使用
std::cout << "\n=== 设备使用示例 ===" << std::endl;
// 使用数字IO
if (auto dio_dev = manager.get_device(hal::DeviceType::DIGITAL_IO_, "DIO_1")) {
auto digital_io = std::dynamic_pointer_cast<hal::DigitalIO>(dio_dev);
digital_io->set_output(2, true);
std::cout << "DIO_1 channel 3: " << digital_io->get_input(3) << std::endl;
}
// 使用模拟CAN设备
if (auto can_dev = manager.get_device(hal::DeviceType::CAN_DEVICE_, "CAN_1")) {
auto can_device = std::dynamic_pointer_cast<hal::CANDevice>(can_dev);
can_device->open(0);
can_device->set_parameters(0, 500000);
unsigned char tx_data[8] = {0x11, 0x22, 0x33, 0x44};
can_device->send(0, 0x123, tx_data, 4);
unsigned int rx_id;
unsigned char rx_data[16];
unsigned int rx_len = can_device->receive(0, rx_id, rx_data);
std::cout << "CAN_1 received length: " << rx_len << std::endl;
}
// 3. 设备存在性检查
std::cout << "\n=== 设备存在性检查 ===" << std::endl;
std::cout << "DIO_1 exists: "
<< manager.is_device_exist(hal::DeviceType::DIGITAL_IO_, "DIO_1") << std::endl;
} catch (const std::exception& e) {
std::cerr << "Error: " << e.what() << std::endl;
return 1;
}
return 0;
}函数库API详解
DeviceType 枚举
enum class DeviceType {
NULL_,
ANALOG_IO_,
CAN_DEVICE_,
DIGITAL_IO_,
ENCODER_DEVICE_,
PWM_DEVICE_,
SERIAL_DEVICE_,
UPS_DEVICE_,
CUSTOM_
};| 变量名 | 含义 | | NULL_ | 空设备 | | DIGITAL_IO_ | 数字输入输出设备 | | ANALOG_IO_ | 模拟输入输出设备 | | CAN_DEVICE_ | CAN总线设备 | | PWM_DEVICE_ | 脉宽调制设备 | | ENCODER_DEVICE_ | 编码器设备 | | UPS_DEVICE_ | 不间断电源设备 | | SERIAL_DEVICE_ | 串口设备 | | CUSTOM_ | 自定义设备 |
Device类
该类是所有设备对象的基类。
Device类定义
class Device {
public:
Device(DeviceType device_type, const std::string& device_name);
virtual ~Device() = default;
bool valid() const { return valid_; }
DeviceType get_device_type() const { return device_type_; }
std::string get_device_name() const { return device_name_; }
protected:
bool valid_{false};
DeviceType device_type_;
std::string device_name_;
};
}Device类成员函数
| 函数名称 | 函数功能 | 类访问权限 | | Device | 构造函数 | Public | | get_device_type | 获取设备类型 | public | | get_device_name | 获取设备名称 | public | | valid | 获取设备是否可用 | public |
Device类成员变量
| 变量名称 | 变量含义 | 类访问权限 | | valid_ | 是否可用 | protected | | device_type_ | 设备类型 | protected | | device_name_ | 设备名称 | protected |
成员函数功能详解
Device
| 函数原型 | Device(DeviceType device_type, const std::string& device_name); | | 功能描述 | 构造函数,用于初始化Device对象。 | | 参数说明 | 输入参数:device_type:设备类型,用于指定设备的种类。device_name:设备名称,用于标识设备的名字。 | | 返回值 | 无 | | 备注说明 | 该构造函数用于创建Device对象,并初始化其设备类型和名称。 |
~Device
| 函数原型 | virtual ~Device() = default; | | 功能描述 | 析构函数,用于销毁Device对象。 | | 参数说明 | 无 | | 返回值 | 无 | | 备注说明 | 该析构函数是虚函数,确保派生类的正确析构。 |
valid
| 函数原型 | bool valid() const; | | 功能描述 | 检查Device对象是否有效。 | | 参数说明 | 无 | | 返回值 | 返回bool类型的值,true表示Device对象有效,false表示无效。 | | 备注说明 | 该函数用于判断Device对象的状态是否有效。 |
get_device_type
| 函数原型 | DeviceType get_device_type() const; | | 功能描述 | 获取Device对象的设备类型。 | | 参数说明 | 无 | | 返回值 | 返回DeviceType类型的值,表示Device对象的设备类型。 | | 备注说明 | 该函数用于获取Device对象的设备类型。 |
get_device_name
| 函数原型 | std::string get_device_name() const; | | 功能描述 | 获取Device对象的设备名称。 | | 参数说明 | 无 | | 返回值 | 返回std::string类型的值,表示Device对象的设备名称。 | | 备注说明 | 该函数用于获取Device对象的设备名称。 |
DeviceManager类
该类是device设备的管理器类。
类定义
class DeviceManager {
public:
static DeviceManager &instance();
int add_device(std::shared_ptr<Device> device);
int remove_device(DeviceType device_type, const std::string& device_name);
bool is_device_exist(DeviceType device_type, const std::string& device_name) const;
std::vector<std::string> get_all_device_name_list() const;
std::vector<std::string> get_device_name_list(DeviceType device_type) const;
std::vector<std::shared_ptr<Device>> get_device_list(DeviceType device_type) const;
std::shared_ptr<Device> get_device(DeviceType device_type, const std::string& device_name) const;
private:
DeviceManager() = default;
static void register_devices(DeviceManager &manager);
std::unordered_map<std::string, std::shared_ptr<Device>> devices_;
};类成员函数
| 函数名称 | 函数功能 | 类访问权限 | | instance | 获取设备管理器的单例实例 | public | | add_device | 向设备管理器中添加设备 | public | | remove_device | 从设备管理器中删除设备 | public | | is_device_exist | 判断设备是否存在 | public | | get_all_device_name_list | 获取所有设备的名称列表 | public | | get_device_name_list | 获取所有某类设备名称列表 | public | | get_device_list | 获取所有某类设备的对象实例 | public | | get_device | 获取具体的某一个设备 | public | | DeviceManager | 构造函数 | private | | register_devices | 注册设备 | private |
类成员变量
| 变量名称 | 变量含义 | 类访问权限 | | device_ | 存储所有挂载到设备管理器上的设备 | private |
成员函数功能详解
instance
| 函数原型 | static DeviceManager &instance(); | | 功能描述 | 获取 DeviceManager 类的单例对象。 | | 参数说明 | 无 | | 返回值 | 返回 DeviceManager 类的单例对象的引用。 | | 备注说明 | 该函数用于获取 DeviceManager 类的唯一实例。 |
add_device
| 函数原型 | int add_device(std::shared_ptr<Device> device); | | 功能描述 | 添加一个设备到设备管理器中。 | | 参数说明 | 输入参数: device:要添加的设备对象 | | 返回值 | 返回 int 类型的值,0表示成功,非0表示失败。 | | 备注说明 | 该函数用于向设备管理器中添加一个新的设备。 |
remove_device
| 函数原型 | int remove_device(DeviceType device_type, const std::string& device_name); | | 功能描述 | 从设备管理器中移除一个设备。 | | 参数说明 | 输入参数: device_type:设备的类型。 device_name:要移除的设备的名称。 | | 返回值 | 返回 int 类型的值,0表示成功,非0表示失败。 | | 备注说明 | 该函数用于从设备管理器中移除指定类型和名称的设备。 |
is_device_exist
| 函数原型 | bool is_device_exist(DeviceType device_type, const std::string& device_name) const; | | 功能描述 | 检查设备管理器中是否存在指定类型和名称的设备。 | | 参数说明 | 输入参数: device_type:设备的类型。 device_name:要检查的设备名称。 | | 返回值 | 返回 bool 类型的值,true表示存在,false表示不存在。 | | 备注说明 | 该函数用于检查设备管理器中是否存在指定类型和名称的设备。 |
get_all_device_name_list
| 函数原型 | std::vector<std::string> get_all_device_name_list() const; | | 功能描述 | 获取设备管理器中所有设备的名称列表。 | | 参数说明 | 无 | | 返回值 | 返回包含所有设备名称的字符串向量。 | | 备注说明 | 该函数用于获取设备管理器中所有设备的名称列表。 |
get_device_name_list
| 函数原型 | std::vector<std::string> get_device_name_list(DeviceType device_type) const; | | 功能描述 | 获取设备管理器中指定类型设备的名称列表。 | | 参数说明 | 输入参数: device_type:要获取名称列表的设备类型。 | | 返回值 | 返回包含指定类型设备名称的字符串向量。 | | 备注说明 | 该函数用于获取设备管理器中指定类型设备的名称列表。 |
get_device_list
| 函数原型 | std::vector<std::shared_ptr<Device>> get_device_list(DeviceType device_type) const; | | 功能描述 | 获取设备管理器中指定类型设备的列表。 | | 参数说明 | 输入参数: device_type:要获取列表的设备类型。 | | 返回值 | 返回包含指定类型设备对象的共享指针向量。 | | 备注说明 | 该函数用于获取设备管理器中指定类型设备的列表。 |
get_device
| 函数原型 | std::shared_ptr<Device> get_device(DeviceType device_type, const std::string& device_name) const; | | 功能描述 | 获取设备管理器中指定类型和名称的设备对象。 | | 参数说明 | 输入参数: device_type:设备的类型。 device_name:要获取的设备名称。 | | 返回值 | 返回指定类型和名称设备的共享指针。如果设备不存在,则返回 nullptr。 | | 备注说明 | 该函数用于获取设备管理器中指定类型和名称的设备对象。 |
AnalogIO类
该类是模拟io设备的抽象。
类定义
class AnalogIO : public Device {
public:
AnalogIO(const std::string& name);
virtual ~AnalogIO() = default;
virtual void set_output(int channel, double value) = 0;
virtual void set_outputs(const std::vector<int>& channels, const std::vector<double>& values) = 0;
virtual double get_input(int channel) = 0;
virtual std::vector<double> get_inputs(const std::vector<int>& channels) = 0;
virtual int get_channel_count() const = 0;
// 获取通道的量程范围
virtual std::pair<double, double> get_range(int channel) const = 0;
};类成员函数
| 函数名称 | 函数功能 | 类访问权限 | | AnalogIO | 构造函数,初始化设备名称 | public | | ~AnalogIO | 析构函数 | public | | set_output | 设置单个输出通道的值 | public | | set_outputs | 设置多个输出通道的值 | public | | get_input | 获取单个输入通道的值 | public | | get_inputs | 获取多个输入通道的值 | public | | get_channel_count | 获取通道数量 | public | | get_range | 获取指定通道的量程范围 | public |
类成员变量
| 变量名称 | 变量含义 | 类访问权限 |
AnalogIO类使用流程图

成员函数功能详解
AnalogIO
| 函数原型 | AnalogIO(const std::string& name); | | 功能描述 | 构造函数,用于初始化AnalogIO对象。 | | 参数说明 | 输入参数: name:设备名称,用于标识设备的名字。 | | 返回值 | 无 | | 备注说明 | 该构造函数用于创建AnalogIO对象,并初始化其设备类型和名称。 |
~AnalogIO
| 函数原型 | virtual ~AnalogIO() = default; | | 功能描述 | 析构函数,用于销毁Device对象。 | | 参数说明 | 无 | | 返回值 | 无 | | 备注说明 | 该析构函数是虚函数,确保派生类的正确析构。 |
set_output
| 函数原型 | void set_output(int channel, double value); | | 功能描述 | 设置指定通道的模拟输出值。 | | 参数说明 | 输入参数 channel:模拟输出通道的编号。 value:要设置的模拟输出值。 | | 返回值 | 无 | | 备注说明 | 这是一个纯虚函数,用于设置指定通道的模拟输出值。 |
set_outputs
| 函数原型 | void set_outputs(const std::vector<int>& channels, const std::vector<double>& values); | | 功能描述 | 设置多个通道的模拟输出值。 | | 参数说明 | 输入参数 channels:包含要设置的模拟输出通道编号的向量。 values:与channels向量对应的模拟输出值的向量。 | | 返回值 | 无 | | 备注说明 | 这是一个纯虚函数,用于设置多个通道的模拟输出值。 |
get_input
| 函数原型 | double get_input(int channel); | | 功能描述 | 获取指定通道的模拟输入值。 | | 参数说明 | 输入参数 channel:模拟输入通道的编号。 | | 返回值 | 返回 double 类型的值,表示指定通道的模拟输入值。 | | 备注说明 | 这是一个纯虚函数,用于获取指定通道的模拟输入值。 |
get_inputs
| 函数原型 | std::vector<double> get_inputs(const std::vector<int>& channels); | | 功能描述 | 获取多个通道的模拟输入值。 | | 参数说明 | 输入参数 channels:包含要获取的模拟输入通道编号的向量。 | | 返回值 | 返回 std::vector<double> 类型的值,包含指定通道的模拟输入值的向量。 | | 备注说明 | 这是一个纯虚函数,用于获取多个通道的模拟输入值 |
get_channel_count
| 函数原型 | int get_channel_count() const; | | 功能描述 | 获取模拟I/O设备的通道总数。 | | 参数说明 | 无 | | 返回值 | 返回 int 类型的值,表示模拟I/O设备的通道总数。 | | 备注说明 | 这是一个纯虚函数,用于获取模拟I/O设备的通道总数。 |
get_range
| 函数原型 | std::pair<double, double> get_range(int channel) const; | | 功能描述 | 获取指定通道的量程范围。 | | 参数说明 | 输入参数: channel:模拟I/O通道的编号。 | | 返回值 | 返回 std::pair<double, double> 类型的值,表示指定通道的量程范围(最小值和最大值)。 | | 备注说明 | 这是一个纯虚函数,用于获取指定通道的量程范围。 |
CANDevice类
该类是can设备的抽象。
类定义
class CANDevice : public Device {
public:
CANDevice(const std::string& name);
virtual ~CANDevice() = default;
virtual void open(int channel) = 0;
virtual void close(int channel) = 0;
virtual void set_parameters(int channel, int baudrate) = 0;
virtual void set_recv_filter_id(int channel, bool enable_recv_filter, unsigned int recv_filter_id) = 0;
virtual void set_frame_format(int channel, Frame_Format format) = 0;
virtual bool detect_supported_function(int channel, Support_Function function) const = 0;
virtual void send(int channel, unsigned int txid, const unsigned char buff[8], unsigned int len, bool use_remote_frame = false) = 0;
virtual unsigned int receive(int channel, unsigned int & rxid, unsigned char buff[16]) = 0;
virtual int get_channel_count() const = 0;
};类成员函数
| 函数名称 | 函数功能 | 类访问权限 | | CANDevice | 构造函数,初始化设备名称 | public | | ~CANDevice | 析构函数 | public | | open | 打开指定通道 | public | | close | 关闭指定通道 | public | | set_parameters | 设置指定通道的参数,主要是波特率 | public | | set_recv_filter_id | 设置接收过滤器ID | public | | set_frame_format | 设置数据帧格式 | public | | detect_supported_function | 检测指定通道是否支持某个功能 | public | | send | 发送数据帧 | public | | receive | 接收数据帧 | public | | get_channel_count | 获取设备的通道数量 | public |
类成员变量
| 变量名称 | 变量含义 | 类访问权限 |
CANDEvice类使用流程图

成员函数功能详解
CANDevice
| 函数原型 | CANDevice(const std::string& name); | | 功能描述 | 构造函数,用于初始化CANDevice对象。 | | 参数说明 | 输入参数: name:设备名称,用于标识设备的名字。 | | 返回值 | 无 | | 备注说明 | 该构造函数用于创建CANDevice对象,并初始化其设备类型和名称。 |
~CANDevice
| 函数原型 | virtual ~CANDevice() = default; | | 功能描述 | 析构函数,用于销毁CANDevice对象。 | | 参数说明 | 无 | | 返回值 | 无 | | 备注说明 | 该析构函数是虚函数,确保派生类的正确析构。 |
open
| 函数原型 | void open(int channel); | | 功能描述 | 打开指定通道的CAN设备。 | | 参数说明 | 输入参数: channel:指定要打开的CAN设备通道号。 | | 返回值 | 无 | | 备注说明 | 这是一个纯虚函数,需要在派生类中实现。打开CAN设备后,才能进行后续的通信操作。 |
close
| 函数原型 | void close(int channel); | | 功能描述 | 关闭指定通道的CAN设备。 | | 参数说明 | 输入参数: channel:指定要关闭的CAN设备通道号。 | | 返回值 | 无 | | 备注说明 | 这是一个纯虚函数,需要在派生类中实现。关闭CAN设备可以释放相关资源。 |
set_parameters
| 函数原型 | void set_parameters(int channel, int baudrate); | | 功能描述 | 设置指定通道的CAN设备波特率。 | | 参数说明 | 输入参数: channel:指定要设置波特率的CAN设备通道号。 baudrate:要设置的波特率值。 | | 返回值 | 无 | | 备注说明 | 这是一个纯虚函数,需要在派生类中实现。设置波特率可以确保CAN设备之间的通信速率一致。 |
set_recv_filter_id
| 函数原型 | void set_recv_filter_id(int channel, bool enable_recv_filter, unsigned int recv_filter_id); | | 功能描述 | 设置指定通道的CAN设备接收滤波器ID。 | | 参数说明 | 输入参数: channel:指定要设置接收滤波器ID的CAN设备通道号。 enable_recv_filter:是否启用接收滤波器。 recv_filter_id:要设置的接收滤波器ID值。 | | 返回值 | 无 | | 备注说明 | 这是一个纯虚函数,需要在派生类中实现。设置接收滤波器ID可以过滤掉不需要接收的CAN报文。 |
set_frame_format
| 函数原型 | void set_frame_format(int channel, Frame_Format format); | | 功能描述 | 设置指定通道的CAN设备帧格式。 | | 参数说明 | 输入参数: channel:指定要设置帧格式的CAN设备通道号。 format:要设置的帧格式类型。 | | 返回值 | 无 | | 备注说明 | 这是一个纯虚函数,需要在派生类中实现。设置帧格式可以确保CAN设备之间的报文格式一致。 |
detect_supported_function
| 函数原型 | bool detect_supported_function(int channel, Support_Function function) const; | | 功能描述 | 检测指定通道的CAN设备是否支持指定的功能。 | | 参数说明 | 输入参数: channel:指定要检测功能的CAN设备通道号。 function:要检测的功能类型。 | | 返回值 | 返回 bool 类型的值,true表示支持该功能,false表示不支持。 | | 备注说明 | 这是一个纯虚函数,需要在派生类中实现。检测功能可以确保在使用该功能之前,CAN设备支持该功能。 |
send
| 函数原型 | void send(int channel, unsigned int txid, const unsigned char buff[8], unsigned int len, bool use_remote_frame = false); | | 功能描述 | 发送指定通道的CAN报文。 | | 参数说明 | 输入参数: channel:指定要发送报文的CAN设备通道号。 txid:发送报文的ID。 buff:发送报文的数据缓冲区。 len:发送报文的数据长度。 use_remote_frame:是否发送远程帧,默认为false。 | | 返回值 | 无 | | 备注说明 | 这是一个纯虚函数,需要在派生类中实现。发送报文是CAN通信的基本操作之一。 |
receive
| 函数原型 | unsigned int receive(int channel, unsigned int & rxid, unsigned char buff[16]); | | 功能描述 | 接收指定通道的CAN报文。 | | 参数说明 | 输入参数: channel:指定要接收报文的CAN设备通道号。 输出参数 rxid:接收报文的ID。 buff:接收报文的数据缓冲区。 | | 返回值 | 返回 unsigned int 类型的值,表示接收到的报文长度。 | | 备注说明 | 这是一个纯虚函数,需要在派生类中实现。接收报文是CAN通信的基本操作之一。 |
get_channel_count
| 函数原型 | int get_channel_count() const; | | 功能描述 | 获取CAN设备的通道数量。 | | 参数说明 | 无 | | 返回值 | 返回 int 类型的值,表示CAN设备的通道数量。 | | 备注说明 | 这是一个纯虚函数,需要在派生类中实现。获取通道数量可以了解CAN设备的硬件配置。 |
DigitalIO类
该类是数字IO的抽象。
类定义
class DigitalIO : public Device {
public:
DigitalIO(const std::string& name);
virtual ~DigitalIO() = default;
virtual void set_output(int channel, bool state) = 0;
virtual void set_outputs(const std::vector<int>& channels, const std::vector<bool>& states) = 0;
virtual bool get_input(int channel) = 0;
virtual std::vector<bool> get_inputs(const std::vector<int>& channels) = 0;
virtual int get_channel_count() const = 0;
};类成员函数
| 函数名称 | 函数功能 | 类访问权限 | | DigitalIO | 构造函数,初始化设备名称 | public | | ~DigitalIO | 析构函数 | public | | set_output | 设置指定通道的输出状态 | public | | set_outputs | 设置多个通道的输出状态 | public | | get_input | 获取指定通道的输入状态 | public | | get_inputs | 获取多个通道的输入状态 | public | | get_channel_count | 获取设备的通道数量 | public |
类成员变量
| 变量名称 | 变量含义 | 类访问权限 |
DigitalIO类使用流程图

成员函数功能详解
DigitalIO
| 函数原型 | DigitalIO(const std::string& name); | | 功能描述 | 构造函数,用于初始化DigitalIO对象。 | | 参数说明 | 输入参数: name:设备名称,用于标识设备的名字。 | | 返回值 | 无 | | 备注说明 | 该构造函数用于创建DigitalIO对象,并初始化其设备类型和名称。 |
~DigitalIO
| 函数原型 | virtual ~DigitalIO() = default; | | 功能描述 | 析构函数,用于销毁DigitalIO对象。 | | 参数说明 | 无 | | 返回值 | 无 | | 备注说明 | 该析构函数是虚函数,确保派生类的正确析构。 |
set_output
| 函数原型 | void set_output(int channel, bool state); | | 功能描述 | 设置指定数字IO通道的输出状态。 | | 参数说明 | 输入参数 channel:指定要设置的数字IO通道编号。 state:指定数字IO通道的输出状态,true表示高电平,false表示低电平。 | | 返回值 | 无 | | 备注说明 | 该函数为纯虚函数,需要在派生类中实现,用于设置指定数字IO通道的输出状态。 |
set_outputs
| 函数原型 | void set_outputs(const std::vector<int>& channels, const std::vector<bool>& states); | | 功能描述 | 批量设置数字IO通道的输出状态。 | | 参数说明 | 输入参数 channels:包含要设置的数字IO通道编号的向量。 states:包含每个数字IO通道的输出状态的向量,true表示高电平,false表示低电平。 | | 返回值 | 无 | | 备注说明 | 该函数为纯虚函数,需要在派生类中实现,用于批量设置数字IO通道的输出状态。 |
get_input
| 函数原型 | bool get_input(int channel); | | 功能描述 | 获取指定数字IO通道的输入状态。 | | 参数说明 | 输入参数 channel:指定要获取的数字IO通道编号。 | | 返回值 | 返回 bool 类型的值,true表示高电平,false表示低电平。 | | 备注说明 | 该函数为纯虚函数,需要在派生类中实现,用于获取指定数字IO通道的输入状态。 |
get_inputs
| 函数原型 | std::vector<bool> get_inputs(const std::vector<int>& channels); | | 功能描述 | 批量获取数字IO通道的输入状态。 | | 参数说明 | 输入参数 channels:包含要获取的数字IO通道编号的向量。 | | 返回值 | 返回 std::vector<bool> 类型的值,向量中的每个元素表示对应数字IO通道的输入状态,true表示高电平,false表示低电平。 | | 备注说明 | 该函数为纯虚函数,需要在派生类中实现,用于批量获取数字IO通道的输入状态。 |
get_channel_count
| 函数原型 | int get_channel_count() const; | | 功能描述 | 获取数字IO通道的总数。 | | 参数说明 | 无 | | 返回值 | 返回 int 类型的值,表示数字IO通道的总数。 | | 备注说明 | 该函数为纯虚函数,需要在派生类中实现,用于获取数字IO通道的总数。 |
EncoderDevice类
该类是编码器设备的抽象。
类定义
class EncoderDevice : public Device {
public:
EncoderDevice(const std::string& name);
virtual ~EncoderDevice() = default;
virtual int64_t get_encoder_value() const = 0;
virtual std::pair<int64_t, int64_t> get_encoder_range() const = 0;
virtual int get_encoder_direction() const = 0; // 1:正转 -1:反转
};类成员函数
| 函数名称 | 函数功能 | 类访问权限 | | EncoderDevice | 构造函数,初始化设备名称 | public | | ~EncoderDevice | 析构函数 | public | | get_encoder_value | 获取编码器当前值 | public | | get_encoder_range | 获取编码器的值范围 | public | | get_encoder_direction | 获取编码器的转动方向 | public |
类成员变量
| 变量名称 | 变量含义 | 类访问权限 |
EncoderDevice类使用流程图

成员函数功能详解
EncoderDevice
| 函数原型 | EncoderDevice(const std::string& name); | | 功能描述 | 构造函数,用于初始化EncoderDevice对象。 | | 参数说明 | 输入参数 name:设备名称,用于标识设备的名字。 | | 返回值 | 无 | | 备注说明 | 该构造函数用于创建EncoderDevice对象,并初始化其设备类型和名称。 |
~EncoderDevice
| 函数原型 | virtual ~EncoderDevice() = default; | | 功能描述 | 析构函数,用于销毁EncoderDevice对象。 | | 参数说明 | 无 | | 返回值 | 无 | | 备注说明 | 该析构函数是虚函数,确保派生类的正确析构。 |
get_encoder_value
| 函数原型 | virtual int64_t EncoderDevice::get_encoder_value() const; | | 功能描述 | 获取编码器的值。 | | 参数说明 | 无 | | 返回值 | 返回 int64_t 类型的值,表示编码器的当前值。 | | 备注说明 | 这是一个纯虚函数,需要在派生类中实现。 |
get_encoder_range
| 函数原型 | virtual std::pair<int64_t, int64_t> EncoderDevice::get_encoder_range() const; | | 功能描述 | 获取编码器的范围。 | | 参数说明 | 无 | | 返回值 | 返回一个 std::pair<int64_t, int64_t> 类型的值,pair的第一个元素表示编码器的最小值,第二个元素表示编码器的最大值。 | | 备注说明 | 这是一个纯虚函数,需要在派生类中实现。 |
get_encoder_direction
| 函数原型 | virtual int EncoderDevice::get_encoder_direction() const; | | 功能描述 | 获取编码器的方向。 | | 参数说明 | 无 | | 返回值 | 返回 int 类型的值,1表示正转,-1表示反转。 | | 备注说明 | 这是一个纯虚函数,需要在派生类中实现。该函数用于获取编码器的旋转方向。 |
PwmDevice类
该类是pwm设备的抽象。
类定义
class PwmDevice : public Device {
public:
PwmDevice(const std::string& name);
virtual ~PwmDevice() = default;
virtual void start_pwm() = 0;
virtual void stop_pwm() = 0;
virtual void set_freq(double freq) = 0;
virtual void set_duty(double duty) = 0;
virtual double get_freq() const = 0;
virtual double get_duty() const = 0;
};类成员函数
| 函数名称 | 函数功能 | 类访问权限 | | PwmDevice | 构造函数,初始化设备名称 | public | | ~PwmDevice | 析构函数 | public | | start_pwm | 启动 PWM 输出 | public | | stop_pwm | 停止 PWM 输出 | public | | set_freq | 设置 PWM 输出频率 | public | | set_duty | 设置 PWM 输出占空比 | public | | get_freq | 获取 PWM 输出频率 | public | | get_duty | 获取 PWM 输出占空比 | public |
类成员变量
| 变量名称 | 变量含义 | 类访问权限 |
PwmDevice类使用流程图

成员函数功能详解
PwmDevice
| 函数原型 | PwmDevice(const std::string& name); | | 功能描述 | 构造函数,用于初始化PwmDevice对象。 | | 参数说明 | 输入参数: name:设备名称,用于标识设备的名字。 | | 返回值 | 无 | | 备注说明 | 该构造函数用于创建PwmDevice对象,并初始化其设备类型和名称。 |
~PwmDevice
| 函数原型 | virtual ~PwmDevice() = default; | | 功能描述 | 析构函数,用于销毁PwmDevice对象。 | | 参数说明 | 无 | | 返回值 | 无 | | 备注说明 | 该析构函数是虚函数,确保派生类的正确析构。 |
start_pwm
| 函数原型 | void start_pwm(); | | 功能描述 | 启动PWM(脉冲宽度调制)设备。 | | 参数说明 | 无 | | 返回值 | 无 | | 备注说明 | 该函数为纯虚函数,需要在派生类中实现。用于启动PWM设备。 |
stop_pwm
| 函数原型 | void stop_pwm(); | | 功能描述 | 停止PWM(脉冲宽度调制)设备。 | | 参数说明 | 无 | | 返回值 | 无 | | 备注说明 | 该函数为纯虚函数,需要在派生类中实现。用于停止PWM设备。 |
set_freq
| 函数原型 | void set_freq(double freq); | | 功能描述 | 设置PWM(脉冲宽度调制)设备的频率。 | | 参数说明 | 输入参数: freq:要设置的PWM频率值。 | | 返回值 | 无 | | 备注说明 | 该函数为纯虚函数,需要在派生类中实现。用于设置PWM设备的频率。 |
set_duty
| 函数原型 | void set_duty(double duty); | | 功能描述 | 设置PWM(脉冲宽度调制)设备的占空比。 | | 参数说明 | 输入参数: duty:要设置的PWM占空比值。 | | 返回值 | 无 | | 备注说明 | 该函数为纯虚函数,需要在派生类中实现。用于设置PWM设备的占空比。 |
get_freq
| 函数原型 | double get_freq() const; | | 功能描述 | 获取PWM(脉冲宽度调制)设备的当前频率。 | | 参数说明 | 无 | | 返回值 | 返回 double 类型的值,表示当前PWM设备的频率。 | | 备注说明 | 该函数为纯虚函数,需要在派生类中实现。用于获取PWM设备的当前频率。 |
get_duty
| 函数原型 | double get_duty() const; | | 功能描述 | 获取PWM(脉冲宽度调制)设备的当前占空比。 | | 参数说明 | 无 | | 返回值 | 返回 double 类型的值,表示当前PWM设备的占空比。 | | 备注说明 | 该函数为纯虚函数,需要在派生类中实现。用于获取PWM设备的当前占空比。 |
SerialDevice类
该类是ups设备的抽象。
类定义
class SerialDevice : public Device { // Remove ": public Device" if not needed
public:
SerialDevice(const std::string& name);
virtual ~SerialDevice() = default;
virtual void open(int channel) = 0;
virtual void close(int channel) = 0;
virtual void set_parameters(int channel, int baudrate, char parity, int stop_bits) = 0;
virtual int send(int channel, const std::vector<char>& data, size_t bytes_to_send) = 0;
virtual int receive(int channel, std::vector<char>& buffer, size_t& bytes_received) = 0;
virtual int get_channel_count() const = 0;
};SerialDevice类使用流程图

成员函数功能详解
SerialDevice
| 函数原型 | SerialDevice(const std::string& name); | | 功能描述 | 构造函数,用于初始化SerialDevice对象。 | | 参数说明 | 输入参数: name:设备名称,用于标识设备的名字。 | | 返回值 | 无 | | 备注说明 | 该构造函数用于创建SerialDevice对象,并初始化其设备类型和名称。 |
~SerialDevice
| 函数原型 | virtual ~SerialDevice() = default; | | 功能描述 | 析构函数,用于销毁CANDevice对象。 | | 参数说明 | 无 | | 返回值 | 无 | | 备注说明 | 该析构函数是虚函数,确保派生类的正确析构。 |
open
| 函数原型 | void open(int channel); | | 功能描述 | 打开指定通道的Serial设备。 | | 参数说明 | 输入参数: channel:指定要打开的Serial设备通道号。 | | 返回值 | 无 | | 备注说明 | 这是一个纯虚函数,需要在派生类中实现。打开CAN设备后,才能进行后续的通信操作。 |
close
| 函数原型 | void close(int channel); | | 功能描述 | 关闭指定通道的Serial设备。 | | 参数说明 | 输入参数: channel:指定要关闭的Serial设备通道号。 | | 返回值 | 无 | | 备注说明 | 这是一个纯虚函数,需要在派生类中实现。关闭CAN设备可以释放相关资源。 |
set_parameters
| 函数原型 | void set_parameters(int channel, int baudrate, char parity, int stop_bits) ; | | 功能描述 | 设置指定通道的Serial设备的波特率,校验位,停止位。 | | 参数说明 | 输入参数: channel:指定要设置波特率的Serial设备通道号。 baudrate:要设置的波特率值。 parity:指定校验位类型“N”无校验,“E”奇校验,“O”偶校验 stop_bits:停止位 | | 返回值 | 无 | | 备注说明 | |
send
| 函数原型 | int send(int channel, const std::vector<char>& data, size_t bytes_to_send); | | 功能描述 | 发送指定通道的Serial报文。 | | 参数说明 | 输入参数: channel:指定要发送报文的CAN设备通道号。 data:需要发送的数据。 bytes_to_send:发送报文的数据长度。 | | 返回值 | 无 | | 备注说明 | 无 |
receive
| 函数原型 | int receive(int channel, std::vector<char>& buffer, size_t& bytes_received); | | 功能描述 | 接收指定通道的Serial报文。 | | 参数说明 | 输入参数: channel:指定要发送报文的CAN设备通道号。 输出参数 buffer:接收报文的缓存 bytes_received:接收报文的长度 | | 返回值 | 返回 unsigned int 类型的值,表示接收到的报文长度。 | | 备注说明 | 无 |
get_channel_count
| 函数原型 | int get_channel_count() const; | | 功能描述 | 获取Serial设备的通道数量。 | | 参数说明 | 无 | | 返回值 | 返回 int 类型的值,表示Serial设备的通道数量。 | | 备注说明 | 这是一个纯虚函数,需要在派生类中实现。获取通道数量可以了解Serial设备的硬件配置。 |
UpsDevice类
该类是ups设备的抽象。
类定义
class UpsDevice : public Device {
public:
UpsDevice(const std::string& name);
virtual ~UpsDevice() = default;
virtual bool get_ups_status() const = 0; // true:触发 false:未触发
};类成员函数
| 函数名称 | 函数功能 | 类访问权限 | | UpsDevice | 构造函数,初始化设备名称 | public | | ~UpsDevice | 析构函数 | public | | get_ups_status | 获取 UPS 状态,返回触发状态(true: 触发,false: 未触发) | public |
类成员变量
| 变量名称 | 变量含义 | 类访问权限 |
UpsDevice类使用流程图

成员函数功能详解
UpsDevice
| 函数原型 | UpsDevice(const std::string& name); | | 功能描述 | 构造函数,用于初始化UpsDevice对象。 | | 参数说明 | 输入参数: name:设备名称,用于标识设备的名字。 | | 返回值 | 无 | | 备注说明 | 该构造函数用于创建UpsDevice对象,并初始化其设备类型和名称。 |
~UpsDevice
| 函数原型 | virtual ~UpsDevice() = default; | | 功能描述 | 析构函数,用于销毁UpsDevice对象。 | | 参数说明 | 无 | | 返回值 | 无 | | 备注说明 | 该析构函数是虚函数,确保派生类的正确析构。 |
get_ups_status
| 函数原型 | virtual bool get_ups_status() const = 0; | | 功能描述 | 获取UPS设备的状态。 | | 参数说明 | 无 | | 返回值 | 返回 bool 类型的值,true表示触发,false表示未触发。 | | 备注说明 | 这是一个纯虚函数,需要在派生类中实现。该函数用于获取UPS设备的状态。 |