657 lines
22 KiB
C++
657 lines
22 KiB
C++
#ifndef BNTVS_SW_APP_HPP
|
||
#define BNTVS_SW_APP_HPP
|
||
|
||
#include <cstdint>
|
||
#include <string>
|
||
#include <vector>
|
||
#include <chrono>
|
||
#include <functional>
|
||
|
||
/**
|
||
* @brief BNTVS_SW 命名空间,包含总线网络测试验证软件所有核心类型与函数。
|
||
*
|
||
* 该命名空间涵盖基础通信、协议兼容、数据存储、路由转发、总线分析、
|
||
* 故障注入、信号转换和总线测试等全部软件单元的功能声明与实现。
|
||
* 每个业务函数均通过 @requirement 标签关联对应的 CSCI 需求标识。
|
||
*/
|
||
namespace bntvs {
|
||
|
||
// ============================================================================
|
||
// 枚举类型定义
|
||
// ============================================================================
|
||
|
||
/// @brief 总线类型。
|
||
enum class BusType : uint8_t {
|
||
ETHERNET = 0, ///< 以太网总线
|
||
RS422 = 1, ///< RS422 串行总线
|
||
CAN = 2, ///< CAN 总线
|
||
ANALOG = 3, ///< 模拟量
|
||
DIGITAL = 4 ///< 离散量
|
||
};
|
||
|
||
/// @brief CAN 协议类型。
|
||
enum class CANProtocolType : uint8_t {
|
||
CAN2_0 = 0, ///< CAN 2.0 协议
|
||
CANFD = 1 ///< CAN FD 协议
|
||
};
|
||
|
||
/// @brief 帧格式类型。
|
||
enum class FrameFormat : uint8_t {
|
||
STANDARD = 0, ///< 标准帧 (11-bit ID)
|
||
EXTENDED = 1 ///< 扩展帧 (29-bit ID)
|
||
};
|
||
|
||
/// @brief 路由类型。
|
||
enum class RouteType : uint8_t {
|
||
STATIC = 0, ///< 静态路由
|
||
DYNAMIC = 1 ///< 动态路由
|
||
};
|
||
|
||
/// @brief 故障类型。
|
||
enum class FaultType : uint8_t {
|
||
SHORT_CIRCUIT = 0, ///< 短路
|
||
OPEN_CIRCUIT = 1, ///< 断路
|
||
EMI = 2, ///< 电磁干扰
|
||
ERROR_FRAME = 3, ///< 错误帧
|
||
NODE_OFFLINE = 4, ///< 节点离线
|
||
NODE_ABNORMAL = 5, ///< 节点异常接入
|
||
BAUD_RATE_ANOM = 6 ///< 波特率异常波动
|
||
};
|
||
|
||
// ============================================================================
|
||
// 数据结构定义
|
||
// ============================================================================
|
||
|
||
/**
|
||
* @brief 总线数据记录,对应数据库总线数据记录表结构。
|
||
*
|
||
* 用于存储从总线采集的原始通信数据,包含时间戳、帧ID、
|
||
* 数据载荷及协议类型等信息。
|
||
*/
|
||
struct BusDataRecord {
|
||
int64_t record_id = 0; ///< 记录ID (数据库主键)
|
||
std::string bus_type; ///< 总线类型
|
||
std::chrono::system_clock::time_point timestamp; ///< 时间戳 (微秒精度)
|
||
uint32_t frame_id = 0; ///< 帧ID
|
||
uint32_t data_length = 0; ///< 数据长度
|
||
std::vector<uint8_t> data_content; ///< 数据内容
|
||
std::string protocol_type; ///< 协议类型
|
||
std::string node_id; ///< 采集节点标识
|
||
};
|
||
|
||
/**
|
||
* @brief 路由表条目,对应数据库路由表结构。
|
||
*/
|
||
struct RouteEntry {
|
||
int route_id = 0; ///< 路由ID
|
||
std::string dest_network; ///< 目标网络
|
||
std::string netmask; ///< 子网掩码
|
||
std::string next_hop; ///< 下一跳地址
|
||
std::string out_interface; ///< 出接口
|
||
int priority = 0; ///< 路由优先级
|
||
std::string route_type; ///< 路由类型 (Static/Dynamic)
|
||
};
|
||
|
||
/**
|
||
* @brief 网络状态信息,用于总线状态监视。
|
||
*/
|
||
struct NetworkStatus {
|
||
double bus_load = 0.0; ///< 总线负载率 (%)
|
||
uint64_t total_frames = 0; ///< 总帧数
|
||
uint64_t error_frames = 0; ///< 错误帧数
|
||
double capture_rate = 0.0; ///< 报文捕获速率 (帧/秒)
|
||
std::string last_update_time; ///< 最后更新时间
|
||
};
|
||
|
||
/**
|
||
* @brief 性能测试指标。
|
||
*/
|
||
struct PerformanceMetrics {
|
||
double avg_latency_us = 0.0; ///< 平均延迟 (微秒)
|
||
double max_latency_us = 0.0; ///< 最大延迟 (微秒)
|
||
double min_latency_us = 0.0; ///< 最小延迟 (微秒)
|
||
double throughput_mbps = 0.0; ///< 吞吐量 (Mbps)
|
||
double packet_loss_rate = 0.0; ///< 丢包率 (%)
|
||
uint64_t total_packets = 0; ///< 总报文数
|
||
uint64_t lost_packets = 0; ///< 丢失报文数
|
||
};
|
||
|
||
/**
|
||
* @brief 波形与时序分析结果。
|
||
*/
|
||
struct WaveformAnalysisResult {
|
||
double signal_frequency_hz = 0.0; ///< 信号频率 (Hz)
|
||
double signal_amplitude = 0.0; ///< 信号幅度
|
||
double rise_time_us = 0.0; ///< 上升时间 (微秒)
|
||
double fall_time_us = 0.0; ///< 下降时间 (微秒)
|
||
double duty_cycle = 0.0; ///< 占空比 (%)
|
||
uint64_t glitch_count = 0; ///< 毛刺计数
|
||
std::string analysis_summary; ///< 分析摘要
|
||
};
|
||
|
||
// ============================================================================
|
||
// 基础通用通信单元 (SU-COM) — 函数声明
|
||
// ============================================================================
|
||
|
||
/**
|
||
* @brief 初始化以太网通信接口。
|
||
*
|
||
* @requirement(name="基础通用通讯功能", id="SRS-F-01-001")
|
||
* 实现以太网通信接口的初始化,支持 TCP/IP 和 UDP 协议,全双工千兆速率。
|
||
*
|
||
* @param ip_address 本机 IP 地址
|
||
* @param port 通信端口
|
||
* @return true 初始化成功
|
||
* @return false 初始化失败
|
||
*/
|
||
bool initEthernetComm(const std::string& ip_address, uint16_t port);
|
||
|
||
/**
|
||
* @brief 初始化 RS422 通信接口。
|
||
*
|
||
* @requirement(name="基础通用通讯功能", id="SRS-F-01-001")
|
||
* 实现 RS422 异步串行通信接口的初始化,支持全双工和波特率自适应。
|
||
*
|
||
* @param port_name 串口名称 (如 COM1, /dev/ttyS0)
|
||
* @param baud_rate 波特率
|
||
* @return true 初始化成功
|
||
* @return false 初始化失败
|
||
*/
|
||
bool initRS422Comm(const std::string& port_name, uint32_t baud_rate);
|
||
|
||
/**
|
||
* @brief 初始化 CAN 通信接口。
|
||
*
|
||
* @requirement(name="基础通用通讯功能", id="SRS-F-01-001")
|
||
* 实现 CAN 总线通信接口的初始化,支持 CAN2.0B/CANFD 协议,
|
||
* 波特率 5K~1Mbps 可调。
|
||
*
|
||
* @param interface_name 接口名称 (如 can0)
|
||
* @param baud_rate 波特率 (5K~1Mbps)
|
||
* @return true 初始化成功
|
||
* @return false 初始化失败
|
||
*/
|
||
bool initCANComm(const std::string& interface_name, uint32_t baud_rate);
|
||
|
||
/**
|
||
* @brief 初始化模拟量采集接口。
|
||
*
|
||
* @requirement(name="基础通用通讯功能", id="SRS-F-01-001")
|
||
* 实现模拟量信号采集接口的初始化,支持 0~10V 输入范围,12位精度。
|
||
*
|
||
* @param channel 采集通道编号
|
||
* @return true 初始化成功
|
||
* @return false 初始化失败
|
||
*/
|
||
bool initAnalogComm(uint8_t channel);
|
||
|
||
/**
|
||
* @brief 初始化离散量 I/O 接口。
|
||
*
|
||
* @requirement(name="基础通用通讯功能", id="SRS-F-01-001")
|
||
* 实现离散量 TTL 电平信号采集接口的初始化,支持 48 路 I/O。
|
||
*
|
||
* @param io_pin I/O 引脚编号
|
||
* @return true 初始化成功
|
||
* @return false 初始化失败
|
||
*/
|
||
bool initDigitalComm(uint8_t io_pin);
|
||
|
||
// ============================================================================
|
||
// 协议兼容单元 (SU-PROT) — 函数声明
|
||
// ============================================================================
|
||
|
||
/**
|
||
* @brief 自动识别 CAN 帧采用的协议类型(CAN2.0 或 CAN FD)。
|
||
*
|
||
* @requirement(name="协议兼容功能", id="SRS-F-01-002")
|
||
* 实现 CAN2.0 与 CANFD 协议的自动识别。
|
||
*
|
||
* @requirement(name="支持协议要求", id="SRS-F-09-007")
|
||
* 支持 CANFD 和 CAN2.0 协议识别。
|
||
*
|
||
* @param frame_data 原始 CAN 帧数据
|
||
* @return CANProtocolType 识别的协议类型
|
||
*/
|
||
CANProtocolType detectCANProtocol(const std::vector<uint8_t>& frame_data);
|
||
|
||
/**
|
||
* @brief 在 CAN2.0 和 CAN FD 帧格式之间进行兼容转换。
|
||
*
|
||
* @requirement(name="协议兼容功能", id="SRS-F-01-002")
|
||
* 实现 CAN2.0 与 CANFD 协议的切换适配和格式兼容转换,
|
||
* 确保数据转发一致性。
|
||
*
|
||
* @param source_type 源协议类型
|
||
* @param target_type 目标协议类型
|
||
* @param frame_data 待转换的帧数据
|
||
* @return std::vector<uint8_t> 转换后的帧数据
|
||
*/
|
||
std::vector<uint8_t> convertCANFrame(CANProtocolType source_type,
|
||
CANProtocolType target_type,
|
||
const std::vector<uint8_t>& frame_data);
|
||
|
||
// ============================================================================
|
||
// 数据存储单元 (SU-STOR) — 函数声明
|
||
// ============================================================================
|
||
|
||
/**
|
||
* @brief 存储一条总线数据记录到持久化存储。
|
||
*
|
||
* @requirement(name="数据存储功能", id="SRS-F-02-001")
|
||
* 实现通信数据的持久化存储,按时间顺序组织数据,
|
||
* 支持自动分段存储和磁盘容量监控。
|
||
*
|
||
* @param record 总线数据记录
|
||
* @return true 存储成功
|
||
* @return false 存储失败
|
||
*/
|
||
bool storeBusData(const BusDataRecord& record);
|
||
|
||
/**
|
||
* @brief 启动存储服务,包括磁盘容量监控。
|
||
*
|
||
* @requirement(name="数据存储功能", id="SRS-F-02-001")
|
||
* 监控磁盘容量,满时触发告警及覆盖最旧数据。
|
||
*
|
||
* @return true 启动成功
|
||
* @return false 启动失败
|
||
*/
|
||
bool startStorageService();
|
||
|
||
/**
|
||
* @brief 停止存储服务。
|
||
* @return true 停止成功
|
||
* @return false 停止失败
|
||
*/
|
||
bool stopStorageService();
|
||
|
||
// ============================================================================
|
||
// 数据管理与回放单元 (SU-REPLAY) — 函数声明
|
||
// ============================================================================
|
||
|
||
/**
|
||
* @brief 根据查询条件检索历史总线数据。
|
||
*
|
||
* @requirement(name="数据管理与数据回放功能", id="SRS-F-02-002")
|
||
* 提供历史数据的检索功能,支持按总线类型、时间范围等条件查询。
|
||
*
|
||
* @param bus_type 总线类型筛选(空字符串表示全部)
|
||
* @param start_time 起始时间
|
||
* @param end_time 结束时间
|
||
* @return std::vector<BusDataRecord> 匹配的记录列表
|
||
*/
|
||
std::vector<BusDataRecord> queryBusData(const std::string& bus_type,
|
||
const std::string& start_time,
|
||
const std::string& end_time);
|
||
|
||
/**
|
||
* @brief 按原始时序和可调速度回放指定总线数据。
|
||
*
|
||
* @requirement(name="数据管理与数据回放功能", id="SRS-F-02-002")
|
||
* 实现按原始时序、可调速度将存储数据回放。
|
||
*
|
||
* @requirement(name="数据统计回放功能", id="SRS-F-09-005")
|
||
* 实现数据统计回放,在回放过程中统计各项指标。
|
||
*
|
||
* @param records 待回放的数据记录列表
|
||
* @param speed_factor 回放速度倍数 (1.0 表示原始速度)
|
||
* @param callback 每帧回放时的回调函数
|
||
* @return uint64_t 实际回放的帧数
|
||
*/
|
||
uint64_t replayBusData(const std::vector<BusDataRecord>& records,
|
||
double speed_factor,
|
||
std::function<void(const BusDataRecord&)> callback);
|
||
|
||
/**
|
||
* @brief 删除指定 ID 的历史数据记录。
|
||
*
|
||
* @requirement(name="数据管理与数据回放功能", id="SRS-F-02-002")
|
||
* 支持历史数据的删除功能。
|
||
*
|
||
* @param record_id 要删除的记录 ID
|
||
* @return true 删除成功
|
||
* @return false 删除失败
|
||
*/
|
||
bool deleteBusData(int64_t record_id);
|
||
|
||
// ============================================================================
|
||
// 信号转换单元 (SU-CONV) — 函数声明
|
||
// ============================================================================
|
||
|
||
/**
|
||
* @brief 将模拟量电压值转换为 CAN 总线帧。
|
||
*
|
||
* @requirement(name="信号转换功能", id="SRS-F-06-001")
|
||
* 将模拟量信号进行数字化处理,转换为总线信号。
|
||
*
|
||
* @requirement(name="模拟量离散量转总线信号功能", id="SRS-F-06-005")
|
||
* 实现模拟量向总线信号的转换。
|
||
*
|
||
* @param voltage 模拟量电压值 (0~10V)
|
||
* @param can_id CAN 目标帧 ID
|
||
* @return BusDataRecord 转换后的总线数据记录
|
||
*/
|
||
BusDataRecord convertAnalogToBus(double voltage, uint32_t can_id);
|
||
|
||
/**
|
||
* @brief 将离散量电平值转换为 CAN 总线帧。
|
||
*
|
||
* @requirement(name="信号转换功能", id="SRS-F-06-001")
|
||
* 将离散量信号进行数字化处理,转换为总线信号。
|
||
*
|
||
* @requirement(name="模拟量离散量转总线信号功能", id="SRS-F-06-005")
|
||
* 实现离散量向总线信号的转换。
|
||
*
|
||
* @param level 离散量电平 (0 或 5V)
|
||
* @param can_id CAN 目标帧 ID
|
||
* @return BusDataRecord 转换后的总线数据记录
|
||
*/
|
||
BusDataRecord convertDigitalToBus(uint8_t level, uint32_t can_id);
|
||
|
||
// ============================================================================
|
||
// 总线路由单元 (SU-ROUTE) — 函数声明
|
||
// ============================================================================
|
||
|
||
/**
|
||
* @brief 执行数据帧的路由转发。
|
||
*
|
||
* @requirement(name="数据转发交换功能", id="SRS-F-07-001")
|
||
* 实现数据转发交换功能。
|
||
*
|
||
* @requirement(name="路由寻址功能", id="SRS-F-07-002")
|
||
* 实现路由寻址,根据路由表决定转发路径。
|
||
*
|
||
* @param frame 待转发的数据帧
|
||
* @return true 转发成功
|
||
* @return false 转发失败
|
||
*/
|
||
bool routeDataFrame(const BusDataRecord& frame);
|
||
|
||
/**
|
||
* @brief 将以太网数据帧转换为 CAN 总线帧。
|
||
*
|
||
* @requirement(name="以太网-CAN协议转换适配功能", id="SRS-F-07-003")
|
||
* 实现以太网与 CAN 协议间的转换适配。
|
||
*
|
||
* @param eth_frame 以太网帧数据
|
||
* @return BusDataRecord 转换后的 CAN 总线帧
|
||
*/
|
||
BusDataRecord convertEthernetToCAN(const BusDataRecord& eth_frame);
|
||
|
||
/**
|
||
* @brief 将 CAN 总线帧转换为以太网数据帧。
|
||
*
|
||
* @requirement(name="以太网-CAN协议转换适配功能", id="SRS-F-07-003")
|
||
* 实现 CAN 到以太网的协议转换。
|
||
*
|
||
* @param can_frame CAN 总线帧
|
||
* @return BusDataRecord 转换后的以太网帧
|
||
*/
|
||
BusDataRecord convertCANToEthernet(const BusDataRecord& can_frame);
|
||
|
||
/**
|
||
* @brief 添加一条静态路由。
|
||
*
|
||
* @requirement(name="路由功能要求", id="SRS-F-07-007")
|
||
* 支持静态路由配置。
|
||
*
|
||
* @param entry 路由条目
|
||
* @return true 添加成功
|
||
* @return false 添加失败
|
||
*/
|
||
bool addStaticRoute(const RouteEntry& entry);
|
||
|
||
/**
|
||
* @brief 添加一条动态路由(模拟 OSPF/RIP 协议行为)。
|
||
*
|
||
* @requirement(name="路由功能要求", id="SRS-F-07-007")
|
||
* 支持动态路由协议。
|
||
*
|
||
* @param entry 路由条目
|
||
* @return true 添加成功
|
||
* @return false 添加失败
|
||
*/
|
||
bool addDynamicRoute(const RouteEntry& entry);
|
||
|
||
// ============================================================================
|
||
// 总线分析单元 (SU-ANALY) — 函数声明
|
||
// ============================================================================
|
||
|
||
/**
|
||
* @brief 启动总线实时监听。
|
||
*
|
||
* @requirement(name="总线实时监听功能", id="SRS-F-09-001")
|
||
* 启动对指定类型总线的实时监听,通过回调传递接收的数据。
|
||
*
|
||
* @param bus_type 要监听的总线类型
|
||
* @param callback 接收数据时的回调
|
||
* @return true 启动成功
|
||
* @return false 启动失败
|
||
*/
|
||
bool startBusMonitoring(BusType bus_type,
|
||
std::function<void(const BusDataRecord&)> callback);
|
||
|
||
/**
|
||
* @brief 停止总线监听。
|
||
* @return true 停止成功
|
||
* @return false 停止失败
|
||
*/
|
||
bool stopBusMonitoring();
|
||
|
||
/**
|
||
* @brief 解析 CAN 帧数据,提取协议字段。
|
||
*
|
||
* @requirement(name="协议解析解码功能", id="SRS-F-09-002")
|
||
* 实现协议解析解码,支持 CAN2.0 和 CAN FD 协议格式。
|
||
*
|
||
* @param raw_data 原始 CAN 帧数据
|
||
* @return BusDataRecord 解析后的数据记录
|
||
*/
|
||
BusDataRecord parseCANFrame(const std::vector<uint8_t>& raw_data);
|
||
|
||
/**
|
||
* @brief 对数据帧进行故障诊断分析。
|
||
*
|
||
* @requirement(name="故障诊断分析功能", id="SRS-F-09-003")
|
||
* 实现故障诊断分析,检测各类总线错误。
|
||
*
|
||
* @requirement(name="错误帧识别要求", id="SRS-F-09-011")
|
||
* 识别位错误、CRC 错误等错误帧类型。
|
||
*
|
||
* @param frame 待检查的数据帧
|
||
* @return std::string 错误描述,空字符串表示无错误
|
||
*/
|
||
std::string diagnoseBusFault(const BusDataRecord& frame);
|
||
|
||
/**
|
||
* @brief 检查帧数据是否存在位错误或 CRC 错误。
|
||
*
|
||
* @requirement(name="错误帧识别要求", id="SRS-F-09-011")
|
||
* 要求识别位错误、CRC 错误等。
|
||
*
|
||
* @param frame_data 帧数据
|
||
* @return true 检测到错误
|
||
* @return false 无错误
|
||
*/
|
||
bool checkErrorFrame(const std::vector<uint8_t>& frame_data);
|
||
|
||
/**
|
||
* @brief 执行波形与时序分析。
|
||
*
|
||
* @requirement(name="波形与时序分析功能", id="SRS-F-09-004")
|
||
* 实现波形与时序分析,计算信号频率、幅度、占空比等参数。
|
||
*
|
||
* @param samples 采样数据序列
|
||
* @param sample_rate_hz 采样率 (Hz)
|
||
* @return WaveformAnalysisResult 分析结果
|
||
*/
|
||
WaveformAnalysisResult analyzeWaveform(const std::vector<double>& samples,
|
||
double sample_rate_hz);
|
||
|
||
/**
|
||
* @brief 获取当前网络状态信息。
|
||
*
|
||
* @requirement(name="网络状态监视功能", id="SRS-F-09-006")
|
||
* 实现网络状态监视,刷新率不低于 1Hz。
|
||
*
|
||
* @param bus_type 总线类型
|
||
* @return NetworkStatus 当前网络状态
|
||
*/
|
||
NetworkStatus getNetworkStatus(BusType bus_type);
|
||
|
||
// ============================================================================
|
||
// 故障注入单元 (SU-FAULT) — 函数声明
|
||
// ============================================================================
|
||
|
||
/**
|
||
* @brief 向目标总线注入短路故障。
|
||
*
|
||
* @requirement(name="总线短路/断路注入", id="SRS-F-12-001")
|
||
* 实现总线短路故障注入。
|
||
*
|
||
* @param bus_type 目标总线类型
|
||
* @param duration_ms 持续时间 (毫秒)
|
||
* @return true 注入成功
|
||
* @return false 注入失败
|
||
*/
|
||
bool injectShortCircuit(BusType bus_type, uint32_t duration_ms);
|
||
|
||
/**
|
||
* @brief 向目标总线注入断路故障。
|
||
*
|
||
* @requirement(name="总线短路/断路注入", id="SRS-F-12-001")
|
||
* 实现总线断路故障注入。
|
||
*
|
||
* @param bus_type 目标总线类型
|
||
* @param duration_ms 持续时间 (毫秒)
|
||
* @return true 注入成功
|
||
* @return false 注入失败
|
||
*/
|
||
bool injectOpenCircuit(BusType bus_type, uint32_t duration_ms);
|
||
|
||
/**
|
||
* @brief 向目标总线注入电磁干扰故障。
|
||
*
|
||
* @requirement(name="电磁干扰注入", id="SRS-F-12-002")
|
||
* 实现电磁干扰故障注入。
|
||
*
|
||
* @param bus_type 目标总线类型
|
||
* @param intensity 干扰强度 (0.0~1.0)
|
||
* @param duration_ms 持续时间 (毫秒)
|
||
* @return true 注入成功
|
||
* @return false 注入失败
|
||
*/
|
||
bool injectEMI(BusType bus_type, double intensity, uint32_t duration_ms);
|
||
|
||
/**
|
||
* @brief 向目标总线注入错误帧。
|
||
*
|
||
* @requirement(name="错误帧注入", id="SRS-F-12-003")
|
||
* 实现错误帧故障注入。
|
||
*
|
||
* @param bus_type 目标总线类型
|
||
* @param error_type 错误类型描述
|
||
* @return true 注入成功
|
||
* @return false 注入失败
|
||
*/
|
||
bool injectErrorFrame(BusType bus_type, const std::string& error_type);
|
||
|
||
/**
|
||
* @brief 模拟节点离线故障。
|
||
*
|
||
* @requirement(name="节点离线/异常接入", id="SRS-F-12-004")
|
||
* 实现节点离线故障注入。
|
||
*
|
||
* @param node_id 目标节点标识
|
||
* @param duration_ms 持续时间 (毫秒)
|
||
* @return true 注入成功
|
||
* @return false 注入失败
|
||
*/
|
||
bool injectNodeOffline(const std::string& node_id, uint32_t duration_ms);
|
||
|
||
/**
|
||
* @brief 模拟节点异常接入故障。
|
||
*
|
||
* @requirement(name="节点离线/异常接入", id="SRS-F-12-004")
|
||
* 实现节点异常接入故障注入。
|
||
*
|
||
* @param node_id 异常节点标识
|
||
* @return true 注入成功
|
||
* @return false 注入失败
|
||
*/
|
||
bool injectNodeAbnormal(const std::string& node_id);
|
||
|
||
/**
|
||
* @brief 向目标总线注入波特率异常波动故障。
|
||
*
|
||
* @requirement(name="波特率异常波动注入", id="SRS-F-12-005")
|
||
* 实现波特率异常波动故障注入。
|
||
*
|
||
* @param bus_type 目标总线类型
|
||
* @param abnormal_baud 异常波特率
|
||
* @param duration_ms 持续时间 (毫秒)
|
||
* @return true 注入成功
|
||
* @return false 注入失败
|
||
*/
|
||
bool injectBaudRateAnomaly(BusType bus_type, uint32_t abnormal_baud, uint32_t duration_ms);
|
||
|
||
// ============================================================================
|
||
// 总线测试分析单元 (SU-TEST) — 函数声明
|
||
// ============================================================================
|
||
|
||
/**
|
||
* @brief 执行 40m 以内短距离总线的传输性能测试。
|
||
*
|
||
* @requirement(name="40m内总线测试分析功能", id="SRS-F-10-001")
|
||
* 实现 40m 内总线传输延迟、吞吐量、丢包率等性能测试。
|
||
*
|
||
* @param bus_type 总线类型
|
||
* @param test_duration_sec 测试持续时间 (秒)
|
||
* @return PerformanceMetrics 测试结果指标
|
||
*/
|
||
PerformanceMetrics testShortBusPerformance(BusType bus_type, uint32_t test_duration_sec);
|
||
|
||
/**
|
||
* @brief 执行 40m 以上(含中继)总线的传输性能测试。
|
||
*
|
||
* @requirement(name="40m以上总线测试分析功能", id="SRS-F-10-002")
|
||
* 实现 40m 以上含中继总线的测试分析。
|
||
*
|
||
* @param bus_type 总线类型
|
||
* @param test_duration_sec 测试持续时间 (秒)
|
||
* @return PerformanceMetrics 测试结果指标
|
||
*/
|
||
PerformanceMetrics testLongBusPerformance(BusType bus_type, uint32_t test_duration_sec);
|
||
|
||
/**
|
||
* @brief 执行长时间满负荷稳定性测试(≥24小时)。
|
||
*
|
||
* @requirement(name="长时间满负荷测试分析功能", id="SRS-F-10-003")
|
||
* 实现长时间满负荷运行、重复启停等测试分析。
|
||
*
|
||
* @param bus_type 总线类型
|
||
* @param duration_hours 测试持续时间 (小时)
|
||
* @return PerformanceMetrics 测试结果指标
|
||
*/
|
||
PerformanceMetrics testLongDurationStability(BusType bus_type, uint32_t duration_hours);
|
||
|
||
// ============================================================================
|
||
// 辅助函数
|
||
// ============================================================================
|
||
|
||
/**
|
||
* @brief 获取软件版本号。
|
||
* @return std::string 版本号字符串
|
||
*/
|
||
std::string getVersion();
|
||
|
||
/**
|
||
* @brief 打印命令行帮助信息。
|
||
*/
|
||
void printHelp();
|
||
|
||
} // namespace bntvs
|
||
|
||
#endif // BNTVS_SW_APP_HPP
|