AUTOSAR IPDU Group实践-如何通过分组实现不同IPDU的收发

桃源乐游 2023-06-18 11:43:38

传送门  -> 返回-AUTOSAR配置与实践总目录

目录

 

 一、IPDU 组概念

 启动I-PDU Groups

停止I-PDU Groups

二、通过分组实现不同IPDU的收发

2.1 需求

2.2 实现分析

2.3 实现

三、配置实现


 


 一、IPDU 组概念

通常,我们会把I-PDU划分到某个I-PDU group内,I-PDU group有如下规则:

一个I-PDU可以属于任何I-PDU group。

一个I-PDU在下面两种情况下是激活的(启动的):

(a)该I-PDU所属的I-PDU group被启动;

(b)该I-PDU不属于任何I-PDU group,那么它会被隐含启动。

I-PDU group的最大数量是预编译可配置的。

I-PDU group只能包含相同方向的I-PDU(send或receive)。

注意:如果一个I-PDU没有绑定到任何I-PDU group,那么COM模块会在Com_Init时启动该I-PDU,由于COM永远不会停止一个隐含启动的I-PDU,该I-PDU也没有绑定到任何一个I-PDU group,因此该I-PDU将永远不能被停止。

 启动I-PDU Groups

启动I-PDU Groups  Com_IpduGroupStart

停止I-PDU Groups


 

二、通过分组实现不同IPDU的收发

2.1 需求

依据不同的配置字判断特定的PDU报文是否发往CAN上。


2.2 实现分析


根据本文第一章总结,I-PDU group只能包含相同方向的I-PDU(send或receive)。
当前PDU Group分为两类,接收Group和发送Group(配置如下图)。

如果依据配置字,来决定PDU是否发送CAN上,需要考虑如下

 

Point A.当前PDU只有接收PDUGroup和发送PDUGroup,其中发送PDUGroup包含了所有发送的报文,
    因此依据当前的PDU分组无法实现单个PDU的禁止和开启,需要**新建PDUGroup** (后续称New PDUGroup)
    一个简单的思路是满足配置字的时候开启,不满足的时候关闭新建的PDUGroup。
    但是仅考虑到这点事不行的,因为有诊断服务也会对PDU Group控制,进一步参考如下Point B。
    
Point B.在开启/禁止PDU的时候,需要**考虑到诊断报文对PDU的控制**,避免引起冲突。

比如诊断报文发送28服务操作使能PDUGroup,而新需求要求对应配置字不应使能对应的PDU,所以要综合考虑以上场景

   进一步细化分析New PDUGroup和诊断服务的兼容问题

    假设诊断28服务有以下2种服务
    Case 1.禁止APP/NM报文
    Case 2.开启APP/NM报文

    Case 1和 2 较为简单,因为诊断发服务请求时,无论配置值字如何,都要禁止new PDUGroup
    Case 3/Case 4 开启APP/NM报文时候要有所区分,如果配置字需要禁止new PDUGroup,即便诊断发了28服务开启APP/NM报文,
    当前new PDUGroup依然要处于禁止状态。


2.3 实现


总体思路
Step 1. 新建IPDU组,命名 New PDUGroup。
    至此有三个分组,Tx PDUGroup、Rx PDUGroup和New PDUGroup
Step 2. 诊断发送28服务禁止APP/NM报文时,在禁止Tx PDUGroup、Rx PDUGroup的基础上,禁止New PDUGroup(无条件直接禁止)
Step 3. 通过BSWM模块诊断开启APP/NM报文时,判断配置字是否满足,如果满足,则开启New PDUGroup,否则不开启。
Step 4. 通过BSWM模块实时轮询配置字,选择是否开启或者禁止New PDUGroup

三、配置实现

1.新建New PDUGroup.
注意尽量不要破坏原有DUGroup的Handle Id.

 

2.将要实现通过配置选择发送的PDU分配到对应的新建的New PDUGroup

 

3.新建Action和对应的callout函数
 

 

4.把对应的Action分别加入到对应的28诊断服务ActionList中
其中
      3.1 Dcm_NormNm_Notification_CANFD_V3_0_Disable 代表28服务,变更前功能为禁止所有PDUGroup,
      ActionList中加入Action “Dcm_PdusTx_Disable” ,对应callout函数BswM_DcmDisablePdus(),
      在callout函数要手动写入代码实现,完成禁止New PDUGroup的逻辑。(引用实现模块的头文件)
      3.2 Dcm_NormNm_Notification_CANFD_V3_0_Enable   代表28服务,变更前功能为启动所有PPDUGroup
      ActionList中加入Action “Dcm_PdusTx_Enable” ,对应callout函数BswM_DcmEnablePdus(),
       在callout函数手动代码实现,完成根据配置字选择是否启动New PDUGroup的逻辑(引用实现模块的头文件)

 

 

5.轮询配置字实现new PDUGroup的发送需求

   5.1在BSWM中创建用户条件(这个条件即为本文3.1和3.2 的两个callout函数综合判断后最终返回的条件!表示是否启动new PDUGroup)


  5.2 新建BSWM rule 并加入判断条件
 本案例使用COMM=FullCOM状态 && ESH_BswM_OptionPdusEnable
   其中判断条件ESH_BswM_OptionPdusEnable != 0 引用了4.1章节中定义的用户条件。

 

 

至此,整个配置工作全部完成,即保证了周期轮询检测配置字匹配新报文(报文组)是否发送,
又兼顾了诊断的28服务场景。

传送门  -> 返回-AUTOSAR配置与实践总目录

...全文
1120 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

30,454

社区成员

发帖
与我相关
我的任务
社区描述
就等你来冒个泡~
社区管理员
  • 灌水乐园
  • 社区助手
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

版主:

社区助手

 

试试用AI创作助手写篇文章吧