88bed850eea790ddb72e910e0a5581e81dc25875
build-test-deploy / ci (push) Failing after 1h9m57s
协议层:
- 新增 protocol/CanBms.{h,cpp}:按 docs/BMS_协议字段定义.xlsx 解码
0x10010000(总电压/SOC/故障码/状态位)、0x10010005(最大电流限制/
总电流/最高单体电压)、0x10010006(总电压校验)。
缩放用除法保证与十进制字面量严格一致;总电流按 2 字节 s16 实现
(xlsx 标注 3 字节与其自身示例/实车帧矛盾,已在代码注释说明)。
- 删除 UDP 锂电池协议:protocol/BatProtocol.{h,cpp}、
comm/BatLinkManager.h(动力/仪表双链路、自检/接触器/功率指令)。
pCCU 主体:
- CCU 订阅 pCanBridge 发布的 CAN_0x* 二进制消息并解码 BMS 报文;
SystemData 双电池槽位改为单一 BmsStatusValue + CAN 帧计数;
PM 电池启停/功率指令改为告警忽略(BMS CAN 协议未定义控制报文)。
- 修复两个本地联调发现的阻断性 bug:
1) MOOS 通配订阅必须用三参数 Register("CAN_0x*","*",0),
单参数形式不做通配匹配;
2) 变量名前缀匹配偏移(compare 少比 1 字符 / sscanf +5 指向 'x'),
改为 rfind 前缀判断 + +6 偏移。
- PowerCoordinator/CoordFsm 剥离电池接触器/切换时序(依赖已删除的
UDP 指令),保留 FC 联动与协调策略占位(CoordSwitchingState 改为
通用的 CoordBusyState)。
网页:
- 动力/仪表锂电池两个标签页合并为"锂电池BMS(CAN)":总电压/总电流/
SOC/最大电流限制/最高单体电压/校验帧/故障码高亮/在线状态,
附报文来源说明;链路状态页改为 CAN 链路行(pCanBridge)。
配置与测试:
- pCCU.moos / missions/h100.moos 移除电池 UDP 配置;
- pccuTest:删除旧电池编解码用例,新增 testCanBmsDecode
(向量取自实车抓包:533.8V/20.1%/49/3.752V/-25.0A)103/103 通过;
- 集成测试改为纯 FC/PM 流程,本地实测 PASSED(含 Web 页面校验)。
H100PowerManger
H100 能源管理程序
测试报告
每次 CI 运行后自动生成测试报告:
自动化测试(PowerManger)
CI 在 aarch64 (QEMU) 环境下运行两类测试,不改动任何 src/ 生产代码:
单元测试(GoogleTest,PowerMangerTests,56 例)
DriverTest:10 个工况的设备表生成(STANDBY/岸基备航/水中备航/巡航/高速/上浮下潜/浮调/水下侦查/水面侦查/DJ)+ 设备状态读写 + JSON 往返SystemDataTest:4 类配电/CCU 反馈的故障检测(断路器 0x55/0xAA/0x5A 映射、绝缘低、电源失电、漏水、DCDC、继电器位提取、缩放)+ 故障码集合/等级 + 漏水位FaultMapTest:锂电池故障表(54) / 配电故障表(45) 完整性UpmsgTest:上位机/外部通信 JSON 消息解析与序列化往返UdpCommTest:UDP 校验和 / 消息头识别 / 校验解析 / 日期PmSysvariableTest:#pragma pack(1)协议结构体大小/偏移 + 枚举完整性SqliteTest:用裸 sqlite3 读回校验 10 个insertData写入
集成测试
- 冒烟:MOOSDB +
pPowerManger拉起存活 - UDP 回环:
udpFeeder发送真实 CCU 反馈 → 校验power_data.db落行(验证 UDP→SystemData→SQLite 全链路)
本地跑测试:需要 GoogleTest(git clone https://gitea2.zhaojingkui.xyz/zjk/googletest.git 后 cmake && make && make install),然后 ./build.sh 即可。
构建产物(Gitea Releases,手动部署)
CI 构建的 aarch64 二进制(RK3588 / Ubuntu 22.04,板卡实测为 Orange Pi 5 Plus 的 Jammy 系统)会发布到 Gitea Releases,供手动下载部署:
- 版本号 Release:推送
v*tag(如v1.0.0)时创建,正式版 →https://gitea2.zhaojingkui.xyz/zjk/H100PowerManger/releases/tag/v1.0.0 - latest Release(测试):每次
mainpush 时更新,标记为预发布(测试用) →https://gitea2.zhaojingkui.xyz/zjk/H100PowerManger/releases/tag/latest
发布流程(CI 自动执行,仅测试通过后发布)
Publish release / Publish latest release 步骤(if: success(),即构建 + 测试全部通过才发布)用 ${{ secrets.CI_TOKEN }} 调 Gitea API 完成:
- 创建 Release:
POST /releases - 删除旧 latest(仅 latest):
DELETE /releases/tags/latest - 上传附件:
POST /releases/{id}/assets?name=pPowerManger(multipart 字段attachment) - 按
github.ref分支处理:refs/tags/v*→ 直接为该 tag 创建版本号 Releaserefs/heads/main→git tag -f latest && git push -f origin latest,删除旧 latest Release,重建为 prerelease,再上传二进制
- Release body 自动带上:commit / 时间 / 测试报告链接 / 手动部署命令
手动部署到板卡
从 Releases 页面下载 pPowerManger 后,手动推送到板卡(仅推送,不自动重启):
rsync -avz pPowerManger root@192.168.0.223:/root/work/moos_ws/moos-ivp-extend/bin/pPowerManger
Languages
C
79%
C++
14.4%
Python
5.4%
Shell
0.6%
HTML
0.4%
Other
0.2%