科普:嵌入式代码软件在环(SiL)测试的可靠性
![科普:嵌入式代码软件在环(SiL)测试的可靠性](https://static001.geekbang.org/infoq/5a/5a26286b47bd9a2c8638b4957c0e005b.png)
01.简介
当前,嵌入式系统开发的大趋势为通过软件实现大量的硬件功能,这导致软件的复杂程度显著上升——代码开发成本和风险也成倍增加。复用已有系统中的软件组件是改进嵌入式系统生命周期的一种可能的解决方案,对代码的可移植性和可测试性有较高要求。
测试的复杂度和成本与代码量正相关,尽早发现可能存在的错误可以避免后续阶段的成本。考虑到软件开发过程的“V”型模型,在软件模块测试(Module tests)和软件集成测试(Integration tests)阶段应该使用 SiL(Software-in-the-Loop)环境。
![](https://static001.geekbang.org/infoq/bb/bb47879cf292c49bec13d50240a8b552.png)
▲嵌入式系统设计阶段的“V”模型
本文的主要目的在于横向对比应用 HiL 和 SiL 测试环境所获得的结果,以证明 SiL 测试的可靠性。本文被测嵌入式系统针对英飞凌 C167CR 单片机开发,操作系统选用的是典型的实时操作系统(RTOS,Real Time Operating System)OSEK 操作系统,被测功能为控制直流电机的转速。
02.实践 1:HIL 测试
硬件在环(HiL)测试是一种无损检测环境,常见的被测设备(Device Under Test, DUT)一般为控制器硬件,如整车控制器 VCU(Vehicle Control Unit)、电池管理系统 BMS(Battery Management System)。本实践的 HiL 测试框图如下图所示,带有 DUT 的接口板是使用 NI PCI 6251 高速多功能数据采集板完成。
![](https://static001.geekbang.org/infoq/c3/c30daeb57d4e2d0306922dc2bd09de63.png)
▲HiL 测试框图
本实践中,HiL 测试由三部分组成:
主机 PC(HOST PC):直流电机模型由 MATLAB/Simulink 实现,并使用 Real-Time Workshop 和 xPC Target 编译为 xPC 实时内核。
目标计算机:直流电机模型通过实时约束运行,模拟信号通过接口板卡转换为物理信号。
嵌入式硬件系统:被测控制算法。
A:直流电机模型
用于直流电动机建模的方程如下所示:
![](https://static001.geekbang.org/infoq/19/1947900537ee4855b2ace08de8c006fb.png)
其中,Ia 为电机电流,Va 为电机电压,Ωm 为角速度,Ra 为终端电阻,La 为终端电感,J 为惯性,b 为摩擦系数,Km 为扭矩常数,Ts 为采样周期,T 为电机扭矩,TL 为负载扭矩,Vb 为反电动势电压。
基于上述公式的 MATLAB/Simulink 离散模型实现如下图所示:
![](https://static001.geekbang.org/infoq/1c/1c2ca3a42fa6757170198b625916ef19.png)
▲直流电机的 Simulink 离散模型
B:控制算法实现
本实践所采用的控制算法选择的是工业应用最为广泛的 PID 算法(比例积分微分)。使用积分项的双线性变换法和微分项的反向变换法,即可从下列公式中获得 PID 算法的递归离散形式:
![](https://static001.geekbang.org/infoq/87/8756cf500c9c62bb4df7311f5534db52.png)
其中,K 是比例常数,τi 是积分常数,τd 是导数常数,Ts 是采样周期。
控制算法是在基于 OSEK 实时操作系统的 10 毫秒任务上实现的。角速度的测量方法如文献[2]所述,使用 HALL 传感器,在 1Hz 至 10kHz 范围内的绝对精度小于 1Hz。
03.实践 2:SIL 测试
本实践的 SiL 测试基于 OSEK 实时操作系统的仿真,测试框图如下图所示:
OSEK 实时操作系统、被测控制算法代码和 XCP 模块一起封装成一个 S 函数。
仿真操作系统、底层驱动程序、XCP 和 S 函数与 MATLAB/Simulink 模型中的直流电机模型形成闭环。
GUI:Graphical User Interface,图形用户界面。
![](https://static001.geekbang.org/infoq/35/35531be8fb2e71fc6120c44aa99e37a1.png)
▲SiL 测试框图
XCP 主要用于测量和校准嵌入式系统变量,所选用的标定工具为 CANApe,也用于保持数据测量值与在 HiL 环境中所获得的数据测量值一致。通过这种方式可以轻松比较以证明 SiL 测试的可靠性。
选用四个非抢占式任务:10ms、20ms、40ms 和 80ms。任务启动延迟及其时间调度如下图所示:
![](https://static001.geekbang.org/infoq/77/77a99d9441cc959f63de10fe27619068.png)
▲数据对比图
SiL 测试中,每个任务的执行时间被认为等同于仿真步长,因此不会出现某个任务运行时间过长而影响另一个任务的情况,无需采取特别措施。
外围设备等与处理器相关的一切都在 S 函数内模拟;硬件驱动器和信号调节电路通过 MATLAB/Simulink 模型中的附加系统进行模拟;PWM 驱动器模型和 HALL 传感器模型已经实现。Simulink 模型如下图所示:
![](https://static001.geekbang.org/infoq/3f/3f68464ff96b93fca2b6bc2c6ec2c841.png)
▲SiL 测试中的 MATLAB/Simulink 模型
04.对比结果与结论
在完成 SiL 和 HiL 测试环境的搭建后,对比同一条件下的测试结果即可证实 SiL 的可靠性。为此,使用相同的参数对控制算法进行校准,将角速度设定为 1000rpm。通过对比角速度反馈值(模拟步长均为 200us)可知,两种测试结果完全相同,SiL 的可靠性得到证实。
![](https://static001.geekbang.org/infoq/7d/7d8a71a34af8f1b7ff5cad139b06402d.png)
▲SiL 与 HiL 的测试结果
然而,通过测试不同步长下的实际模拟执行时间可知,模拟的时间越短,实际执行时间就越长,因此必须权衡模拟精度和实际执行时间,选择一个折中、合适的模拟步长。显然,SiL 环境下主机 PC 的性能对实际执行时间的影响很大。
![](https://static001.geekbang.org/infoq/21/215c5d545570a252368c1ccb8b4a0e1d.png)
▲不同步长下,模拟 1 分钟所需的实时执行时间
模型的复杂性同样会对实际执行时间产生影响。SiL 最大的优点在于不会受到时间约束和模型复杂性的约束,而 HiL 测试下,使用复杂模型则可能会导致数据损坏,能够使用 HiL 测试的模型复杂性与真实 HiL 硬件的处理能力和可用资源密切相关,正确的模型选择便成为 HiL 测试的难点。
综上所述,SiL 测试对于嵌入式代码测试是可靠的。最大的缺点与模拟步长参数有关:实现模型的精度越高,执行时间越长。因此得出结论:
当测试目标为与硬件相关的参数时,如通过测量操作系统的空闲任务来测量处理器负载、任务激活延迟、任务运行时间值、中断锁定时间、资源锁定时间等,SiL 测试是不可靠的。
当测试目标为软件功能时,SiL 是可靠的。
此外,模块之间的接口也可以在集成阶段进行测试。
参考文献
[1] Muresan M, Pitica D. Software in the loop environment reliability for testing embedded code[C]//2012 IEEE 18th international symposium for design and technology in electronic packaging (SIITME). IEEE, 2012: 325-328.
[2] Muresan M, Pitica D. Software in the loop environment reliability for testing embedded code[C]//2012 IEEE 18th international symposium for design and technology in electronic packaging (SIITME). IEEE, 2012: 325-328.
原文链接:https://mp.weixin.qq.com/s/HcGIaDewFtNJXeifwzDGUw
版权声明: 本文为 InfoQ 作者【DevOps和数字孪生】的原创文章。
原文链接:【http://xie.infoq.cn/article/13c9441c3087bcb0c8389395f】。文章转载请联系作者。
评论