0827协议修订:姿态数据2改预留 + 状态帧新增剩余发电量 + CCU地址可配置
build-test-deploy / ci (push) Successful in 1h13m13s

FC协议(0827 docx):
- 控制指令域:字节12,13/16,17由纵倾/横倾姿态数据2改为预留(编码恒0、解码忽略)
- 状态反馈域:字节147,148由预留12改为剩余发电量(MWh),贯通JSON/网页显示
- PM→CCU链路:姿态字段4xuchar改为2xshort(数据1),结构体大小与线上布局不变
- 同步更新:CCU转发映射、SnapshotBuilder、pCCU网页、fuelcell网页、SQLite列描述、单测/模拟器
- 修正集成测试遗留断言(20B→24B、心跳d[19]→d[23])并增强预留字节校验

CCU地址可配置:
- pPowerManger 支持 moos 配置项 ccuhost/ccuport(默认127.0.0.1:7000)
- build-board.sh 增加 --ccu-host/--ccu-port 参数

文档:FC协议文档更新为0827版,清理过期协议docx
This commit is contained in:
zjk
2026-08-28 00:09:17 +08:00
parent c8becd1f6c
commit 2590282aed
28 changed files with 199 additions and 91 deletions
+23 -4
View File
@@ -48,6 +48,10 @@ PowerManger::PowerManger()
m_skew = 10;
// CCU 地址默认值,可在 moos 文件中用 ccuhost/ccuport 覆盖
m_ccuHost = CCUHOST;
m_ccuPort = CCUPORT;
m_pmCurrentState = {};
m_currentDisBreakerState = {};
m_targetDisBreakerState = {};
@@ -64,7 +68,7 @@ PowerManger::PowerManger()
initControlCmd();
//初始化下位机通信
m_lowerCommManager = new LowerCommManager(this,IPORT,CCUPORT,CCUHOST);
m_lowerCommManager = new LowerCommManager(this,IPORT,m_ccuPort,m_ccuHost);
m_lowerCommManager->initUdpComm();
//初始化上位机通信
@@ -189,6 +193,8 @@ bool PowerManger::OnStartUp()
std::string dbPath; // 数据库路径,不配置则默认当前目录 power_data.db
std::string logPath; // 日志文件路径,不配置则默认当前目录 pPowerManger.log
std::string ccuHost; // CCU 地址,不配置则沿用默认值
long ccuPort = 0; // CCU 端口,不配置则沿用默认值
STRING_LIST::iterator p;
for(p=sParams.begin(); p!=sParams.end(); p++) {
@@ -212,6 +218,14 @@ bool PowerManger::OnStartUp()
logPath = value;
handled = true;
}
else if(param == "ccuhost") {
ccuHost = value;
handled = true;
}
else if(param == "ccuport") {
ccuPort = atoi(value.c_str());
handled = true;
}
if(!handled)
reportUnhandledConfigWarning(orig);
@@ -230,6 +244,13 @@ bool PowerManger::OnStartUp()
LOG_F(INFO, "数据库存储路径: %s", dbPath.c_str());
m_db = new SQLite(dbPath);
m_db->createTable();
// 应用 moos 文件中的 CCU 地址配置(在监听/通信线程启动前生效)
if (!ccuHost.empty()) m_ccuHost = ccuHost;
if (ccuPort > 0) m_ccuPort = ccuPort;
m_lowerCommManager->setCcuAddress(m_ccuHost, m_ccuPort);
LOG_F(INFO, "CCU 地址: %s:%ld", m_ccuHost.c_str(), m_ccuPort);
// 注入原始帧日志回调(RX/TX 双向落库)
m_lowerCommManager->setCommLogger(m_db);
// 数据库就绪后再启动下位机监听线程
@@ -365,10 +386,8 @@ void PowerManger::initControlCmd()
m_CcuColCmd.fcmode = 0x00; //默认无效
m_CcuColCmd.fcuCmd = 0x00; //无效指令
m_CcuColCmd.fcuPowerEfficiency = 0; //输出功率指令,0~250,分辨率0.1kW
m_CcuColCmd.pitchData1 = 0; //纵倾姿态数据1
m_CcuColCmd.pitchData2 = 0; //纵倾姿态数据2
m_CcuColCmd.pitchData1 = 0; //纵倾姿态数据1(int16,分辨率0.1°;0824协议:姿态数据2已删除)
m_CcuColCmd.rollData1 = 0; //横倾姿态数据1
m_CcuColCmd.rollData2 = 0; //横倾姿态数据2
m_CcuColCmd.emergencyAllow = 0; //应急允许
m_CcuColCmd.depth = 0; //潜深深度
m_CcuColCmd.supplyExhaustCmd = 0x00; //补给/排放指令