AUTOSAR 入门教程 18:Gateway

理解信号网关与 PDU 网关的区别,掌握直接网关和动态网关的数据流,学会根据场景选择合适的网关配置方案。

一辆车上有 CAN、LIN、FlexRay、以太网等多种总线,车身控制器需要把车速从 CAN 转发到 LIN,域控制器需要把诊断报文从以太网路由到 CAN。这些跨总线的数据交换,都依赖 AUTOSAR 的网关机制。在教程 8 中介绍了 车载网络 通信栈的整体架构,这篇深入网关的两种实现方式——信号网关和 PDU 网关。

信号网关:COM 模块的精细路由

信号网关通过 COM 模块实现,工作在信号级别。它的核心能力是把一个接收信号映射到一个或多个发送信号,实现 1 对多的数据分发。

工作机制

信号网关的数据流路径清晰:报文从总线到达 CanIf,经 PDU Router 路由到 COM,COM 解包出信号,根据配置的映射关系将信号值写入目标发送信号,再由 COM 打包成目标 PDU,经 PDU Router 发送到目标总线。整个过程在 Com_MainFunctionRouteSignals 中执行,这个函数需要在 OS 的周期性 Task 中调度。

配置信号网关的核心是 ComGwMapping 容器。每个映射项定义三要素:源信号(Source Signal)、目标信号(Target Signal)、映射类型(Mapping Type)。映射类型决定了数据如何从源传递到目标——最常用的是 GWMAP_IMMEDIATE,即收到信号后立即触发转发。

信号网关的优势在于灵活性。它可以对信号做类型转换(如将 16 位无符号数截断为 8 位)、范围检查、初始值设定。缺点是必须经过 COM 的信号级解包和重新打包,数据路径较长,适合对实时性要求不高但需要信号级处理的场景。

PDU 网关:PDUR 的高效搬运

PDU 网关通过 PDU Router 模块实现,工作在 PDU 级别。它不拆解信号,而是将整个 PDU 从一个总线接口路由到另一个总线接口,效率更高。

直接网关与动态网关

PDU 网关有两种传输模式。直接网关(Direct Gatewaying):PDUR 完整接收源 PDU 后,再转发到目标接口。数据在 PDUR 内部有一个完整的缓存周期。这种方式适合源总线和目标总线速率差异不大、对延迟要求不苛刻的场景。动态网关(Gatewaying-on-the-fly):PDUR 在接收源 PDU 的同时就开始向目标接口转发,不需要等完整接收。当接收缓冲区中的数据量达到配置的阈值时,立即触发发送。这种方式减少了端到端延迟,适合高吞吐量或严格时序要求的场景。

动态网关有一个关键限制:只能指定单一目标模块。这是因为动态转发时数据流是连续的,无法同时向多个目标分发。而直接网关可以将同一个 PDU 路由到多个目标接口模块。此外,AUTOSAR 规范规定单个 PDU 不能同时网关到接口模块(If)和传输协议模块(Tp)——一个 PDU 要么走 CanIf 级别的路由,要么走 CanTp 级别的路由,不能混合。

配置要点

PDU 网关的配置在 PDU Router 的 PduRRoutingPath 容器中完成。每个路由路径包含四个要素:源 PDU ID、目标 PDU ID、路由类型(Gateway 或 Multiplexed)、传输模式(Direct 或 On-the-fly)。配置时需要注意源接口和目标接口的匹配——如果源是 CanIf,目标也应该是接口层的模块,不能跨层混配。

实践建议

下一篇教程将进入信息安全领域——SecOC 如何为车载消息添加认证保护,防止报文被伪造和重放。网关是跨总线的枢纽,也是安全防护的关键节点:网关转发的报文如果经过 SecOC 保护,接收端可以验证消息的真实性。