- pCCU/CanBms:按《04KT38电池BCU-MBMS通信(CAN)定义》重写解码, BmsStatus 单状态模型改为 BcuNodeStatus 多节点模型(0x10XX00YY, 节点地址 01~36h),支持 0x0000 电压/电流/SOC/告警码、0x0001 单体 电压、0x0002 单体温度、0x0003 继电器、0x0006 绝缘/端口电压、 0x0010 告警位(附录1 中文码表)六类报文 - 平均单体温度偏移修正:协议文档 BYTE5 写"偏移0"有误,实测固件与 最高/最低一致均带 -40℃ 偏移(实车 0x10020002 原始 68/69 减 40 后 为 28/29℃,落在最低28~最高30区间内,按文档直读则超出物理范围) - pCCU/DbStore:新增 bcu_node 解析数据表,锂电池 BMS 报文每帧落一行 节点合成状态(原 comm_log 仅原始帧,BMS/CAN 帧此前不落 pCCU 库), buildReport 增加 BMS 记录数 - 快照/网页:BCU 按节点分组展示(告警位解析中文含义、数据 age), PM 状态报文锂电池/应急电池卡片 - pPowerManger:新增 iport 本地输入端口配置(UDP bind 延迟到 OnStartUp 读取配置后执行,保证 iport/ccuhost/ccuport 生效), 各 mission 文件补充注释 - test:CAN BCU 解码用例按新协议/新偏移更新(实车抓包 + 文档示例值), 133 项全部通过 - docs:删除旧 BMS 协议(xlsx/20230324docx),归档 04KT38 BCU-MBMS CAN 定义、配电控制器通信协议 20260824、配电系统 CAN 通讯协议 - scripts:新增 sync-board-time.sh,223 板卡(RK3588)时间校正 (本机为基准 + RTT 折半补偿对时,尽力写 RTC,支持 status/--time)
137 lines
5.1 KiB
C++
137 lines
5.1 KiB
C++
#ifndef LOWER_COMM_MANAGER_H
|
||
#define LOWER_COMM_MANAGER_H
|
||
#define UNIX
|
||
|
||
#include "MOOS/libMOOS/Comms/XPCUdpSocket.h"
|
||
#include "MOOS/libMOOS/Utils/MOOSThread.h"
|
||
#include "MOOS/libMOOS/Utils/MOOSLock.h"
|
||
#include "../udpcomm/ccuUdpMsg.h"
|
||
#include "pmSysvariable.h"
|
||
#include <queue>
|
||
#include <map>
|
||
#include <functional>
|
||
#include <atomic>
|
||
#include <vector>
|
||
#include "udpcomm/udpComm.h"
|
||
#include <functional>
|
||
|
||
class PowerManger; // 前向声明
|
||
class ICommLogger;
|
||
|
||
class LowerCommManager {
|
||
public:
|
||
LowerCommManager(PowerManger* pm, long myPort, long ccuPort, const std::string& cccHost);
|
||
~LowerCommManager();
|
||
|
||
//processPeriodicTasks
|
||
void processPeriodicTasks();
|
||
//clearMsgQueue
|
||
void clearMsgQueue();
|
||
|
||
public:
|
||
// 初始化UDP通信
|
||
bool initUdpComm();
|
||
|
||
// 设置 CCU 地址(moos 配置读取后调用;须在监听/发送线程启动前调用)
|
||
void setCcuAddress(const std::string& host, long port);
|
||
|
||
// 设置本地输入端口(CCU -> pPowerManger,moos 配置读取后调用;须在 bind/监听线程启动前调用)
|
||
void setLocalPort(long port);
|
||
|
||
// 设置原始帧日志回调(转发给 udpComm,可为空)
|
||
void setCommLogger(ICommLogger* logger);
|
||
|
||
// 更新设备状态
|
||
bool updatePoweSystemStates();
|
||
//================================断路器操作函数=======================================
|
||
template<typename CmdT, typename StateT>
|
||
bool operateBreakerGeneric(
|
||
char const* name,
|
||
char opt,
|
||
std::function<void(CmdT&)> fillCmd, // 填 cmd 对应字段
|
||
std::function<StateT()> readState // 读 pmCurrentState 对应字段
|
||
);
|
||
// 高电压母线
|
||
bool operate_HV_fuelCellCircuit_Breaker(char opt);
|
||
bool operate_HV_powerLithiumBattery_Breaker(char opt);
|
||
bool operate_HV_propulsionMotor_Breaker(char opt);
|
||
bool operate_HV_lithiumBatteryMeter_Breaker(char opt);
|
||
bool operate_HV_dcDc5Module_Breaker(char opt);
|
||
bool operate_HV_bowHighVoltageBox_Breaker(char opt);
|
||
bool operate_HV_sternFt45_Breaker(char opt);
|
||
bool operate_HV_sternRudder1_Breaker(char opt);
|
||
bool operate_HV_sternRudder2_Breaker(char opt);
|
||
bool operate_HV_fbReserved_Breaker(char opt);
|
||
bool operate_HV_tyzReserved_Breaker(char opt);
|
||
bool operate_HV_reserved_Breaker(char opt);
|
||
bool operate_HV_dcDc5_Breaker(char opt);
|
||
bool operate_HV_coolingSystem_Breaker(char opt);
|
||
// 高压汇流排
|
||
bool operate_HVA_bowFTDevice123Circuit_Breaker(char opt);
|
||
bool operate_HVA_actuatorCircuit_Breaker(char opt);
|
||
bool operate_HVA_mastSteeringGearControlBoxCircuit_Breaker(char opt);
|
||
bool operate_HVA_xczCircuit_Breaker(char opt);
|
||
bool operate_HVA_bowRudderControlBoxCircuit_Breaker(char opt);
|
||
bool operate_HVA_openWaterCoverStartCylinderCircuit_Breaker(char opt);
|
||
// 仪表母线
|
||
bool operate_LV_lithiumBatteryGroupInstrumentCircuit_Breaker(char opt);
|
||
bool operate_LV_bowLowVoltageDistributionBoxCircuit_Breaker(char opt);
|
||
bool operate_LV_unit4Dc48V_Breaker(char opt);
|
||
bool operate_LV_dcC1Panel_Breaker(char opt);
|
||
bool operate_LV_reservedCircuit1_Breaker(char opt);
|
||
bool operate_LV_reservedCircuit2_Breaker(char opt);
|
||
bool operate_LV_mergencyLithiumBatteryGroup2Circuit_Breaker(char opt);
|
||
// 仪表汇流排
|
||
bool operate_LVA_unit1Circuit_Breaker(char opt);
|
||
bool operate_LVA_unit2Circuit_Breaker(char opt);
|
||
bool operate_LVA_unit3Circuit_Breaker(char opt);
|
||
bool operate_LVA_unit5Circuit_Breaker(char opt);
|
||
bool operate_LVA_bowPZDeviceCircuit_Breaker(char opt);
|
||
bool operate_LVA_reservedCircuit1_Breaker(char opt);
|
||
bool operate_LVA_reservedCircuit2_Breaker(char opt);
|
||
bool operate_LVA_mergencyLithiumBatteryGroup1Circuit_Breaker(char opt);
|
||
|
||
//保持指令
|
||
void operate_hold();
|
||
//================================复合管控器操作函数====================================
|
||
// 发送CCU控制命令
|
||
bool sendCcuCommand(const ccuColCmd cmd);
|
||
bool sendDisSysCommand(const disSysBreakerList& cmd); //已废弃,不同时操作多个继电器设备
|
||
|
||
// 启动/停止监听线程
|
||
void startListenThread();
|
||
void stopListenThread();
|
||
|
||
//转换函数
|
||
char getBreakerOption(char cmd);
|
||
|
||
// 配电和CCU的反馈状态
|
||
msg_CcuStateFbMsg m_CcuCurrentState;
|
||
msg_disHighVolBusFbMsg m_disHighVolBusCurrentState;
|
||
msg_disHighAVolBusFbMsg m_disHighAVolBusCurrentState;
|
||
msg_disLowMainBusFbMsg m_disHighBVolBusCurrentState;
|
||
msg_disLowBusFbMsg m_disLowBusState;
|
||
// 配电和CCU的反馈状态时间戳
|
||
double msg_CcuStateFbMsg_Update_time;
|
||
// double msg_CcuSetParmFbMsg_Update_time;
|
||
double msg_disHighVolBusFbMsg_Update_time;
|
||
double msg_disHighAVolBusFbMsg_Update_time;
|
||
double msg_disHighBVolBusFbMsg_Update_time;
|
||
double msg_disLowBusFbMsg_Update_time;
|
||
public:
|
||
long m_port;
|
||
long m_ccuPort;
|
||
std::string m_ccuHost;
|
||
std::string m_host;
|
||
|
||
PowerManger* m_pm;
|
||
udpComm* m_udpComm;
|
||
|
||
CMOOSThread m_ListenThread;
|
||
int m_connectState;
|
||
|
||
// UDP监听线程函数
|
||
bool listenThreadFunc();
|
||
};
|
||
|
||
#endif // LOWER_COMM_MANAGER_H
|