document_generate/include/app.hpp

657 lines
22 KiB
C++
Raw Permalink Normal View History

2026-06-30 02:29:28 +00:00
#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