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:
@@ -15,7 +15,13 @@ namespace ccu {
|
||||
// 【节点地址】一个 MBMS 下最多挂 54 个 BCU,CAN ID 中间的 XX(01h~36h)
|
||||
// 为 BCU 节点地址编号,其余位固定:
|
||||
// 0x10XX00YY BCU 主动上报消息(YY=功能码 00/01/02/03/06/10)
|
||||
// 0x10XX81FF MBMS 下发指令(继电器控制,pCCU 只收不发,不解析)
|
||||
// 0x10XX81FF MBMS 下发指令(继电器控制,经 MOOS CAN_TX_0x* 下行)
|
||||
//
|
||||
// 【下发指令 0x10XX81FF】数据域 8 字节(BYTE1~8 = byte0~7):
|
||||
// byte0 = 0x02(索引号) byte1 = 0x00(索引号)
|
||||
// byte2 = 总正继电器控制(1 闭合 / 0 断开)
|
||||
// byte3 = 总负继电器控制(1 闭合 / 0 断开)
|
||||
// byte4~7 = Reserve(填充 0xFF)
|
||||
//
|
||||
// 【上报报文】均为扩展帧,字段大端,BYTE1~8 对应数据域 byte0~7:
|
||||
// 0x10XX0000 (200ms) 累加电压 u16@0 ÷10 V
|
||||
@@ -68,6 +74,29 @@ inline uint8_t bcuFuncOf(uint32_t canId) {
|
||||
return static_cast<uint8_t>(canId & 0xFF);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// BCU 断路器(总正/总负继电器)下行控制
|
||||
//--------------------------------------------------------------------------
|
||||
|
||||
// BCU 节点继电器控制指令 CAN ID(0x10XX81FF,XX=节点地址 01h~36h)
|
||||
inline uint32_t bcuCtrlCanId(uint8_t addr) {
|
||||
return 0x10000000u | (static_cast<uint32_t>(addr) << 16) | 0x81FFu;
|
||||
}
|
||||
|
||||
// 编码继电器控制数据域(8 字节,经 MOOS CAN_TX_0x%08X 下发,pCanBridge 发送):
|
||||
// [0]=0x02 [1]=0x00 [2]=总正(1闭合/0断开) [3]=总负 [4..7]=0xFF
|
||||
// pos/neg 非 0 值均视为闭合(1)。
|
||||
inline void buildBcuRelayCtrlData(int pos, int neg, uint8_t out[8]) {
|
||||
out[0] = 0x02;
|
||||
out[1] = 0x00;
|
||||
out[2] = pos ? 0x01 : 0x00;
|
||||
out[3] = neg ? 0x01 : 0x00;
|
||||
out[4] = 0xFF;
|
||||
out[5] = 0xFF;
|
||||
out[6] = 0xFF;
|
||||
out[7] = 0xFF;
|
||||
}
|
||||
|
||||
// 是否为 BCU 主动上报报文 ID(0x10XX00YY,YY 为已定义功能码)
|
||||
inline bool isCanBcuId(uint32_t canId) {
|
||||
uint8_t addr = bcuAddrOf(canId);
|
||||
|
||||
Reference in New Issue
Block a user