配置模型、生成代码和仿真
关于本示例
学习目标
了解示例模型的功能性行为。
了解示例测试框架及其组件的作用。
对模型运行仿真测试。
前提条件
能够打开和修改 Simulink® 模型和子系统。
了解子系统以及如何查看子系统详细信息。
了解引用模型以及如何查看引用模型详细信息。
能够设置模型配置参数。
查看顶层模型
此示例使用简单但功能完整的节气门控制器示例模型。该模型采用冗余控制算法。该模型重点介绍算法设计中的一个标准模型结构和一组基本模块。
打开 ThrottleControl
。请注意,此模型使用 Stateflow® 软件。
open_system ('ThrottleControl')
模型的顶层包含以下元素:
布局使用基本的模型架构风格:
计算与信号路由(信号线和总线)分离
划分为子系统
您可以将此风格应用于各种模型。
查看子系统
顶层模型中的两个子系统表示比例积分 (PI) 控制器 PI_ctrl_1
和 PI_ctrl_2
。在此阶段,这些相同的子系统使用相同的数据。
1.打开 PI_ctrl_1
子系统。
open_system('ThrottleControl/PI_ctrl_1')
模型中的 PI 控制器来自库,库是一组可重用的相关模块或模型。库提供包含和重用模型的两种方法之一。下面介绍了第二种方法,即模型引用。您不能编辑从库中添加到模型的模块。在库中编辑该模块,以便该模块的实例在不同的模型中保持一致。
2.打开 Pos_Command_Arbitration
系统。此 Stateflow 图会对这两个命令信号执行基本的错误检查。如果这些命令信号相距太远,Stateflow 图会将输出设置为 fail_safe
位置。
open_system('ThrottleControl/Pos_Command_Arbitration')
仿真测试环境
要测试节气门控制器算法,请将其合并到测试框架中。测试框架是一个用于评估控制算法的模型,它具有以下优势:
将测试数据与控制算法分开。
将被控对象或反馈模型与控制算法分开。
为控制算法的多个版本提供可重用的环境。
此示例的测试框架模型实现一个常见的仿真测试环境,包括以下各部分:
在测单元
测试向量源
计算和记录
被控对象或反馈系统
输入和输出缩放
1.打开测试框架模型 ThrottleControlTestHarness
。
open_system('ThrottleControlTestHarness')
ThrottleControl
模型设置为测试框架的控制算法。您可以通过右键点击 Unit_Under_Test
模块并选择模块参数(ModelReference) 来查看此配置。
由 Model 模块的名称 Unit_Under_Test 可以看出,控制算法是在测单元。
Model 模块提供重用组件的方法。它允许您在顶层模型中以编译函数形式(直接或间接)引用其他模型。默认情况下,Simulink 软件会在引用模型更改时重新编译模型。相对于库,编译函数有下列优点:
大型模型的仿真时间更快。
您可以直接仿真编译函数。
仿真需要的内存更少。内存中只有一个已编译模型副本,即使模型被多次引用也是如此。
2.打开测试向量源,它在此测试框架中实现为 Test_Vectors
子系统。
open_system('ThrottleControlTestHarness/Test_Vectors')
该子系统对测试向量源使用 Signal Editor 模块。该模块具有驱动仿真的数据 (PosRequest
),并提供 Verification
子系统使用的预期结果。此示例测试框架仅使用一组测试数据。通常,需要创建一个完全覆盖系统运行的测试套件。
3.打开计算和记录子系统,它在此测试框架中实现为子系统 Verification
。
open_system('ThrottleControlTestHarness/Verification')
测试框架将控制算法仿真结果与黄金数据进行比较,黄金数据是一组体现经专家认证的控制算法的预期行为的测试结果。在 Verification
子系统中,Assertion 模块将来自被控对象的仿真节气门值位置与来自测试框架的黄金值进行比较。如果两个信号之间的差值大于 5%,则测试失败,Assertion 模块将停止仿真。
您也可以在仿真完成执行后计算仿真数据。使用 MATLAB® 脚本或第三方工具执行计算。执行后的计算结果为数据分析提供了更大的灵活性。但是,它需要等待执行完成。结合使用这两种方法可以提供高度灵活和高效的测试环境。
4.打开被控对象或反馈系统,它在此测试框架中实现为 Plant
子系统。
open_system('ThrottleControlTestHarness/Plant')
Plant
子系统使用一种标准形式的传递函数对节气门动态特性进行建模。您可以创建不同保真度级别的被控对象模型。在不同测试阶段使用不同被控对象模型是很常见的。
5.打开输入和输出缩放子系统,它在此测试框架中实现为 Input_Signal_Scaling
和 Output_Signal_Scaling
。
open_system('ThrottleControlTestHarness/Input_Signal_Scaling')
open_system('ThrottleControlTestHarness/Output_Signal_Scaling')
用于对输入和输出进行定标的子系统执行以下主要功能:
选择要传送到在测单元的输入信号。
选择要传送到被控对象的输出信号。
在工程单位和在测单元可写入的单位之间再次缩放信号。
处理被控对象与在测单元之间的速率转换。
运行仿真测试
开始进行测试框架模型的仿真。仿真完成后,将显示以下结果。
右下角的图显示预期(黄金)节气门位置和被控对象计算的节气门位置之间的差值。如果两个值之间的差值大于 ±0.05,将停止仿真。
关键点
基本模型架构将计算与信号路由分开,并将模型划分为多个子系统。
模型重用的两个选项包括模块库和模型引用。
如果将测试框架中的控制算法表示为 Model 模块,请在“模型引用参数”对话框中指定控制算法模型的名称。
测试框架是一个用于评估控制算法的模型。通常,框架包含在测单元、测试向量源、计算和记录、被控对象或反馈系统以及输入和输出缩放组件。
在测单元是待测试的控制算法。
测试向量源提供驱动仿真的数据,该仿真生成用于验证的结果。
在验证期间,测试框架会将控制算法仿真结果与黄金数据进行比较并记录结果。
测试框架的被控对象或反馈组件对受控环境进行建模。
在开发测试框架时:
缩放输入和输出信号。
选择要传送到在测单元的输入信号。
选择要传送到被控对象的输出信号。
在工程单位和在测单元可写入的单位之间再次缩放信号。
处理被控对象与在测单元之间的速率转换。