前言
最近在研究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.问题回答
问题1:Com模块如何实现事件帧发送?
答:我们需要把需要事件帧发送的IPDU的ComTxModeMode配置为DIRECT,同事IPDU中的Signal的ComTransferProperty配置为TRIGGERED(或者TRIGGERED_xxx)。这样当我们在SWC通过RTE写这个信号的(调用Com_SendSignal)的时候就会触发事件帧的发送。
问题2:Com模块如何实现报文周期的快慢切换发送?
答:我们需要把需要切换报文周期时间的IPDU的ComTxModeTrue和ComTxModeFalse两个配置容器里面的时间参数配置为快慢周期两种不同配置,然后把IPDU中用来触发发送模式切换的Signal的ComFilter配置为符合我们需求(例如配置为Value == X滤波值为True,否则为False),这样在SWC中通过写Signal(调用Com_SendSignal)的不同值就能触发IPDU以不同的周期发送。
编辑:黄飞
评论
查看更多