一、核心定义
| 概念 | 定义 | 作用层级 |
|---|---|---|
| ComIPduGroup | 一个 I-PDU 组,包含多个 I-PDU,用于统一启用/禁用组内所有 I-PDU 的接收和发送 | I-PDU 级别(粗粒度) |
| ComSignalGroup | 一个信号组,包含多个信号(通常属于同一个 I-PDU),用于保证组内信号的一致性更新 | 信号级别(细粒度) |
二、关键区别
| 对比维度 | ComIPduGroup | ComSignalGroup |
|---|---|---|
| 控制粒度 | 控制整个 I-PDU 的收发开关 | 控制一组信号的原子/一致性 |
| 包含对象 | 多个 I-PDU | 多个信号(常位于同一 I-PDU 内) |
| 主要用途 | 通信通道管理、网络模式切换、批量开关数据流 | 防止信号不同步,确保同时更新/交付 |
| 对"一致性"的保证 | 不保证内部信号一致 | 明确保证组内信号同时采样、同时发送、同时交付 |
| 典型数量 | 每个通信通道至少 1 个 Rx 组 + 1 个 Tx 组 | 按应用需求定义(可为 0 个或多个) |
三、生动举例(汽车仪表 & BCM)
场景
-
仪表数据 I-PDU (每 10ms 发送):
VehicleSpeed(车速)、EngineSpeed(转速)、FuelLevel(油量) -
车身状态 I-PDU (每 100ms 发送):
DoorOpen、SeatBeltFastened、HeadlightOn
1️⃣ ComIPduGroup 示例:运输模式控制
xml
<ComIPduGroup name="TransportMode_IPduGroup">
<Ipdu>仪表数据_I-PDU</Ipdu>
<Ipdu>车身状态_I-PDU</Ipdu>
</ComIPduGroup>
-
运输模式激活 → 禁用该组 → 两个 I-PDU 都不再收发 → 仪表盘黑屏,指示灯不更新
-
运输模式退出 → 启用该组 → 恢复正常通信
比喻:总电闸,一关全关,一开全开。
2️⃣ ComSignalGroup 示例:速度与转速同步
xml
<ComSignalGroup name="SpeedSyncGroup">
<Signal>VehicleSpeed</Signal>
<Signal>EngineSpeed</Signal>
</ComSignalGroup>
-
只包含同一 I-PDU 内的两个信号
-
接收端:两个信号要么同时更新到应用层,要么都不更新
-
发送端:两个信号的值来自同一时刻的快照
比喻:双人跳水,必须同时起跳、同时入水。
四、常见误解澄清
❌ "每个 I-PDU 都是一个信号组"
✅ 错。I-PDU 是传输容器,信号组是额外的配置。同一个 I-PDU 可以:
-
没有信号组
-
有一个信号组(包含部分信号)
-
有多个信号组(各自包含不同信号)
❌ "信号组可以跨 I-PDU"
✅ 技术上不建议,因为跨 I-PDU 难以保证原子性。实际配置中信号组内的信号通常属于同一个 I-PDU。
五、一句话总结
-
ComIPduGroup :控制 "哪些 I-PDU 可以进出"(流量开关)
-
ComSignalGroup :控制 "I-PDU 内部的哪些信号必须捆绑行动"(原子操作)