pCCU新增锂电池通信/协调操作 + 电源协调状态机骨架(惰性)
锂电池通信(docs/锂电池协议20230324.docx): - 协议层 BatProtocol:自检0x0000(2B)/设备控制0x0001(17B)/电池组状态0x0003(80B)/ 电池包报警0x0004(68B),uint32字节和校验、小端 - 链路层 BatLinkManager:动力/仪表锂电池独立UDP链路,本机监听与远端IP端口 均由.moos配置(dyn_bat_*/ins_bat_*/bat_work_condition) - SystemData/SnapshotBuilder/网页:电池数据按动力/仪表归类展示(运行状态/接触器 电气量/电池包电压温度/报警),收发帧落库SQLite,网页新增电池标签页 操作->指令下发(PowerCoordinator): - 操作接口:自检/上下电(母线接触器55H接通77H断开,含预充)/功率设定(0~500kW)/ 电池切换(低压->高压6步、高压->低压5步,按协议时序) - 步骤引擎:每电池独立步骤队列,下发->状态反馈确认->超时兜底;周期1s心跳控制帧 - PM操控指令insBatCmd/dynBatCmd/dynBatPower自动映射为电池操作 电源协调状态机骨架(CoordFsm, TinyFSM): - 事件Tick/PmControl/StepDone + 状态Normal/Switching/Fault,react均为TODO占位 - 当前未接线(无start/dispatch调用,运行行为与接入前一致),CoordFsm.hpp头部附接线指南 测试与部署: - pccuTest新增电池协议编解码/帧长/链路分发用例(175项通过);集成测试覆盖电池 心跳、启停映射(0x10->0x55/0x20->0x77)、状态落库;同步pccu_it.moos与ws_check - h100.moos与pCCU.moos增加锂电池链路配置;归档锂电池协议文档
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
#include <atomic>
|
||||
#include "../protocol/FcProtocol.h"
|
||||
#include "../protocol/PmProtocol.h"
|
||||
#include "../protocol/BatProtocol.h"
|
||||
|
||||
namespace ccu {
|
||||
|
||||
@@ -12,6 +13,7 @@ namespace ccu {
|
||||
// SystemData:跨线程共享的最新状态快照。
|
||||
//
|
||||
// - 接收线程(FC 链路)写 FcStatus 快照
|
||||
// - 接收线程(锂电池链路)写 动力/仪表 BatStatus 快照(role: 0=动力 1=仪表)
|
||||
// - CCU 主循环(Iterate)读快照并整合编码为 PM 状态报文发送
|
||||
// - 网页线程读快照展示
|
||||
// 通过互斥锁保护读写。
|
||||
@@ -99,6 +101,38 @@ public:
|
||||
return m_pmParamFb;
|
||||
}
|
||||
|
||||
//-------- 锂电池(role: 0=动力 1=仪表,见 BatRole) --------
|
||||
|
||||
// 更新/获取最新电池组状态(0x0003)
|
||||
void updateBatStatus(int role, const BatStatusValue& v) {
|
||||
std::lock_guard<std::mutex> lock(m_mutex);
|
||||
m_batStatus[role] = v;
|
||||
m_batStatusCount[role]++;
|
||||
}
|
||||
BatStatusValue batStatus(int role) const {
|
||||
std::lock_guard<std::mutex> lock(m_mutex);
|
||||
return m_batStatus[role];
|
||||
}
|
||||
unsigned long batStatusCount(int role) const {
|
||||
std::lock_guard<std::mutex> lock(m_mutex);
|
||||
return m_batStatusCount[role];
|
||||
}
|
||||
|
||||
// 更新/获取最新电池包报警信息(0x0004)
|
||||
void updateBatAlarm(int role, const BatPackAlarmValue& v) {
|
||||
std::lock_guard<std::mutex> lock(m_mutex);
|
||||
m_batAlarm[role] = v;
|
||||
m_batAlarmCount[role]++;
|
||||
}
|
||||
BatPackAlarmValue batAlarm(int role) const {
|
||||
std::lock_guard<std::mutex> lock(m_mutex);
|
||||
return m_batAlarm[role];
|
||||
}
|
||||
unsigned long batAlarmCount(int role) const {
|
||||
std::lock_guard<std::mutex> lock(m_mutex);
|
||||
return m_batAlarmCount[role];
|
||||
}
|
||||
|
||||
private:
|
||||
mutable std::mutex m_mutex;
|
||||
FcStatusValue m_fcStatus;
|
||||
@@ -107,10 +141,14 @@ private:
|
||||
FcControlValue m_fcControl;
|
||||
PmStatusValue m_pmStatus;
|
||||
PmParamSetFbValue m_pmParamFb;
|
||||
BatStatusValue m_batStatus[2];
|
||||
BatPackAlarmValue m_batAlarm[2];
|
||||
unsigned long m_fcStatusCount = 0;
|
||||
unsigned long m_pmControlCount = 0;
|
||||
unsigned long m_fcControlCount = 0;
|
||||
unsigned long m_pmStatusCount = 0;
|
||||
unsigned long m_batStatusCount[2] = {0, 0};
|
||||
unsigned long m_batAlarmCount[2] = {0, 0};
|
||||
};
|
||||
|
||||
} // namespace ccu
|
||||
|
||||
Reference in New Issue
Block a user