主要内容

对 AUTOSAR 基础软件服务和运行时环境进行仿真

通过使用参考实现仿真 AUTOSAR 组件对基础软件内存和诊断服务的调用。

配置对 AUTOSAR 基础软件服务的调用

AUTOSAR 标准定义在 AUTOSAR 运行时环境中运行的基础软件 (BSW) 服务。服务包括 NVRAM Manager (NvM)、Diagnostic Event Manager (Dem) 和 Function Inhibition Manager (FiM) 服务。在 AUTOSAR 运行时环境中,AUTOSAR 软件组件通常使用客户端-服务器或发送方-接收方通信来访问 BSW 服务。

在您的 AUTOSAR 软件组件模型中,要实现对 NvM、Dem 和 FiM 服务接口的客户端调用,您需要拖放预配置的 NvM、Dem 和 FiM 调用方模块。每个模块都有预填的参数,例如客户端端口名称操作。例如,您需要配置模块参数以选择要调用的服务操作。要在 AUTOSAR 软件组件中配置添加的调用方模块,您需要同步模型。软件会创建 AUTOSAR 客户端-服务接口、操作和端口,并将每个 Simulink 函数调用映射到 AUTOSAR 客户端端口和操作。有关详细信息,请参阅Configure Calls to AUTOSAR NVRAM Manager ServiceConfigure Calls to AUTOSAR Diagnostic Event Manager ServiceConfigure Calls to AUTOSAR Function Inhibition Manager Service

下面是一个节气门位置集成模型,它集成两个节气门位置传感器组件和一个节气门位置监控器组件。传感器组件获取原始节气门位置传感器 (TPS) 值并将其转换为 TPS 百分比值。监控器组件获取由主传感器组件和辅助传感器组件提供的 TPS 百分比值,并决定传递哪个 TPS 信号。传感器组件调用 BSW NvM 和 Dem 服务,监控器组件调用 BSW Dem 服务。

open_system('autosar_bsw_presim');

传感器组件 autosar_bsw_sensor1autosar_bsw_sensor2 各包含一个 Initialize Function 模块,该模块调用 NvM 服务接口 NvMService。调用是使用基础软件库模块 NvMServiceCaller 实现的。每个模块都配置为调用 NvMService 操作 ReadBlockReadBlock 调用使用客户端端口 S1LowSetPointS2LowSetPoint。以下是 autosar_bsw_sensor1 的 Initialize Function 模块。

以下是 Initialize Function 模块中 ReadBlock 调用的 NvMServiceCaller 模块对话框。有关详细信息,请参阅NvMServiceCaller

您也可以配置使用操作 ReadBlockRestoreBlockDefaultsWriteBlock 的函数调用方的同步性。使用属性检查器设置函数调用方 S1LowSetPoint 的同步性。在代码映射编辑器中选择 S1LowSetPoint 后,属性检查器中会出现通信属性部分。从 ServerCallPoint 列表中选择 Asynchronous。配置此属性仅影响生成的 ARXML 文件中的调用同步性,而不影响生成的 C 代码。

autosar_EM_synchronicity_funccaller.png

传感器组件 autosar_bsw_sensor1autosar_bsw_sensor2 各包含两个对 Dem 服务接口 DiagnosticMonitor 的调用。两个调用都是使用基础软件库模块 DiagnosticMonitorCaller 实现的。每个模块都配置为调用 DiagnosticMonitor 操作 SetEventStatusSetEventStatus 调用使用客户端端口 S1StuckLowS1StuckHighS2StuckLowS2StuckHigh

以下是第一个传感器组件中 StuckLow 调用的 DiagnosticMonitorCaller 模块对话框。有关详细信息,请参阅DiagnosticMonitorCaller

监控器组件 autosar_bsw_monitor 包含一个对 Dem 服务接口 DiagnosticMonitor 的调用和四个对 Dem 服务接口 DiagnosticInfo 的调用。

  • 与在传感器组件中一样,DiagnosticMonitorCaller 模块实现 DiagnosticMonitor 调用,并配置为调用 SetEventStatus 操作。客户端端口名称是 TPS

  • 四个 DiagnosticInfo 调用是使用基础软件库模块 DiagnosticInfoCaller 实现的。每个模块都配置为调用 DiagnosticInfo 操作 GetEventFailedGetEventFailed 调用使用客户端端口 TPS1StuckLowTPS1StuckHighTPS2StuckLowTPS2StuckHigh

以下是 TPS1StuckLow 调用的 DiagnosticinfoCaller 模块对话框。有关详细信息,请参阅DiagnosticInfoCaller

如果您有 Simulink Coder 和 Embedded Coder 软件,可以为 NvM 和 Dem 服务调用生成 C 代码并导出 ARXML 描述。打开并编译每个组件模型。例如,要编译模型 autosar_bsw_monitor,请打开该模型。按 Ctrl+B 或输入 MATLAB 命令 slbuild('autosar_bsw_monitor')

要查看模型编译的结果,请检查代码生成报告。

为仿真配置 AUTOSAR 基础软件服务的参考实现

要对调用 BSW 服务的 AUTOSAR 组件模型进行仿真,需要创建一个包含该组件的组合模型、一个系统模型或一个框架模型。在该包含模型中,提供组件调用的 NvM、Dem 和 FiM 服务操作的参考实现。

AUTOSAR 基础软件模块库包括 NVRAM Service Component 模块和 Diagnostic Service Component 模块。这些模块提供 NvM、Dem 和 FiM 服务操作的参考实现。为了支持组件对 NvM、Dem 和 FiM 服务的调用的仿真,请在包含式模型中包括这些模块。您可以通过以下两种方式之一插入这些模块:

  • 通过创建 Simulink Test 框架模型自动插入模块

  • 手动将模块插入到包含式组合模型、系统模型或框架模型中

要为调用 BSW NvM、Dem 和 FiM 服务的模型自动插入服务组件模块,请打开模型(或包含模型)并创建一个 Simulink Test 测试框架(需要 Simulink Test)。有关详细信息,请参阅创建测试框架 (Simulink Test)。创建测试框架会编译模型、添加服务组件模块,并创建仿真所需的端口和其他元素。

以下示例手动插入用于 NvM 和 Dem 服务调用的服务组件模块。打开集成模型 autosar_bsw_presim。使用库浏览器或 add_block 命令,或在模型窗口中键入模块名称,将 NVRAM 和 Diagnostic Service Component 模块添加到模型。

open_system('autosar_bsw_presim');
add_block('autosarlibnvm/NVRAM Service Component','autosar_bsw_presim/NVRAM Service Component');
add_block('autosarlibdem/Diagnostic Service Component','autosar_bsw_presim/Diagnostic Service Component');
set_param('autosar_bsw_presim','SimulationCommand','update');

NVRAM Service Component 模块具有预填的参数,包括运行时环境 (RTE) 参数和 NVRAM 属性参数。检查参数设置,并根据您使用 NvM 服务操作的方式考虑是否需要修改任何参数。有关详细信息,请参阅NVRAM Service Component

RTE 选项卡下的表列出了组件客户端端口及其到 NvM 服务模块 ID 的映射。表中的每行表示一个从基础软件调用方模块对 NvM 服务的调用。作用于同一 NvM 模块的多个调用通常使用相同的模块 ID。此示例将 NvM ReadBlock 客户端端口映射到不同模块 ID。

“初始值”选项卡下的表列出了仿真的组件客户端端口及其初始值。默认初始值为 0。

Diagnostic Service Component 模块具有预填的参数,包括 RTE 参数和 Dem 基于计数器的去抖参数。检查参数设置,并根据您使用 Dem 服务操作的方式考虑是否需要修改任何参数。

基于计数器的去抖参数控制由 Dem 服务参考实现提供的基于计数器的去抖算法。在多次仿真运行期间,您可以调整事件步长和阈值参数并观察效果。有关详细信息,请参阅Diagnostic Service Component

RTE 选项卡下的表列出了组件客户端端口及其到 Dem 或 FiM 服务 ID(在此示例中为事件 ID)的映射。表中的每行表示一个从基础软件调用方模块对 Dem 服务的调用。作用于同一事件的多个调用通常使用相同的事件 ID。此示例将 Dem SetEventStatus 客户端端口映射到不同的事件 ID,然后将 Dem GetEventFailed 客户端端口映射到与 SetEventStatus 端口共享的事件 ID。例如,SetEventStatus 端口 S1StuckHighGetFailedEvent 端口 TPS1StuckHigh 共享事件 ID 1;S1StucklowTPS1StuckLow 共享事件 ID 2;依此类推。

对 AUTOSAR NvM 和 Dem 服务调用进行仿真

在集成模型中配置 NVRAM 模块和 Diagnostic Service Component 模块后,对模型进行仿真。仿真在节气门位置传感器和监控器组件模型中执行 AUTOSAR NvM 和 Dem 服务调用。

open_system('autosar_bsw_simulation');
simOutIntegration = sim('autosar_bsw_simulation');

相关链接