如何使用Simulink进行ISO 26262项目
作者:Tom Erkkinen, MathWorks
从事传统汽车和自动驾驶汽车安全相关嵌入式系统工作的汽车工程师正在寻找有效的方法来实现ISO规定的严格流程®26262[1],乘用车开发功能安全标准。
随着媒体对自动驾驶汽车的关注,也不乏建议。但是,这一建议往往侧重于最新的编码方法或清除错误的工具。正如行业专家早就认识到的那样,安全更多的是关于正确的系统及其需求,而不是软件及其编码方式。
以连续和离散时间仿真为骨干,基于模型的设计与Simulink®在前往试验场或进行车队测试之前,您可以在各种驾驶条件和故障场景下设计和测试完整的系统。它还支持ISO 26262规定的过程活动,包括工具鉴定。IEC认证工具包详细说明了这一支持,并提供了来自国际认证机构TÜV SÜD的工具证书和报告。
本文介绍了在ISO 26262项目中使用Simulink的TÜV SÜD-approved工作流程。它介绍了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支持其他工具的双向跟踪,包括Microsoft®词®,微软Excel®,以及IBM®理性的®门®.需求的实现和验证状态在需求工具箱中被监视和管理。需求链接可以出现在生成的代码中(图3)。
设计建模
正如在“ISO 26262和基于模型的设计”一节中提到的,ISO 26262描述了功能模型从高级可执行规范到可用于生产代码生成的详细设计的演变过程。典型的修改和改进包括:
- 使用Simulink Control Design™离散化工具将块从连续时间(S域)转换为离散时间(Z域)
- 使用定点设计器™将数据从双精度转换为单精度或定点
- 使用statflow添加诊断、模式逻辑、状态机和调度®
对于ASIL B到D, ISO 26262强烈建议使用建模指南,为此,您可以使用MAB风格指南[4]和Simulink中提供的ISO 26262的高完整性指南。Simulink Check™自动检查这两个指南。它可以在编辑时标记问题,例如插入不兼容的块。您还可以包含自己的指导方针和检查,也可以配置为编辑时检查。
代码生成
ISO 26262规定“软件单元的实现包括源代码的生成和转换为目标代码。”要实现这一点,您可以使用嵌入式编码器®从Simulink模型生成C、c++和AUTOSAR代码。本代码符合MISRA C的要求®:2012自动编码指南[5]。ISO 26262指出,基于模型的设计的代码指南和手册代码可能不同,并列出了MISRA®举个例子。
IEC认证套件为C、c++和AUTOSAR的Embedded Coder(包括ASIL A到D)提供了工具资格支持。其TÜV SÜD认证报告指出:
嵌入式Coder满足ISO 26262关于工具支持和自动化的要求。
嵌入式编码器通常应用于以下三种用例之一:
- 为用于生产代码生成的模型生成C代码
- 为用于生产代码生成的模型的AUTOSAR应用软件组件生成C代码和描述文件
- 为用于生产代码生成的模型生成c++代码
嵌入式Coder提供了优化代码内存和速度的选项。此外,您可以生成特定于处理器的优化,利用硬件加速器(如SIMD)®的手臂®和英特尔®.您可以使用ISO 26262中所述的模型到代码、处理器在环(PIL)测试,验证优化的代码是否与规定公差内的模拟结果相匹配。
可执行的目标代码是使用编译器和链接器从生成的源代码生成的。IEC Certification Kit中的工作流允许编码器、编译器和处理器优化,这对于大规模生产ecu至关重要,只要使用PIL测试来验证可执行的目标代码。
设计验证
ISO 26262推荐了许多用于验证软件设计和实现的静态和动态方法,包括单元级和集成级活动。对于基于模型的设计,它指出“根据软件开发过程,测试对象可以是源自此模型的代码,也可以是模型本身。”
Simulink Test™为Simulink中的ISO 26262验证和验证活动提供了一个框架。您可以使用它为模型和从模型生成的代码编写、管理和执行系统的、基于模拟的测试。图4显示了一个示例测试序列和评估块。
IEC认证工具包中的TÜV SÜD报告(适用于ISO 26262)阐明了Simulink测试在自动化验证和验证中的作用:
[Simulink Test]允许对Simulink模型和生成的代码进行核心验证和验证活动的自动化。以下用例反映了根据功能安全标准ISO 26262在软件开发过程中所需的活动:
- 开发和执行Simulink模型的测试
- 开发和执行用于模型和代码之间背靠背测试的测试
- 测试结果的评估
- 生成测试报告
- 识别需求和测试用例之间的可追溯性
ISO 26262推荐结构覆盖分析,以确定测试的完整性和识别意想不到的功能。它列出了三种提高严密性的方法,强烈建议ASIL-D使用最后两种方法。
- 语句覆盖
- 分支覆盖
- MC / DC覆盖
该标准指出,对于基于模型的设计,“结构覆盖的分析可以在模型级别上使用类似的模型结构覆盖度量来执行。”它继续指出,如果结构覆盖不足,”应指定额外的测试用例或提供基本原理。”
Simulink Coverage™为模型和生成的代码提供了结构覆盖,并且可以很容易地使用Simulink test进行测试执行。如果您的模型覆盖率不够,您可以使用Simulink Design Verifier™自动生成额外的测试用例来实现所需的覆盖率,包括MC/DC。Simulink Check包括模型测试仪表板,用于评估基于需求的测试用例和结果的完整性和质量度量,符合ISO 26262-6:2018,第9.4.3条和第9.4.5条(图5)。
IEC认证套件提供工具资格支持,TÜV SÜD证书和报告,用于Simulink检查,Simulink覆盖(包括模型和代码覆盖),Simulink设计验证器和Simulink测试。
代码验证
ISO 26262为验证软件设计和实现提供了多种选择。IEC Certification Kit中描述的一种方法允许进行有限的跟踪检查,以检测生成代码中的非预期功能,例如未跟踪到块或信号的代码。工具包自动为此目的生成跟踪矩阵。或者,您可以在软件在循环(SIL)测试期间使用Simulink coverage比较模型覆盖率和代码覆盖率,或者您可以使用Simulink code Inspector™。
最后,您可以使用Polyspace Bug Finder™检查MISRA合规性。如果您的项目混合了生成的和手动编码的软件,使用MISRA检查和代码覆盖分析尤其有用。为了更加严格,您可以使用Polyspace Code Prover™来证明没有运行时错误,例如除零。
IEC认证套件为Polyspace提供工具资格认证支持,包括TÜV SÜD证书和报告®2022世界杯八强谁会赢?产品。
在编译和生成可执行代码之后,您可以使用PIL测试在目标处理器上执行的代码上重用模型测试(图6)。
ISO 26262强烈推荐对asil C和d进行背靠背测试。它指出了在具有代表性的目标硬件环境中进行测试的重要性,并强调需要了解测试和硬件环境之间的差异:
测试环境和目标环境之间的差异可能出现在源代码或目标代码中,例如,由于处理器的数据字和地址字的位宽不同。
但是每个计算机科学家都应该知道[6],不同平台之间有许多潜在的数值差异来源,特别是浮点数据。有些开始时很小,但逐渐积累和发展,特别是在反馈控制系统中。因此,ISO 26262列出了用于背靠背测试的各种在环方法:
软件单元测试可以在不同的环境中执行,例如:
-model-in-the-loop测试;
-software-in-the-loop测试;
-processor-in-the-loop测试;和
-hardware-in-the-loop测试。
Simulink测试自动化在环测试,包括SIL和PIL与嵌入式Coder和HIL与Simulink实时™,并提供通过/失败报告与覆盖率指标从Simulink覆盖。
工具资格
ISO 26262-8描述了额外的支持过程,包括变更控制、配置管理和文档。这些过程分别由Simulink Projects、Simulink模型差分和合并以及Simulink Report Generator™支持。
该标准还提供了工具分类和鉴定指导。它不允许工具供应商对他们自己的工具进行限定,但要求用户对特定项目的工具进行限定。IEC认证套件通过提供典型用例、参考工作流程、工具分类分析、软件工具文档、工具确认计划和验证测试,有效地对工具进行资格预审。
TÜV SÜD审查和审计MathWorks®工具开发和质量过程,以及错误报告功能,并在每个产品发布时验证结果。IEC认证套件包括这些TÜV SÜD证书和报告,这些证书和报告是基于需要遵循适当的验证和验证工作流程。该工具包提供了基于典型工具用例的参考工作流,例如本文中强调的那些。
该工具包提供了更详细的信息,包括ISO 26262目标到Simulink支持功能的映射(图7)。
2018年12月发布的ISO 26262第二版指出,Simulink和Stateflow适用于软件体系结构和软件单元设计符号,并作为自动代码生成的基础(图8)。
请注意,使用合格的工具并不能确保所考虑的软件或系统的安全。
ISO 26262
ISO 26262是针对乘用车[1]的国际功能安全标准。它解决了与安全相关的电子/电气(E/E)系统故障可能引起的危险。它使用汽车安全完整性级别(ASIL)作为风险分类标志,范围从a到D,其中ASIL D表示最高完整性级别。本标准共分九个规范性部分,第十部分为导则。每个部分都作为单独的文档提供。ISO 26262是基于目标的,本质上不是规定性的,但它包括数百页的指导。第4、6和8部分分别针对系统[ISO 26262-4]、软件[ISO 26262-6]和工具鉴定[ISO 26262-8]。
2022年出版的
参考文献
-
ISO 26262道路车辆-功能安全
-
南希·g·莱韦森,设计一个更安全的世界,系统思维应用于安全
-
ISO 26262-6 -第6部分:软件级产品开发
-
大卫·戈德堡每个计算机科学家都应该知道的浮点运算