文档

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

设置一块参数值,如获得参数的获得块,可以使用数值变量创建和存储在工作区等基本工作空间,工作区,模型或仿真软件金宝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会话,你失去了基本工作空间的内容。考虑永久存储模型中的变量工作区或数据字典。

定义一个系统常数

定义一个系统常数,比如一个变量代表地球的半径,考虑创建一个金宝appSimulink.Parameter对象,而不是一个MATLAB数值变量。参数对象允许您指定物理单位和自定义文档以及其他特征。

通过使用一个数学表达式设置变量值

你可以设置一个变量的值涉及文字数字和其他变量的表达式。使用表达式,您可以:

  • 值表示为已知的物理常数之间的关系,而不是作为一个无法辨认的文字数量。

  • 显式代数模型参数数据之间的依赖关系。改变独立的数据的值时,您不需要记得调整相关数据的值。

通用技术

将变量转换成金宝appSimulink.Parameter对象。然后,设置价值属性的对象通过使用一个表达式:

  • 交互式地——例如,模型数据编辑器或Model Explorer,在表达一个等号,=。图显示了如何指定表达式myVar + myOtherVar

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

    myParam。价值=slexpr(“myVar + myOtherVar”)

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

这个例子sldemo_metro(见探索求解雅可比矩阵的结构模型)模型系统的三个相同,点状节拍器暂停一个移动平台。块模型中使用这些MATLAB从基本工作空间变量:

  • -质量的每一个节拍器,初始值0.1公斤

  • r——每一个节拍器的长度,初始值1.0

  • J——每个节拍器的惯性矩,初始值0.1公斤/ m2

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

  1. 打开模型。

    sldemo_metro

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

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

    set_param (“sldemo_metro”,“InitFcn”,)

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

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

    块使用的变量是子系统,所以您必须配置子系统模型数据编辑器来显示数据。

  6. 单击显示/刷新的额外信息按钮。

    数据表包含行对应于基本工作空间中的变量。

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

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

    金宝app模型转换J到一个金宝appSimulink.Parameter对象。

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

  10. 可选地,模拟模型与不同的节拍器的质量和长度。当你改变的值r,你不需要记住正确的值J

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

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

  • 你不能设置数据类型(数据类型属性)的参数对象使用表达式汽车(默认)和设置参数的数据类型对象出现在以外的一个值的表达式汽车。例如,在表达式J = m * r ^ 2,你不能设置的数据类型J汽车的数据类型r

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

    • 除了使用价值汽车对于出现在表达式的一个对象,设置所有参数的依赖对象的数据类型以外的一个值汽车。换句话说,不要使用汽车对于任何涉及对象。

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

  • 如果你有金宝app仿真软件编码器™和嵌入式编码®许可证,您可以生成代码初始化全局变量使用表达式。然而,代码生成器可以保存表达式只有符合特定的要求。看到表达式保存(金宝app仿真软件编码器)。

控制参数值的范围

范围变量的模型和块的设置,可以使用变量。例如,变量创建基本工作空间的全局作用域,因为所有的块在所有打开的模型可以使用变量。变量存储在工作区范围有限,因为只有块模型在宿主模型可以使用变量。

你不能创建两个变量具有相同的名称相同的范围。控制一个变量的范围,帮助你避免名称冲突,建立明确的所有权变量。

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

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

面具子系统参数创建一个蒙版而不是一个工作空间变量。

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

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

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

基本信息模块如何使用您指定的变量名,明白了符号解析

永久存储工作空间变量

您创建的变量之间的基本工作空间不存在MATLAB会话。但是,您可以将变量存储在MAT-file或者脚本文件,并加载文件当你打开模型使用一个回调。一个模型回调仿真软件是一组命令执行时以特定的方式与模型交互,比如金宝app打开模型。您可以使用一个回调负荷变量当你打开模型。当你使用这种技术来存储变量学习模型和实验模型。金宝app

  1. 在一个模型,该模型包含了一个获得块,设置的值获得参数K

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

    K = 27个;

  3. 在工作空间浏览器中,右键单击变量和选择另存为

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

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

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

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

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

  7. 保存模型。

下次你打开模型PreloadFcn回调函数加载变量K基本工作空间。你也可以保存变量MAT-file,例如loadvar.mat回调,并设置模型负载loadvar

了解回调,明白了回调函数自定义模型的行为。以编程方式为加载变量,定义一个回调以编程方式存储空间变量的模型

变量保存到文件时,您必须保存更改,你在MATLAB会话变量。永久存储变量的模型中,考虑使用一个模型工作区或数据字典而不是MAT-file或者脚本文件。永久存储变量的更多信息,请参阅确定在哪里存储变量和对象模型模型金宝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-file保存变量,使用函数保存。以编程方式设置模型属性等回调,使用函数set_param

管理和编辑工作空间变量

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

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

多个之间分享断点向量或表数据一天的查找表,Prelookup,插值使用Prelookup块,考虑存储中的数据金宝appSimulink.LookupTable金宝appSimulink.Breakpoint而MATLAB变量或对象金宝appSimulink.Parameter对象。这种技术可以改进模型可读性通过清晰地识别一个查找表的数据部分和显式地将断点数据与表数据。

存储独立查找表金宝appSimulink.LookupTable对象

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

当你分享一个独立的查找表,您可以使用所有的表和数据在多个断点一天的查找表块。将这些数据存储在一个金宝appSimulink.LookupTable对象:

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

    myLUTObj = 金宝appSimulink.LookupTable;

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

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

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

  5. 的右边数据规范,设置的名字的名称金宝appSimulink.LookupTable对象。

为创建和配置方法金宝appSimulink.LookupTable对象,看到金宝appSimulink.LookupTable

共享数据存储在金宝appSimulink.LookupTable金宝appSimulink.Breakpoint对象

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

存储断点和表数据:

  1. 创建一个金宝appSimulink.LookupTable为每一个独特的表数据对象。创建一个金宝appSimulink.Breakpoint对象为每个独特断点的向量,向量包括断点,你不打算分享。

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

  3. 配置金宝appSimulink.LookupTable对象引用金宝appSimulink.Breakpoint为断点数据对象。在金宝appSimulink.LookupTable对象,设置规范参考。指定的名称金宝appSimulink.Breakpoint对象。

  4. 插值使用Prelookup块,设置规范查找表对象。集的名字的名称金宝appSimulink.LookupTable对象。

    Prelookup块,设置规范断点对象。集的名字的名称金宝appSimulink.Breakpoint对象。

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

  1. 打开示例模型。

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

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

  4. 创建新的数据对话框中,设置价值金宝appSimulink.Breakpoint并点击创建

    一个金宝appSimulink.Breakpoint对象出现在基地工作空间。

  5. 在属性对话框sharedBkpts,指定价值作为一个向量等(1 2 3 4 5 6 7 8 9 10]。点击好吧

  6. Prelookup块对话框中,点击好吧

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

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

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

  10. 创建新的数据对话框中,设置价值金宝appSimulink.LookupTable并点击创建

    一个金宝appSimulink.LookupTable对象出现在基地工作空间。

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

  12. 规范参考

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

  14. 插值使用Prelookup块对话框中,点击好吧

  15. 配置插值使用Prelookup1块使用金宝appSimulink.LookupTable对象命名dataForSecondTable。在“对象属性”对话框中,指定价值一个向量,如[0 4.5 3.5 2.5 0.5 1.5 1 2 3 4)。配置对象引用sharedBkpts断点数据。

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

  • 的组合sharedBkptsdataForFirstTable

  • 的组合sharedBkptsdataForSecondTable

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

相关的话题