Skip to content

HAL

简介

纳博特Ethercat主站控制器主站抖动时间小于20us,可用于工业自动化控制系统的开发,特别适用于机器人、伺服电机控制等实时性要求高的场景。

版本信息

二次开发版本公司
1.0.0INEXBOT

版本迭代

版本修改日期修改人描述
1.0.020250310EA初始版本

概述

关于文档

本文旨在帮助用户使用纳博特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使用流程图

hal_sdk 库使用总体流程图:从 DeviceManager 获取设备、初始化并使用各类 IO 设备的完整调用流程

使用示例

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 模拟输入输出设备使用流程图:通过 DeviceManager 获取 AnalogIO 实例后进行 set_output、get_input 等操作

成员函数功能详解

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设置接收过滤器IDpublic
set_frame_format设置数据帧格式public
detect_supported_function检测指定通道是否支持某个功能public
send发送数据帧public
receive接收数据帧public
get_channel_count获取设备的通道数量public

类成员变量

| 变量名称 | 变量含义 | 类访问权限 |

| --- | --- | --- |

CANDEvice类使用流程图

CANDevice CAN 总线设备使用流程图:open → set_parameters → send / receive 报文收发调用顺序

成员函数功能详解

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 数字输入输出设备使用流程图:通过 DeviceManager 获取 DigitalIO 实例后进行 set_output、get_input 等操作

成员函数功能详解

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

函数原型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 脉宽调制设备使用流程图:start_pwm → set_freq / set_duty → stop_pwm 的调用顺序

成员函数功能详解

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 串口设备使用流程图:open → set_parameters → send / receive 串口数据收发流程

成员函数功能详解

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 不间断电源设备使用流程图:通过 DeviceManager 获取 UpsDevice 实例后调用 get_ups_status 检查触发状态

成员函数功能详解

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设备的状态。