实时测试模型
您可以在与您的应用程序类似的环境(例如 Simulink® Real-Time™)中测试您的系统。您首先在开发计算机上进行模型仿真,然后使用软件在环(SIL) 和处理器在环(PIL) 仿真。实时测试在可连接到物理系统的独立目标计算机上执行应用程序。实时测试可以包括时间、信号接口、系统响应和生产硬件的影响。
注意
本主题中的信息不适用于使用 ASAM XIL 标准在第三方测试平台上进行的测试。有关使用 ASAM XIL 执行测试的信息和示例,请参阅 安装并设置 Simulink XIL 标准的 ASAM Test 支持包 和 使用 ASAM XIL 标准创建并运行测试。
实时测试包括:
快速原型设计,在连接到工厂硬件的独立目标上测试系统。您可以根据需求和模型结果验证实时测试。使用快速原型设计的结果,您可以更改您的模型并更新您的需求,然后在独立目标上重新测试。
使用 Simulink Real-Time 的硬件在环 (HIL),它测试已通过多个验证阶段的系统,通常是 SIL 和 PIL 仿真。您可以在 Windows® 或 Linux® 计算机上使用 Simulink Test™,使用 Simulink Real-Time 运行实时测试用例。
总体工作流程
此示例工作流程描述了创建和执行实时测试的主要步骤:
创建测试用例来验证模型是否符合需求。运行模型仿真测试并保存基线数据。
设置实时目标计算机。
创建用于实时测试的测试框架,或者重复使用模型仿真测试框架。在 Test Sequence 或 Test Assessment 模块中,
verify
语句评估实时执行。在测试管理器中,创建实时测试用例。
对于实时测试用例,配置目标设置、输入、回调和迭代。添加基线或等效性准则。
执行实时测试。
在测试管理器中分析结果。报告结果。
实时测试注意事项
Test Sequence 模块或 Stateflow® 图中的
assert
语句不支持代码生成并将被忽略,因此如果在 Simulink Real-Time 仿真期间断言条件失败,则不会发生错误。但是,verify
语句支持 Simulink Real-Time 代码生成,并会自动记录测试管理器中测试用例的结果。使用 Simulink Assert 模块时可获得相同的日志记录行为。基线或等效性比较可能会由于实时目标计算机的数据缺失或时间偏移而失败。调查实时测试失败时,寻找时间变化或缺失的数据点。
您无法覆盖由包含 Test Sequence 模块的模型构建的应用程序的实时执行采样时间。为 Test Sequence 模块生成的代码包含硬编码的采样时间。覆盖目标计算机采样时间可能会产生意外结果。
您无法记录状态,或者在某些平台上无法记录输出端口。
您的目标计算机必须具有文件系统才能使用
verify
语句和测试用例记录。您的目标计算机必须运行 Simulink Real-Time。
您不能使用变体配置。
完成基本模型测试
实时测试通常比比较模型测试花费更长的时间,特别是在执行涵盖多种场景的一套实时测试时。在执行实时测试之前,使用桌面仿真完成基于需求的测试。使用桌面仿真结果:
调试您的模型或进行符合需求的设计更改。
调试您的测试序列。使用测试序列编辑器中的调试功能。请参阅调试测试序列。
更新您的需求并添加相应的测试用例。
设置目标计算机
实时测试需要目标计算机或外部硬件测试平台。Simulink Test 支持运行 Simulink Real-Time 的目标计算机。有关详细信息,请参阅:
Target Computer Settings (Simulink Real-Time)
Troubleshooting in Simulink Real-Time (Simulink Real-Time)
配置模型或测试框架
实时应用需要特定的配置参数和信号属性。
代码生成
实时测试用例需要实时系统目标文件。在模型或框架配置参数中,在 App 选项卡的“代码生成”下,点击 Simulink Coder。在 C 代码选项卡中,验证系统目标文件 (STF) 是否适用于 Simulink 实时模型。
如果输出部分中的按钮是自定义目标,点击该按钮并验证 自定义目标 是否是 Simulink 实时模型的 STF。如果不是,请选择选择系统目标文件并选择 STF 来生成系统目标代码。
如果您的模型需要不同的 STF,您可以使用测试用例或测试套件回调设置参数。实时测试执行后,使用清理回调将参数设置为其原始设置。例如,此回调打开 sltestProjectorController
模型并将 STF 参数设置为 speedgoat.tlc
。
openExample('sltestProjectorController'); set_param('sltestProjectorController',... 'SystemTargetFile','speedgoat.tlc');
数据导入/导出格式
模型必须使用除数据集之外的数据格式。设置数据格式:
打开配置参数。
选择数据导入/导出窗格。
选择格式。
记录实时执行的信号
要配置您感兴趣的信号以进行实时测试:
在数据导入/导出窗格中的配置参数中启用信号记录。
使用信号属性命名每个感兴趣的信号。可以为未命名的信号分配一个与基线或等效性信号的名称不匹配的默认名称。在此示例测试框架中,记录的信号具有明确的名称。
添加实时测试的测试用例
使用测试管理器创建实时测试用例。
在 Simulink 工具条中的“模型验证、确认和测试”下的 App 选项卡上,选择 Simulink Test。
点击 Simulink 测试管理器。
在测试管理器中,选择 新建 > 测试用例 > 实时测试。
测试类型
您可以选择基线、等效性或仿真实时测试。对于仿真测试类型,verify
语句作为测试结果的通过/失败准则。对于等效性和基线测试类型,等效性或基线准则也可作为通过/失败准则。
基线 - 将目标计算机返回的信号数据与测试用例中的基线进行比较。要将实时执行结果与模型仿真结果进行比较,请将模型基线结果添加到实时测试用例中,并对信号应用可选容差。
等效性 - 比较来自仿真和实时测试或两个实时测试的信号数据。在目标计算机上运行实时测试,然后将结果与模型仿真进行比较:
选择目标上的仿真 1。
清除目标上的仿真 2。
测试用例显示两个仿真部分,仿真 1 和仿真 2。
比较两个实时测试是类似的,只是您选择目标上的两个仿真。在等效性准则部分,您可以从仿真中捕获记录的信号并应用容差进行通过/失败分析。
仿真:仅使用
verify
语句和实时执行来评估测试结果。如果没有verify
语句失败,并且实时测试执行,测试用例通过。
加载应用程序自
使用此选项,指定您想要如何加载实时应用程序。实时应用程序是根据您的模型或测试框架构建的。您可以从以下位置加载应用程序:
模型 - 如果您是第一次运行实时测试,或者您的模型自上次实时执行以来发生了变化,请选择模型。模型通常需要最长的时间,因为它包括模型构建和下载。模型从模型加载应用程序,构建实时应用程序,将其下载到目标计算机,并在目标计算机上执行。
目标应用程序 - 选择目标应用程序将目标应用程序从主机发送到目标计算机,并执行该应用程序。如果您想在多个目标上加载已构建的应用程序,目标应用程序会很有用。
目标计算机 - 此选项执行已加载在实时目标计算机上的应用程序。您可以更新测试用例中的参数并使用目标计算机执行。
下表总结了每个选项执行的步骤和回调。
测试用例执行步骤(从第一个到最后一个) | 加载应用程序自 | ||
---|---|---|---|
模型 | 目标应用 | 目标计算机 | |
执行预加载回调 | 是 | 是 | 是 |
加载 Simulink 模型 | 是 | 否 | 否 |
执行加载后回调 | 是 | 否 | 否 |
设置信号编辑器场景 | 是 | 否 | 否 |
从模型构建实时应用程序 | 是 | 否 | 否 |
下载实时应用程序到目标计算机 | 是 | 是 | 否 |
设置运行时参数 | 是 | 是 | 是 |
运行测试序列场景 | 是 | 否 | 否 |
执行启动前实时回调 | 是 | 是 | 是 |
执行实时应用程序 | 是 | 是 | 是 |
执行清理回调 | 是 | 是 | 是 |
模型
选择生成实时应用程序的模型。
测试框架
如果您使用测试框架来生成实时应用程序,请选择测试框架。
仿真设置覆盖
对于实时测试,您可以覆盖仿真停止时间,这对于调试实时测试失败很有用。考虑一个 60 秒的测试,由于模型中的错误,该测试在 15 秒时返回 verify
语句失败。调试模型后,执行实时测试来验证修复。您可以覆盖停止时间以在 20 秒时终止执行,从而减少验证修复所需的时间。
回调
实时测试提供预启动实时应用程序回调,它在应用程序在目标计算机上执行之前执行命令。实时测试回调与模型加载、构建、下载和执行步骤一起按顺序执行。回调和步骤执行取决于测试用例如何加载应用程序。
顺序 | 加载应用程序自: 模型 | 加载应用程序自: 目标应用 | 加载应用程序自: 目标计算机 |
---|---|---|---|
首先执行 | 预加载回调 | 预加载回调 | 预加载回调 |
后加载回调 | - | - | |
预启动实时应用程序回调 | 预启动实时应用程序回调 | 预启动实时应用程序回调 | |
最后执行 | 清理回调 | 清理回调 | 清理回调 |
迭代
您可以在实时测试中执行迭代。迭代对于执行扫描参数值或信号编辑器场景的实时测试很方便。结果按迭代分组显示。有关设置迭代的更多信息,请参阅 测试迭代。您可以创建:
从参数集中表格迭代 - 在测试用例的参数覆盖部分定义几个参数集。在 迭代 > 表模式迭代 下,点击自动生成并选择参数集。
来自信号编辑器场景的表格迭代 - 如果您的模型或测试框架使用信号编辑器输入,请在迭代表模式迭代表下方,点击自动生成并选择信号编辑器场景。如果您使用信号编辑器场景,请从模型中加载应用程序。
来自测试序列场景的表格迭代 - 如果您的测试框架使用 Test Sequence 模块场景,则可以在测试管理器中为每个场景创建一个迭代。在迭代表下方,点击自动生成并选择测试序列场景。如果您使用测试序列场景,请从模型中加载应用程序。
脚本迭代 - 使用脚本使用模型变量或参数进行迭代。例如,假设您正在测试振荡器系统,并使用 Test Sequence 模块使用参数
frequency
创建方波测试信号。在测试文件中,您可以使用实时测试脚本迭代来覆盖从 5 Hz 到 35 Hz 的频率扫描。该脚本在 Test Sequence 模块中迭代
frequency
的值。%% Iterate over frequencies to determine best oscillator settings % Create parameter sets freq = 5.0:1.0:35.0; for i_iter = 1:length(freq) % Create iteration object testItr = sltestiteration(); % Set parameters setVariable(testItr,'Name','frequency','Source',... 'Test Sequence','Value',freq(i_iter)); % Register iteration addIteration(sltest_testCase, testItr); end
使用 verify
语句评估实时执行
除了基线和等效性信号比较之外,您还可以使用 verify
语句评估实时测试执行。verify
语句评估逻辑表达式并将结果返回给测试管理器。在 Test Sequence 或 Test Assessment 模块内使用 verify
,或者如果您有 Stateflow 许可证,则在 Stateflow 图中使用。请参阅使用 When 分解验证模型仿真。
另请参阅
主题
- Use Simulink Real-Time UI to Create and Execute a Real-Time Application (Simulink Real-Time)