try ai
科普
编辑
分享
反馈
  • 软件在环(SIL)测试

软件在环(SIL)测试

SciencePedia玻尔百科
核心要点
  • 软件在环(SIL)测试通过在开发计算机上运行控制器的实际源代码,并与物理系统的仿真模型进行交互,从而验证代码的正确性。
  • 与纯粹基于模型的仿真(MIL)不同,SIL能揭示软件特有的关键问题,如数值舍入误差、数据类型限制和编译器优化等。
  • SIL是渐进式验证流程中的一个关键步骤。该流程系统地从抽象模型(MIL)过渡到最终硬件(PIL和HIL),在每个阶段逐步增强系统的置信度。
  • 高保真度SIL仿真涉及对ADC和DAC等接口缺陷进行建模,以便在涉及硬件之前测试极限环等涌现行为。

引言

在设计复杂的信​​息物理系统时,例如飞机的飞行控制系统或自动驾驶汽车的大脑,我们如何能保证控制软件在与真实且风险极高的硬件交互之前是正确的?在未经证实的物理样机上测试代码,其所带来的巨大风险和成本构成了一项重大的验证挑战。解决方案在于一个循序渐进的测试方法,即通过逐步用真实组件替换仿真组件来建立置信度并确保安全。

本文深入探讨了这一至关重要的验证过程,并特别关注软件在环(SIL)测试。首先,在“原理与机制”部分,我们将剖析从纯抽象的模型在环(MIL)阶段到最终的硬件在环(HIL)“彩排”的整个测试流程,解释每个步骤验证的内容及其原因。随后,“应用与跨学科联系”部分将探讨SIL如何充当一个虚拟实验室,用于构建未来的先进系统(从自动驾驶汽车到智能电池),并重点介绍其与控制理论、数据科学和信号处理的联系。

原理与机制

想象一下,你的任务是为一架新飞机设计飞行控制系统。你的控制器是一个复杂的软件,一个数字大脑,它必须在微秒内对来自数百个传感器的数据做出反应,并不断进行调整以保持飞机稳定和航向正确。你如何能毫无疑问地确定你的设计会奏效?你不能简单地将代码上传到一个价值数百万美元的真实原型机上,然后祈祷一切顺利。风险是巨大的。这是信息物理系统面临的核心挑战,其解决方案是一段循序渐进的美好验证之旅,一个有条不紊地用现实逐一取代幻想的过程。这个旅程通常由一系列阶段来描述:模型在环、软件在环、处理器在环和硬件在环。

完美蓝图之梦:模型在环 (MIL)

每一个伟大的创造都始于一个想法。对工程师而言,这个想法以​​模型​​的形式呈现——即一组描述系统应有行为的数学规则。我们想要控制的物理系统,即被控对象(比如我们的飞机),可以用微分方程来描述,例如,一个简单的线性模型 x˙p(t)=Apxp(t)+Bpu(t)\dot{x}_p(t) = A_p x_p(t) + B_p u(t)x˙p​(t)=Ap​xp​(t)+Bp​u(t)。我们的控制器也是一个模型,一个定义策略的纯算法,例如,如何根据测量的状态 x[k]x[k]x[k] 计算控制信号 u[k]u[k]u[k]。

当我们在计算机上同时对被控对象模型和控制器模型进行仿真时,我们就在进行​​模型在环 (MIL)​​ 测试。在这个阶段,一切都是抽象的。我们处在一个完美的、柏拉图式的数学世界里,仿真环境为我们求解运动方程。这里没有实时性期限,没有处理延迟,数字的精度也达到了我们计算机所能达到的最高水平。

MIL是我们测试想法原始逻辑的沙盒。我们的控制策略在原则上是否合理?它在根本上是否稳定?这就像一位航空工程师在纸上运用物理定律设计新的机翼形状。计算可能表明机翼应该能产生升力,但还没有切割任何金属,也没有真正的风吹过它的表面。MIL回答了第一个也是最基本的问题:“我们的核心想法好不好?”

从蓝图到代码:软件在环 (SIL)

一个想法,无论多么优雅,都不是产品。为了让我们的控制器变为现实,我们必须将其抽象模型转化为计算机可以执行的语言,通常是通过生成C或C++等语言的源代码。这是我们从纯数学世界迈向杂乱的计算现实的第一步。

当我们把这些生成的代码编译后,在我们的开发计算机上运行,并与被控对象的仿真模型进行交互时,我们就在进行​​软件在环 (SIL)​​ 测试。现在,你可能会问:“如果代码是从我们刚刚测试过的模型自动生成的,那又有什么区别呢?它的行为不应该完全相同吗?”这是一个极具洞察力的问题,其答案揭示了隐藏复杂性的第一层。

从理想模型到编译代码的转换过程并非完美。它引入了在MIL中看不见的、微妙但关键的产物:

  • ​​数值上的陷阱:​​ 你的台式计算机用高精度(通常是64位“双精度”)数字进行MIL仿真。然而,最终的控制器可能需要运行在只使用32位“单精度”数字的更便宜的芯片上。这种精度限制意味着每次计算都涉及到微小的舍入误差。此外,为了让代码运行得更快,编译器可能会重新排列数学运算的顺序。由于计算机算术并非完全满足结合律(即,由于舍入误差,(a+b)+c(a+b)+c(a+b)+c 并非总是完全等于 a+(b+c)a+(b+c)a+(b+c)),这些优化可能会改变最终结果。

  • ​​编译器和运行时的特性:​​ 控制器软件并非存在于真空中。它由特定的编译器编译,并使用主机的运行时库(例如,用于对数或三角函数等数学函数)运行。SIL测试的是在这种上下文中的实际软件产物,而不仅仅是抽象的数学方程。

在SIL中,我们不再是测试蓝图;我们是在校对完成的指令手册。我们正在检查从想法到代码的转换是否忠实。

接口的艺术:高保真度仿真

一个好的SIL配置的关键部分是让软件控制器和仿真被控对象之间的交互尽可能真实。真实的控制器将存在于一个带有物理线路的金属盒中。它通过​​模数转换器 (ADC)​​ 从外部世界接收信息,并通过​​数模转换器 (DAC)​​ 发送指令。这些接口并非完美、透明地通向世界的窗口。

例如,一个ADC执行两个关键操作:它在离散的时间点(例如,每毫秒)​​采样​​来自传感器的连续信号,并对测量值进行​​量化​​,将其“捕捉”到最接近的可表示数字水平。想象一个平滑的斜坡,一个量化后的信号看起来就像一个阶梯。DAC则做相反的事情,将数字指令转换为物理信号,通常在一个采样周期内将值保持恒定,这被称为​​零阶保持器 (ZOH)​​。

为了进行高保真度的SIL测试,我们必须对这些缺陷进行建模。最符合原理的方法是用ADC和DAC的模型来“包装”我们的连续被控对象模型。控制器代码本身保持不变,它相信自己正在与真实世界交互。这种方法至关重要,因为量化的非线性行为,当置于与被控对象动态的反馈回路中时,可能会引起​​极限环​​等涌现现象——这些微小、持续的振荡在理想化的MIL仿真中是完全看不见的。

这就引出了一个深刻的问题:​​保真度​​,即我们的仿真与现实的匹配程度有多高?我们的SIL仿真总误差可以严格地分解为不同的来源:

  1. ​​结构误差:​​ 我们对被控对象(例如飞机的物理特性)的基础模型本身是否正确?
  2. ​​接口误差:​​ 我们的ADC、DAC和其他通信中间件模型引入了多少误差?
  3. ​​数值误差:​​ 仿真引擎的求解器本身带来了多少误差?它使用有限的时间步长来近似连续动态。

理解这种分解表明,构建仿真本身就是一门科学。这是一个严格的误差预算过程,确保我们相信仿真给出的答案。

迈向现实之旅:PIL与HIL

SIL相比MIL是一个巨大的飞跃,但它有一个明显的盲点:控制器代码运行在一台功能强大的通用台式计算机上,其处理器和操作系统与最终产品中的小型、专用且成本优化的嵌入式芯片完全不同。为了弥合这一差距,我们必须继续我们的旅程。

下一步:处理器在环 (PIL)

在​​处理器在环 (PIL)​​ 中,我们使用实际目标处理器的工具链来编译我们的控制器代码。然后,我们在真实的芯片上运行这个二进制文件,该芯片安装在我们桌上的开发板上。处理器是真实的,但它仍然连接到在主机上运行的被控对象仿真,通常通过USB或以太网等通信链路连接。

这一步是具有启发性的。我们第一次将我们的代码暴露在它本应生存的真实环境中。我们发现了一类在SIL中隐藏的新的潜在问题:

  • ​​目标平台特定效应:​​ 嵌入式芯片的编译器可能会生成不同的机器代码。芯片本身具有独特的微架构,有自己的流水线、缓存和内存系统。我们代码的性能——其实际执行时间——由这些错综复杂的硬件细节决定。
  • ​​实时行为:​​ 我们终于可以测量代码的​​最差情况执行时间 (WCET)​​。我们的控制算法是否足够快,能够在分配的采样周期内,比如说一毫秒 (TsT_sTs​) 内完成其计算?PIL正是我们发现代码能否满足其硬实时性期限的地方,即使考虑了调度延迟和操作系统开销。

PIL就像把我们的折叠说明书交给实际要折叠最终纸飞机的人。我们可以给他们计时,看他们是否会对任何步骤感到困惑,并确保他们能足够快地工作。

最后的彩排:硬件在环 (HIL)

我们现在处于基于仿真的测试的最后也是最全面的阶段:​​硬件在环 (HIL)​​。在这里,我们采用完整、最终形态的控制器——即包含处理器、内存、电源及其所有物理输入/输出连接器的完整电子控制单元(ECU)——并将其插入一台专门的、功能强大的实时计算机中,该计算机对被控对象进行仿真。

与PIL的关键区别在于接口。连接不再是像USB那样的抽象数据链路,而是通过​​真实的电信号​​进行。HIL仿真器具有高速DAC,可以生成模拟电压,模仿来自飞机传感器(如陀螺仪、压力传感器)的信号。它有ADC来读取控制器发出的模拟指令信号。它还有真实的CAN总线收发器来交换网络消息。

HIL是最终的彩排。它测试PIL所做的一切,并增加了最后、最关键的物理现实层:实际的硬件I/O接口。它暴露了ADC/DAC芯片中的时序延迟、信号噪声,以及从传感器测量到执行器指令的真实端到端延迟。正是在HIL中,我们才能最有信心地认为,我们的控制器,作为一个完整的物理对象,将按预期运行。

置信度与因果不变性

从MIL到SIL,再到PIL和HIL的这一进程是工程方法的一个绝佳范例。这是一个通过增量式地用真实组件替换仿真组件来减少不确定性的系统过程。我们甚至可以形式化地描述这种“增强置信度”的概念。想象一下,我们将故障分为三类:纯软件逻辑错误(λ1\lambda_1λ1​)、处理器和时序错误(λ2\lambda_2λ2​)以及物理I/O硬件错误(λ3\lambda_3λ3​)。

  • SIL可以帮助我们发现 λ1\lambda_1λ1​ 类错误。
  • PIL可以发现 λ1\lambda_1λ1​ 和 λ2\lambda_2λ2​ 类错误。
  • HIL可以发现所有三类错误:λ1\lambda_1λ1​、λ2\lambda_2λ2​ 和 λ3\lambda_3λ3​。

通过在HIL阶段进行广泛的测试,我们在系统投入实际使用前,收集到了最强有力的证据,证明我们的系统是安全可靠的。

这使我们触及了问题的哲学核心:我们为什么如此信任HIL?原因在于​​因果不变性​​的概念。真实世界由我们的控制器硬件与真实的物理被控对象交互组成。被控对象本身是我们的模型加上一些未知的、​​未建模的动态​​(Δ\DeltaΔ)。在SIL中,我们测试的因果机制——一个软件算法与一个软件模型交互——与真实世界中的机制在根本上是不同的。但在HIL中,因果链的控制器端——硬件、软件、I/O、时序——与最终产品中的完全相同。HIL保留了控制器的因果机制。因为这种机制在测试台和真实世界之间是​​不变的​​,HIL给了我们合理的信心,或称​​外部有效性​​,即我们在实验室观察到的性能将能推广到复杂、不可预测的飞行现实中。这是我们在不离开地面的情况下,所能达到的最接近飞行的状态。

应用与跨学科联系

在理解了软件在环(SIL)仿真的原理和机制之后,我们现在踏上一段旅程,去看看这个强大的理念将我们引向何方。如果说上一章是关于SIL的解剖学,那么这一章就是关于它在实际应用中的生命力。我们将看到,SIL不仅仅是一种测试技术,更是一个充满活力的交汇点,软件工程、控制理论、物理学甚至数据科学在此融合。它是一个思想的游乐场,一个虚拟实验室,让我们能够构建和理解那些复杂到令人惊叹的系统。

计算机中的世界:现代工程的点金石

在测试一个系统之前,我们必须确定测试场地。想象一下,你被委派去验证一架自动驾驶无人机的传感器融合软件——这些代码负责整合来自陀螺仪、GPS和其他传感器的数据,以确定无人机的位置和运动状态。你会一开始就把无人机送入繁忙的空域,指望能捕捉到一个小故障吗?当然不会。你需要一个受控的环境。

这就引出了一个根本性的选择:软件在环(SIL)还是硬件在环(HIL)?人们可能会天真地认为SIL只是HIL的一个更便宜、更初步的版本。但这完全没有抓住要点。它们是用于不同但同等重要任务的不同工具。HIL是彩排,最终的硬件在这里面对一个仿真的世界,揭示时序、电子噪声和驱动集成等问题。而SIL,则是深入、专注的练习环节。在这里,我们验证的是算法本身——它的逻辑,它的数学灵魂。

在SIL中,我们拥有完美的控制权。我们可以编写精确的仿真飞行序列,在某个确切的时刻制造出一阵狂风,并且,对我们的无人机示例而言最重要的是,我们可以编排一个完全可重复的GPS信号丢失序列。我们还拥有完美的可观测性;我们可以窥视算法的最内部运作,观察每一个变量和计算,这在运行中的硬件上是极其困难的。“白盒”视角对于理解算法为什么会失败,而不仅仅是它会失败,是至关重要的。对于传感器融合逻辑的初步验证,SIL是更优越的选择,正是因为它最大化了这种可控性和可观测性,使我们能够在担心真实硬件的变幻莫测之前,严格测试算法对间歇性数据丢失等挑战的响应。

信任的基石:验证虚拟世界

如果我们要信任一个虚拟世界,我们必须首先确定其物理定律是正确的。SIL仿真是建立在数值求解器之上的,这些求解器通过对微分方程进行积分来推动仿真在时间上前进。我们如何知道这些求解器是准确的?

答案在于一个优美而基础的实践:我们用一个已知的真理来测试仿真。对于许多系统,尤其是在其较简单的形式下,我们可以找到一个精确的、解析的解——一个对其随时间行为的完美数学描述。例如,我们可以用优雅的矩阵指数数学写出一个简单线性系统的精确运动。然后,我们可以使用著名的Runge-Kutta算法等数值方法对同一系统进行SIL仿真,并将数值结果与解析真理一步步进行比较。通过测量这种差异,我们可以量化我们模拟器的准确性,并建立信心,相信我们构建的虚拟世界是真实世界的忠实再现,至少在这些基础情况下是如此 [@problem-id:4246778]。这个过程是所有其他SIL应用赖以建立的信任基石。

铸就未来:从自动驾驶汽车到智能电池

有了一个可信的仿真环境,我们就可以开始设计那些曾经只存在于科幻小说中的系统。

​​对自动驾驶汽车的探索​​

考虑验证一辆自动驾驶汽车控制软件所面临的巨大挑战。汽车必须在一个广阔的“运行包线”内安全运行——这是一个包括不同速度、道路曲率和轮胎-路面摩擦水平的多维可能性空间。在现实世界中,对这些条件的所有组合进行测试在物理上和经济上都是不可能的。

在这里,SIL成为了我们不可或缺的实验室。我们可以创建一个车辆及其环境的高保真度数字孪生,然后系统地、自动地对控制器软件进行数千甚至数百万种场景的测试。我们可以将虚拟汽车推向其性能包线的边缘——例如在低摩擦的冰面上高速转弯——而不会有任何刮伤的风险。此外,由于世界是随机的,这种验证变成了一项统计性工作。我们在仿真中注入随机扰动和噪声,并进行大规模的测试活动,以高统计置信度声明安全违规的概率低于一个极小的阈值。

​​电气革命的核心:构建更好的电池模型​​

SIL不仅用于测试,它也是一个强大的创造工具。任何电动汽车或电网级储能系统的性能都取决于其电池管理系统(BMS),而BMS又依赖于对电池单元的精确数学模型——一个数字孪生。这些模型很复杂,有许多参数描述电池内部的电化学状态。

我们如何为这些参数找到正确的值?我们通过系统辨识的过程来使用SIL。我们将真实世界的数据——例如来自电动汽车的行驶循环数据——输入到SIL环境中。然后,我们使用优化算法来调整我们电池模型的参数,直到其输出(如电压)与记录的数据精确匹配。这个过程与现代数据科学和机器学习紧密相连。为了确保我们的模型不仅仅是在“记忆”它所训练的数据,我们采用复杂的交叉验证技术,保留整个行驶剖面用于验证,以证明我们的模型可以泛化到新的、未见过的情况。这使我们能够创建高度准确的电池数字孪生,它们是更高效、更安全的电池系统的基础。

为失效而工程:为鲁棒性和安全性而设计

伟大工程的标志不仅在于制造出能工作的东西,还在于制造出不会灾难性失败的东西。SIL是锻造鲁棒性的无与伦比的工具。

​​教系统自我诊断​​

要构建一个安全的系统,你必须了解它可能出现故障的所有方式。在SIL环境中,我们可以成为虚拟破坏的大师。我们可以有条不紊地向仿真中注入一整套故障分类,这些故障在真实世界中可能是危险的、破坏性的,或者无法按需制造。

对于一个电池系统,我们可以仿真一个卡在单一数值的传感器,一个缓慢潜入温度读数的偏差,或者一个对指令无响应的执行器。我们甚至可以仿真作为热失控事件前兆的微妙内部变化。通过让BMS软件经受这些仿真故障的考验,我们可以严格测试和验证其诊断逻辑——即它在灾难发生前检测问题、隔离问题并采取纠正措施的能力。这种故障注入能力是SIL在任何安全关键系统开发中最重要的作用之一。

​​在不确定的世界中保证稳定性​​

除了测试离散的故障场景,SIL还允许我们做一些更深刻的事情:证明一个系统将在整个连续的不确定性范围内保持稳定。真实世界的组件从不完美;质量、弹簧常数或电阻器的值总是会与其标称规格有轻微偏差。

通过将SIL与鲁棒控制理论的强大数学相结合,我们可以为整个系统族系认证稳定性。想象一下,我们系统的参数(如机械组件的质量、阻尼和刚度)可以在一个定义的“不确定性椭球”内变化。我们不必测试几个点,而是可以使用频域技术和小增益定理等原理来检查控制系统对于该椭球内每一种可能的参数组合是否稳定。这是从测试到验证的巨大飞跃,提供了一种稳定性的数学保证,使我们有信心在不可预测的真实世界中部署系统。

伟大的综合:跨学科联系

当我们看到SIL如何连接不同的科学和工程学科,揭示它们基本原理的统一性时,它的力量才真正显现出来。

​​信号处理与信息物理学​​

仿真不仅仅是关于系统的物理学;它也关于测量的物理学。当我们采样一个连续的、真实世界的信号以将其带入数字领域时,我们必须遵守信息定律,最著名的是奈奎斯特-香农采样定理。如果我们采样太慢,高频噪声可能会“折叠”下来,伪装成低频信号,这种现象被称为混叠,它可能会彻底迷惑像卡尔曼滤波器这样的数字估计器。

在SIL环境中,我们必须同样严谨。我们可以对传感器的连续时间噪声谱进行建模,然后设计和仿真所需的精确抗混叠前置滤波器,以便在采样前适当地“塑造”该噪声。我们可以精确计算滤波器的特性,以确保仿真中离散时间算法看到的噪声与设计要求相匹配,从而保持估计过程的完整性。这展示了控制理论、仿真和信号处理基础之间美妙的联系。

​​网络化控制与通信的挑战​​

我们越来越多的现代系统是信息物理系统,控制器和传感器通过网络进行通信。这些网络,尤其是无线网络,并非完美的信息通道;它们会引入延迟、抖动和丢包。这如何影响系统的稳定性?

SIL提供了完美的试验平台来找出答案。我们可以创建一个控制系统模型,其中传感器测量值通过一个不可靠的网络传输。通过仿真随机丢包,我们可以分析它们对例如卡尔曼滤波器估计器性能的影响。我们可以计算在连续丢失一定数量的数据包后,估计误差失控增长的概率。更重要的是,这种分析使我们能够设计和验证缓解策略,例如实施冗余通信路径,以确保此类故障的风险保持在所需的安全阈值以下。这将控制系统的世界与可靠性工程和通信理论联系起来。

从某种意义上说,软件在环仿真是现代工程师的黑板。在这里,我们可以勾勒出我们最大胆的想法,在一个由物理和信息定律支配的虚拟现实中对它们进行测试,并将它们提炼成将定义我们未来的那些鲁棒、智能和安全的系统。