如何将Simulink应用于ISO 26262项目
作者 Tom Erkkinen, MathWorks
研究传统汽车和自动驾驶汽车嵌入式安全系统领域的汽车工程师正在寻找有效方式满足ISO 26262 [1]严苛的流程标准:乘用车研发领域的功能安全标准。
自动驾驶汽车是所有媒体关注的焦点,有关其功能安全方面的建议层出不穷。虽然如此,这些建议主要集中于最新的编码方式或消除错误的工具。行业专家很早便认识到,保证安全主要是确保系统及其相关要求正确和适当,而软件及编码方式[2]次之。
以连续时间和离散时间仿真为基础的Simulink®可实现基于模型的设计, 该工具不仅能够用于辅助设计车辆,还能在车辆进入道路测试或车队测试之前,提前在各种驾驶条件下对整个系统进行测试,并仿真各种故障情况。此外,该工具还支持ISO 26262规定的流程活动,包括工具认证。IEC Certification Kit对该工具支持的功能进行了详细说明,还包括了国际认证机构TÜV SÜD提供的证书和报告。
本文将介绍经TÜV SÜD认证、将Simulink应用于ISO 26262项目的工作流程,还将介绍ISO 26262以及基于模型的设计,并对下列任务进行说明:
- 需求开发
- 设计建模
- 代码生成
- 设计验证
- 代码验证
- 工具认证
ISO 26262和基于模型的设计
ISO 26262包含用于人工设计编码和基于模型的设计的指南。此外,ISO 26262还认可一些采用基于模型设计[3]的优势:
使用无缝模型能够有效保证一致性,提高研发效率。
该标准提及“广泛使用”数学模型,同时指出利用建模工具将“半形式化的图形方法”应用于软件开发。该标准还指出建模不仅可获取要实现的功能(嵌入式软件),还可通过真实的物理系统(车辆模型和环境模型)的仿真来创建整个系统模型:
由此,便能够以可接受的计算速度构建高保真度、高复杂度的车辆系统以仿真接近于实际的行为。在开发过程中,车辆/环境模型将逐渐被实际系统及其环境替换,而功能模型将作为设计基准,通过生成代码将嵌入式软件应用于控制单元。[3]
图1为典型Simulink闭环系统模型。它由控制器、被控对象以及信号处理器组成。在ISO 26262中,系统设计规范不仅是软件开发的输入,更是保证系统安全的基础[2]。
随后进行系统详细设计,直至其成为包含足够细节的、可用于产品级代码生成的软件设计基准。ISO 26262将这个模型的详细设计流程描述为“模型进化”[2]:
在实践中,[存在] 功能模型的进化:从早期规范模型(设计模型)到可实施模型,最终自动转换为代码
ISO 26262推荐了各种基于汽车安全完整性等级(ASILs)的活动的实施方法。您可以根据您的应用场景,利用该指南建立适当的工作流程。图2所示为ISO 26262流程概览。实心箭头所示为开发活动,虚线箭头所示为验证和确认活动。ISO 26262中提及的“模型进化”以椭圆形虚线(…)表示。
需求开发
在实施安全相关开发流程时,应首先制定功能及安全需求。ISO 26262建议您利用“软件架构设计和软件安全需求之间的双向可追溯性”对软件架构的设计进行验证。为此,您可以利用Requirements Toolbox™制定并追踪需求到模型、测试及代码。Requirements Toolbox支持对其他工具的双向追溯,包括Microsoft® Word®、Microsoft Excel®以及IBM® Rational® DOORS®。需求的实现和验证状态可在Requirements Toolbox中监测和管理,需求链接可显示在生成的代码中(图3)。
设计建模
正如”ISO 26262和基于模型设计”章节所述,ISO 26262说明了功能模型从高层可执行规范进化为可用于产品级代码生成的详细设计的整个流程。典型修改和完善包括:
- 使用Simulink Control Design™ 离散化工具将模块从连续时间(S域)转换为离散时间(Z域)
- 使用Fixed-Point Designer™将数据从双精度转换至单精度或定点
- 使用Stateflow®添加诊断、模式逻辑、状态机以及调度算法
对于ASIL B至D,ISO 26262强烈建议使用建模指南。此外,还可使用MAAB风格指南[4],以及Simulink提供的用于ISO 26262的高完整性指南。Simulink Check™可自动检查两种指南。Simulink Check可在编辑时显示问题,例如不合规模块的插入等。此外,还可加入自定义指南和检查。
代码生成
ISO 26262声明“软件单元的实施包括生成源代码以及转换为目标代码”。为此,您可以利用Embedded Coder®生成Simulink模型的C、C++以及AUTOSAR代码。该代码符合MISRAC®:2012自动代码指南[5]要求。ISO 26262指出基于模型设计的代码指南和手工代码指南存在差异,并以MISRA®为例进行说明。
IEC Certification Kit可为用于C、C++以及AUTOSAR的Embedded Coder(包括ASIL A-D)提供工具认证支持。其TÜV SÜD证书报告做出了如下声明:
Embedded Coder满足ISO 26262中关于工具支持及自动化的要求。
Embedded Coder通常用于以下三种使用案例之一:
- 产生用于生成生产代码的模型C代码
- 产生用于生成生产代码模型的AUTOSAR应用软件组件C代码和说明文件。
- 产生用于生成生产代码的模型C++代码
Embedded Coder提供了优化代码存储和速度的选项。此外,您还可以生成处理器专用优化代码,从而有效利用硬件加速器,例如用于 ARM®和Intel®的SIMD®。您可以通过ISO 26262中所述的模型至代码、处理器在环测试验证优化代码是否与规定公差内的仿真结果匹配。
可执行目标代码使用编译器和链接器从生成的源代码中产生,IEC Certification Kit中的工作流程允许代码生成器、编译器和处理器的优化,这对于大批量生产的ECU非常关键,而处理器在环测试可用于验证可执行的目标代码。
设计验证
ISO 26262推荐了一些用于验证软件设计和实施的静态方法和动态方法,包括单元级和集成级活动。关于基于模型的设计,ISO 26262指出“测试对象可以是源于模型的代码或模型自身,具体取决于软件开发流程“。
Simulink Test™提供在Simulink中进行ISO 26262验证和确认活动使用的框架。您可以将其用于制定、管理以及执行针对模型和模型生成代码的系统化仿真测试。图4为测试序列和评估模块的示例。
IEC Certification Kit(适用于ISO 26262)中的TÜV SÜD报告明确了自动验证和确认期间Simulink Test的作用:
[Simulink Test]可自动对Simulink模型和生成的代码执行核心认证和确认活动。根据功能安全标准ISO 26262,以下使用案例反应了软件开发期间需要完成的活动:
- 开发和执行Simulink模型测试
- 开发和执行模型与代码之间的背对背测试
- 评估测试结果
- 生成测试报告
- 识别需求和测试用例之间的可追溯性
ISO 26262建议通过结构覆盖率分析确定测试的完整性,识别非预期功能。此外,ISO 26262还列出提高安全度的三种方法,并强烈建议将最后两种方法用于ASIL-D。
- 语句覆盖
- 分支覆盖
- MC/DC覆盖
关于基于模型的设计,该标准指出:“可在模型级下使用类似结构覆盖率度量方法,对模型进行结构覆盖率分析”。对于结构覆盖率不足的情况,该标准指出:“应指定附加测试用例或提供合理性说明。
Simulink Coverage™ 针对模型和生成的代码提供结构覆盖度量功能,使用Simulink Test执行测试可轻松启用该功能。若模型覆盖率不足,您可以使用Simulink Design Verifier™自动生成其他测试用例以达到所需覆盖率,包括MC/DC。此外,Simulink Check还能够识别重复模块以降低复杂度。它也包括度量仪表板以评估项目质量,满足ISO 26262要求:“使用低复杂度、限制大小的软件组件和接口“(图5)。
IEC Certification Kit提供工具认证支持,以及针对Simulink Check、Simulink Coverage(包括模型和代码覆盖率)、Simulink Design Verifier以及Simulink Test的TÜV SÜD证书和报告。
代码验证
ISO 26262提供了一些用于验证软件设计和实施情况的方法。IEC Certification Kit中介绍了一种用于检测已生成代码(例如,无法追踪至模块或信号的代码)中非预期功能的有限追溯审查方法。该套件可自动生成所需追溯矩阵。或者,在进行软件在环(SIL)测试期间,您可以使用Simulink Coverage将模型覆盖率与代码覆盖率进行比较,或直接使用Simulink Code Inspector™。
最后,您可以使用Polyspace Bug Finder™检查是否符合MISRA要求。如果您的项目中含有自动代码和手工的混合代码,采用MISRA检查和代码覆盖分析方法非常有帮助。若对安全性要求较高,您可以使用Polyspace Code Prover™ 以证明不存在运行时错误,例如除零错误。
IEC Certification Kit提供用于Polyspace®产品的工具认证支持以及TÜV SÜD证书和报告。
在编译和生成可执行代码后,您可以利用PIL测试重用模型测试验证目标处理器上执行的代码(图6)。
ISO 26262强烈推荐对ASIL C和D执行背对背测试。此外,ISO 26262还指出在目标硬件环境的替代环境下测试的重要性,并强调需要了解测试环境和硬件环境之间的差异。
源代码或目标代码不同,例如处理器数据和地址的不同字长,可能导致测试环境和目标环境之间出现差异。
但正如每位计算机科学家都应了解的事实[6] -跨平台存在许多潜在的数值误差,特别是浮点数据。某些数值误差起初很小随后逐渐累积和增大,这种情况在反馈控制系统中特别明显。因此,ISO 26262列出了各种适用于背对背测试的在环测试方法:
可在不同环境下执行软件单元测试,例如:
—模型在环测试;
—软件在环测试;
—处理器在环测试;以及
—硬件在环测试。
Simulink Test可以自动执行在环测试,包括使用Embedded Coder执行SIL和PIL,使用Simulink Real-Time™执行HIL,通过Simulink Coverage中的覆盖率度量功能提供通过/失败报告。
工具认证
ISO 26262-8还对其他流程进行介绍,包括版本控制、配置管理以及文件编制。同时,这些流程分别由Simulink Project,Simulink模型差异识别和合并,以及Simulink Report Generator™提供支持。
此外,该标准还提供工具认证指南。该标准不允许工具供应商认证自身工具,但要求用户对于特定项目认证工具。IEC Certification Kit通过提供典型使用案例、参考工作流程、工具分类分析、软件工具文档、工具认证报告和确认测试,从而对工具进行有效的预认证。
TÜV SÜD审查及审核MathWorks工具的开发和质量流程、错误报告功能,以及认证每次产品发布的结果。IEC Certification Kit包含这些TÜV SÜD证书和报告,可用于遵守适当的验证和确认工作流程的需要。该套件提供基于典型工具使用案例(例如本文中突出显示的)的参考工作流程。
此外,该套件还提供一些更为详细的信息,包括将ISO 26262目标映射至Simulink的支持功能(图7)。
发布于 2018 年 12 月的 ISO 26262 第二版中已指出,Simulink 和 Stateflow 适合用于软件架构和软件单元设计批注,并且可以作为自动代码生成的基础(图 8)。
注意,需要考虑使用已认证的工具不能保证软件或系统的安全性。
ISO 26262
ISO 26262是乘用车的国际功能安全标准[1]。它明确了与安全相关的电子/电气(E/E)系统在出现故障时可能导致的危险。ISO 26262按照风险类别将汽车安全完整级别(ASIL)分为四级:从A至D,ASIL D为最高完整级。该标准有九个标准章节,而第十章为指南。每个章节均以独立文件呈现。ISO 26262在本质上是目标导向而非规范,但ISO 26262中包含有数百页指南内容。第4、6和8章节分别介绍系统[ISO 26262-4]、软件[ISO 26262-6]和工认证具[ISO 26262-8]。
ISO 26262第一版于2011年发布。第二版预计于2018年发布(ISO 26262:2018)。第二版将涉及其他类型车辆标准,例如摩托车、卡车和公交车。此外,第二版还包含有关于半导体(器件)的全新指南。
出版年份 2018
参考文献
-
ISO 26262 道路车辆 - 功能安全
-
Nancy G. Leveson, Engineering a Safer World, Systems Thinking Applied to Safety
-
ISO 26262-6 — Part 6: 软件级别的产品开发