在 Simulink Test 中测试实时应用程序
本示例演示了如何对模型 slrt_ex_osc_sltest 进行频率响应测试。
利用这些信息,您可以在设计阶段修改模型的内部参数,以满足您的频率要求。在生产阶段,您可以根据频率响应对已制造的零件进行分拣。
打开模型
要打开模型,请在 MATLAB® 命令行窗口中输入:
model = 'slrt_ex_osc_sltest';
open_system(model);

该图显示了在目标计算机上运行的某个实时应用程序的典型输出结果。在低频下,“Integrator1”模块的输出将稳定在与“Signal Generator”模块输出相同的值。在高频下,Integrator1 模块的输出在每个脉冲结束时仍会产生振铃现象。

该测试用于确定积分器和 Signal Generator 模块的输出值在相互满足指定标准条件下的最高频率。该测试将模型本身用作信号源,并利用测试框架来比较积分器和 Signal Generator 模块的输出。
步骤 1。创建频率参数
创建参数 Frequency,该参数将在本示例结尾处进行调整。
打开模型资源管理器。
在模型
slrt_ex_osc_sltest的模型工作区中创建名为 Simulink® 的参数Frequency。将该参量标记为模型参量。
输入默认值 1。将存储类更改为 Model Default。
打开 Signal Generator 模块参数,将
Frequency参数更改为新的 Simulink 参数Frequency。
步骤 2。创建测试框架
在 Simulink App 选项卡上,点击 Simulink Test。
在测试选项卡上,点击 Add Test Harness。该软件会创建一个默认名称为
slrt_ex_osc_sltest_Harness1的测试框架。在基本属性选项卡中,针对被测组件的输入,请选择
None。对于 Component under Test 的输出,选择
Outport。选中添加单独的评估模块复选框。
选中 Open harness after creation 复选框。
在其余选项卡中采用默认设置。

8.点击 OK。
示例模型 slrt_ex_osc_sltest 将测试框架存储在模型内部。要从示例模型访问 Test Harness:
在 Simulink 编辑器中,在测试选项卡上,点击管理测试框架。
点击
slrt_ex_osc_sltest_Harness1。
步骤 3。配置测试框架
打开 Test Assessment 模块。
为简化测试评估配置,请在输入符号列表中,删除现有的输入
Outport,并添加输入Int1和SigGen。打开 Test Assessment 模块的“模块参数”,将
Show port labels选项更改为FromPortIcon。这样会在模块的端口图标旁边显示输入符号的名称。在
slrt_ex_osc_sltest_Harness1中,将 Demux 模块连接到名为Out的信号上。在 Demux 模块对话框中,将输出数量设置为
2。将顶部的 Demux 模块输出端连接到
Test Assessment/Int1,底部输出端连接到Test Assessment/SigGen。
步骤 4。配置 Simulink 参数
打开模型资源管理器。在建模选项卡上,展开设计部分,然后点击模型资源管理器。
点击节点 slrt_ex_osc_sltest_Harness1 > 模型工作区。
在工具栏中,点击添加 Simulink 参数按钮。
添加以下 Simulink.Parameter 对象:
名称 — Criterion
值 — 0
数据类型 — double
存储类 — ExportedGlobal
5.同样地,添加 Simulink 参数 w_open 和 w_close。由于这些参数作为模型参数位于 slrt_ex_osc_sltest_Harness1 模型工作区中,因此您可以直接按名称访问它们,无需通过模型层次结构。

6.保存该模型。
步骤 5。设置频率参量
右键点击
slrt_ex_osc_sltest_Harness1/slrt_ex_osc_sltest。选择
Block Parameter(Model reference)。在弹出窗口中选择
Instance parameters。将
Frequency标记为参量。
步骤 6。准备测试评估步骤
1.打开 Test Assessment 模块
2.将以下参数添加到 Parameter 符号列表中:
Criterion
w_open
w_close
3.要添加一个步骤,请在步骤列中,将光标移至顶行,点击在……之后添加步骤,然后输入:
CheckSetting
4.右键点击步骤 CheckSetting,并勾选分解时复选框。
5.要向 CheckSetting 添加一个子步骤,请点击添加子步骤,然后输入:
Hi when (SigGen > 0)
“when”表达式用于选择波形的一半。
6.右键点击子步骤 Hi when,并勾选分解时复选框。
7.要处理子步骤 Hi when,请添加子步骤:
HiCheck when ((et >= w_open) && (et <= w_close))
verify((abs(Int1) >= abs(SigGen) * (1.0 - Criterion)) && ...
(abs(Int1) <= abs(SigGen) * (1.0 + Criterion)));“when”表达式用于选择用于测试验收准则的时间窗口。verify 命令用于测试验收标准。
8.同样地,在步骤 CheckSetting 中,添加子步骤:
Lo when (SigGen < 0)
9.要处理子步骤 Lo when,请添加子步骤:
LoCheck when ((et >= w_open) && (et <= w_close))
verify((abs(Int1) >= abs(SigGen) * (1.0 - Criterion)) && ...
(abs(Int1) <= abs(SigGen) * (1.0 + Criterion)));10.右键点击子步骤 Lo when,并勾选分解时复选框。
11.为满足进行分解时的要求,请删除默认的 Run 步骤,并在 CheckSetting、Hi when 和 Lo when 步骤之后插入 DefaultStep 子步骤。当分解在每个嵌套级别上至少需要两个步骤,且每个步骤列表的末尾都有一个未分解的步骤时。

11.关闭测试序列编辑器并保存模型。
步骤 7。初始化测试套件
如果尚未打开 slrt_ex_osc_sltest_Harness1 测试框架,请将其打开。然后,点击
slrt_ex_osc_sltest子系统。在 Harness 选项卡上,点击 Simulink Test Manager。
选择新建 > 测试文件。
将测试文件命名为
realtimetest。右键点击现有的测试套件,然后点击删除以删除示例测试文件的内容。
右键点击“测试文件”,然后选择新建 > 实时测试。
在新打开的“实时测试”对话框中,在测试类型字段中输入
Simulation。点击创建。
将新测试用例重命名为
frequencysweep。将新的测试套件重命名为
realtimesuite。
步骤 8。初始化被测系统
在 Simulink Test Manager 中,选择测试用例 frequencysweep。
选择被测系统选项卡。
将 Model 设置为
slrt_ex_osc_sltest。展开 Test Harness 选项卡,将 Harness 设置为
slrt_ex_osc_sltest_Harness1。展开仿真设置覆盖选项卡,选中停止时间复选框。
其他字段使用默认值。
步骤 9。初始化参数覆盖
1.在 Test Manager 中,选择 Parameter Overrides 选项卡。
2.点击添加按钮。将弹出一个包含参数列表的对话框。如果未显示参数,请点击对话框顶部的刷新行。
![]()
刷新操作会构建模型,并将来自 slrt_ex_osc_sltest_Harness1 和 slrt_ex_osc_sltest 的模型及模块参数上传。
3.打开参数集 1,并选中条件、频率、w_close 和 w_open 复选框。
步骤 10。创建脚本化迭代
为了配置和控制测试框架的迭代运行,需要通过一些常量和变量提供输入。
测试框架常量包括:
cStartFreq = 15.0参数扫描的起始频率。cStopFreq = 25.0参数扫描的结束频率。cFreqIncr = 1.0频率增量。cWOpen = 0.90评估criterion的时间窗口开始。cWClose = 0.99评估criterion的时间窗口结束值。cCriterion = 0.025时间窗口内信号发生器与积分器 1 之间的最大归一化振幅差。
测试框架变量包括:
vfreq每次迭代的频率。vw_open窗口在每个半周期内打开一次。vw_close窗口在每个半周期内关闭一次。
在“测试管理器”中,选择迭代 > 脚本化迭代选项卡。
在文本框中输入以下代码。要调整 Scripted Iterations 文本框的大小,请点击并拖动该框的右下角。
% Initialize constants
cStartFreq = 15.0;
cStopFreq = 25.0;
cFreqIncr = 1.0;
cWOpen = 0.90;
cWClose = 0.99;
cCriterion = 0.025;
% Loop through test frequencies
for vfreq = cStartFreq:cFreqIncr:cStopFreq
% Create a new iteration
testItr = sltest.testmanager.TestIteration();
% Calculate the time window
half_period = 0.5 * (1.0/vfreq);
vw_open = half_period * cWOpen;
vw_close = half_period * cWClose;
% Set the parameters for the iteration
testItr.setVariable('Name','Frequency','Source', ...
'slrt_ex_osc_sltest','Value',vfreq);
testItr.setVariable('Name','w_open','Source', ...
'','Value', vw_open);
testItr.setVariable('Name','w_close','Source', ...
'','Value', vw_close);
testItr.setVariable('Name','Criterion','Source', ...
'','Value', cCriterion);
% Name and add the iteration to the testcase
str = sprintf('%.0f Hz', vfreq);
addIteration(sltest_testCase, testItr, str);
end步骤 11。运行测试
连接到目标计算机。构建实时应用程序
slrt_ex_osc_sltest并将其下载到目标计算机上。在 Simulink Test Manager 中,选中测试用例后,点击运行按钮。
要查看测试结果,请在左侧栏中点击结果和工件。在此情况下,测试在迭代次数 23 Hz 时失败。
要查看失败的结果,请展开节点 23 Hz > 验证语句和 23 Hz > 仿真输出 (slrt_ex_osc_sltest)。
步骤 12。显示结果
在数据检查器选项卡中,单击子图按钮。
选择 2×1 的网格布局。
在“仿真数据检查器”的顶部显示区域中,选中两个
Out复选框以及顶部的测试评估复选框。该评估对应于HiCheck子步骤。在底部界面中,选中两个
Out复选框以及底部的测试评估复选框。该评估对应于LoCheck子步骤。点击放大时间轴按钮,并选择
4.00-4.1时间段。
在顶部显示屏中,4.04 附近的垂直红线后紧接着一条水平绿线,这表明 HiCheck 测试在短暂失败后最终通过了。在底部显示屏中,4.02 附近出现的垂直红色尖峰,随后出现一条水平绿色线,表明 LoCheck 测试在短暂失败后最终通过。
另请参阅
Test Assessment (Simulink Test) | Test Sequence (Simulink Test)
主题
- 实时测试模型 (Simulink Test)
- 重复使用桌面测试用例进行实时测试 (Simulink Test)