pCanBridge 扩展多通道支持:每通道独立TCP链路 + 上下行对称通道标注(m_sSrcAux)
pCanBridge: - 配置改为 channel = <通道名>,<IP>,<工作端口> 重复行(兼容旧 can_host/can_port 单通道回退), 每通道一条独立 CanEndpoint(TCP Client) + 接收线程,对应 CANET 的 CAN0=4001..CAN7=4008 - 上行 CAN_0x%08X 不变,m_sSrcAux=通道名区分来源通道 - 下行按 m_sSrcAux 路由到对应通道;回退规则:default_channel > 单通道 > 多通道告警丢弃 - buildReport 逐通道统计(连接/收发帧数/错误/重连) pCCU: - 新增 bcu_can_channel 配置(默认 CAN0),BCU 断路器下行 Post 前 SetSourceAux 指定目标通道, key 保持 CAN_TX_0x%08X(与上行通道标注对称,key 格式不变) 配置/文档:pCanBridge.moos、CanBridge_Info、pCCU.moos、missions/h100.moos、 test/pccu/pccu_it.moos 同步新格式。 验证:伪造 CANET Server 冒烟通过(多通道建链/上行解析发布/SQLite channel 列/ 下行通道路由与回退丢弃/srcAux 经 MOOSDB 往返); pccu 集成测试 PASSED(BCU 断路器下行 3 帧经新路由全部正确); pccuTest 183/183、PowerMangerTests 64/64 通过。
This commit is contained in:
+8
-3
@@ -58,6 +58,7 @@ bool CCU::OnStartUp() {
|
||||
else if (param == "rcu_remote_port") m_rcuPort = atol(value.c_str());
|
||||
else if (param == "dbpath") m_dbPath = value;
|
||||
else if (param == "logpath") m_logPath = value;
|
||||
else if (param == "bcu_can_channel") m_bcuCanChannel = value;
|
||||
else if (param == "web_port") m_webPort = atoi(value.c_str());
|
||||
else if (param == "web_enable") {
|
||||
m_webEnable = (tolower(value) == "true" || value == "1");
|
||||
@@ -574,7 +575,8 @@ std::string CCU::handleBcuCtrlApi(const std::string& query) {
|
||||
|
||||
//---------------------------------------------------------
|
||||
// sendPendingBcuCtrl:出队控制指令,编码 0x10XX81FF 经 MOOS 下发
|
||||
// 链路:MOOS CAN_TX_0x* -> pCanBridge 订阅 -> CanEndpoint(TCP) -> USBCAN
|
||||
// 链路:MOOS CAN_TX_0x*(m_sSrcAux=目标通道) -> pCanBridge 订阅
|
||||
// -> 按通道路由 CanEndpoint(TCP) -> CANET -> CAN 总线
|
||||
|
||||
void CCU::sendPendingBcuCtrl() {
|
||||
if (!m_sysData) return;
|
||||
@@ -589,10 +591,13 @@ void CCU::sendPendingBcuCtrl() {
|
||||
// 二进制构造同 pCanBridge 上行发布(MOOS_BINARY_STRING)
|
||||
CMOOSMsg msg(MOOS_NOTIFY, key,
|
||||
static_cast<unsigned int>(sizeof(data)), data);
|
||||
// 目标通道经 m_sSrcAux 指定(与上行 CAN_0x* 的通道标注对称)
|
||||
msg.SetSourceAux(m_bcuCanChannel);
|
||||
bool ok = m_Comms.Post(msg);
|
||||
m_sysData->noteBcuCtrlSent(c, ok);
|
||||
LOG_F(INFO, "[BCU/CAN] 断路器指令 0x%08X 节点%d 总正=%d 总负=%d %s",
|
||||
canId, c.addr, c.pos, c.neg, ok ? "已投递MOOS" : "投递失败");
|
||||
LOG_F(INFO, "[BCU/CAN] 断路器指令 0x%08X 节点%d 总正=%d 总负=%d 通道=%s %s",
|
||||
canId, c.addr, c.pos, c.neg, m_bcuCanChannel.c_str(),
|
||||
ok ? "已投递MOOS" : "投递失败");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user