AUTOSAR通信协议栈如何实现事件帧发送?

通信网络

647人已加入

描述

前言

最近在研究AUTOSAR通信协议栈的时候发现对Com模块的报文发送时机很是疑惑,产生了以下几个问题:

(1)Com模块如何实现事件帧发送?

(2)Com模块如何实现报文周期的快慢切换发送?

本文先梳理一遍Com模块的一些关键概念及重要机制,然后回答这些问题。

正文

1.几个关键概念

1.1 ComTransferProperty

ComTransferProperty:信号(Signal)最重要的一个配置属性,定义一个信号的写访问是否可以触发相应的I-PDU的传输。如果I-PDU被触发,这也取决于相应的I-PDU的传输模式。有以下可选属性:

PENDING:对该信号的写访问永远不会触发相应的I-PDU的传输。

TRIGGERED:根据传输模式,对该信号的写访问可以触发相应的I-PDU的传输。

TRIGGERED_ON_CHANGE:根据传输模式的不同,对该信号的写访问可以触发相应的I-PDU的传输,但只有在写入值与本地存储的(最后发送或初始值)不同的情况下。

TRIGGERED_ON_CHANGE_WITHOUT_REPETITION:根据传输模式的不同,对该信号的写访问可以触发相应的I-PDU的传输一次而不重复,但只有在写入值与本地存储的(最后发送或初始值)不同的情况下。

TRIGGERED_WITHOUT_REPETITION:根据传输模式,对该信号的写访问可以触发相应的I-PDU的传输一次,而无需重复。

1.2 ComFilter

ComFilter是信号Signal的一个配置容器,发送端和接收端信号都可以配置ComFilter。

对于接收信号(Signal)配置了ComFilter的话,如果过滤条件判断为True,就将信号更新到RTE,如果过滤条件判断为False,则就会丢弃这个信号值。

对于发送信号(Signal)配置了ComFilter的话,COM模块应使用发送端的过滤机制进行传输模式条件(TMC),但不得过滤发送端的信号。也就是通过一个发送IPDU上所有配置了ComFilter的Signal来进行ComTxMode的选择,如果有一个配置了ComFilter的Signal的过滤机制判断为True就选择ComTxModeTrue的发送TMS配置参数,如果所有配置了ComFilter的Signal的过滤机制判断为False的话,则选择ComTxModeFalse的发送TMS配置参数(后面详解TMS机制)。

AUTOSAR COM提供了以下Signal滤波机制:

· ALWAYS

· NEVER

· MASKED_NEW_EQUALS_X

· MASKED_NEW_DIFFERS_X

· MASKED_NEW_DIFFERS_MASKED_OLD

· NEW_IS_WITHIN

· NEW_IS_OUTSIDE

· ONE_EVERY_N

AUTOSAR文档没有详解每一个滤波机制,从字面意思猜测:

ALWAYS:过滤条件永远判断为TRUE

NEVER:过滤条件永远判断为FALSE

MASKED_NEW_EQUALS_X:Signal值为X时过滤条件判断为TRUE

MASKED_NEW_DIFFERS_X:Signal值不为X时过滤条件判断为TRUE

MASKED_NEW_DIFFERS_MASKED_OLD:Signal值和COM模块保存的上一次(老的)值不同时过滤条件判断为TRUE

NEW_IS_WITHIN :Signal值在范围内时过滤条件判断为TRUE

NEW_IS_OUTSIDE:Signal值在范围外时过滤条件判断为TRUE

ONE_EVERY_N:周期性的过滤条件判断为TRUE。

. set OCCURRENCE to zero when OCCURRENCE == PERIOD

. set FILTER to true, when OCCURRENCE == OFFSET

. increment OCCURRENCE after filter processing

1.3 ComTxMode

ComTxModeMode定了IPDU的传输模式。

NONE:不会发送

DIRECT:事件触发发送

MIXED:周期触发或者事件触发发送

PERIODIC:周期发送

ComTxModeNumberOfRepetitions:定义传输模式DIRECT和传输模式MIXED的事件驱动部分的重复次数。

ComTxModeRepetitionPeriod:当ComTxModeNumberOfRepetitions配置大于等于1且ComTxModeMode配置为DIRECT或MIXED时,定义多次传输的重复周期(以秒为单位)。在混合传输模式下,只有事件驱动部分受到影响

ComTxModeTimeOffset:定义ComTxModeMode配置为PERIODIC或MIXED时,从Com_IpduGroupStart开始I-PDU到第一个传输请求之间的时间间隔(以秒为单位)。在混合传输模式下,只有周期部分受到影响。如果ComTxModeTimeOffset被省略或配置为0,第一次周期性传输将在下一次调用Com_MainFunctionTx时传输。

ComTxModeTimePeriod:在ComTxModeMode配置为periodic或MIXED的情况下,定义周期传输请求的重复周期(以秒为单位)。在混合传输模式下,只有周期部分受到影响。

2.传输模式选择(TMC & TMCS)

TMC: Transmission Mode Condition。传输模式条件

TMS: Transmission Mode Selector。传输模式选择器

每一个IPDU的配置容易ComIPdu下可以配置两个不同发送模式的配置容器ComTxModeFalse和ComTxModeTrue,ComTxModeFalse和ComTxModeTrue下可以配置不同的IPDU发送时间参数。所谓的传输模式的选择,也就是根据模式选择结果选择使用ComTxModeFalse和ComTxModeTrue下的哪一个时间参数。

通信协议栈

一个发送(SEND)IPDU中包含有多个Signal,Signal如果配置了ComFilter,那么配置了ComFilter的Signal就会参与到IPDU的发送模式的选择当中,作为仲裁的输入条件。

发送模式的选择规则:假如有1...N个Signal配置了ComFilter,在仲裁的时候这N个Signal里面只要有一个Signal的滤波结果为TRUE,则Signal所在的IPDU的发送模式选择为TRUE,就会选用ComTxModeTrue里面的时间参数,如果N个Signal的的滤波结果为False,则Signal所在的IPDU的发送模式选择为False,就会选用ComTxModeFalase里面的时间参数。默认选择ComTxModeTrue里面的时间参数,如果一个发送IPDU里面所有的Signal都没有配置ComFilter则使用默认的发送时间参数。

通信协议栈

问题:什么情况下会发生发送模块的仲裁选择?

:在上层(RTE)调用Com_SendSignal的时候。

3. 不同传输模式的用例和必要的配置

通信协议栈

3.1 Use case 1

用例1显示了一个周期时间为tc的循环发送的I-PDU。这个I-PDU由所有具有ComTransferProperty PENDING的信号组成。它被配置为当TMS计算为true时发生传输。

通信协议栈

通信协议栈

通信协议栈

由于配置了ComFilter的参数ComFilterAlgorithm ALWAYS,当TMS计算为false时,不需要配置传输模式。

对于I-PDU内的所有信号,ComFilter的ComFilterAlgorithm参数是否设置为ALWAYS或是否未定义ComFilter(对TMS的评估没有贡献),对行为没有任何影响。

3.2 Use case 2

用例2显示了一个I-PDU,每当上层(Com_SendSignal或Com_SendSignalGroup)给出一个值时,这个I-PDU就会被发送三次。两次传输之间的时间是td。这个I-PDU由信号组成,这些信号都具有ComTransfer属性触发。它被配置为当TMS计算为true时发生传输。

通信协议栈

通信协议栈

如果RTE在正在进行的重复周期完成之前有一个新的发送请求,则开始新的重复周期,并丢弃上一个重复周期的其余部分。

3.3 Use case 3

用例3显示了一个I-PDU,如果值v = a (TMS计算为真),则循环时间tc1发送,如果值v = b (TMS计算为假),则循环时间tc2发送。I-PDU由信号组成,这些信号都具有ComTransferProperty PENDING。

通信协议栈

通信协议栈

由新值v = b引起的TMS切换,在下一个主函数中开始一个新的循环,并将新值发送出去。然而,必须考虑最小延迟时间dt,因为ComEnableMDTForCyclicTransmission被设置为true.

3.4User case 4

用例4显示了一个I-PDU,如果值v = a (TMS计算为true),如果值v = b (TMS计算为false),则该I-PDU以循环时间tc循环发送,当RTE给出该值时,该I-PDU将发送三次。两次传输之间的时间为td。I-PDU由所有具有ComTransferProperty triggers的信号组成。

通信协议栈

通信协议栈

从ComTxModeMode DIRECT切换到PERIODIC之后,在下一个主函数中开始循环,并根据ComMin imumDelayTime dt发送新值a。

3.5Use case 5

用例5显示了一个I-PDU,它以周期时间tc循环发送,如果RTE给出的值(相同或新的值)也会直接发送三次。这三次传输之间的时间总是td。I-PDU由所有具有ComTransferProperty triggers的信号组成。

通信协议栈

通信协议栈

通信协议栈

如果由ComTxModeMode MIXED的周期部分引起的下一次传输应该发生在DIRECT (N-Times)部分传输后的超时dt (ComMinimumDelayTime)内,则该发送将被延迟,直到最小延迟时间过去。然而,在此之后,周期部分的下一个周期被缩短,因此只有周期部分的中间相移,而没有连续相移。

3.6Use case 6

用例6显示了一个I-PDU,如果值v = b (TMS计算为false),则该I-PDU以周期时间tc2循环发送。如果值v = a (TMS计算为真),它将以周期时间tc1循环发送,当值v = a由RTE给出时,它也将直接发送三次。这三次传输之间的时间总是td。I-PDU由所有具有ComTransferProperty triggers的信号组成。

通信协议栈

通信协议栈

这在实践中的一个用法是,例如,控制窗户升降电机的按钮的信号。如果没有按下按钮,则会有一个很长的循环时间tc1。如果按下,此信息以短周期时间tc2分布。如果按钮再次释放,则从下一个主要功能开始,此信息将使用td分发三次,之后再次使用较长的循环时间。

3.7Use case 7

用例7类似于用例5,但是禁用了ComEnableMDTForCyclicTransmission,并将ComTxModeNumberOfRepetitions设置为1。

通信协议栈

通信协议栈

通信协议栈

与用例5相反,这里的最小延迟计时器既没有为循环部分的周期性传输启动,也没有为混合模式的直接部分的重复传输启动。这可能导致在时间跨度dt内连续两次传输,如场景b和c所示。

4.问题回答

问题1Com模块如何实现事件帧发送?

:我们需要把需要事件帧发送的IPDU的ComTxModeMode配置为DIRECT,同事IPDU中的Signal的ComTransferProperty配置为TRIGGERED(或者TRIGGERED_xxx)。这样当我们在SWC通过RTE写这个信号的(调用Com_SendSignal)的时候就会触发事件帧的发送。

问题2Com模块如何实现报文周期的快慢切换发送?

:我们需要把需要切换报文周期时间的IPDU的ComTxModeTrue和ComTxModeFalse两个配置容器里面的时间参数配置为快慢周期两种不同配置,然后把IPDU中用来触发发送模式切换的Signal的ComFilter配置为符合我们需求(例如配置为Value == X滤波值为True,否则为False),这样在SWC中通过写Signal(调用Com_SendSignal)的不同值就能触发IPDU以不同的周期发送。

编辑:黄飞

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分