共享和复用块参数值由创建变量

设置块参数值,如获得一个参数获得块,可以使用数值变量所创建并存储在工作区,如基工作区,一个模型工作区,或Simulink的万博1manbetx®数据字典。可以使用该变量在多个块中设置多个参数值,包括不同模型中的块。要更改块参数的值,需要更改工作区中变量的值。

使用一个变量来设置的块参数值,您还可以:

  • 而无需修改模型文件(如果您存储模型工作区外的变量)更改参数值。

  • 在清除或调优值时,通过特定的、有意义的名称标识参数。

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

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

您可以创建一个数字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. 在编辑其中一个参数的值时,单击action按钮并选择创建

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

    的变量,myParam,显示在基本工作区中。

由于变量的基础工作空间存在,你可以在多个模型中使用它。但是,当您结束MATLAB会话,你就失去了基础工作空间中的内容。考虑永久存储在一个模型中的工作区或数据字典中的变量。

定义系统常量

要定义的系统常数,如表示地球的半径的变量,考虑创建一个万博1manbetxSimulink.Parameter对象,而不是数字MATLAB变量。参数对象允许您指定物理单位和自定义文件以及其他特性。

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

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

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

您可以将变量的值设置为包括文字数字和其他变量的表达式。有了表情,您可以:

  • 表达的值作为已知的物理常数之间的,而不是作为一个不可识别的文字数的关系。

  • 清晰的模型参数数据之间的代数依赖性。当您更改的独立数据的值,你不需要记住要调整相关数据的值。

通用技术

将变量转换为a万博1manbetxSimulink.Parameter宾语。然后,设置价值属性的一个表达式:

  • 交互 - 例如,与模型数据编辑器或Model Explorer中,先用表达等号,=。该图显示了如何指定表达式myVar的+ myOtherVar

  • 以编程方式—使用slexpr功能,指定在字符向量或字符串表达。例如,设置命名为一个参数对象的值myParam到表达式myVar的+ myOtherVar

    myParam.Value = slexpr(“myVar + myOtherVar”

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

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

  • - 各节拍器的质谱,初始值0.1公斤

  • [R-每个节拍器的长度,初始值1.0 m

  • Ĵ- 的各节拍器的转动惯量,初始值为0.1kg /米2

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

  1. 打开模型。

    sldemo_metro

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

  3. 为了防止覆盖您所做的变量,在这个例子中的变化回调,删除回调代码。

    set_param('sldemo_metro''InitFcn'“”

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

  5. 模型数据编辑器参数选项卡,激活更改范围按钮。

    使用该变量的块中的子系统,因此,您必须配置模型数据编辑器显示子系统的数据。

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

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

  7. 在里面内容过滤框中,输入Ĵ

  8. 在数据表中,找到该行对应于Ĵ。在里面价值列中,该变量的值设置为万博1manbetxSimulink.Parameter(J)

    万博1manbetxSimulink的转换Ĵ万博1manbetxSimulink.Parameter宾语。

  9. 在里面价值列中,参数对象的值设置为= M * R ^ 2

  10. 可选,模拟不同节拍器的质量和长度模型。当你改变的值[R,你不记得要纠正的价值Ĵ

限制和注意事项其他建模目标

  • 如果表达式包含定点数据或枚举类型的数据,所述表达可以操作上只有一个变量或对象。

  • 你不能设置数据类型(数据类型参数对象的属性),其使用所述表达式来汽车(默认值),并设置出现在表达式以外的值参数的对象的数据类型汽车。例如,在表达J = M * R ^ 2,你不能设置的数据类型Ĵ汽车和所述数据类型的[R

    • 要保留的好处汽车在(描述上下文相关的数据类型),用于使用该表达的对象,设置的对象的数据类型在表达式中汽车。换句话说,使用汽车对所有涉及的对象。在表达式获取的对象的相同的数据类型,使用表达该对象。

    • 使用不同的值汽车的对象出现在表达式中,将所有相关参数的对象的数据类型以外的值汽车。换句话说,不要使用汽车对于任何涉及的对象。

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

  • 如果你有万博1manbetxSimulink的编码器™和嵌入式编码器®许可证,您可以使用表达式生成初始化全局变量的代码。然而,代码生成器只能在表达式符合某些要求时保留它。看到表达式保存(万博1manbetx仿真软件编码器)。

参数值的控制范围

范围变量的是,模型的集合并阻止可以使用变量。例如,变量您在基地工作区中创建具有全局范围,因为在所有开放式模型的所有块可以使用的变量。您在模型工作区,存储变量具有有限的范围,因为只有在主机模型块可以使用的变量。

您不能创建在同一范围内的两个同名变量。控制变量的范围可以帮助您避免名称冲突,建立变量,权属清晰。

下表描述了可以控制一个可重复使用的参数值的范围的不同方式。

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

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

为了防止一个子系统内的块使用的工作空间的变量,在子系统块对话框中,集许可证分辨率层次没有。该技术允许您使用相同的名称创建无论是在工作空间中的变量和子系统的荫罩参数。在子系统中的块只能使用面膜参数。

有关子系统的信息,请参阅子系统。有关屏蔽的信息,请参阅屏蔽原理

为了避免名称冲突时,你有在同一范围内许多变量的大型模型,考虑包装变量成单一结构。欲了解更多信息,请参阅组织相关块参数定义的结构

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

永久保存工作区变量

在基本工作空间中创建的变量不会在MATLAB会话之间持久存在。但是,您可以将变量存储在一个mati文件或脚本文件中,并在使用模型回调打开模型时加载该文件。一个模型回调是一组命令,Simulink中执行时你互动,在一个特万博1manbetx定的方式模型,如打开模型。您可以使用一个回调,当你打开模型加载变量。当你了解Simulink和用模型进行试验使用这种技术来存储变量。万博1manbetx

  1. 在一个模型中包含获得块,设定的值获得参数ķ

  2. 在命令提示符下,创建一个变量ķ在底座的工作区。

    K = 27个;

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

    要保存多个变量在一个文件中,选择所有的工作区浏览器中的目标变量,然后右键单击任意选定的变量。

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

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

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

  6. 在里面回调模型属性对话框中的选项卡,选中PreLoadFcn作为您想要定义的回调。在里面模型预加载功能窗格中,输入loadvar并点击好吧

  7. 保存模型。

下一次你打开模型时,PreloadFcn回调加载变量ķ到基部的工作区。您也可将变量保存到MAT文件,例如loadvar.mat,并设置模型回调负载loadvar

要了解回调,见自定义模型行为的回调。若要以编程方式定义加载变量的回调,请参阅以编程方式存储模型的工作区变量

当您保存变量到一个文件,你必须保存更改您在MATLAB会话过程中的变量。为了永久保存变量的模型,可以考虑使用一个模型工作区或数据字典,而不是一个MAT文件或脚本文件。有关永久存储变量的详细信息,请参阅确定在何处存储Simulink模型的变量和对象万博1manbetx

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

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

  1. 在命令提示,创建变量ķ在底座的工作区。

    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

管理和编辑工作区变量

当您使用变量组块的参数值,则存储在工作区或数据字典的变量。您可以使用命令提示符,模型浏览器和模型数据编辑器创建,移动,复制和编辑变量。您还可以确定变量在哪里在模型中,列表中的所有变量的一个模型使用,并列出所有的变量,一个模型不使用。欲了解更多信息,请参阅创建、编辑和管理工作区变量

为查找表打包共享断点和表数据

到共享断点矢量或多个表之间的数据正d查找表Prelookup,插值使用Prelookup块,考虑存储在所述数据万博1manbetxSimulink.LookupTable万博1manbetxSimulink.Breakpoint对象,而不是MATLAB变量或万博1manbetxSimulink.Parameter对象。该技术通过清楚地识别数据作为查找表的一部分,并明确地断点数据与表数据相关联提高了模型的可读性。

存储独立查找表万博1manbetxSimulink.LookupTable宾语

一个独立的查找表包括一组表中的数据和一个或多个断点的载体的。你不共享表中的数据或任何其它查找表断点载体。

当您共享一个独立的查找表,您在多个使用所有表和断点数据一起正d查找表块。要存储在该数据万博1manbetxSimulink.LookupTable对象:

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

    myLUTObj = 万博1manbetxSimulink.LookupTable;

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

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

  4. 在里面正d查找表块,组数据规范查找表对象

  5. 在 - 的右边数据规范,组名称到的名称万博1manbetxSimulink.LookupTable宾语。

了解创建和配置的方法万博1manbetxSimulink.LookupTable对象,见万博1manbetxSimulink.LookupTable

将共享数据存储在万博1manbetxSimulink.LookupTable万博1manbetxSimulink.Breakpoint对象

当您使用Prelookup插值使用Prelookup块来更精细地控制查找算法,可以共享断点载体和集表的数据。例如,可以共享两组独立表数据之间的断点矢量。有了这种分离从表中数据断点数据,你可以分享,而不是共享整个查找表查找表的各个部分。

存储断点和表数据:

  1. 创建一个万博1manbetxSimulink.LookupTable对象为每个唯一的一组表中的数据。创建一个万博1manbetxSimulink.Breakpoint对象为每一个独特的断点向量,包括断点的载体,你不打算份额。

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

  3. 配置万博1manbetxSimulink.LookupTable反对参考万博1manbetxSimulink.Breakpoint对象为断点数据。在里面万博1manbetxSimulink.LookupTable对象,集规范参考。指定的名称万博1manbetxSimulink.Breakpoint对象。

  4. 在里面插值使用Prelookup块,组规范查找表对象。组名称到a的名字万博1manbetxSimulink.LookupTable宾语。

    在里面Prelookup块,组规范断点对象。组名称到a的名字万博1manbetxSimulink.Breakpoint宾语。

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

  1. 打开示例模型。

  2. 在里面Prelookup阻止对话框,设置规范断点对象。组名称sharedBkpts

  3. 点击按钮的值旁边名称参数。选择创建变量

  4. 在里面创建新数据对话框中,设置价值万博1manbetxSimulink.Breakpoint并点击创建

    一个万博1manbetxSimulink.Breakpoint对象出现在基本工作区中。

  5. 在属性对话框sharedBkpts,指定价值作为载体,例如[1 2 3 4 5 6 7 8 9 10]。请点击好吧

  6. 在里面Prelookup阻止对话框中,单击好吧

  7. 在里面Prelookup1阻止对话框,设置规范断点对象。组名称sharedBkpts

  8. 在里面插值使用Prelookup阻止对话框,设置规范查找表对象。组名称dataForFirstTable

  9. 点击按钮的值旁边名称参数。选择创建变量

  10. 在里面创建新数据对话框中,设置价值万博1manbetxSimulink.LookupTable并点击创建

    一个万博1manbetxSimulink.LookupTable对象出现在基本工作区中。

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

  12. 规范参考

  13. 在桌子底下规范,组名称sharedBkpts并点击好吧

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

  15. 配置插值的Prelookup1阻止使用万博1manbetxSimulink.LookupTable对象命名dataForSecondTable。在对象的属性对话框,指定价值作为向量,例如[0 0.5 1 1.5 2 2.5 3 3.5 4 4.5]。将对象配置为引用sharedBkpts对于断点数据。

现在模型代表了两种独特的查找表:

  • 的组合sharedBkptsdataForFirstTable

  • 的组合sharedBkptsdataForSecondTable

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

相关的话题