Autosar通信栈:基础问题 2

QA1、Rx Signal Filter有何用?

:Rx Signal Filter有什么用呢?通信开发中,大家应该碰到过这样的问题:信号阈值判断。举例:车速信号(Vehicel_Signal)用一个uint16数据类型表示,Vehicel_Signal有效取值范围:0~300Km/h,如果Vehicel_Signal > 300Km/h,则丢弃该信号,保持上一次的有效值。所以,使用Rx Signal Filter,即可处理类似的问题。

一个I-PDU会包含1~N个Signal(N为大于1的正整数),这些Signal可以不包含在任何SignalGroup中,也可以包含在多个SignalGroup中。

为更好地理解Signal Filter,这里讨论一下信号的接收处理流程:

Step1、COM模块收到一个I-PDU,该I-PUD包含5个信号:Signal00、Signal01、Signal02、Signal03、Signal05。其中Signal01、Signal03、Signal05属于SignalGroup01;

Step2、在COM层,将接收到的I-PDU拆分成Signal,如果信号有Filter Condition,则进行Filter Condition判断;

Step3、如果Filter Condition = FALSE,则丢弃该信号,对应的Rx Signal Buffer不更新。如果Filter Condition = TRUE,则更新信号对应的Rx Signal Buffer;

Autosar规范对Filter Condition的解释如下所示:

Autosar规范中解释Signal Filter Condition = False,如果这个Signal不在SignalGroup中,该信号对应的接收缓存区数值无需更新;如果这个Signal在SignalGroup中,该信号组对应的接收缓存区数值无需更新,即:保存上次值,如下所示:

Step4、如果信号不属于任何的SignalGroup,上层可以直接调用Com_ReceiveSignal()接口,从Rx Signal Buffer获取信号数据。如果信号属于某个SignalGroup,则需要通过Com_ReceiveSignalGroup()接口,将信号数据从Rx Signal Buffer缓存区Copy到SignalGroup Rx Buffer(shadow buffer),之后上层再通过Com_ReceiveSignal()接口读取信号值。

Rx Signal接收流程如下所示:

QA2、Tx Signal Filter与Tx Mode有何关系?

:从QA1中,可以知道Rx Signal Filter可以检查信号阈值。那么Tx Signal Filter能否也检查信号阈值呢?Autosar规范给出了解释,如下所示:

总结:Tx Signal Filter不能检查信号发送的阈值,只是I-PDU发送模式的判断依据。Tx I-PDU有哪些发送模式呢?ComTxModeTrue或者ComTxModeFalse。如下通过一个示例分析ComTxMode与Tx Signal Filter关系:

Step1、如果信号不包含在任何TxSignalGroup中,上层通过调用Com_SendSignal()接口,直接更新Tx Signal Buffer。如果信号包含在某个TxSignalGroup中,上层通过调用Com_SendSignal()接口,更新SignalGroup Tx Buffer(Shadow Buffer)中信号数据,之后通过Com_SendSignalGroup()接口更新Tx Signal Buffer;

Step2、通过Filter Condition检查Tx Signal过滤条件;

Step3、TMS(Transmission Mode Selector)判断Tx I-PDU中每个Signal的发送模式接口,如果其中一个Signal的检查结果是TRUE,则Tx I-PDU选择ComTxModeTrue发送行为;如果所有的Signal的检查结果均为FALSE,则Tx I-PDU选择ComTxModeFalse发送行为。

Tx Signal的发送行为如下所示:

QA3、ComTxModeTrue、ComTxModeFalse使用场景?

答:为什么一个Tx I-PDU会有ComTxModeTrue、ComTxModeFalse发送模式呢?一个Tx I-PDU的发送类型有:DIRECT、MIXED、PERIODIC。

DIRECT:事件型,比如:连续发送3次,发送最小间隔20ms。

PERIODIC:周期型,比如:每100ms发送一次。

MIXED:包含DIRECT、PERIODIC两种发送行为。

ComTxModeTrue、ComTxModeFalse可以存在这样的使用场景:Tx I-PDU Mode = TRUE时,使用PERIODIC发送行为;Tx I-PDU Mode = FALSE时,使用DIRECT发送行为。

QA4、Tx Signal的发送行为注意事项

:上层通过RTE调用Com_SendSignal()接口,更新需要发送Signal数值,注意:此时信号数值只是更新到了发送缓冲区。信号值的发送,依赖信号所在的Tx I-PDU周期。同时,COM层的发送主函数Com_MainFunctionTx()周期判断每一个Tx I-PDU周期到时与否,如果Tx I-PDU周期到时,调用PduR的发送接口发送Tx I-PDU.

对于周期型报文,假设:Com_MainFunctionTx()周期 = 10ms,周期型报文Tx I-PDU对应的发送周期为30ms,发送行为如下所示:

需要注意:上层信号的更新频率不应超过Tx I-PDU的发送周期,否则信号值被覆盖,如下所示:

大家可能在想:使用Queue机制不可以吗?信号数据队列发送,遗憾的是:目前,Autosar规范中的信号发送行为,不考虑Queue。

对于事件型报文,假设:Com_MainFunctionTx()周期 = 10ms,事件型报文Tx I-PDU对应的最小发送间隔为20ms,发送行为如下所示:

同样,上层信号的更新频率过快,会导致发送信号的数值被覆盖,如下所示:

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NMR0574

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值