全部学习汇总: https://github.com/GreyZhang/hack_autosar
继续学习AUTOSAR,看一下官方文档。
5.5 诊断服务映射
汽车诊断以各种方式与应用软件和基础软件交互,这些方式可以使用 AUTOSAR 元模型进行形式化。 本章包含对这种交互形式化的描述以及适用的约束。
DiagnosticExtract 引用软件组件的用例
这是潜在用例的列表,其中 DiagnosticExtract 在 CompositionSwComponentTypes 或 AtomicSwComponentTypes 的上下文中指代一般的软件组件和 PortPrototypes:
• DiagnosticExtract 在嵌入由 rootSoftwareComposition 创建的层次结构中的 AtomicSwComponentType 的上下文中引用 PortPrototype(用于访问 dataElement)或 SwcServiceDependency。
• DiagnosticExtract 在 AtomicSwComponentType 的上下文中引用 PortPrototype(用于访问 dataElement)或 SwcServiceDependency,该上下文嵌入在由未在任何地方聚合(暂时)的 CompositionSwComponentType 创建的层次结构中。
• DiagnosticExtract 引用 AtomicSwComponentType 上下文中的 PortPrototype(用于访问 dataElement)或 SwcServiceDependency。
• DiagnosticExtract 指的是 BswServiceDependency。
5.5.1 诊断服务数据映射
需要注意,Dcm 通常有权读取和写入数据元素。
即使相应的 PortPrototype 是 PPortPrototype,这也适用。 这意味着诊断服务数据映射仅限于 SenderReceiverInterface。
属性 DiagnosticServiceDataMapping.diagnosticDataElement 的语义
通过属性 DiagnosticServiceDataMapping.diagnosticDataElement,可以指定 Dcm 可以访问由 SenderReceiverInterface 键入的 PortPrototype 中的 dataElement。
这种类型的数据访问适用于诊断服务 ReadDataByIdentifier (0x22) 和 WriteDataByIdentifier (0x2E)。
同时存在属性 DiagnosticServiceDataMapping.diagnosticDataElement 和 DiagnosticDataByIdentifier.dataIdentifier
DiagnosticServiceDataMapping.diagnosticDataElement 也应由角色 dataIdentifier.dataElement.dataElement 中的 DiagnosticDataByIdentifier 聚合。
请注意,[constr_1343] 仅适用于方法学中的步骤,其中,DiagnosticExtract 被认为是完整的,可以导出 Dcm 和 Dem 的配置。 任何中间步骤,例如从 OEM 到一级供应商的移交实际上并不强制执行 [constr_1343]。
换句话说,[constr_1343] 确保在 DiagnosticServiceDataMapping 和相应的 DiagnosticRead DataByIdentifier 或 DiagnosticWriteDataByIdentifier 之间存在连接。
只有这样,诊断服务才能完全可用。
属性 DiagnosticServiceDataMapping.mappedDataElement 和 DiagnosticServiceDataMapping.diagnosticDataElement 的数据类型识别条件。
DiagnosticServiceDataMapping.mappedDataElement 和DiagnosticServiceDataMapping.diagnosticDataElement 均应由以下选项之一键入:
• ApplicationPrimitiveDataType,其中属性类别的值设置为VALUE。
• ImplementationDataType,其中属性类别的值设置为VALUE 或TYPE_REFERENCE,最终解析为属性类别设置为VALUE 的ImplementationDataType。
换句话说,[constr_1344] 要求DiagnosticServiceDataMapping.mappedDataElement3 和DiagnosticServiceDataMapping.diagnosticDataElement 都应按原始数据类型进行输入。
有关数据类型类别值含义的详细说明,请参阅 [9]。
这代表了定义诊断服务到软件组件的映射的能力。 这种服务映射适用于 SenderReceiverInterfaces 的使用。
DiagnosticDataElement 不应(最终)由 DiagnosticRoutine 聚合
由 DiagnosticServiceDataMapping 引用的 DiagnosticDataElement 不应(最终)由 DiagnosticRoutine 聚合。
Dem 使用 DiagnosticServiceDataMapping
这是 Dem 使用 DiagnosticServiceDataMapping 的一个用例,以便从 ApplicationSwComponentType 中的 dataElements 获取 DiagnosticExtendedDataRecord 的元素。
因此,[constr_1345] 并没有在 DiagnosticServiceDataMapping 的上下文中故意排除 DiagnosticExtendedDataRecord 对 DiagnosticDataElement 的聚合。
5.5.2 诊断服务软件映射
诊断服务软件映射仅限于ClientServerInterface 或直接函数调用(在基础软件或复杂驱动程序的情况下)。
DiagnosticServiceSwMapping 的目的
已引入元类 DiagnosticServiceSwMapping 以支持在给定诊断服务的定义与 SwcServiceDependency(如果该服务适用于应用程序软件)或 BswServiceDependency(如果该服务适用于基础软件)之间创建关系。
需要根据封闭的 AtomicSwComponentType 的上下文使用对目标 SwcServiceDependency 的适用引用形式。
图 5.25:Dcm 服务软件映射
这代表了定义诊断信息(此时没有办法变得更具体的语义)到软件组件之间的映射的能力。
这代表了定义诊断服务到软件组件的映射的能力。 这种服务映射适用于 ClientServerInterfaces 的使用。
BswServiceDependency 需要充当引用的目标
如图 5.25 所示,DiagnosticServiceSwMapping.mappedBswServiceDependency 的意图是以与诸如DiagnosticServiceSwMapping.mappedFlatSwcServiceDependency相同的方式引用 BswServiceDependency。但是,BswServiceDependency 不是从元类 Referrable 派生的,因此永远不会成为像 DiagnosticServiceSwMapping.mappedBswServiceDependency 这样的引用的目标。
解决此问题的方法是定义元类 BswServiceDependencyIdent,它继承自 IdentCaption,而 IdentCaption 又继承自 Referrable。
那么,通过在角色ident中的BswServiceDependency聚合BswServiceDependencyIdent,BswServiceDependency就可以事实上成为引用的目标,从而使DiagnosticServiceSwMapping.mappedBswServiceDependency的原始思路变得可行。
请注意,介绍 [TPS_DEXT_01044] 尽管危险地接近黑客攻击,但对于保持 AUTOSAR XML 模式完全向后兼容是必要的。
换句话说,如果 BswServiceDependency 被更新为从 Referrable 继承,结果将是所有包含实例 BswServiceDependency 的现有 AUTOSAR 模型将突然变得无效,因为 Referrable.shortName 是 AUTOSAR XML 模式中的强制性属性。
创建此元类是为了添加成为非Referrable BswServiceDependency 引用目标的能力。
DiagnosticServiceSwMapping.serviceInstance 的允许值
DiagnosticServiceSwMapping 的适用性仅限于预定义的诊断服务集。
根据 AUTOSAR 标准的规定,DiagnosticServiceSwMapping.serviceInstance 应仅指向 DiagnosticServiceInstance 的以下子类:
• DiagnosticRoutine
• DiagnosticSecurityAccess
• DiagnosticReadDataByIdentifier
• DiagnosticWriteDataByIdentifier
• DiagnosticIOControl
DiagnosticServiceSwMapping 属性的存在
对于任何给定的 DiagnosticServiceSwMapping,应存在一个且仅一个以下引用:
• DiagnosticServiceSwMapping.mappedFlatSwcServiceDependency
• DiagnosticServiceSwMapping.mappedSwcServiceDependency
• DiagnosticServiceSwMapping.mappedBswServiceDependency
[constr_1347] 在进一步的澄清中,反映了一个事实,即最多单个 SwcServiceDependency 可以被一个 DiagnosticServiceSwMapping 引用,并且这个 SwcServiceDependency 不能同时被mappedSwcServiceDependency 和mappedFlatSwcServiceDependency 标识。
这样,诊断服务映射部分的就看完了。主要包括数据的映射以及软件的映射。看着多少有点头晕,也很容易理解,这是工具设计的指南而不是软件设计的指南。我看这部分,其实科普的意义大于实际的指点。