[AUTOSAR通信] - PDUR模块解读


点击订阅专栏不迷路

文章目录

  • [一、 PDUR模块概述](#一、 PDUR模块概述)
  • 二、功能描述
    • [2.1 发送路由功能](#2.1 发送路由功能)
    • [2.2 接收路由功能](#2.2 接收路由功能)
    • [2.3 网关路由功能](#2.3 网关路由功能)
    • [2.4 路由控制功能](#2.4 路由控制功能)
  • 三、配置項介紹
    • [3.1. PduRBswModules](#3.1. PduRBswModules)
    • [3.2. PduRGeneral](#3.2. PduRGeneral)
    • [3.3. PduRRoutingTables](#3.3. PduRRoutingTables)
    • [3.4. PduRRoutingPath](#3.4. PduRRoutingPath)
    • [3.5. PduRSrcPdu](#3.5. PduRSrcPdu)
    • [3.6. PduRDestPdu](#3.6. PduRDestPdu)
  • 四、总结

>>>>>>>>>>返回专栏总目录《AUTOSAR从入门到精通专栏》<<<<<<<<<<

一、 PDUR模块概述

在AUTOSAR(汽车开放系统架构)通信体系里,PDUR模块堪称通信服务的关键枢纽。对于想要深入了解AUTOSAR通信的工程师、学生或爱好者而言,PDUR模块是无法绕过的重要环节。

从整个通信协议栈的架构来看,PDUR模块处于承上启下的核心位置,犹如一座桥梁,紧密连接着上层模块与下层接口模块或传输层模块,负责I - PDU(接口协议数据单元)的高效传输,扮演着内部消息路由器的关键角色。

具体而言,当底层传输层或者Interface抽象层将I - PDU传输给PduR时,PduR就像一位精准的"快递员",迅速且准确地将这些数据单元传递到对应的服务模块。而当上层服务模块有I - PDU需要发送时,PduR又能及时接手,将消息顺畅地传输到相应的传输层或Interface抽象层。

依据在 AUTOSAR 架构中的位置与传输 I-PDU 时的角色,通信模块可分为三类:上层模块、下层接口模块和下层传输层模块。而PduR模块则是连接这些模块的枢纽,位于上层模块和下层模块之间,充当一个消息中转站。

  • 上层模块位于 PduR 上层,一般包括 Com、 Dcm 和 Cdd。
  • 下层接口模块位于 PduR 下层,一般包括 CanIf、 LinIf、 SoAdIf、 FrIf、 CddIf 等。
  • 下层传输层模块同样位于 PduR 下层,一般包括 CanTp、 LinTp、FlexRayTp 和 J1939Tp 等。

PDUR 模块工作时通过配置维护一张路由表,这张路由表犹如城市交通地图,清晰地规划着每个 PDU(协议数据单元)的 "出行路线"。

表内的每一条路径,都精准描述了一个 PDU 的发送或接收行程。值得注意的是,每条路径都仅有一个明确的源头,但目的地却可以是一个,也可能是多个。并且,接收路径与发送路径彼此相互独立。

当系统进行 PDU 的收发操作时,就如同快递员依据包裹上的收件地址派送快递一样,它会依据 PDU ID 这个 "地址标签",迅速找到对应的路径以及目的地。随后,系统会调用相应模块的接口来完成数据传递。倘若遇到一对多的情况,即一个源头对应多个目的地,系统便会像多次派送不同地址包裹的快递员一样,多次调用相应接口,确保每个目的地都能准确无误地收到 PDU。

二、功能描述

接下来的示例我们均已CAN总线为例

2.1 发送路由功能

TxPdu 的发送存在两种方式,即 IF 和 TP。在 PduR 模块中,能够实现 TP PDU 的 1:1 发送路由,以及 IF PDU 的 1:N 路由。借助 PduR 模块的路由配置,可向上层屏蔽网络的具体细节,让上层模块能将精力集中于 TxPdu 报文数据的封装工作。

  • IF路由的流程可以参考下图,其下层模块位CanIf(CAN总线)
  • TP路由的流程可以参考下图,其下层模块位CanIf(CAN总线)
  • 数据发送完成后,下层模块需要有发送确认来通知上层模块数据发送完成,以便于更进一步的处理,该过程自下而上

2.2 接收路由功能

RxPdu 的接收也有 IF 和 TP 两种方式。当 PDU 从下层模块接收到后,会依据 PduR 配置的路由路径传递到上层模块。这样上层模块无需关注网络细节,只需专注于接收 PDU 的解析。

下图所示为数据包的接收过程,由下层CanIf模块调用PduR_RxIndication()通知到PduR模块,PduR模块根据路径进一步找到其上层模块Com,进而调用Com_RxIndication()将数据包传输至上层模块Com

2.3 网关路由功能

PDU 的网关同样分为 IF 和 TP 两种方式。IF 网关支持 1:N 的转发,而 TP 网关仅支持 1:1 的 PDU 网关,且在这个过程中不涉及任何报文数据的变化,收发报文速率保持一致。需要特别注意的是,PDU 的网关不能将 IF 和 TP 混淆,也就是说接收 IF PDU 只能通过发送 IF PDU 进行转发,接收 TP PDU 只能通过 TP PDU 进行转发。

如下图所示为一个PDU数据包从CAN总线1路由到CAN总线2的过程

2.4 路由控制功能

PduR 的路由控制是以 RoutingPathGroup 为单位来进行 Enable/Disable 控制的。RoutingPathGroup 关联 N 个 PduRDestPdu,从而控制这些 PduRDestPdu 的使能状态。RoutingPathGroup 通过配置项 PduRIsEnabledAtInit 来决定初始化之后其关联的所有 PduRDestPdu 处于 Enable 还是 Disable 状态。在运行时,可通过调用 PduR_EnableRouting/ PduR_DisableRouting来控制 RoutingPathGroup 及其包含的 PduRDestPdu 的使能状态。未被 RoutingPathGroup 关联的 PduRDestPdu 在初始化之后状态一直为 Enable,且不可改变。

三、配置項介紹

本章节的配置项截图均来自网页端 的配置工具**<<<<** 【 EasySAR>>> (点击跳转)

3.1. PduRBswModules

该容器主要用来配置PduR的上下级模块,用到哪些模块就添加哪些模块,比如Com、CanIf、CanTp、Dcm等

序号 配置项 配置项描述
1 PduRCancelReceive TRUE:上层模块支持取消接收 FASLE:上层模块不支持取消接收
2 PduRCancelTransmit TRUE:上层模块支持取消发送 FASLE:上层模块不支持取消发送
3 PduRChangeParameterApi TRUE:上层模块支持改变参数功能 FASLE:上层模块不支持改变参数功能
4 PduRCommunicationInterface TRUE:开启通信层模块接口 FALSE:不开启通信层模块接口
5 PduRLowerModule TRUE:是 PduR 的下层模块 FALSE:不是 PduR 的下层模块
6 PduRRetransmission TRUE:上层模块支持重发功能 FALSE:上层模块不支持重发功能
7 PduRTransportProtocol TRUE:上下层模块支持通信协议传输 FALSE:上下层模块不支持通信协议传输
8 PduRTriggertransmit TRUE:上下层模块支持触发发送 FALSE:上下层模块不支持触发发送
9 PduRTxConfirmation TRUE:上下层模块支持发送确认功能 FALSE:上下层模块不支持发送确认功能
10 PduRUpperModule TRUE:是 PduR 的上层模块 FALSE:不是 PduR 的上层模块
11 PduRUseTag TRUE:开启使用标志接口 FALSE:不开启使用标志接口
12 PduRBswModuleRef 引用 PduR 的上下层模块

3.2. PduRGeneral

配置PduR模块的一些通用配置

序号 配置项 配置项描述
1 PduRDevErrorDetect TRUE:启动错误检查报告 FALSE:不启动错误检查报告
2 PduRMetaDataSupport TRUE:支持启用元数据 FALSE:不支持启动元数据
3 PduRVersionInfoApi TRUE:支持获取版本信息 FALSE:不支持获取版本信息
4 PduRZeroCostOperation TRUE:支持零消耗功能 FALSE:不支持零消耗功能

3.3. PduRRoutingTables

该项主要是创建一个路由表,其下边可以配置多条路径PduRRoutingPath

序号 配置项 配置项描述
1 PduRConfigurationId PduR 配置集的标识符
2 PduRMaxRoutingPathCnt 限制最大可配置路由路径的数量
3 PduRMaxRoutingPathGroupCnt 限制最大可配置路由路径组的数量
4 PduRMaxRoutingTableCnt 限制最大可配置路由表的数量
5 PduRRoutingPathGroup 子容器
6 PduRRoutingTable 子容器
7 PduRTpBufferTable 子容器
8 PduRTxBufferTable 子容器

3.4. PduRRoutingPath

该配置项主要是用于配置一条路由路径,引用一个源头,及一个(或多个)目的地,用于Pdu的转发。

序号 配置项 配置项描述
1 PduRSrcPdu PduRRoutingPath的子容器,具体见PduRSrcPdu配置
2 PduRDestPdu PduRRoutingPath的子容器,具体见PduRDestPdu 配置

3.5. PduRSrcPdu

主要用来配置某一条路径的源头,通过与其源头模块引用同一个Pdu来建设起映射关系

序号 配置项 配置项描述
1 PduRSourcePduHandleId 源 Pdu 的标识符
2 PduRSrcPduUpTxConf 上层模块是否支持源 Pdu 发送确认
3 PduRSrcPduRef 一条路径中源模块引用的 EcuC 中的 PDU

3.6. PduRDestPdu

主要用来配置某一条路径的目的地,通过与其目的模块引用同一个Pdu来建设起映射关系

序号 配置项 配置项描述
1 PduRDestPduDataProvision 目的 Pdu 数据的提供方式 PDUR_DIRECT:直接提供数据 PDUR_TRIGGERTANSMIT:触发方式提供数据
2 PduRDestPduHandleId 目的 Pdu 处理的 Id
3 PduRTpThreshold 仅在 Tp 网关情况下使用,设置 Tp 阈值大小相应的发送数据
4 PduRTransmissionConfirmation 是否启用发送确认
5 PduRDestPduRef 一条路径中目的模块引用的 EcuC 中的 PDU
6 PduRDestTxBufferRef PduR 模块存储数据的缓冲区,仅 IF 网关需要
7 PduRDefaultValue 子容器

四、总结

总结一下,PduR的核心配置是,路由路径的配置,每条路径包含源头和目的地,通过将源头和目的地上下层模块关联到ECUC模块中配置的同一个Pdu来建立起映射关系,通过源头的Pdu Id查找到对应路径及目标模块,达到转发的效果。

因篇幅问题,关于PduR模块的主要配置就介绍到这里。毕竟,光是嘴上说,始终如同纸上谈兵。强烈建议想要了解完整的模块配置 ,可以前往网页端 的配置工具**<<<<** 【 EasySAR>>> (点击跳转),亲自上手配置一番。

参考文档:Specification of PDU Router. AUTOSAR, 4.2.2

相关推荐
MiniFlyZt4 小时前
Spring Cloud Gateway:构建高效微服务网关的利器
微服务·云原生·架构
蔚一4 小时前
微服务SpringCloud Alibaba组件nacos教程【详解naocs基础使用、服务中心配置、集群配置,附有案例+示例代码】
java·后端·spring cloud·微服务·架构·intellij-idea·springboot
rockmelodies6 小时前
DeepSeek神经网络:技术架构与实现原理探析
人工智能·神经网络·架构
Unity官方开发者社区6 小时前
吉祥汽车泰国首发,用 Unity 实现行业首创全 3D 座舱虚拟世界
3d·unity·汽车
漫步者TZ6 小时前
【kafka系列】架构、核心概念
分布式·架构·kafka
nfgo13 小时前
在 ARM64 架构系统离线安装 Oracle Java 8 全流程指南
java·oracle·架构
辛勤搬砖的门卫14 小时前
汽车ECU实现数据安全存储的一种方案
安全·汽车·安全存储·gb44495
九阶码圣14 小时前
汽车ADAS
汽车
CodeJourney.16 小时前
DeepSeek免费部署到WPS或Office
数据库·人工智能·算法·架构·wps