主要内容

通过创建变量共享和重用块参数值

设置块参数值,如获得a的参数获得块中,您可以使用创建并存储在工作空间(如基本工作空间、模型工作空间或Simulink)中的数值变量金宝app®数据字典。您可以使用该变量在多个块中设置多个参数值,包括不同模型的块。要更改块参数的值,您需要更改工作区中变量的值。

使用变量设置块参数值还允许您:

  • 更改参数值而不必修改模型文件(如果您将变量存储在模型工作区之外)。

  • 在扫描或调优值时,使用特定的、有意义的名称标识参数。

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

在多个块和模型中重用参数值

您可以创建一个数字MATLAB®变量,如基本工作空间或数据字典,并使用它指定一个或多个块参数值。

如果将块参数值设置为简单的数值表达式,则可以在“模型数据编辑器”中为该表达式创建变量建模选项卡上,单击模型数据编辑器).点击在与值对应的单元格的右侧,然后选择创建变量.在“创建新数据”对话框中,设置新变量的名称和位置,然后单击创建.单元格现在显示新变量。

您还可以创建一个变量来表示在多个表达式中使用的常量。示例模型sldemo_fuelsys表示汽油发动机的加油系统。模型中的子系统,feedforward_fuel_rate,用常数来计算发动机的燃料需求14.6,表示发动机消耗的理想(化学计量)空气与燃料的比例。子系统中的两个块使用数字来设置参数的值。在本例中,为了在块之间共享数字,您创建了一个名为myParam

  1. 打开模型。

    sldemo_fuelsys

  2. 在模型中,在建模选项卡上,单击模型数据编辑器.在模型数据编辑器中,检查参数选项卡。

  3. 在模型中,导航到子系统。

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

  4. 在“模型数据编辑器”中内容过滤框中,输入14.6

    数据表包含两行,它们对应于恒定值参数的两个常数子系统中的块。

  5. 使用价值列来替换文字数14.6myParam.执行两个参数的替换。

  6. 内容过滤框中,输入myParam

  7. 在编辑其中一个参数的值时,单击操作按钮并选择创建

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

    的变量,myParam,出现在基本工作区中。

因为变量存在于基本工作区中,所以您可以在多个模型中使用它。但是,当结束MATLAB会话时,会丢失基本工作区的内容。考虑永久地将变量存储在模型工作区或数据字典中。

定义一个系统常量

要定义一个系统常数,例如表示地球半径的变量,可以考虑创建一个金宝app仿真软件。参数对象,而不是数值MATLAB变量。参数对象允许您指定物理单位和自定义文档以及其他特征。

  • 若要在模型中创建和使用参数对象,请参见数据对象

  • 通常,系统常数的值通过数学关系影响其他参数和信号的值。要显式地对这些关系建模,可以使用表达式设置依赖数据的值。看到使用数学表达式设置变量值

使用数学表达式设置变量值

可以将变量的值设置为包含文字数字和其他变量的表达式。使用表达式,你可以:

  • 将值表示为已知物理常数之间的关系,而不是无法识别的文字数字。

  • 显式地建模参数数据之间的代数依赖关系。当修改独立数据的值时,不需要记得调整依赖数据的值。

通用技术

将变量转换为a金宝app仿真软件。参数对象。然后,设置价值属性:

  • 交互式-例如,使用模型数据编辑器或模型资源管理器,在表达式前面加等号,.图中显示了如何指定表达式myVar + myOtherVar

  • 以编程方式-使用slexpr函数,以字符向量或字符串形式指定表达式。例如,设置名为myParam到表达式myVar + myOtherVar

    myParam。价值=slexpr(myVar + myOtherVar

显式建模变量之间的代数关系

这个例子sldemo_metro(见探讨一个模型的求解器雅可比结构)模拟了一个由三个相同的点状节拍器悬挂在一个移动平台上的系统。模型中的块使用这些来自基本工作区的MATLAB变量:

  • -每个节拍器的质量,初始值0.1 kg

  • r-每个节拍器的长度,初始值为1.0米

  • J-每个节拍器的转动惯量,初始值0.1 kg/m2

这些变量共享一个代数关系:每个节拍器的转动惯量等于质量乘以长度的平方。在本例中,您将在值中记录此关系J

  1. 打开模型。

    sldemo_metro

  2. 更新框图。模型回调在基本工作区中创建变量。

  3. 为了防止回调覆盖您对变量所做的更改,对于本例,请删除回调代码。

    set_param (“sldemo_metro”“InitFcn”

  4. 在模型中,在建模选项卡上,单击模型数据编辑器

  5. 在模型数据编辑器上参数标签,激活变化范围按钮。

    使用变量的块位于子系统中,因此您必须配置Model Data Editor以显示子系统中的数据。

  6. 单击显示/刷新其他信息按钮。

    数据表包含与基本工作区中的变量对应的行。

  7. 内容过滤框中,输入J

  8. 在数据表中,找到对应的行J.在价值列中,将变量的值设置为金宝appSimulink.Parameter (J)

    金宝app模型转换J到一个金宝app仿真软件。参数对象。

  9. 价值列时,将参数对象的值设置为= m * r ^ 2

  10. 可选地,模拟不同节拍器质量和长度的模型。当你改变的值而且r,则不必记得纠正值J

对其他建模目标的限制和考虑

  • 如果表达式包含定点数据或枚举类型的数据,则表达式只能操作一个变量或对象。

  • 不能设置数据类型(数据类型属性)使用表达式to的参数对象汽车(默认值),并将表达式中出现的参数对象的数据类型设置为汽车.例如,在表达式中J = m*r^2的数据类型,不能设置J汽车的数据类型而且r

    • 保留…的好处汽车(描述的上下文敏感的数据类型)对于使用该表达式的对象,将表达式中对象的数据类型设置为汽车.换句话说,就是使用汽车对于所有涉及的对象。表达式中的对象获得与使用该表达式的对象相同的数据类型。

    • 使用其他值汽车对于表达式中出现的对象,将所有依赖参数对象的数据类型设置为以外的值汽车.换句话说,不要使用汽车对于任何涉及的对象。

      表达式中使用的所有对象必须使用相同的数据类型。

  • 如果你有金宝app仿真软件编码器™和嵌入式编码器®许可证,您可以通过使用表达式生成初始化全局变量的代码。但是,只有当表达式符合某些要求时,代码生成器才能保留表达式。看到表达式保存(金宝app仿真软件编码器)

参数值控制范围

范围变量的是可以使用该变量的模型和块的集合。例如,您在基本工作空间中创建的变量具有全局作用域,因为所有开放模型中的所有块都可以使用这些变量。您存储在模型工作区中的变量具有有限的作用域,因为只有宿主模型中的块可以使用这些变量。

不能在同一个作用域中创建两个具有相同名称的变量。控制变量的作用域可以帮助您避免名称冲突,并建立变量的明确所有权。

下表描述了控制可重用参数值范围的不同方法。

范围 技术
所有开放模型 在基本工作区中创建一个变量。
一个或多个目标模型 在数据字典中创建一个变量。要在多个模型中重用变量,请创建一个引用字典。看到什么是数据字典?
一个模型,包括模型中的所有子系统 在模型工作区中创建一个变量。看到模型的工作区
子系统内的多个块,包括嵌套子系统中的块

掩码子系统并创建掩码参数而不是工作区变量。

若要防止子系统内的块使用工作区变量,请在子系统块对话框中设置允许分级解析没有一个.这种技术允许您使用相同的名称在工作区中创建变量,并在子系统掩码中创建掩码参数。子系统中的块只能使用mask参数。

有关子系统的信息,请参见子系统.有关屏蔽的信息,请参见屏蔽原理

当您有一个在相同作用域中具有许多变量的大型模型时,为了避免名称冲突,可以考虑将变量打包到单个结构中。有关更多信息,请参见在结构中组织相关块参数定义

有关块如何使用指定的变量名的基本信息,请参见符号解析

永久存储工作区变量

在基本工作空间中创建的变量不会在MATLAB会话之间持续存在。但是,您可以将变量存储在mat文件或脚本文件中,并在使用模型回调打开模型时加载该文件。一个模型回调是一组命令,当您以特定的方式(如打开模型)与模型交互金宝app时,Simulink将执行这些命令。您可以在打开模型时使用回调来加载变量。在学习Simulink和实验模型时,使用此技术存储变量。金宝app

  1. 的模型中获得块,设置的值获得参数K

  2. 在命令提示符下,创建一个变量K在基本工作区中。

    K = 27;

  3. 在Workspace浏览器中,右键单击变量并选择另存为

    要在一个文件中保存多个变量,请在Workspace浏览器中选择所有目标变量,然后右键单击所选变量中的任何一个。

  4. 在对话框中,设置另存为类型MATLAB脚本.集文件名称loadvar并点击保存

    脚本文件loadvar.m显示在当前文件夹中。您可以打开该文件以查看创建变量的命令K

  5. 在模型中,在建模选项卡上,选择模型设置>模型属性

  6. 回调在“模型属性”对话框的页签中,选择PreLoadFcn作为您想要定义的回调。在模型预加载函数面板中,输入loadvar并点击好吧

  7. 保存模型。

下次打开模型时PreloadFcn回调函数加载变量K进入基本工作区。例如,还可以将变量保存到mat文件中loadvar.mat,并将模型回调设置为负载loadvar

要了解有关回调的信息,请参见自定义模型行为的回调.若要以编程方式定义用于加载变量的回调,请参见以编程方式存储模型的工作区变量

将变量保存到文件时,必须保存在MATLAB会话期间对变量所做的更改。要永久存储模型的变量,可以考虑使用模型工作区或数据字典,而不是mat文件或脚本文件。有关永久存储变量的详细信息,请参见确定在哪里存储Simulink模型的变量和对象金宝app

以编程方式存储模型的工作区变量

在上面的例子中,您定义了一个在打开模型时创建变量的模型回调。您可以以编程方式保存变量并设置模型回调。

  1. 在命令提示符下,创建变量K在基本工作区中。

    K = 27;
  2. 将变量保存到一个名为loadvar.m

    matlab.io.saveVariablesToScript (“loadvar.m”“K”

  3. 设置模型回调以加载脚本文件。

    set_param (“mymodel”“PreloadFcn”“loadvar”

  4. 保存模型。

    save_system (“myModel”

这个函数matlab.io.saveVariablesToScript将变量保存到脚本文件中。要将变量保存到mat文件,请使用此函数保存.若要以编程方式设置回调等模型属性,请使用该函数set_param

管理和编辑工作区变量

使用变量设置块参数值时,将变量存储在工作区或数据字典中。您可以使用命令提示符、模型资源管理器和模型数据编辑器来创建、移动、复制和编辑变量。您还可以确定一个变量在模型中的使用位置,列出模型使用的所有变量,以及列出模型不使用的所有变量。有关更多信息,请参见创建、编辑和管理工作区变量

打包用于查找表的共享断点和表数据

共享多个断点向量或表数据n-D查找表Prelookup,使用预查找的插值块,考虑将数据存储在其中金宝app仿真软件。LookupTable而且金宝app仿真软件。断点对象代替MATLAB变量或金宝app仿真软件。参数对象。这种技术通过清楚地将数据标识为查找表的一部分,并显式地将断点数据与表数据关联起来,从而提高了模型的可读性。

存储独立查找表金宝app仿真软件。LookupTable对象

一个独立的查找表由一组表数据和一个或多个断点向量组成。您不与其他查找表共享表数据或任何断点向量。

共享独立查找表时,将在多个查找表中同时使用所有的表和断点数据n-D查找表块。将此数据存储在金宝app仿真软件。LookupTable对象:

  1. 在工作区或数据字典中创建对象。例如,在命令提示符下输入:

    myLUTObj = 金宝appSimulink.LookupTable;

  2. 使用对象的属性来存储表和断点数据的值。

  3. 使用对象的属性在生成的代码中为结构类型配置唯一的名称。在属性对话框中,在结构类型定义,指定的名字

  4. n-D查找表块,设置数据规范查找表对象

  5. 的右边数据规范,设置的名字以之名金宝app仿真软件。LookupTable对象。

有关创建和配置的方法金宝app仿真软件。LookupTable对象,看到金宝app仿真软件。LookupTable

将共享数据存储在金宝app仿真软件。LookupTable而且金宝app仿真软件。断点对象

当你使用Prelookup而且使用预查找的插值块来更精细地控制查找算法,您可以共享断点向量和表数据集。例如,您可以在两个独立的表数据集之间共享断点向量。通过将断点数据与表数据分离,您可以共享查找表的各个部分,而不是共享整个查找表。

存储断点和表数据:

  1. 创建一个金宝app仿真软件。LookupTable对象为每个唯一的表数据集设置。创建一个金宝app仿真软件。断点对象用于每个惟一的断点向量,包括您不打算共享的断点向量。

  2. 使用对象的属性来存储表和断点数据的值。

  3. 配置金宝app仿真软件。LookupTable对象的引用金宝app仿真软件。断点对象用于断点数据。在金宝app仿真软件。LookupTable对象,设置规范参考.属性的名称金宝app仿真软件。断点对象。

  4. 使用预查找的插值块,设置规范查找表对象.集的名字以一个名字金宝app仿真软件。LookupTable对象。

    Prelookup块,设置规范断点对象.集的名字以一个名字金宝app仿真软件。断点对象。

示例模型fxpdemo_lookup_shared_param包含两个Prelookup和两个使用预查找的插值块。配置这些块,使每个组合的aPrelookup和一个使用预查找的插值块表示唯一的查找表。在两个查找表之间共享断点向量。在这种情况下,每个查找表都有唯一的表数据,但是共享断点数据。

  1. 打开示例模型。

  2. Prelookup块对话框,设置规范断点对象.集的名字sharedBkpts

  3. 点击按钮的值后面的名字参数。选择创建变量

  4. 创建新数据对话框,设置价值金宝app仿真软件。断点并点击创建

    一个金宝app仿真软件。断点对象出现在基本工作区中。

  5. 的属性对话框中sharedBkpts,指定价值作为一个向量,比如[1 2 3 4 5 6 7 8 9 10].点击好吧

  6. Prelookup对话框中,单击好吧

  7. Prelookup1块对话框,设置规范断点对象.集的名字sharedBkpts

  8. 使用预查找的插值块对话框,设置规范查找表对象.集的名字dataForFirstTable

  9. 点击按钮的值后面的名字参数。选择创建变量

  10. 创建新数据对话框,设置价值金宝app仿真软件。LookupTable并点击创建

    一个金宝app仿真软件。LookupTable对象出现在基本工作区中。

  11. 的属性对话框中dataForFirstTable,指定价值作为一个向量,例如[10 9 8 7 6 5 4 3 2 1]

  12. 规范参考

  13. 在下面的表格里规范,设置的名字sharedBkpts并点击好吧

  14. 使用预查找的插值对话框中,单击好吧

  15. 配置使用Prelookup1插值块来使用金宝app仿真软件。LookupTable对象命名dataForSecondTable.在对象属性对话框中指定价值作为一个向量,例如[0 0.5 1 1.5 2 2.5 3 3.5 4 4.5].配置要引用的对象sharedBkpts对于断点数据。

该模型现在表示两个唯一的查找表:

  • 结合sharedBkpts而且dataForFirstTable

  • 结合sharedBkpts而且dataForSecondTable

这些查找表通过共享相同的断点数据sharedBkpts

相关的话题