文档

数据对象

您可以创建数据对象指定信号、状态和块参数的值、值范围、数据类型、可调性和其他特性。在Simulink中使用对象名万博1manbetx®对话框指定信号,状态和参数特征。该对象存在于工作空间中,例如基础工作区,模型工作区或Simulink数据字典。万博1manbetx数据对象允许您通过仅更改工作区对象的值来对信号,状态和参数特性进行模型更改。

创建数据对象作为数据类的实例。内存结构称为数据类包包含数据类定义。内置包万博1manbetx定义两个数据类,万博1manbetxsimulink.signal.万博1manbetx仿真软件。参数,可用于创建数据对象。存储查询表数据以便在查询表块之间共享(例如一天的查找表),你可以使用万博1manbetx仿真软件。LookupTable万博1manbetx仿真软件。断点类。

决定是否使用数据对象配置信号,包括轮廓尺寸外港块,请参见存储信号和状态的设计属性

您可以通过定义内置数据类的子类来定制数据对象属性和方法。有关创建数据类包的详细信息,请参阅定义数据类

数据类命名约定

万博1manbetxSimulink使用点符号命名数据类:

package.class

  • 包裹包含类定义的包的名称。

  • 是类的名称。

这种表示法允许您创建和引用命名相同的属于不同包的类。在这种表示法中,是包的名称有资格类的名称。

类和包名是区分大小写的。例如,您不能使用MYPACKAGE。MYCLASSmypackage.myclass可以互换地引用同一个类。

使用数据对象万博1manbetx模型

若要通过修改工作空间或数据字典中的变量来指定信号、块参数和状态的模拟和代码生成选项,请使用数据对象。在模型图中将对象与信号、参数和状态关联起来。

使用参数对象

您可以使用参数对象而不是数字MATLAB®变量,指定块参数的值。例如,要创建和使用a万博1manbetx仿真软件。参数对象命名myParam指定获得A.参数获得布洛克:

  1. 在模型中,选择视图>属性检查器

  2. 在模型中,单击目标获得块。属性检查器显示块的属性和参数。

  3. 设置值获得参数到myParam

  4. 在参数值旁边,单击操作按钮并选择创建

  5. 创建新的数据对话框,设置价值万博1manbetxsimulink.parameter(15.23)并点击创建

    万博1manbetx仿真软件。参数目的,myParam,出现在基础工作区中。“属性”对话框显示对象存储参数值15.23价值财产。

  6. 使用属性对话框通过调整对象属性来指定块参数的其他特征。例如,要指定参数可以接受的最小值和最大值,可以使用最低最大限度属性。

在模拟过程中,获得参数现在使用该值15.23

使用共享查找表数据的步骤万博1manbetx仿真软件。LookupTable万博1manbetx仿真软件。断点对象,请参见包共享断点和查找表的表数据

使用信号对象

您可以关联一个信号线或闭塞状态,例如单位延迟块,带有一个信号对象。

为信号。若要使用信号对象来控制模型中信号的特征,请使用与信号相同的名称在工作空间中创建该对象。

  1. 在模型中,选择视图>模型数据编辑器

  2. 在模型数据编辑器中,选择信号选项卡。

  3. 在模型中,选择目标信号。模型数据编辑器突出显示与信号对应的行。

  4. 在模型数据编辑器中的名字列,给出信号一个名称,如mySig

  5. 单击该按钮在信号名称旁边。选择创建和解决

  6. 在“创建新数据”对话框中,设置价值万博1manbetxsimulink.signal..使用位置下拉列表,选择用于存储对象的工作空间(默认值为基本工作空间).点击创建

    万博1manbetxsimulink.signal.对象mySig出现在目标工作区中。万博1manbetxSimulink选择信号属性信号名称必须解析为Simulink信号对象万博1manbetx,它强制模型中的信号来使用信号对象存储的属性。要了解如何控制信号名称解析为信号对象的方式,请参阅符号解析

    新对象的属性对话框打开。

  7. 使用“属性”对话框指定信号特征。单击好的

以编程方式配置信号:

%创建信号对象。mySig = 万博1manbetxSimulink.Signal;mySig。数据类型=“布尔”获取块端口的句柄,该端口创建%的目标信号。portHandles = get_param (“myModel / myBlock”,“portHandles”);OutportHandle = porthandles.outport;%指定Programmatic Port参数的“名称”。set_param (outportHandle“名字”,“mySig”%设置端口参数'MustresolVetosignAlobject'。set_param (outportHandle“MustResolveToSignalObject”,“上”

配置根级外港块,您必须使用稍微不同的技术:

%创建信号对象。mySig = 万博1manbetxSimulink.Signal;mySig。数据类型=“布尔”%指定编程块参数“SignalName”。设置参数(“myModel / myOutport”,“SignalName”,“mySig”%设置块参数'MustResolveToSignalObject'。设置参数(“myModel / myOutport”,“MustResolveToSignalObject”,“上”

州。您可以使用信号对象来控制块状态的特征,例如离散时间集成商块。

  1. 在模型中,选择视图>模型数据编辑器

  2. 在模型数据编辑器中,选择状态选项卡。

  3. 在模型中,选择承载目标状态的块。模型数据编辑器突出显示对应于状态的行。

  4. 在模型数据编辑器中的名字列,为状态指定一个名称,例如myState

  5. 单击该按钮在州名旁边。选择创建和解决

  6. 在“创建新数据”对话框中,设置价值万博1manbetxsimulink.signal..使用位置下拉列表,选择用于存储对象的工作空间(默认值为基本工作空间).点击创建

    万博1manbetxsimulink.signal.对象myState出现在目标工作区中。万博1manbetxSimulink选择块参数状态名必须解析为Simulink信号对象万博1manbetx,它强制模型中的状态使用信号对象存储的属性。要了解如何控制状态名称解析为信号对象的方式,请参见符号解析

    新对象的属性对话框打开。

  7. 使用属性对话框指定状态特征。点击好的

以编程方式配置状态:

%创建信号对象。mystate = 万博1manbetxsimulink.signal;mystate.datatype =.“int16”%在块中设置状态名。设置参数(“myModel / myBlock”,“StateName”,'Mystate'%设置端口参数“StateMustResolveToSignalObject”。设置参数(“myModel / myBlock”,“StateMustResolveToSignalObject”,“上”

数据对象属性

若要使用数据对象控制参数和信号特征,请为数据对象属性指定值。例如,参数和信号数据对象具有数据类型属性,确定目标块参数或信号的数据类型。数据类定义确定数据对象属性的名称、值类型、默认值和有效值范围。

您可以使用Model Explorer或MATLAB命令更改数据对象的属性。

有关信号对象属性的列表,请参见万博1manbetxsimulink.signal..有关参数对象属性的列表,请参见万博1manbetx仿真软件。参数

使用模型资源管理器更改对象的属性

若要使用模型资源管理器更改对象的属性,请在模型资源管理器中选择包含该对象的工作空间模型层次结构窗格。然后在模型资源管理器中选择对象内容窗格。

Model Explorer在其上显示“对象的属性”对话框对话框窗格(如果窗格是可见的)。

属性中可以配置Model Explorer以显示某个对象的部分或全部属性内容窗格(参见模型资源管理器:内容窗格).属性中的值可以编辑属性内容或者对话框窗格。该值由允许您更改值的控件替换。

使用MATLAB更改对象属性的命令

您还可以使用MATLAB命令来获取和设置数据对象属性。在MATLAB命令和程序中使用以下点符号来获取和设置数据对象的属性:

价值obj.property.obj.property.价值

在哪里obj是一个变量,如果它是一个值类的实例,它引用对象,或者如果对象是一个句柄类的实例,它引用对象(参见句柄vs值类),财产属性的名称,和价值为属性的值。例如,下面的MATLAB代码创建了一个数据类型别名对象(即万博1manbetxsimulink.aliaStype.),并将其基类型设置为uint8

gain = 万博1manbetxsimulink.aliaStype;gain.baseType =.'uint8'

您可以递归使用点表示法以获取并设置对象的属性,这些属性是其他对象属性的值,例如,

gain.CoderInfo.StorageClass =“ExportedGlobal”

从内置数据类包中创建数据对象万博1manbetx

内置的包万博1manbetx定义两个数据对象类万博1manbetx仿真软件。参数万博1manbetxsimulink.signal.。您可以使用用户界面或以编程方式创建这些数据对象。

创建数据对象

  1. 在模特资源管理器中模型层次结构窗格中,选择一个工作区以包含数据对象。例如,单击基本工作空间

  2. 在工具栏上,单击旁边的箭头添加参数或者添加信号.从下拉列表中,选择万博1manbetx模型参数或者万博1manbetx模拟链路信号

    参数或信号对象出现在基础工作区中。新参数对象的默认名称是参数.新信号对象的默认名称是团体

  3. 如果需要创建更多对象,请单击添加参数或者添加信号

创造万博1manbetx仿真软件。LookupTable万博1manbetx仿真软件。断点对象,在模型资源管理器工具栏中使用按钮。

以编程方式创建数据对象

创建一个Simulin万博1manbetxk。参数对象命名myParamwhose value is 15.23.myParam=Si万博1manbetxmulink.参数(15.23);创建一个Simulin万博1manbetxk。信号对象命名mySig。mySig = 万博1manbetxSimulink.Signal;

将数值变量转换为参数对象

您可以将数字变量转换为a万博1manbetx仿真软件。参数对象,如下所示。

/ *定义数字变量基地工作区myvar# = 5;/ *创建数据对象分配变量价值myObject = 万博1manbetxSimulink.Parameter (myvar#);

从另一个数据类包创建数据对象

您可以创建自己的包以定义子类的自定义数据对象类万博1manbetx仿真软件。参数万博1manbetxsimulink.signal..您可以使用这种技术向数据对象添加自己的属性和方法。如果你有嵌入式编码器®许可证,您可以在包中定义自定义存储类和内存部分。有关创建数据类包的详细信息,请参阅定义数据类

从另一个包创建数据对象

假设您定义了一个调用的数据类包myPackage.在可以从包中创建数据对象之前,必须在MATLAB路径中包含包含包文件夹的文件夹。

  1. 在模特资源管理器中模型层次结构窗格中,选择一个工作区以包含数据对象。例如,单击基本工作空间

  2. 单击旁边的箭头添加参数或者添加信号并选择自定义类列表

  3. 在对话框中,选择您想要的类旁边的复选框。例如,选中旁边的复选框myPackage。参数myPackage。信号.点击好的

  4. 单击旁边的箭头添加参数或者添加信号选择the class for the data object that you want to create. For example, selectmyPackage参数或者myPackage信号

    参数或信号对象出现在基础工作区中。新参数对象的默认名称是参数.新信号对象的默认名称是团体

  5. 从包中创建更多数据对象myPackage,点击添加参数或者添加信号再一次

以编程方式从另一个包创建数据对象

假设您定义了一个调用的数据类包myPackage.在可以从包中创建数据对象之前,必须在MATLAB路径中包含包含包文件夹的文件夹。

%创建名为的myPackage.Parameter对象% myParam,其值为15.23。myparam = mypackage.parameter(15.23);%创建一个MyPackage.Signal对象名为MySIG。mySig = myPackage.Signal;

直接从对话框创建数据对象

当您打开信号属性对话框、块对话框或属性检查器(视图>属性检查器),您可以有效地在工作区或数据字典中创建信号或参数数据对象。

从“块”对话框中创建参数对象

  1. 在对话框中的数字块参数中,指定要用于数据对象的名称。例如,指定名称myParam

  2. 单击该按钮在块参数的值旁边。选择创建

  3. 创建新的数据对话框中,指定价值作为万博1manbetx仿真软件。参数

    或者,您可以指定您创建的数据类的名称,例如myPackage。参数.还可以使用下拉列表从可用数据对象类列表中进行选择。

  4. 指定位置作为基本工作空间并点击创建

    你可以使用位置选项以选择包含新数据对象的工作区。如果模型链接到数据字典,则可以选择在字典中创建数据对象。

  5. 在打开的对话框中,配置数据对象属性。指定参数的数值价值盒子。点击好的

    的参数对象myParam出现在基本工作区中。

  6. 在“块参数”对话框中,单击好的

从信号属性对话框中创建信号对象

  1. 信号的名字框,指定信号名称,如mySig.点击应用

  2. 单击该按钮在价值的旁边信号的名字选择创建和解决

  3. 创建新的数据对话框中,指定价值作为万博1manbetxsimulink.signal.

    或者,您可以指定您创建的数据类的名称,例如myPackage。信号.此外,在下拉列表中,您可以选择在MATLAB路径上存在的数据对象类。

  4. 指定位置作为基本工作空间并点击创建

    你可以使用位置选项以选择包含新数据对象的工作区。如果模型链接到数据字典,则可以选择在字典中创建数据对象。

  5. 在打开的对话框中,配置数据对象属性并单击好的

    信号对象mySig出现在基本工作区中。在“信号属性”对话框中,信号名称必须解析为Simulink信号对象万博1manbetx财产被选中。

使用数据对象向导为模型创建数据对象

要创建表示模型中的信号、参数和状态的数据对象,可以使用数据对象向导。向导在模型中查找没有相应数据对象的数据。

根据模型中的规范,向导创建对象并分配这些特征:

  • 信号、参数或状态名。

  • 参数对象的数值。

  • 数据类型。对于信号对象,包括别名类型,例如Sumlink.AliasType万博1manbetxsimulink.numerictype.

  1. 在Simuli万博1manbetxnk编辑器中,选择代码>数据对象>数据对象向导

  2. 模型名称框中,输入要搜索的模型的名称。

    默认情况下,该框包含从中打开向导的模型的名称。

  3. 在下面找到选项,选中要创建的数据对象类型旁边的复选框。该表描述了选项。

    选项 描述
    根输入 来自root级的命名信号轮廓尺寸块。
    根输出 来自root级的命名信号外港块。
    状态

    与这些离散块关联的状态:

    离散滤波器
    离散状态空间
    离散时间集成商
    离散传递Fcn
    离散Zero-Pole
    内存
    PID控制器
    PID控制器(2自由度)
    单位延迟
    数据存储 数据存储。有关数据存储的详细信息,请参见本地和全球数据存储
    块输出 源是非根级块的命名信号。
    参数
    别名类型 在中指定的数据类型替换名称配置参数>代码生成>数据类型更换.如果你有嵌入式编码器®许可证,数据对象向导会创建万博1manbetxsimulink.aliaStype.这些数据类型替换名称的对象。有关数据类型替换的更多信息,请参阅模型配置参数:代码生成数据类型替换(嵌入式编码器)
  4. 点击

    数据对象表显示建议的对象。

  5. (可选)若要从默认类以外的数据类创建对象,请选中要更改其类的对象旁边的复选框。要选择所有对象,单击选择所有.点击换班.在打开的对话框中,使用旁边的下拉列表选择类参数信号

    如果您想要的类没有出现在下拉列表中,请选择自定义类列表。在打开的对话框中,选中所需类旁边的复选框,然后单击好的

    要更改向导用于建议对象的默认参数和信号类,请执行以下操作:

    • 在模型浏览器上模型层次结构窗格中,选择一个工作区。例如,选择基本工作空间

    • 在工具栏上,单击旁边的箭头添加参数或者添加信号

    • 从下拉列表中,选择您希望向导使用的类。例如,选择myPackage参数或者myPackage信号

      一个参数或信号对象将出现在选定的工作区中。新参数对象的默认名称是参数.新信号对象的默认名称是团体

      下次使用数据对象向导时,向导会使用您在模型资源管理器中选择的参数或信号类提出对象。

  6. 选择要创建的建议对象旁边的复选框。要选择所有建议的对象,请单击选择所有

  7. 点击创建

    数据对象出现在基本工作区中。如果目标模型链接到数据字典,对象就会出现在字典中。

    向导会根据配置参数更改模型中的设置配置参数>诊断>数据的有效性>信号的分辨率

    • 如果将参数设置为仅显式,向导将强制模型中相应的信号和状态解析为新的信号对象。向导将选择此选项信号名称必须解析为Simulink信号对象万博1manbetx在每个信号属性对话框和状态名必须解析为Simulink信号对象万博1manbetx在每个块对话框中。

    • 如果将参数设置为显式和隐式或者显性和隐性警告,则向导不更改的设置信号名称必须解析为Simulink信号对象万博1manbetx或者状态名必须解析为Simulink信号对象万博1manbetx对于任何信号或状态。

    考虑通过使用该功能关闭模型的隐式信号对象分辨率disableimplicitsignalresolution.有关更多信息,请参阅显式和隐式符号解析

数据对象向导故障排除

数据对象向导并不建议在模型中为这些实体创建数据对象:

  • 具有相同名称的多个单独信号。

  • 与块参数中使用的变量同名的信号。

  • 缺少单个连续源块的信号。

  • 源块被注释掉或注释透的信号。

  • 被呈现为非活动的数据项变异来源变体水槽块。该向导仅为与活动块关联的数据项提出对象。

  • 设置模型配置参数时信号和状态信号的分辨率没有一个

以编程方式从外部数据源创建数据对象

这个示例展示了如何基于外部数据源创建数据对象(例如微软®Excel®文件)使用脚本。

  1. 创建一个新的matlab脚本文件。

  2. 将描述要转换为数据对象的外部文件中的数据的信息放入文件中。例如,以下信息创建了两个万博1manbetx具有指定属性的数据对象。第一个用于参数,第二个用于信号:

    %参数ParCon = 万博1manbetxSimulink.Parameter;ParCon.CoderInfo.StorageClass =“自定义”ParCon.CoderInfo.CustomStorageClass=“康斯特”;ParCon。价值=3;%的信号SigGlb = 万博1manbetxSimulink.Signal;SigGlb。数据类型=“int8”

  3. 运行脚本文件。数据对象出现在MATLAB工作区中。

如果要从外部源导入目标数据,可以编写MATLAB函数和脚本来读取信息,将信息转换为数据对象,并将对象加载到基本工作区。

你可以使用这些函数与MATLAB外部的文件进行交互:

  • XMLREAD.

  • xmlwrite

  • xlsread

  • xlswrite

  • csvread

  • csvwrite.

  • dlmread

  • dlmwrite

数据对象的方法

数据类定义了被称为方法的函数,用于创建和操作它们所定义的对象。类可以定义下列任何一种方法。

动态方法

动态方法的标识依赖于它的名称和作为其第一个参数隐式或显式指定的对象的类。您可以使用函数表示法或点表示法来指定该对象,该对象必须是定义方法的类的实例,或定义方法的类的子类的实例。例如,假设类一个定义一个名为setName的实例的名称一个.进一步,假设MATLAB工作空间包含一个赋给变量的A实例obj.然后,您可以使用下列语句中的任何一个来分配名称“foo”obj

obj.setName (“foo”);setName (obj,“foo”);

一个类可以定义一组方法,这些方法与它的一个超类定义的方法同名。在这种情况下,由子类定义的方法覆盖由父类定义的方法的行为。万博1manbetxSimulink确定在运行时从指定为第一个或隐式参数的对象的类调用哪个方法。因此才有了动态方法这个术语。

请注意

大多数Si万博1manbetxmulink数据对象方法都是动态方法。除非方法的文档另有规定,否则可以假定方法是动态方法。

静态方法

静态方法的标识仅依赖于其名称,因此不能在运行时更改。要调用静态方法,请使用它的完全限定名,该名称包括定义它的类的名称,后跟方法本身的名称。例如,万博1manbetxsimulink.modeladvisor.类定义一个名为getModelAdvisor.这个静态方法的全限定名是万博1manbetxSimulink.ModelAdvisor.getModelAdvisor.下面的示例演示了静态方法的调用。

马= Si万博1manbetxmulink.ModelAdvisor.getModelAdvisor (“vdp”);

构造函数

每个数据类都定义了一个方法来创建该类的实例。该方法的名称与该类的名称相同。例如万博1manbetx仿真软件。参数类的构造函数万博1manbetx仿真软件。参数.由Simulink数据类定义的构造函数没有参数。万博1manbetx

构造函数返回的值取决于它的类是句柄类还是值类。句柄类的构造函数返回它创建的实例的句柄,如果实例的类是句柄类;否则,它将返回实例本身(参见句柄vs值类).

句柄vs值类

万博1manbetxSimulink类,包括数据对象类,分为两类:值类和句柄类。

对值类

a的构造函数价值类别(见构造函数)返回类的实例,该实例与最初赋值的MATLAB变量永久关联。重新赋值或将变量传递给函数会导致MATLAB创建并赋值或传递原始对象的副本。

例如,万博1manbetxsimulink.numerictype.是一个值类。执行以下语句

x = 万博1manbetxSimulink.NumericType;y = x;

创建类的两个实例万博1manbetxsimulink.numerictype.在工作区中,分配给变量的一个x另一个是y

关于处理类

a的构造函数处理类返回句柄对象。句柄可以分配给多个变量,也可以传递给函数,而无需创建原始对象的副本。例如万博1manbetx仿真软件。参数类是句柄类。执行

x = 万博1manbetxSimulink.Parameter;y = x;

的实例万博1manbetx仿真软件。参数类。变量x和y都通过实例的句柄来引用实例。

程序可以通过修改引用句柄类的任何变量来修改句柄类的实例,例如,继续前面的例子,

x.Description =“输入增益”;y.Description
输入增益

大多数Si万博1manbetxmulink数据对象类都是值类万博1manbetxsimulink.signal.万博1manbetx仿真软件。参数类。

要确定变量的值是对象(值类)还是对象的句柄,请参见确定一个对象是否为句柄(MATLAB)。

复制句柄类

使用句柄类的复制方法来创建该类实例的副本。例如,万博1manbetxSimulink.ConfigSet是表示模型配置集的句柄类。下面的代码创建当前模型的活动配置集的副本,并将其附加到模型中,作为用于模型开发的备用配置。

activeConfig = getActiveConfigSet (gcs);develConfig = (activeConfig)复印件;develConfig。Name =“develConfig”;attachConfigSet (gcs、develConfig);

比较数据对象

万博1manbetxSimulink数据对象提供了一个方法,命名为isequal,以确定对象属性值是否相等。该方法将一个对象的属性值与属于另一个对象的属性值进行比较,并返回true (1),如果所有值都相同或为false (0否则)。例如,下面的代码实例化了两个信号对象(A和B)并指定了特定属性的值。

A=Si万博1manbetxmulink.Signal;B=Simulink.Signal;A.DataType=“int8”;b.datatype =.“int8”;A.InitialValue =.“1.5”;B.InitialValue =.“1.5”

之后,使用isequal方法来验证A和B的对象属性是否相等。

结果= isequal (A, B)
结果= 1

解决代码生成中信号对象配置的冲突

如果在信号属性对话框中定义了一个信号,并且通过使用命令行或在Model Explorer中定义了同名的信号对象,那么当Simulink引擎试图解析表示信号名称的符号时,可能存在歧义。万博1manbetx解决歧义的一种方法是指定一个信号解析到Simulink数据对象。万博1manbetx选择信号名称必须解析为Simulink信号对象万博1manbetx“信号属性”对话框中的。您不能指定存储类土地上的财产代码生成选项卡中的“信号属性”。

如上面的图所示存储类菜单被禁用,因为它取决于辛西格万博1manbetxsimulink.signal.对象指定其自己的存储类。

信号和信号对象辛西格都有模型的默认存储类。因此,辛西格解析为信号对象辛西格

请注意

块状态/信号对象之间的兼容性规则与给出的信号/信号对象的规则相同。

创建持久数据对象

要保留数据对象,使其在关闭MATLAB时保持不变,可以:

  • 将对象存储在数据字典或模型工作区中。要决定永久存储模型数据的位置,请参阅确定用于存储Simulink模型的变量和对象的位置万博1manbetx

  • 使用保存将数据对象保存在MAT文件中的命令,以及负载命令将它们恢复到同一会话或稍后会话中的MATLAB基础工作区。配置模型,在模型加载时从mat文件或脚本文件加载对象。

要在加载模型时从文件加载数据对象,请编写创建对象并配置其属性的脚本。或者,将对象保存在mat文件中。然后使用脚本或load命令作为PreLoadFcn使用对象的模型的回调例程。假设您将数据对象保存在一个名为data_objects.mat,它们适用的模型是开放和活动的。在命令提示符下,输入:

set_param(gcs,“PreLoadFcn”,“负载data_objects”);

加载数据对象作为模型的预载功能。每当您打开模型时,数据对象都会显示在基础工作区中。

保存对象的类的定义必须在MATLAB路径上存在,才能恢复它们。如果保存的对象的类在保存对象之后获得了新属性,那么Simulink会将新属性添加到对象的恢复版本中。万博1manbetx如果在保存对象之后类失去了属性,则只恢复剩下的属性。

另请参阅

||||

相关话题

这个话题有用吗?