主要内容

调优和实验块参数值

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

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

  • 优化控制参数。

  • 校准模型参数。

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

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

或者,为了避免更新模型图,可以使用Fast Restart。有关快速重启的详细信息,请参见从快速重启开始

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

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

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

这个例子展示了如何通过在模拟运行之间更改块参数值来创建模型原型。您可以对参数值进行实验并观察模拟结果,以帮助您决定使用哪些块以及如何构建模型。

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

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

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

  1. 打开示例模型。

    sldemo_fuelsys

  2. 设置模型仿真时间从200050为了更快的模拟。

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

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

    作用域显示显示在整个模拟过程中燃料信号在大约0.9而且1.6.的air_fuel_ratio信号迅速攀升至15无超调。

  5. 在模型中,打开model Data Editor。在建模选项卡上,单击模型数据编辑器.在模型数据编辑器中,检查参数选项卡。

  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.61/17.5

  9. 模拟模型。

    示波器显示信号现在反应不同。

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

  1. 的值,使用“模型数据编辑器”设置正常的常数1 /混合物

  2. 的值丰富的1 /(混合* 0.8)

  3. 在编辑丰富的Value,在旁边1 /(混合* 0.8),点击操作按钮并选择创建

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

    数值变量混合物显示在具有值的基本工作区中17.5.在模拟运行之间,可以更改的值混合物在基本工作区中,而不是更改块对话框中的参数值。

模拟时调优块参数值

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

示例模型sldemo_fuelsys包含一个常数块,节流命令,表示节流命令。在仿真过程中观察增大命令大小的效果:

  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. 在模型中,通过单击Continue按钮继续模拟

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

在模拟过程中,您必须在更改工作空间变量的值之后更新模型图。有关更新模型图的更多信息,请参见更新图表并运行模拟

为参数调整和实验做准备

  • 使用工作区变量设置块参数值。

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

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

  • 可视化仿真输出。

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

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

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

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

    模拟运行执行得非常快,以至于无法调优块参数值。此外,如果希望在特定的模拟时间更改参数值,则必须学会控制模拟节奏。您可以将模拟配置为在特定的持续时间内运行或永远运行,并在需要时暂停和推进模拟。有关更多信息,请参见交互式模拟模型而且以编程方式运行模拟

使用仪表板块进行交互调优

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

在模拟过程中哪些块参数是可调的?

不可调块参数在模拟过程中不能更改其值的参数。例如,不能调优样品时间块参数。如果参数不可调,则不能在模拟过程中通过更改块对话框中的值或更改工作区变量的值来更改其值。

不可调块参数包括:

  • 样品时间。

  • 控件的输入数量等控制块的外观或结构的参数总和块。

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

  • 控制块算法的参数,如积分器的方法a的参数离散时间积分器块。

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

  • 开始模拟并打开块对话框。如果在模拟过程中,目标块参数的值为灰色,则不能调优该参数。

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

    1. 选择模型中的块。

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

      paramInfo = get_param(gcb,“DialogParameters”);

      或者,您可以替换,而不是在模型中定位和选择块华东桐柏与块路径,如“myModel / mySubsystem / myBlock”

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

      paramInfo。SampleTime
      ans =提示符:'采样时间:'类型:' string' Enum:{}属性:{'read-write' 'read-only-if-compiled' 'don -eval'}

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

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

为什么模拟输出保持不变?

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

  • 找到工作空间变量的定义。

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

    要定位变量的定义,在编辑使用该变量的块参数的值时,单击附近的操作按钮并选择探索.打开一个对话框,比如Model Explorer,它显示了适当工作区中变量的定义。有关模型如何使用变量的更多信息,请参见符号解析

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

    如果要调优的块参数使用具有最佳精确缩放的定点数据类型,请指定该参数的最小值和最大值,以便Simulink能够计算并应用适当的缩放。金宝app如果未指定值范围,Simulink可能会应用一个缩放,该缩放会排除要使用的金宝app调优值。要指定值范围,请参见指定块参数的最小值和最大值

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

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

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

引用模型

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

  • 如果设置a的仿真模式模型块转换为加速模式,或者如果以加速模式模拟父模型,则不能在模拟期间调优引用模型中的块参数。但是,如果引用的模型使用基本工作区中的变量或数据字典来设置参数值,则可以调优变量的值。

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

    • 并且你设置了模拟模式模型块转换为加速模式或以加速模式模拟父模型,则不能在模拟过程中更改变量或对象的值。

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

    • 你可以使用额外的模型块在父模型中多次引用模型,您可以为每个模型选择不同的模拟模式模型块。如果至少有一个块使用普通模拟模式,而其他任何块使用不同的模拟模式,则不能在模拟过程中更改变量或对象的值。此外,在启用快速重新启动时模拟父模型时,不能在快速重新启动模拟运行之间更改变量或对象的值。

    作为一种变通方法,将变量或对象移动到基本工作区或数据字典中。

加速器和SIL/PIL模拟

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

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

  • 如果块参数值引用工作空间变量,则不能在快速加速器模拟过程中更改块参数值,例如使用函数set_param.相反,您可以调优引用变量的值。

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

有关加速模拟期间参数可调性的更多信息,请参见调优运行时参数而且sim in parfor与快速加速器模式.有关SIL和PIL模拟过程中的参数可调性的更多信息,请参见可调参数和SIL/PIL(嵌入式编码)

快速启动

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

外部程序代码生成与仿真“,

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

为了控制生成代码中的参数可调性,您可以通过使用配置参数来调整模型的代码生成设置默认参数行为.你也可以调整各个MATLAB变量的设置,金宝app仿真软件。参数对象,以及其他参数对象。有关更多信息,请参见保留生成代码中的变量(金宝app仿真软件编码器)

Stateflow图表

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

另请参阅

相关的话题