主要内容

调整和实验块参数值

在构建模型时,可以使用块参数进行实验,例如a的系数转移FCN.块,帮助您决定要使用的块。您可以使用不同的参数值模拟模型,并捕获并观察模拟输出。

您可以在仿真过程中更改大多数数字块参数的值。要观察效果,​​可以实时可视化模拟输出。此技术允许您在开发算法时快速测试参数值。你可以在视觉上:

  • 调谐和优化控制参数。

  • 调整模型参数。

  • 在不同条件下测试控制鲁棒性。

当你开始一个模拟,Simulink金宝app®首先更新模型图。对于更大的模型,这个操作可能需要时间。要在不重复更新模型图的情况下测试参数值,可以在单个模拟运行期间调优参数值。

或者,为了避免更新模型图,请使用快速重启。有关快速重启的更多信息,请参阅快速重启开始

如果不能实时可视化地分析模拟输出,或者必须运行许多模拟,请考虑使用编程方法来扫描参数值。您可以捕获模拟输出数据并在稍后执行分析。有关更多信息,请参阅优化,估计和扫描块参数值

有关访问和设置块参数值的基本信息,请参阅设置块参数值

迭代地调整模拟运行之间的块参数值

此示例显示如何通过在模拟运行之间更改块参数值来激发模型。您可以尝试使用参数值并观察模拟结果,以帮助您决定要使用哪个块以及如何构建模型。

示例模型sldemo_fuelsys代表汽油发动机的燃料系统。模型中的子系统,feedforward_fuel_rate,通过使用恒定数来计算发动机的燃料需求14.6,代表发动机消耗的空气和燃料的理想(化学计量)比率。子系统中的两个块使用这个数字来设置参数的值。

假设你想要改变理想空气燃料比的设计值14.617.5观察对燃料需求的影响。要在模型中存储设计值,可以修改块对话框中的值。或者,您可以使用有意义的名称将值存储在变量中,允许您重复使用两个块中的值。

通过改变块对话框中的值来观察模拟输出的变化:

  1. 打开示例模型。

    sldemo_fuelsys

  2. 设置模型仿真时间2000年50.为了更快的模拟。

  3. 在模型中,打开范围块对话框。

  4. 模拟模型。调整窗口中的大小范围对话框查看所有模拟结果。

    显示器显示,在整个仿真过程中燃料信号振荡大致0.91.6.的air_fuel_ratio.信号迅速攀升15.没有过冲。

  5. 在模型中,打开模型数据编辑器。在这一点造型选项卡,单击模型数据编辑器.在模型数据编辑器中,检查参数选项卡。

  6. 在模型中或在命令提示符处,导航到目标子系统。

    open_system (......“sldemo_fuelsys / fuel_rate_control fuel_calc / feedforward_fuel_rate '

  7. 在模型数据编辑器中,使用价值柱改变恒定价值价值)参数的参数常数块标记丰富的1 / (14.6 * 0.8)1 / (17.5 * 0.8)

  8. 同样,改变恒定价值标记为块的参数普通的1/14.6.1/17.5

  9. 模拟模型。

    显示器显示,信号的反应现在不同了。

要使用数字变量替换块对话框中的文字值:

  1. 使用模型数据编辑器设置值的值普通的常数块到1 /混合物

  2. 设置值丰富的块到1 /(混合物* 0.8)

  3. 当编辑丰富的价值,旁边1 /(混合物* 0.8),单击操作按钮并选择创建

  4. 创建新数据对话框中,设置价值17.5并点击创建

    数值变量混合物与值一起出现在基本工作区中17.5.在仿真之间运行时,您可以更改值混合物而不是更改块对话框中的参数值。

调整模拟过程中的块参数值

这个例子展示了如何在模拟过程中观察改变块参数值的效果。这种技术允许您避免在模拟运行之间更新模型图,并以交互方式测试和调试您的模型。

示例模型sldemo_fuelsys包含A.常数堵塞,油门命令,表示节气门指令。为了观察在模拟过程中增加命令的量级的效果:

  1. 打开示例模型。

    sldemo_fuelsys

  2. 在模型中,打开范围块对话框。

  3. 开始仿真。

    该模型配置为模拟2000秒。在模拟过程中,值的值燃料air_fuel_ratio.信号实时出现在范围图上。

  4. 在模型中,当状态栏表示大约1000(1000秒),点击暂停按钮暂停模拟。

  5. 在示波器显示中燃料图绘制暂停时间之前的模拟输出。

  6. 在模型中,在造型选项卡,单击模型数据编辑器

  7. 在模型数据编辑器中,选择参数选项卡。

  8. 在模型中,选择油门命令块。

  9. 在模型数据编辑器中,选择rep_seq_y.行。确保您没有选择rep_seq_t行。

  10. 为了rep_seq_y.行,更改值价值列从[10 20 10][10 30 10]

  11. 单击“转换”按钮逐步推进模拟。点击按钮约15次或直到你看到一个变化燃料图形在示波器显示。

    信号的图燃料表示燃料需求的急剧增加对应于增加的油门命令。

  12. 在模型中,通过单击“继续”按钮恢复模拟

    在整个模拟过程中,显示器显示了燃料需求的显著周期性增加,以及空油比的周期性降低。

在模拟过程中,您必须在更改工作区变量的值后更新模型图。有关更新模型图的详细信息,请参阅更新图并运行模拟

准备参数调优和实验

  • 使用Workspace变量设置块参数值。

    访问块参数的值,例如恒定价值A.参数常数块,您必须导航到模型中的块并打开块对话框,使用模型资源管理器搜索块,或使用该函数set_param在命令提示符下。

    或者,如果您通过创建工作区变量来设置块参数值,那么您可以使用命令提示符,即MATLAB来更改变量的值®工作区浏览器或模型资源管理器。您还可以创建一个变量来为多个块参数设置相同的值。当更改变量值时,所有目标块参数都将使用新值。有关访问和设置块参数值的详细信息,请参见设置块参数值

  • 可视化仿真输出。

    要在调整块参数值时实时观察仿真输出,可以在诸如模型中使用块范围块。您还可以在模拟运行结束时捕获模拟输出,并在仿真数据检查器中查看数据。有关更多信息,请参阅决定如何可视化模拟数据

  • 为您希望在模拟期间进行优化的块参数指定值范围。

    如果您希望其他人使用您的模型并优化参数,您可以通过指定范围来控制允许的优化值。另外,最佳实践是为希望调优的所有定点块参数指定值范围。要指定块参数取值范围,请参见指定块参数的最小值和最大值

  • 控制仿真持续时间和速度。

    模拟运行可以如此快速地执行,以至于无法调整块参数值。此外,如果要在特定模拟时间更改参数值,则必须学会控制模拟速度。您可以将模拟配置为特定持续时间运行或运行永久,并在需要时暂停和提前进行模拟。有关更多信息,请参阅交互式模拟一个模型通过编程的方式运行模拟

使用仪表板块交互式调谐

您可以通过将Dashboard库中的块添加到模型中来优化块参数值。仪表板块允许您调整其他块的参数值,并通过与模拟工业控制外观的旋钮、开关和读数交互,实时观察模拟输出。您可以与Dashboard块交互,而不必在模型中定位目标块参数。有关更多信息,请参阅使用仪表板块对模型进行优化和可视化

在模拟期间可调哪个块参数?

无法禁止块参数是在模拟期间不能更改其值的参数。例如,您不能调优采样时间块参数。如果参数是不可调优的,则不能在模拟期间通过更改块对话框中的值或更改工作区变量的值来更改其值。

不可调块参数包括:

  • 样品时间。

  • 控制块的外观或结构的参数,例如块的输入数量块。

  • 优先级,允许您控制块执行顺序。

  • 参数控制块算法,例如积分器的方法A.参数离散时间集成商块。

要确定块参数在模拟过程中是否可调,请使用以下技术之一:

  • 开始一个模拟并打开块对话框。如果仿真时目标块参数值为灰色,则无法对该参数进行调优。

  • 在命令提示符下,确定是否标志读写read-only-if-compiled描述参数。

    1. 在模型中选择块。

    2. 在命令提示符下,使用该函数get_param.返回有关块对话框参数的信息。函数返回一个结构,该结构在块对话框中为每个参数指定一个字段。

      paraminfo = get_param(gcb,“DialogParameters”);

      或者,而不是在模型中定位和选择块,而是可以替换GCB.与块路径,如'mymodel / mysubsystem / myblock'

    3. 查看目标块参数信息。例如,查看采样时间块的参数,查看字段的值SampleTime,这也是一种结构。

      paramInfo。SampleTime
      类型:' string' Enum:{}属性:{'read-write' 'read-only if-compiled' ' 'dont-eval'}

    4. 检查结构属性字段,其值是字符向量的单元格数组。如果是国旗读写出现在单元格数组中,可以修改参数值。但是,如果国旗read-only-if-compiled也出现在单元格数组中,您不能在模拟期间修改参数值。

如果使用MASKS为块和子系统创建自定义接口,则可以控制各个掩码参数的可调性。如果使用模型参数来参数化引用的模型,则可以调整每个模型参数的值模型块。

为什么仿真输出保持不变?

如果在更改参数值后模拟的输出没有变化,请使用以下故障排除技术:

  • 定位工作空间变量的定义。

    如果您使用工作区变量来设置块参数值,请确定变量定义所在的位置。例如,如果你定义一个变量myvar#在模型工作区中,并使用它在模型中设置块参数值,不能通过更改指定变量的值来更改参数值myvar#在基础工作区。您必须访问模型工作区中的变量定义。

    要定位变量的定义,同时编辑使用变量的块参数的值,单击附近的操作按钮并选择探索.将打开一个对话框,例如模型资源管理器,它在相应的工作区中显示变量的定义。有关模型如何使用变量的详细信息,请参阅符号解析

  • 指定要在模拟期间调整的固定点参数的值范围。

    如果要调整的块参数使用具有最佳精度缩放的固定点数据类型,请为参数指定最小值和最大值,以便Simulink可以计算和应用适当的缩放。金宝app如果未指定值范围,则Simulink可能会应用一个缩放,请按配置为您要使用金宝app的调整值。指定值范围,请参阅指定块参数的最小值和最大值

  • 在仿真运行期间更新模型图。如果使用Workspace变量来设置一个或多个块参数的值,则在模拟期间更改变量的值后,必须更新模型图。

    要了解如何更新模型图,请参见更新图并运行模拟

其他建模目标的可调性考虑因素和限制

引用模型

当你使用时模型块,这些参数可调性限制适用:

  • 如果您设置的是模型块到加速模式或者如果在加速模式下模拟父模型,则无法在仿真期间调整引用模型中的块参数。但是,如果引用的模型在基础工作空间或数据字典中使用变量来设置参数值,则可以调整变量的值。

  • 假设你使用一个MATLAB变量或金宝app仿真软件。参数对象,以设置模型中块参数的值。如果你使用模型Block引用此模型:

    • 你设置了模拟模式模型块到加速模式或在加速模式下模拟父模型,在模拟期间无法更改变量或对象的值。

    • 当您以加速模式模拟父模型时,在模拟运行之间更改变量或对象的值会导致Simulink重新生成代码。金宝app

    • 你使用额外的模型块是在父模型中多次引用模型,可以为每个模型选择不同的仿真模式模型块。如果至少一个块使用正常模拟模式并且任何其他块使用不同的仿真模式,则无法在仿真期间更改变量或对象的值。此外,当您使用快速重启时模拟父模型时,无法更改快速重启模拟运行之间的变量或对象的值。

    作为解决方法,将变量或对象移动到基本工作区或数据字典。

加速器和SIL/PIL模拟

这些可调性限制适用于加速器、快速加速器、SIL和PIL模拟:

  • 假设你使用一个MATLAB变量或金宝app仿真软件。参数对象,以设置模型中块参数的值。如果你使用SIM在快速加速器模式下模拟模型的功能并设置Rapidacceleratoruptodatecheck.两个参数“关闭”,你不能使用RapidAcceleratorParameterSets对参数指定变量或对象的不同值。返回的结构金宝appSimulink.BlockDiagram.buildRapidAcceleratorTarget不包含关于变量或对象的信息。

  • 如果块参数值引用工作区变量,则无法在快速加速器仿真期间更改块参数值,例如通过使用该功能set_param.相反,您可以调优引用变量的值。

    或者,使用参数集在快速加速器模拟之间优化运行时参数。有关更多信息,请参阅优化运行时参数

有关加速模拟期间参数可调性的更多信息,请参阅优化运行时参数sim in parfor with Rapid Accelerator Mode.有关SIL和PIL仿真期间参数可调性的更多信息,请参阅可调参数和SIL/PIL(嵌入式编码器)

快速重启

有关使用快速重启时参数可调性的更多信息,请参见快速重启开始

外部程序的代码生成和仿真

在模拟过程中可调的参数可能在生成的代码中显示为不可调的内联参数。如果您通过使用SIL、PIL或外部模式模拟来模拟外部程序,则模拟期间和模拟运行之间的参数可调性可能取决于代码生成设置。

要控制生成代码中的参数可调性,您可以使用配置参数来调整模型的代码生成设置默认参数的行为.您还可以调整单个MATLAB变量的设置,金宝app仿真软件。参数对象和其他参数对象。有关更多信息,请参阅在生成的代码中保留变量(金宝appSimulink编码器)

Stateflow图表

要通过在模拟期间更改数据来调试状态流图,请参见调试状态流图表(州流)

也可以看看

相关话题