AUTOSAR ComStack 各层信号过滤总结

AUTOSAR ComStack 各层信号过滤总结(自下而上)

  • 一、CAN Driver 层对信号过滤详解
  • 二、CanIf层对PDU报文的过滤
  • 三、Com 层对信号过滤详解
    • 过滤算法总类
    • 信号过滤的TMC/TMS/TM众多概念和配合运作原理(发送端)
    • 信号过滤的TMC/TMS/TM众多概念和配合运作原理(接收端)

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

一、CAN Driver 层对信号过滤详解

1.CANIf层报文绑定CanDriver层的HRH(ID:59xxx327)
AUTOSAR ComStack 各层信号过滤总结_第1张图片

  1. 在Can_Controller模块中点击Fx,工具会自动将CANif绑定的Basic CAN HRH(名称ID:59xxx327)中的接收报文分类并生成Mask和Code
    分类规则为CANID & Mask = Code

AUTOSAR ComStack 各层信号过滤总结_第2张图片
如图所示分成了CanFilterMask_000 - CanFilterMask_007共计八个类

AUTOSAR ComStack 各层信号过滤总结_第3张图片

3.在Can模块初始化中完成对规则的应用

CanLL_InitPowerOnRuleAndFifoInit 函数中实施过滤规则:

备注:因CANID & Mask = Code,满足此项规则的报文均可上报,所以设定规则的范围>实际DBC中固定报文,即实际接收报文是过滤规则的子集;
如CanFilterMask_000 中0x2df & 0x700=0x200, 那么0x2xx & 0x700=0x200,
CanFilterMask_000中所有0x2xx格式的报文都是满足上报条件的。
CanFilterMask_000 - CanFilterMask_007 共8个规则集合外的报文不可上报。

二、CanIf层对PDU报文的过滤

CanIfRxPduDlc:该条L-PDUS的长度。对于接收报文来讲,它用于DLC checking,
—》若接收到的报文长度大于等于这个值,则认为有效,canif将其传到上层结构;
—》若接收到的报文小于配置的值,该条报文将被忽略;
—》若配置为0,则不会对DLC check产生影响,忽略。

AUTOSAR ComStack 各层信号过滤总结_第4张图片
【图】CANIf层对报文长度的check

CanIfRxPduCanIdRange:可以配置接收某个CANID范围段的报文(如CAN NM报文的指定只接接收某个范围端内的报文),此时CanIfRxPduCanId选项会不可选,若该选项使能,CanIfRxPduCanIdRangeLowerCanId ,CanIfRxPduCanIdRangeUpperCanId 则使能。此项功能
AUTOSAR ComStack 各层信号过滤总结_第5张图片
【图】CANIf层对报文范围的过滤

AUTOSAR ComStack 各层信号过滤总结_第6张图片
【图】CANIf层配置报文过滤范围后,CAN ID一项不再配置

三、Com 层对信号过滤详解

过滤算法总类

过滤算法:

ALWAYS: 总是通过,若一个信号的过滤算法配置为ALWAYS,那么这个信号的TMC永远为True NEVER:
总是不通过,若一个信号的过滤算法配置为NEVER,那么这个信号的TMC永远为False; MASKED_NEW_EQUALS_X:
若一个信号的过滤算法配置为MASKED_NEW_EQUALS_X时,只有当新值与掩码按位与后等于设定的某一值时,这个信号的TMC才等于True;
MASKED_NEW_DIFFERS_X:
若一个信号的过滤算法配置为MASKED_NEW_DIFFERS_X时,只有当新值与掩码按位与之后不等于设定的某一值时,这个信号的TMC才为True;
MASKED_NEW_DIFFERS_MASKED_OLD:
若一个信号的过滤算法配置为MASKED_NEW_DIFFERS_MASKED_OLD时,只有当新值与掩码按位与之后的值不等于旧值与掩码按位与之后的值时,这个信号的TMC才为True;
NEW_IS_WITHIN:
若一个信号的过滤算法配置为NEW_IS_WITHIN时,只有当新值在某一设定的范围内时,这个信号的TMC才为True;
NEW_IS_OUTSIDE:
若一个信号过滤算法配置为NEW_IS_OUTSIDE时,只有当新值不在某一设定的范围内时,这个信号的TMC才为True;
ONE_EVERY_N:若一个信号的过滤算法配置为ONE_EVERY_N时,该信号值每更新N次,这个信号的TMC值为True;

过滤处理:

如果AUTOSAR COM模块在接收端过滤掉一个信号(信号簇),即filter condition的结果为false,则AUTOSAR
COM模块应丢弃该信号(信号簇),不进行处理,及不会将该信号的值放入old_value中; 如果AUTOSAR
COM模块将一个信号的过滤器计算为true(值没有被过滤掉),那么AUTOSAR COM模块应将该信号的值放入old_value中;
如果在send-API编写相应的信号之前对过滤器进行了计算,则需要有一种方法来确定该信号的过滤器状态。
一些筛选器需要new_value来计算筛选器。 然而,这只有在使用send-API更新信号之后才可用。
因此,有必要在第一次发送之前为new_value定义过滤器使用的值。
对于配置的接收滤波器MASKED_NEW_DIFFERS_MASKED_OLD的信号, AUTOSAR
COM模块将处理该信号在接收截止日期监测超时后收到的第一个值,就像该值已经通过了过滤条件一样;
在相关的I-PDU的RX截止超时后AUTOSAR COM模块会让过滤器MASKED_NEW_DIFFERS_MASKED_OLD传递任何值

信号过滤的TMC/TMS/TM众多概念和配合运作原理(发送端)

初学者对于TMC/TMS/TM的概念及如何运作是比较难以理解清晰的。 简单的说,
-----》TMC[信号传输条件]是对于单个信号的,主要是配置信号过滤的算法(如ALWAYS/NEVER/MASKED_NEW_EQUALS_X等),从而决定信号过滤的条件是真还是假

AUTOSAR ComStack 各层信号过滤总结_第7张图片

-----》TMS[PDU传输模式选择]是对于PDU的,当PDU内任意一个的信号过滤条件为TURE,则判定PDU的传输模式选择为TURE。PDU则按照模式为TURE的配置方式去发送,否则按照FALSE方式发送

AUTOSAR ComStack 各层信号过滤总结_第8张图片

-----》TM[传输模式] 需要为TURE和FALSE的两种情况下各配置一种传输方式(周期发送/事件发送/混合发送/不发送),以便TMS判断为TRUE或者FALSE时候各有执行的传输方式

AUTOSAR ComStack 各层信号过滤总结_第9张图片

AUTOSAR ComStack 各层信号过滤总结_第10张图片
【图】TMC信号过滤条件任意一条件为TURE 触发PDU模式选择TMS为TRUE

注意两点

----》发送端信号的TMC(发送模式条件)的计算与接收端的信号过滤机制相同,但是,在发送端信号过滤并不会丢弃任何的信号,而只是用于计算信号TMC的值。
----》发送端的TMS,一个I-PDU的TMS的值是根据其所有下属的信号的TMC结果决定的,若一个I-PDU下属的信号中至少有一个信号的TMC计算为True,那么这个I-PDU的TMS为True,只有该I-PD下属的所有的信号的TMC都计算为False时,该I-PDU的TMS才为False。

信号过滤的TMC/TMS/TM众多概念和配合运作原理(接收端)

根据接收端的处理流程,在check update(如有配置)满足条件接收pdu后,则接收该PDU,
开始依次处理pdu内各个信号的检测。如果发现reception filter不满足,则丢弃该信号,不再往对应信号buffer copy数据。
同时不更新算法中的old_value;

信号接收的其他流程详解请查看如下博文:
《AUTOSAR COM 主要功能描述》
AUTOSAR ComStack 各层信号过滤总结_第11张图片

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

你可能感兴趣的:(AutoSAR配置和实践,单片机,mcu)