在过去的二十年中,AUTOSAR已成为汽车行业开发SWC的最重要标准之一,因为它支持在各种ECU上分布式开发和部署SWC。同时,基于模型的开发方法(Model-based Design)已成为许多行业和组织的标准开发方法,当然也包括汽车行业。
Embedded Coder/TargetLink AUTOSAR模型的静态分析介绍
AUTOSAR(AUTomotive Open System ARchitecture)是由电子、半导体和软件行业的汽车制造商、供应商和其他公司组成的全球开发合作伙伴关系。AUTOSAR标准旨在实现软件标准化、可重用性和互操作性。AUTOSAR标准提供了支持当前和下一代汽车ECU的开发平台:AUTOSAR Classic Platform支持传统的内部应用,如动力总成、底盘、车身和内饰电子设备。AUTOSAR Adaptive Platform支持新的基于服务的应用,例如自动驾驶、车联网、OTA等Adaptive应用的部署支持Classic AUTOSAR、Adaptive AUTOSAR和non-AUTOSAR ECU在单车中进行交互操作。
在过去的二十年中,AUTOSAR已成为汽车行业开发SWC的最重要标准之一,因为它支持在各种ECU上分布式开发和部署SWC。同时,基于模型的开发方法(Model-based Design)已成为许多行业和组织的标准开发方法,当然也包括汽车行业。在这一点上,我们不得不提到汽车行业通用的主流建模框架如Simulink以及TargetLink和Embedded Coder等代码生成框架在Classic和Adaptive平台上都集成了对AUTOSAR的支持。与此同时,当我们考虑基于模型的软件开发或者通用的软件开发时,我们需要考虑全面的模型静态分析的方法,进而在模型和代码层面确保相关软件的质量。
另外,软件安全本身一方面是我们对汽车产品的基本要求,汽车软件的开发同样需要遵循安全标准的相关要求,例如安全相关的汽车软件开发必须符合ISO 26262的标准。模型软件的质量保障需要专业的质量保障工具,如行业中普遍应用的MES模赛思公司的 MES Model Examiner工具提供了综合全面的静态分析的质量保障。
MES模赛思的MES Model Examiner® (MXAM)如何支持我们进行模型的静态分析?
首先我们先来简要概述一下MXAM的工作流。MXAM的工作流主要包括:新建或打开一个现有项目,选择模型和设置规则文档,运行分析,查看结果,修复批注,保存并导出合规性报告。其具体过程详见图1。
MXAM支持多种模型类型的检查。这个模型可以是Simulink模型,也可以是dSPACE TargetLink模型,MXAM还支持ASCET模型的检查。新建或打开MXAM模型检查项目,可在GUI下自动获取当前Simulink中处于活动状态的模型,如图2所示。当然在持续集成环境中,我们还可以通过编辑Windows或MATLAB脚本指定待测的模型工件。
加载模型工件后,考虑在静态模型分析方法中要验证哪些规则,MXAM项目中的规则以规则文档的形式设置和管理。规则文档即源于行业企业标准的建模规范,例如在MES模赛思的规则库中,我们可以看到源于各主流行业企业的建模规范文档,MES质量工具为各指南专门开发了相应的规则检查例程。比如我们要进行功能安全项目的模型分析,那么我们可以选择与功能安全相关的MES功能安全规范。如果我们要验证我们的模型与MISRA规则的一致性,我们可以设置MISRA SLSF规范文档,或者如果我们使用TargetLink作为代码生成器,那我们需要选用dSPACE TargetLink建模规范中的规则。当然,除了MXAM提供的行业企业标准建模规范集,我们应根据项目实际要求合理选择设置或自定制企业或部门专用的规则文档,如图3所示。此外,关于如何选择或自定义规则方面,MXAM提供了快捷的辅助规则文档创建助手,帮助我们根据模型工作环境和项目需求快速创建专属的规则文档供企业部门管理引用,如图4所示。
运行分析前,如有必要我们还可作进一步的模型设置,如设置当前项目检查规则如图5所示。再如当模型的某些模型组件或模型要素与所分析的软件无关时,我们可以通过添加并设置忽略列表,选择性的忽略某些模型要素对某规则集的分析,如图6所示。
所以我们汽车行业的从业人员希望能够更系统地去研究开发网络安全的汽车系统。欧洲在功能安全、网络安全领域的研究项目EmbeddedSafeSec由柏林投资银行和欧洲区域发展基金会资助,专门研究如何更好地实施功能安全和网络安全的协同工程。下面我们分享一些网络安全和功能安全协同工程的框架,以及协同工程的最佳实践。
再有通过恰当的参数设置,如图7所示,我们可以更灵活地运用MXAM提供的自动化规则检查例程,满足特定项目的定制参数的模型检查需求。
完成规则集和相应参数设置后,通过MXAM工具界面的分析按钮或Simulink窗口的菜单栏或模型上下文中的MXAM命令,可进行界面可视化分析。在未启动MXAM工具的情况下,我们还可以通过运行MATLAB脚本或Windows批处理脚本进行批处理模式下的模型或工件的静态分析。MXAM在GUI和脚本命令行中高度智能化地集成在MATLAB中,如图8所示,从而实现MXAM与MATLAB的快捷互操作。
分析结束后得到分析报告,分析报告为我们提供了总体分析的概述以及展现各部分内容细节的详细描述,包含MXAM项目中所分析模型对相应设置的规则集的所有一致性结果及其完整信息。对于报告中的违规项,我们可以使用MXAM自动修复功能自动地批量修复更正模型,确保我们所建立的模型符合规则集和自定义参数设定的要求,如图9所示。
此外,MXAM提供的注释功能与标准评审流程无缝集成,支持项目中模型的评审和偏差接受机制,如图10所示。
然后,我们保存导出报告或重新运行分析,直至最后我们得到完善的模型并能根据不同需求导出对应格式的报告,如图11所示。
按照上述的工作流程,MXAM可为AUTOSAR模型审查和优化提供高效支持,尤其对于大型的复杂的Simulink/TargetLink AUTOSAR模型系统。那么当我们使用Embedded Coder或TargetLink作为我们的代码生成器时,MXAM是如何支持我们进行AUTOSAR软件模型开发过程的呢?
首先, SWC和Runnable是使用子系统建立AUTOSAR模型的基础,SWC/runnable在Simulink中建模为子系统。例如如果我们使用TargetLink建立AUTOSAR 的模型,图12示例给出TargetLink模型中的部分内容,一个AUTOSAR SWC包括若干子系统和一些接口设置,在子系统中定义Runnable算法并添加TargetLink Function模块将子系统设置为AUTOSAR Runnable,这就是TargetLink创建AUTOSAR Runnable的方式。另一方面,对于Embedded Coder,我们通常使用原子系统或Function调用子系统来进行周期性或非周期性的AUTOSAR Runnable建模。 这里我们主要关注由子系统对AUTOSAR Runnable进行建模的用例。
AUTOSAR字典给出模型与AUTOSAR设置之间的关联。 对于TargetLink,AUTOSAR设置包含在标准的TargetLink数据字典中,Simulink支持专用的AUTOSAR字典,通过AUTOSAR字典, 我们可以设置和分解SWC或Runnable项以及接口设置、应用或实现数据类型的设置。
两种代码生成器都支持往返机制,即如果在模型中导入AUTOSAR描述文件也就是ARXML,例如SWC描述,则可以生成框架模型或更新当前模型。相反,一个SWC Runnable的模型更改后可以更新对应SWC的描述。
大多数情况下框架模型中的所有要素围绕Runnable建模, SWC之外的所有其他模块仅用于仿真目的且与代码生成无关。 图13展示的用例用来分析Runnable。为此,使用MXAM的工件设置功能面板,只需添加定义待分析的Runnable工件即可。
通过MXAM GUI进行设置的过程可以在项目视图完成。如果我们希望在工件设置和SWC模型之间建立固定链接,那么我们可以使用显示在项目工件视图右下角的工件定义功能,将工件设置为工件文件,并将其添加到特定的MXAM项目,如图13左手边所示。
对于大型的复杂项目,我们通常不用MXAM的GUI,而是使用集成的工作台对SWC进行静态分析。 为此我们只需要通过m-script设置批处理分析的执行选项,作为MXAM的输入,以提供不同的Runnable子系统。在批处理分析中,如果我们查看MXAM安装目录,我们会发现安装目录下已经存在一个预设置的工作台脚本。我们需要完成的工作基本上就是设置执行选项。这样我们将分析对象限制在这四个Runnable的子系统,如图14左手边所示。
以上的设置方法属于静态的设置,我们完全可以采取动态的方法来搜索相关工件对象并运行分析。为此,我们需要确定一些常见的标识符表征的链接。这也相当容易,因为我们只需搜索Runnable的Function模块,如使用Simulink API,然后我们可以自动找到与我们的分析相关的子系统,只需分析模型中实际对应于Runnable子系统的那些要素即可。
上面我们谈到的示例内容是关于MXAM如何支持TargetLink的AUTOSAR建模。接下来,让我们具体看看MXAM如何支持我们在Embedded Coder的帮助下开发SWC模型。
在Embedded Coder中,系统目标文件设置为autosar.tlc或autosar_adaptive.tlc,为AUTOSAR用例启用代码生成,作为Embedded Coder提供的标准ERT系统目标文件的扩展设置,如图15所示。这里我们看到两个在生成SWC ARXML描述文件方面影响AUTOSAR代码生成的选项,启用AUTOSAR编译器抽象宏,使生成的代码以独立于平台的方式抽象16位平台的编译器指令,最后一个选项确定软件是否通过将矩阵实现为一维数组来支持根级的矩阵输入输出。
通常在项目中,我们希望保持对这些代码生成选项的统一设置。当然,这些统一性设置也适用于AUTOSAR代码生成选项。MXAM怎样支持我们呢?MXAM通过提供检查例程mes_cgec_9004检查代码生成选项中相关设置的一致性。其检查的原理是通过附带的一个专用的自动检查例程查看excel列表中的所有代码生成选项的预设值,特别是对于AUTOSAR相关设置项,并将模型的值与此excel工作表中的给定值进行比较,对违反一致性的设置项给出警示并可实现自动设置修正。相关选项的预设属性值可以根据我们的需求进行设置。
我们需要了解的重要信息是MXAM支持AUTOSAR模块用于应用软件模型到代码生成的过程,特别是对于AUTOSAR库例程中的查表库,进一步查看Simulink自带的AUTOSAR模块库,如图16所示,这些用于AUTOSAR额外封装的查表例程模块主要包括曲线查表,曲线预查表,映射查表,映射预查表等。代码生成时,AUTOSAR例程将替换这些库模块。
模块的属性设置会对AUTOSAR代码产生直接的影响,如果我们查看这些模块的相应属性,如图17所示,那我们会发现这些不过是查表模块库中带封装和对话框的标准模块,并且封装与模块参数之间数据类型得以同步,MXAM支持正确地读取相应模块属性, 因此可完全支持Simulink的AUTOSAR查表库例程模块集的代码生成过程。
在Embedded Coder的情况下,Simulink使用右侧描述的数据类型,与AUTOSAR平台类型之间存在固定映射关系。如表1所示。
因此在Embedded Coder的代码生成框架下MXAM并不需要区分AUTOSAR和non-AUTOSAR模型,这对于数据类型一致性的检查等实施场景非常重要,比如对于MAB规则检查check na_0002,布尔量信号的端口只能用布尔量信号而不是数值信号来馈送。 现在,这条规则在MXAM中已经集成为标准库的规则,MXAM完全支持Embedded Coder中AUTOSAR代码生成过程中的数据类型映射机制,其描述如图18所示。
在TargetLink模型框架下,TargetLink AUTOSAR模块库用于AUTOSAR代码生成。TargetLink AUTOSAR模块库(图19)中我们可以看到通用的接口,输入输出端口和总线、TargetLink数据存储模块、TargetLink runnable模块、SWC接收方端口和发送方端口模块等。此外,还有接收方和发送方comSpeck模块,用来与RTE进行仿真交互。 MXAM支持TargetLink AUTOSAR模块库中的模块用于Classic和Adaptive平台的应用开发。
TargetLink的AUTOSAR用例方法与Embedded Coder略有不同,TargetLink允许从同一个模型为AUTOSAR和non-AUTOSAR用例生成代码。 我们可以理解为TargetLink AUTOSAR库中所有相关模块接口设置包含两个层面的设置,如输入输出端口模块和数据存储模块的接口设置中包含标准的输出端口的接口设置和AUTOSAR接口设置,我们还可以看到这些模块中的数据设置也有所不同。例如图 20中的AUTOSAR模块设置,开发人员已经选择了使用平台数据类型如int16,以及固定的LSB。
而同时如图21中non-AUTOSAR设置标签下,设置了不同的数据类型和缩放比例。 总而言之,在TargetLink AUTOSAR和non-AUTOSAR情形下可以并行指定数据,当然,这些指定的数据可能不同。
对于静态分析工具的MXAM如何处理这些AUTOSAR模块?事实上MXAM会自动区分AUTOSAR和non-AUTOSAR用例,并且MXAM分析模块数据设置或用于静态分析的决策基于AUTOSAR代码生成模式和所分析的模块的AUTOSAR设置。如图22所示的TargetLink主对话框中设置的代码生成模式设置为Classic AUTOSAR。
如图23中所示的相应模块的AUTOSAR模式设置,这两处设置都必须针对AUTOSAR进行,以便MXAM可采用相应的AUTOSAR设置。其他情况下,我们希望尽量保持与标准代码生成的一致性,或者说对于标准用例,MXAM自动采用输出端口设置的模块数据。
这里我们介绍一个简单的样例设置分析。对于MXAM规则库中的na_0002规则,规则要求逻辑信号不得连接到对数值信号操作的模块。例如关注图24中的Product模块,按照规则要求,该模块的第一端口应满足端口信号须为数值信号,而由于在源信号的设置中总线输入模块的设置成了布尔信号(如图24)。MXAM中进行静态分析获得的结果会有所不同,具体取决于我们在模型中设置的代码生成模式类型。
让我们再深入检查一下相关设置。我们在这里有uint16定义。
如果设置为标准模式,同时相应信号提供端口设置为布尔类型时,就会出现违反na_0002规则要求的情况,如图29所示。 通过静态分析工具MXAM的检查,报告中得到违规项结果如图,描述为端口应由数值信号输入,实际设置为布尔值。
如果还记得有关Embedded Coder代码生成选项的设置内容,那么对于TargetLink的设置也是类似的。如图31中所示我们看到的是Classic AUTOSAR平台的TargetLink代码生成选项的相关设置会影响RTE API调用方式。所以在TargetLink代码生成之前对相关Runnable进行接口设置的检查显得尤其重要。
此外,我们的实际项目中可能具有对代码生成设置项的特定设置要求,自动检查例程可通过MXAM库中规则mes_cgtl_9002检查所需的预设值,相关设置项的自定义设置参看规则中描述的excel参数表附件如图32所示。当然,对于Simulink/Embedded Coder,我们会看到类似的参数表。
对于AUTOSAR模型的静态分析的问题我们在此做个小结。首先,通过模型静态分析工具如MXAM的应用可高效地支持Adaptive和Classic AUTOSAR模型的快速分析。其次,无论是TargetLink AUOTSAR模型还是Embedded Coder AUTOSAR模型,MXAM都能支持AUTOSAR模型到代码的静态分析过程。特别对于TargetLink存在不同的设置区分AUTOSAR和non-AUTOSAR的情况,不同模块的适用数据直接基于AUTOSAR设置。如果我们已经为AUTOSAR代码生成设置了模型 ,则MXAM采用AUTOSAR设置,如果没有进行相应的代码生成设置,模型默认采用标准设置。最后我们可以通过设置MXAM自带的工具配置参数表,进行项目代码生成选项设置的自动化检查与设置修正。
最后,在模型开发早期通过引入MXAM工具,可以帮助我们的模型开发过程中及早发现模型的错误并加以修正,对于需要特殊配置的AUTOSAR模型,及早发现模型中的配置错误并自动修正,可以极大地提高模型开发的效率,保障模型到生成的代码质量,以及符合ISO 26262功能安全标准的一致性要求。