主要内容

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

设置块参数值,例如获得参数的获得块中,您可以使用您创建并存储在工作空间(如基本工作空间、模型工作空间或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 m

  • 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

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

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

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

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

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

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

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

参数值控制范围

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

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

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

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

屏蔽子系统并创建一个屏蔽参数而不是工作区变量。

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

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

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

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

永久存储工作区变量

在基本工作区中创建的变量不会在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

管理和编辑工作区变量

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

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

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

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

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

当您共享一个独立的查找表时,您将在多个表中一起使用所有的表和断点数据一天的查找表块。将该数据存储在金宝app仿真软件。LookupTable对象:

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

    myLUTObj = 金宝appSimulink.LookupTable;

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

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

  4. 一天的查找表块,设置数据规范查找表对象

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

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

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

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

要存储断点和表数据:

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

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

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

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

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

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

  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. 插值使用Prelookup块对话框,设置规范查找表对象.集的名字dataForFirstTable

  9. 单击该按钮旁边的值的名字参数。选择创建变量

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

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

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

  12. 规范参考

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

  14. 插值使用Prelookup阻止对话框,单击好吧

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

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

  • 的组合sharedBkptsdataForFirstTable

  • 的组合sharedBkptsdataForSecondTable

这些查询表共享相同的断点数据sharedBkpts

相关的话题