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:
@@ -10,14 +10,20 @@
|
||||
namespace canbridge {
|
||||
|
||||
//============================================================================
|
||||
// CanBridge:CAN -> MOOSDB 透传桥(MOOS 应用外壳)。
|
||||
// CanBridge:CAN <-> MOOSDB 双向透传桥(MOOS 应用外壳)。
|
||||
//
|
||||
// 数据流:
|
||||
// 数据流(上行):
|
||||
// USBCAN-8E-U (TCP Server, 默认 192.168.0.222:4001 = CAN0)
|
||||
// -> CanEndpoint(TCP Client,13 字节切帧)
|
||||
// -> handleFrame() 解析
|
||||
// -> Notify 到 MOOSDB
|
||||
//
|
||||
// 数据流(下行,BCU 断路器/继电器控制等):
|
||||
// MOOS "CAN_TX_0x%08X"(二进制数据域,dlc<=8)
|
||||
// -> OnNewMail 解析 CAN ID 与数据
|
||||
// -> CanEndpoint::sendFrame(同一 TCP 连接写出 13 字节帧)
|
||||
// -> USBCAN -> CAN 总线
|
||||
//
|
||||
// MOOS 消息映射:
|
||||
// m_sKey = "CAN_0x%08X" CAN ID(完整 4 字节,标准/扩展帧同格式)
|
||||
// m_sVal = 二进制 data(dlc 字节,MOOS_BINARY_STRING)
|
||||
@@ -25,7 +31,8 @@ namespace canbridge {
|
||||
// m_dfVal2 = 原始帧信息字节 byte0(bit7 FF / bit6 RTR / bit3~0 DLC)
|
||||
// m_nID 不使用(MOOS 内部消息序号)
|
||||
//
|
||||
// 每帧同时落库 SQLite(can_frame 表,配置项 dbpath)。
|
||||
// 每帧(上行)同时落库 SQLite(can_frame 表,配置项 dbpath);
|
||||
// 下行帧仅日志记录(can_frame 表无方向列,保持旧库兼容)。
|
||||
//============================================================================
|
||||
|
||||
class CanBridge : public AppCastingMOOSApp {
|
||||
@@ -45,6 +52,9 @@ private:
|
||||
// 收帧回调(CanEndpoint 接收线程调用)
|
||||
void handleFrame(uint8_t frameInfo, uint32_t id, const uint8_t* data, int dlc);
|
||||
|
||||
// 下行指令处理(OnNewMail 调用):CAN_TX_0x%08X -> CanEndpoint 发送
|
||||
void handleTxMessage(CMOOSMsg& msg);
|
||||
|
||||
// 配置
|
||||
std::string m_canHost = "192.168.0.222";
|
||||
long m_canPort = 4001;
|
||||
@@ -55,6 +65,7 @@ private:
|
||||
CanEndpoint* m_endpoint = nullptr;
|
||||
CanDbStore* m_db = nullptr;
|
||||
std::atomic<unsigned long> m_notifyCount{0};
|
||||
std::atomic<unsigned long> m_txCount{0};
|
||||
};
|
||||
|
||||
} // namespace canbridge
|
||||
|
||||
Reference in New Issue
Block a user