Files
H100PowerManger/src/pPowerManger/LowerCommManager.h
T
zjk 5b8f0b1421 锂电池改用 BCU-MBMS CAN 协议按节点解析 + bcu_node 解析数据落库 + 板卡对时脚本
- 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)
2026-09-01 12:58:33 +08:00

137 lines
5.1 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#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