871_AUTOSAR_TPS_GenericStructureTemplate22_变体处理简介

本文介绍了AUTOSAR中的变体处理,从动机、术语、模型转换到方法论,重点讲解了元模型中的变体点、绑定时间、模式实现和XML模式影响。通过实例展示了变体处理在OEM和供应商间协作中的作用以及在不同工作产品中的应用.

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       全部学习汇总: GitHub - GreyZhang/hack_autosar: learning autosar documents, aha, very hard!

       继续学习AUTOSAR,看一下官方的文档。这一次,看一下变体处理的简介。

 

       7 变体处理

       7.1 简介 AUTOSAR 中变体处理的动机是在 OEM 和供应商之间架起一座桥梁,避免工件之间的冗余,并为在 AUTOSAR 中表达基本产品线提供基础。

       当然,大多数公司已经存在变体处理概念,但它们通常不标准化(超出公司边界),因此 OEM 和供应商很难就这个问题相互交谈。

       考虑以下示例。一个OEM 将包含变体的模型发送给供应商。 供应商从此模型生成代码,但不解析所有变体。OEM 返回的是绑定了一些变体的目标代码,而其他变体在加载时保持“开放”状态以进行绑定。 这只有在双方采用相同的语言并且对变体有相同的理解时才有效。 并且经常涉及两个以上的当事人。

       因此,AUTOSAR 中的变体处理主要是关于记录变体:

       变体处理术语

       • 变体点是模型中可变的位置。 也就是说,它们可能并非在所有变体中都存在,或者在不同变体中可能具有不同的特征。

       • 绑定时间是可能绑定变化点的最晚时间。

       • 绑定表达式指定变量元素在何种条件下存在,或确定某些变量特征。

 

 

 

       在本节中,我们继续第 6 章的元模型转换概述。

       1.(第 6 章的重述。)AUTOSAR 从纯元模型开始。 带注释的元模型具有相同的结构,但用构造型 ( atpVariation ) 标记那些作为变异点的位置。 在本节中,我们将定义显示将这些位置转换为具有实现变化点所需的所有信息的结构的模式。

       2. 所有这些都发生在 M2 模型上。 创建 XML 模式后,焦点转移到 M1。 这是变体绑定的地方。

       3. 变体丰富的M1模型

       变体丰富的 M1 模型是同时包含所有支持变体的模型(应符合扩展元模型 [TPS_GST_00164] 定义的规则)。Variation 因而分别由 VariationPoint 和 AttributeValueVariationPoint 表示。

       4. 绑定M1模型

       绑定模型代表一种特定的变体。 它是由变体丰富的模型创建的,该模型通过绑定变体点转换为一个特定的变体。

       绑定模型必须符合纯元模型

       对于相关模板规范中定义的一致性规则和语义约束,完全绑定的 M1 模型必须遵守纯元模型。 特别是,绑定模型中的多重性必须符合纯元模型的多重性和约束。

       例如,在不变模型中,端口可能具有 1:n 或 n:1 连接。

       另一方面,此规则不适用于变体丰富的模型,因为变体可能相互重叠,从而导致 m:n 连接。 在绑定变体丰富模型并提取一个特定变体后,不变模型的规则再次适用。

       作为另一个例子,接口兼容性规则只能应用于特定的变体。请注意,PostBuild 变体点的存在实际上意味着完全绑定的 M1 模型不一定作为工件存在。 原因是在ECU启动时绑定了PostBuild变异点,在M1模型中显然无法解析。 但是,生成的 M0 模型符合绑定的 M1 模型。

 

       移除取消选中的对象

       如果绑定的 M1 模型保存为工件,则应删除取消选择的对象。

 

       绑定时移除绑定函数

       所选对象的 VariationPoint 是否留在工件中取决于流程。 如果保留它们,则绑定函数将被移除,分别由 AttributeValueVariationPoint 中的结果代替。 通过这种方式,变化点看起来不像一个未绑定的变化点)。

 

       7.1.2 变体处理和方法论

       如前所述,变体处理发生在方法学的不同层次和不同阶段,因此可能对不同的工作产品产生影响。 事实上,每个工作产品现在都可以包含变体。

 

       变体处理规范的范围

       在 AUTOSAR 中,我们仅指定如何在 ARXML 中表示变体。 其他一切都是特定于实现的,并没有在 M2 级别上标准化。

       但总的来说,可以说没有变体处理的方法可以扩展到变体处理,通过引入变体解决作为每个活动的第一个动作。

       例如,变体丰富的软件组件描述(由 ARXML 文件表示)可以通过变体解析工具预处理为绑定的软件组件描述,然后按照非变体方法中的定义进行处理。

 

       解决开发步骤中的变体点

       每个变化点都从 XML 表示开始,但不一定在 XML 表示中解析。 如果在特定的处理步骤中没有解决,则需要将其转移到输出工件。 例如,这意味着生成的 C 头文件可能包含 #ifdef 语句(用于预编译时间可变性)。

       另一个示例是 PostBuild 变体,其中生成的目标代码包含用于实现 PostBuild 变体点的条件语句,如 XML 表示中所指定。

       有关绑定时间和方​​法关系的更多详细信息,请参阅 [14] 中的 [TPS_METH_00001](任务)、[TPS_METH_00002](工件)、[TPS_METH_00003](任务使用)。

 

       7.1.3 如何在元模型中实现变体处理

       AUTOSAR 中的变体处理包括以下步骤:

       1. 用于变体处理的带注释的元模型

       在带注释的元模型(参见 [TPS_GST_00163])中——即在 M2 级别上——所有可能表现出可变性的位置都被这样注释。 这是通过应用构造型 atpVariation 来实现的。

       元模型中有四种可能表现出可变性的位置:

       • 聚合(参见第 7.2 节)

       • 关联(参见第 7.3 节)

       • 属性值(参见第 7.4 节)

       • 提供属性集的类(参见第 7.5 节)

       上面引用的部分描述了一种模式,该模式用于将构造型 atpVariation 及其关联元素转换为提供描述变化点所需的所有信息的结构。 换句话说,它们描述了从注释元模型到增强元模型的转换。

       这种方法的优点是——除了不会用大量变体处理相关信息使元模型混乱之外——原型 atpVariation 现在还可以作为一种方法来记录元模型中可能发生变体的所有站点。

       注意:此时,我们仍处于带注释的元模型中。 因此,我们只定义了哪些变体是可能的,但不提供为这种变体指定条件的方法(即,当它发生时),或选择特定变体的方法。

 

 

       2. M2 上最新绑定时间的表示法

       vh.latestBindingTime(参见 [TPS_GST_00052])与构造型相关联。 更准确地说,它附加到具有构造型 atpVariation 的元素上。 特别是,这是元类、属性或聚合/关联(不是相同的目标端)。

       vh.latestBindingTime 的适用值是由 BindingTimeEnum 和 AdditionalBindingTimeEnum 定义的值。

       此标签应用于 M2 元素。 它没有指定变异点的绑定时间,而是对变异点绑定时间的可能值设置了上限。

       绑定时间的表示

       单个变化点的绑定时间在其 ConditionByFormula 或 AttributeValueVariationPoint 元素的属性 bindingTime 中指定。 因此,使用 vh.latestBindingTime 定义的值声明的名称 latest 是可以分配给该元素的最新绑定时间。

       vh.latestBindingTime 在第 7.1.6 和 7.6.4 节中有更详细的描述; 结合时间在[14]中解释。

 

       3. 元模型转换

       在从元模型生成 XML 模式之前(例如,通过元模型工具),所有变化点都被转换成一个结构,允许为每个变化点指定详细信息([TPS_GST_00164]),包括其实际绑定时间 ,以及发生变化时的条件。

       这是通过将步骤 1 中提到的模式应用于带注释的元模型来完成的。 这种转换的结果是扩展的元模型。

       换句话说,使用 M2 级别提供的方法在 M1 级别定义个体差异。

       各个模式的详细信息分别在第 7.2、7.3、7.4 和 7.5 节中描述,而类 VariationPoint 在第 7.6 节中解释。

 

       M1的变化描述

       模型设计者最终指定了此变体的条件和最新绑定时间。 这是在 M1 级别的变体丰富模型中完成的。

       条件指定在什么情况下特定变体变得活跃。 例如,它可以选择几个备选方案之一; 在这种情况下,条件最好是相互排斥的。 简而言之,这样的条件是以系统常量作为操作数的表达式。

       有关条件的更多详细信息,请参阅本文档前面的第 7.6.8 节和第 4.7 节。

 

       5. 下一步是选择一个特定的变体。 这可能发生在为此变体定义的绑定时间之前的任何时间。

       正如在步骤 4 中已经说过的,条件本质上是使用系统常量作为操作数的表达式。

       选择特定的变体

       因此,通过为所有系统常数分配值来选择系统的特定变体,这些常数由与给定结合时间相关的所有变化点参考。

       这里需要注意的是,并不是所有的变体都是同时选择的。 取而代之的是,可能(并且通常会)有几个“波动”的绑定变化,每个都在不同的时间。 同样,并非所有系统常数都需要同时确定——这里唯一的限制是它们的值必须在需要时可用。

       此外,在此阶段,模型仍包含有关可能变体的信息。一开始,这都是变体。 在稍后阶段,其中一些变体已经绑定(参见步骤 6),并且模型仅包含原始变体子集的信息。

       此步骤在第 7.8 节中详细描述。

 

       6. 解决变体点

       当如 [TPS_GST_00187] 中所述选择特定变体时,将实施选择并解析变体。

       这意味着聚合其条件评估为 false 的 VariationPoint 的所有元素都将从模型中删除,并且所有 AttributeValueVariationPoint 元素都将其 value 属性固定(请参阅 [TPS_GST_00178])。

       如第 6 节所述,并非所有变体都在同一(绑定)时间绑定。 在每个绑定步骤,未绑定的变体可能仍然存在,并且可以在稍后(绑定)时间进行绑定3。 换句话说,步骤 5 和步骤 6 通常会重复多次。

 

 

       7.1.4 并非元模型中的每个元素都可能是变体

       变化仅限于特定元素。

       构造型 atpVariation 仅允许用于特定元素。 这些元素由各自的 AUTOSAR 模板定义。

       这样做的原因是当构造型 atpVariation 附加到一个元素时,会对其他元素产生影响。 例如,当一个端口是可变的时,所有进出该端口的连接也是可变的。 必须在相关的 AUTOSAR 模板中准确描述适当的措施。因此,元模型中只有有限数量的位置支持变化。

允许变化点的 UML 元素列表可以通过查询元模型中的构造型 atpVariation 来检索(参见 C 部分)。

       从技术上讲,此限制按如下方式实施。  XML 模式等效于扩展元模型,只是不允许将 VariationPoint 或其他变体处理相关元素附加到任意位置。 该架构确保只有在带注释的元模型中用 atpVariation 标记的那些位置才可能包含此类元素(请参阅 [TPS_GST_00195] 和 [TPS_GST_00199])。

 

       7.1.5 变体点是可选的,即使对于变体元素

       构造型 atpVariation 将 M2 级别的模型元素标记为变量。然而,当它在 M1 级别上使用时,该元素不一定每次都可变——相反,只有在需要时才应使用可变性。

       这可能意味着,如果模型元素可能是可变的,即使该元素以非可变方式使用,在 M1 级别上也会有显着的开销。 然而,情况并非如此:用作可变性信息起点的 VariationPoint 元素始终是可选的。 因此,只有在需要时才需要提供它——如果没有,就没有可变性。

 

 

       7.1.6 关于绑定时间的说明

       在 AUTOSAR 中,我们处理三个不同级别的绑定时间:

       1. 绑定时间在 M1 级别上指定。 这是元素 ConditionByFormula(参见图 7.8)和 AttributeValueVariationPoint(参见图 7.4)的属性 bindingTime 的值。

       bindingTime 的语义

       bindingTime 的值定义了此特定变化点的最新绑定时间。 可以更早地选择和绑定一个变体,但不能晚于 bindingTime。 因此,只要所有涉及的系统常数都有值,就可能会限制变化。

       另一方面,系统常量必须在需要它的“最早”绑定时间有一个值。 如果我们没有这个,那么可能会在开发周期中更改系统常量值,这又会导致不一致。

       2. 最近的绑定时间的附加信息

       在 M2 级别的带注释的元模型中有原型 atpVariation 的个别应用。 对于每个这样的应用程序,标签 vh.latestBindingTime 与构造型相关联。

       绑定时间的附加信息

       使用构造型 atpVariation 标记的元素被转换为更详细的结构,该结构提供定义变化点所需的所有信息。 此转换始终引入 ConditionByFormula 或 AttributeValueVariationPoint,即具有属性 bindingTime 的元素。

       3. 有一些模式描述了如何将原型 atpVariation 转换为更详细的 UML 构造,这些构造提供定义变体点所需的所有信息。

       这些模式可能会再次限制 vh.latestBindingTime 的潜在值范围。 这些特定限制在第 7.2.2、7.3.2、7.4.4 和 7.5.3 节中定义。

 

       7.1.7 关于变体处理对 XML 模式影响的说明

       自然地,变体处理需要对 M1 AUTOSAR 模型的 XML 模式进行一些更改和扩展。 通常,这些更改会尽可能保持简单。除了属性集模式(第 7.5 节)之外,这些更改不会在 XML 中引入重大的结构更改,而是添加并有时重命名元素。

       各个 XML 代码的模式特定问题记录在各个模式的各个小节中(第 7.2.4、7.3.4、7.4.6 和 7.5.5 节)。

 

       7.1.8 模式相互独立

       我们定义了四种模式来定义聚合、关联、属性值和属性集中的变化点。 这些模式描述了 atpVariation 如何将现有的 UML 构造(通常是关系或属性)转换为支持描述变体的构造。

       可以混合变体处理模式

       变量处理的模型转换模式可以以任何方式组合。 例如,具有变体属性的元素可能是变体聚合的一部分。 或者,属性集模式中的各个属性本身可能是变体。

 

       关于变体处理模式中的多重性的说明

       变体处理扩展了上多重性

       变体处理模式需要转换模式内某些聚合关联的上多重性。 通常,聚合的上限多重性提高到 ∗。

       这导致了以下情况:

       1. 在纯元模型中,多重性是 m :: : n。

       2.在注解的元模型中,多重性仍然是m:::n。

       3. 在扩展元模型中,多重性增加到 m : : : *。

       其中,扩展元模型是一种添加额外结构来描述所有可能变体的模型。 结果是,对应于扩展(M2)元模型的变体丰富的 M1 模型可以聚合或关联比纯元模型的原始 m:::n 多样性所允许的更多的元素。

       换句话说,变体丰富的 M1 模型违反了纯元模型中定义的多样性。

       然而,它并不像听起来那么严重,因为违规只发生在绑定完成之前。 变体丰富的 M1 模型从所有可能的变体开始,但正如我们在第 7.1.3 节中所描述的,在绑定过程中删除了“多余”的变体。

       在绑定完成后——在绑定的 M1 模型中——多重性必须再次在纯元模型中定义的限制内。 这是由作为模式一部分的语义约束 ([constr_2503]) 确保的。

 

       7.1.10 关于变体处理模式应用的说明

       变体处理中模式解析的顺序

       变体处理模式通过 M2 上的模型转换(例如通过元模型工具)按以下顺序解析:

       1. 属性集模式

       2. 聚合模式

       3. 关联模式

       4. 属性值模式

       应该注意的是,这不是本文档中呈现模式的顺序; 即,属性集模式排在最后。 这是因为我们的描述从最容易理解的那些模式开始,然后进行到更复杂的模式。

       上面这部分是针对变体处理的简介,情况比较多,有一定的复杂度,梳理的内容比较多。这个主要的描述方式还是软件架构的设计,还是UML层面的一些运用。

### 关于 AUTOSAR TPS Generic Structure Template 的文档和使用 #### 文档概述 AUTOSAR TPS (Technical Proposal Specification) Generic Structure Template 提供了一组预定义的结构和元素,这些结构和元素可以在 AUTOSAR 模板模型中使用[^1]。此模板旨在帮助开发者创建符合 AUTOSAR 标准的应用程序。 #### 使用场景 该模板不仅适用于标准库开发,还广泛应用于各种类型的 ECU 开发过程中。对于 OEM 来说,在设计阶段就可以利用这一特性来自行更新通信矩阵,从而更好地适应特定需求[^3]。 #### 手动配置的优势 尽管工具链如 EB 或 VECTOR 支持 ARXML 和 DBC 文件的自动化导入来生成配置,但手动配置提供了更多灵活性并有助于深入理解整个系统的架构。这种方式使得问题排查更加容易,并能有效防止因外部文件错误而导致不必要的麻烦[^2]。 #### 特殊考虑事项 需要注意的是,某些组件可能具有特殊的映射规则;例如 SWC 参数以及代理机制并不总是遵循常规的一对一关系原则。特别是后者仅限接收功能而不具备发送能力[^5]。 #### LIN 主从模式的支持情况 在 LIN 总线方面,当前版本主要针对 Master 节点进行了优化和支持,而 Slave 设备则不在官方支持范围内,被认为是不属于 AUTOSAR 定义下的 ECU 类型之一[^4]。 ```cpp // 示例代码展示如何读取一个简单的 CAN 报文 ID 并打印出来 #include <iostream> using namespace std; int main() { uint32_t canId = 0x7FF; // 假设这是接收到的消息ID cout << "Received Message ID: " << hex << canId; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值