pCCU 锂电池页新增 BCU 断路器控制(0x10XX81FF 经 pCanBridge 下行 CAN 总线)

- CanBms: bcuCtrlCanId(0x10XX81FF) + buildBcuRelayCtrlData(02 00 总正 总负 FF*4)
- SystemData: BcuCtrlCmd 下行队列(Web线程入队->Iterate/MOOS线程出队Notify) + 下发统计
- CCU: /api/bcu_ctrl(addr/action 或 pos/neg, 校验地址01h~36h) + Iterate 经 MOOS CAN_TX_0x* 下发
- pCanBridge 变双向透传: 订阅 CAN_TX_0x*,CanEndpoint::sendFrame(13字节CANET帧,TCP写,互斥保护)
- 网页: 每BCU节点断路器闭合/断开按钮(confirm确认) + 下发统计卡片
- 测试: pccuTest 控制帧编码用例(183项);集成测试新增假CANET服务器验证完整下行链路(闭合/断开/非法地址)
This commit is contained in:
zjk
2026-09-01 15:23:30 +08:00
parent 0639b5904d
commit 90caacf9a2
15 changed files with 517 additions and 22 deletions
+20
View File
@@ -520,6 +520,25 @@ static void testRcuRegistry() {
CHECK(gotName == "pm_status");
}
//--------------------------------------------------------------------------
// 13. BCU 断路器控制帧(0x10XX81FF 下行)
static void testBcuCtrlFrame() {
// CAN ID:0x10 XX 81 FF,XX=节点地址
CHECK(bcuCtrlCanId(1) == 0x100181FFu);
CHECK(bcuCtrlCanId(54) == 0x103681FFu);
// 数据域:02 00 总正 总负 FF*4
uint8_t d[8];
buildBcuRelayCtrlData(1, 1, d);
CHECK(d[0] == 0x02 && d[1] == 0x00);
CHECK(d[2] == 0x01 && d[3] == 0x01);
CHECK(d[4] == 0xFF && d[5] == 0xFF && d[6] == 0xFF && d[7] == 0xFF);
buildBcuRelayCtrlData(0, 0, d);
CHECK(d[2] == 0x00 && d[3] == 0x00);
buildBcuRelayCtrlData(1, 0, d);
CHECK(d[2] == 0x01 && d[3] == 0x00);
}
//--------------------------------------------------------------------------
int main() {
testFrameLengths();
@@ -535,6 +554,7 @@ int main() {
testDisRoundTrip();
testRegistryLengthDispatch();
testRcuRegistry();
testBcuCtrlFrame();
std::printf("\n==== pccuTest: %d passed, %d failed ====\n", g_pass, g_fail);
return g_fail == 0 ? 0 : 1;