AUTOSAR PduR 网关路由:Routing Path、PDU ID 映射与转发排查¶
适用范围:AUTOSAR Classic Platform;以 R24-11《Specification of PDU Router》为主要规范参考。项目实际行为还取决于所用 AUTOSAR Release、PduR 配置、生成器和供应商实现。
本文是工程解释与排查指南,不替代项目配置说明或规范条款。
1. 先理解 PduR 的职责¶
PduR(PDU Router)位于通信模块之间,按静态配置将 I-PDU 从源模块转发到一个或多个目标模块。它不是 CAN 驱动,也不负责解释 COM Signal 的业务含义。普通 I-PDU 路由通常不修改载荷;路由核心工作是查找路由配置、转换模块本地 PDU ID,并调用目标模块接口。
AUTOSAR R24-11 将 PduR 主要划分为:
- Routing Paths / Routing Tables:描述每条 I-PDU 路由的源、目标及路由属性。
- PduR Engine:执行实际路由、源/目标 PDU ID 转换,以及相应的确认/接收回调转发。
2. PduR 在通信栈中的位置¶
flowchart LR
COM[COM] -->|I-PDU| PR[PduR Engine]
DCM[Dcm] -->|诊断 TP 数据| PR
PR -->|目标 PDU ID| CANIF[CanIf]
CANIF --> CAN[CAN Driver]
CAN --> BUS((CAN Bus))
BUS --> CAN2[另一网络 CAN Driver]
CAN2 --> CANIF2[CanIf]
CANIF2 --> PR2[PduR]
PR2 --> COM2[COM / Dcm]
典型的信号报文路径是 COM → PduR → CanIf → Can Driver;接收方向反向经过 CanIf → PduR → COM。诊断 TP 路径会涉及 Dcm、CanTp、CanIf,不能把所有路径都简化成 COM 路径。
3. Routing Path 是什么¶
一条 Routing Path 可理解为“源 PDU 到目标 PDU 的静态映射规则”。配置中通常要能回答:
- 谁是源模块(例如 COM、CanIf、CanTp、Dcm)?
- 源模块使用哪个本地 PDU ID?
- 目标模块是谁(例如 CanIf、COM、CanTp)?
- 目标模块对应哪个本地 PDU ID?
- 是单播还是一对多?是否属于 TP 路由?
- 是否受 Routing Path Group / routing activation 控制?
- 对 TP 网关而言,使用什么缓冲策略与资源限制?
重要:PDU ID 是模块接口边界上的本地标识,不应假设源模块 ID、PduR 内部 ID、目标模块 ID 数值相同。 PduR 根据配置表完成转换。排查时要沿着模块边界逐个核对,而不是只搜索一个数字。
4. 普通 I-PDU 路由与 TP 网关的区别¶
| 维度 | 普通 I-PDU 路由 | TP 路由 / 网关 |
|---|---|---|
| 数据模型 | 通常一次转发一个 I-PDU | StartOfReception、CopyRxData、CopyTxData、TpRxIndication 等分段交互 |
| 数据完整性 | 典型路由不解析、不改写载荷 | 需要管理分段数据和接收/发送状态 |
| 缓冲 | 取决于路由类型及配置 | 网关可能需要专用缓冲,或按请求提供数据 |
| 时序 | 受触发发送、目标模块和总线调度影响 | 受流控、块大小、STmin、超时及缓冲资源影响 |
| 典型场景 | COM 报文跨总线转发 | CAN 诊断请求经网关转发到另一 CAN 网络 |
不要把 TP 网关的缓冲机制套用到普通 COM I-PDU,也不要假设所有 TP 路由都必须完整缓存整帧;AUTOSAR PduR 规范描述了 on-the-fly gatewaying 等处理方式,具体支持能力应检查版本和实现。
5. 一对多与跨 CAN 网络网关¶
假设 ECU 有 CAN-A 和 CAN-B 两个网络:接收 CAN-A 上的源 PDU 后,PduR 根据 Routing Path 将其转发到 CAN-B 上配置的目标 PDU。
flowchart TD
A[CAN-A 收到报文] --> B[Can Driver / CanIf RxIndication]
B --> C[PduR 源 PDU ID 查表]
C --> D{Routing Path 是否启用}
D -->|否| X[不转发 / 按配置处理]
D -->|是| E[映射到目标 PDU ID]
E --> F[调用目标 CanIf / TP 模块]
F --> G[CAN-B 发送]
G --> H[目标 TxConfirmation 回调]
H --> I[PduR 映射并通知源侧 / 上层]
需要特别检查:
- 源、目标 PDU 的长度、DLC、动态长度能力和目标总线约束是否兼容。
- 是否存在一对多路由;多个目标的发送失败是否会被分别处理。
- Routing Path Group 是否在当前模式下启用。
- 目标网络是否处于可通信状态,CanIf Tx PDU 是否可用。
- 是否存在网关环路(A→B 同时 B→A)或重复转发。
- 信号级网关(例如 COM Signal Gateway)与 PDU 级透明转发不是同一层面的功能,确认项目究竟使用哪一种。
6. 关键配置对象检查表¶
不同工具的参数名和树结构可能不同,建议按语义检查,而不是照搬某个供应商界面名称。
| 检查对象 | 要核对的内容 | 常见错误 |
|---|---|---|
| Source PDU | 源模块、源 PDU 引用、方向 | 引用了错误的 CanIf Rx PDU 或 COM I-PDU |
| Destination PDU | 目标模块、目标 PDU 引用、方向 | 目标 PDU ID 指向另一报文 |
| Routing Path | 源到目标的关联关系 | 路径缺失、方向配置反了 |
| Routing Path Group | 默认状态、启停控制、所属路径 | 路径存在但组未激活 |
| TP Gateway Buffer | 缓冲大小、数量、对齐及并发容量 | 高负载时资源不足 |
| Module API mapping | 生成的源/目标回调及 ID 表 | 目标模块回调未连接或宏未启用 |
| PDU Length | 固定/动态长度与最大长度 | 源长度超过目标能力或配置长度不匹配 |
| Variant / Post-Build | 当前选择的配置集 | 修改了未被 ECU 实际选择的变体 |
7. 从现象定位故障¶
| 现象 | 优先检查 | 观测证据 |
|---|---|---|
| 源总线能收到,目标总线无报文 | 源 Rx PDU ID、Routing Path、Group 状态、目标 Tx PDU | CanIf RxIndication、PduR 路由入口、CanIf_Transmit 返回值 |
| 目标发出了错误报文 | 目标 PDU 引用、ID 映射、载荷长度 | 目标 PDU 配置、发送缓冲区、CANoe Trace |
| 只在某模式下不转发 | Routing Path Group、BswM/模式控制 | Group 启停调用、模式切换时间线 |
| 小负载正常、大负载丢失 | TP Buffer、并发数、队列/资源配置 | Buffer 请求结果、TP 回调返回值、DET |
| 偶发重复报文 | 多目标配置、双路径、网关环路 | 源/目标总线 Trace 时间戳和 PDU ID |
| 回调未到上层 | TxConfirmation/RxIndication 的目标映射 | CanIf、PduR、COM/Dcm 回调逐层打点 |
8. 推荐调试顺序¶
- 在 CANoe 或总线日志中确认源报文真实到达,记录时间戳、CAN ID、DLC 和载荷。
- 在 CanIf 接收入口确认命中的 Rx PDU 配置和本地 PDU ID。
- 在 PduR 入口确认实际传入的源 PDU ID。
- 查生成的 PduR Routing Path 表,确认源 ID 命中哪条路径、目标 ID 是什么。
- 确认路径组状态、当前变体和路由启用状态。
- 在目标模块入口确认目标 ID 与长度;若调用 CanIf_Transmit,记录返回值。
- 在目标总线上确认报文是否发出;随后检查确认回调是否按目标→源映射返回。
- 若是 TP 网关,额外跟踪 StartOfReception、CopyRxData、CopyTxData、TxConfirmation / TpRxIndication 等回调及缓冲资源。
9. 最小回归测试集¶
- 单条有效路由:源报文只到达预期目标。
- 无效源 ID:不得误命中其他 Routing Path。
- 路径组关闭/开启:分别验证不转发与恢复转发。
- 一对多:每个目标均收到预期内容,独立检查发送结果。
- 长度边界:最小、标称、最大长度及不支持长度。
- 高负载/并发:检查 TP Buffer、资源耗尽与错误上报。
- 双向路径:验证不存在意外环路和重复转发。
- 变体切换:确认实际 ECU 选中的配置表与预期一致。
- 回调链:确认发送确认和接收指示映射到正确上层 PDU。
10. 规范与资料¶
工程提示:配置工具中显示的 PDU 名称、生成代码中的符号名和运行时 PDU ID 可能不是同一个概念。最终以当前工程生成的配置表、头文件宏、调用点和总线 Trace 相互印证。