主要内容

数据对象

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

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

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

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

数据类命名约定

万博1manbetxSimulink使用Dot表示法命名数据类:

package.class

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

  • 是类的名称。

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

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

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

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

使用参数对象

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

  1. 在模型中,在建模选项卡,在设计,点击属性检查器

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

  3. 设置的值获得参数my

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

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

    万博1manbetx仿真软件。参数对象,my,显示在基本工作区中。属性对话框显示对象存储参数值15.23在里面价值财产。

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

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

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

使用信号对象

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

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

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

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

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

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

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

  6. 在“创建新数据”对话框中,设置价值万博1manbetx仿真软件。信号.使用位置下拉列表选择要存储对象的工作区(默认值是基本工作空间).点击创建

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

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

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

以编程方式配置信号:

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

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

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

州。可以使用信号对象来控制块状态的特征,例如离散时间积分器块。

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

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

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

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

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

  6. 在“创建新数据”对话框中,设置价值万博1manbetx仿真软件。信号.使用位置下拉列表选择要存储对象的工作区(默认值是基本工作空间).点击创建

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

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

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

以编程方式配置状态:

%创建信号对象。myState = 万博1manbetxSimulink.Signal;myState。数据类型='int16'%在块中设置状态名。set_param(“myModel / myBlock”“StateName”“myState”%设置端口参数“StateMustResolveToSignalObject”。set_param(“myModel / myBlock”“StateMustResolveToSignalObject”“上”

数据对象属性

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

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

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

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

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

模型资源管理器在其中显示对象的属性对话框对话框窗格(如果窗格是可见的)。

属性中可以配置Model Explorer以显示某个对象的部分或全部属性内容窗格(参见模型浏览器).属性中的值可以编辑属性内容对话框窗格。该值将被允许更改该值的控件替换。

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

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

价值obj.propertyobj.property价值

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

获得= Sim万博1manbetxulink.AliasType;收益。基类型=“uint8”

你可以使用点符号递归地获取和设置对象的属性,这些属性是其他对象的属性值,例如:

gain.CoderInfo.StorageClass ='ExportedGlobal'

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

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

创建数据对象

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

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

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

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

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

以编程方式创建数据对象

创建一个Simulin万博1manbetxk。参数对象命名mywhose value is 15.23.myparam = 万博1manbetxsimulink.parameter(15.23);创建一个Simulin万博1manbetxk。信号对象命名mySig。mySig = 万博1manbetxSimulink.Signal;

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

你可以把数值变量转换成万博1manbetx仿真软件。参数对象,如下所示。

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

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

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

从另一个包创建数据对象

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

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

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

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

  4. 单击旁边的箭头添加参数添加信号.选择要创建的数据对象的类。例如,选择myPackage参数myPackage信号

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

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

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

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

%创建一个mypackage.parameter对象命名% myParam,其值为15.23。myParam = myPackage.Parameter (15.23);创建一个myPackage。信号对象命名mySig。mySig = myPackage.Signal;

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

当你打开一个信号属性对话框,一个块对话框,或属性检查器(在建模选项卡,在设计,点击属性检查器),您可以有效地在工作区或数据字典中创建信号或参数数据对象。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 信号、参数或状态名。

  • 参数对象的数值。

  • 数据类型。对于信号对象,包括别名类型,例如sumlink.aliaStype万博1manbetx仿真软件。NumericType

  1. 在Simuli万博1manbetxnk编辑器中建模选项卡,在设计,点击数据对象向导

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

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

  3. 找到选项,选择要创建的数据对象类型旁边的复选框。表格描述了选项。

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

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

    离散滤波器
    离散状态空间
    离散时间积分器
    离散传递Fcn
    离散Zero-Pole
    内存
    离散PID控制器
    离散时间PID控制器(二自由度)
    单位延迟
    数据存储 数据存储。有关数据存储的详细信息,请参见本地和全球数据存储
    块输出 源是非根级块的命名信号。
    参数
    • 数值参数,例如这些块中的参数:

      常数
      获得
      继电器
    • Stateflow®数据与范围设置为参数

    别名类型 数据类型您指定的替换名称配置参数>代码生成>数据类型替换.如果您有嵌入式编码器许可,数据对象向导将创建万博1manbetx仿真软件。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 ='const';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数据对象方法都是动态方法。除非方法的文档另有规定,否则可以假定方法是动态方法。

静态方法

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

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

构造函数

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

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

句柄vs值类

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

对值类

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

例如,万博1manbetx仿真软件。NumericType是一个值类。执行以下陈述

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

创造了两个类实例万博1manbetx仿真软件。NumericType在工作区中,分配给变量的一个x另一个是y

关于处理类

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

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

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

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

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

大多数Si万博1manbetxmulink数据对象类是value类。例外包括万博1manbetx仿真软件。信号万博1manbetx仿真软件。参数类。

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

复制处理对象

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

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

比较数据对象

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

a = 万博1manbetxsimulink.signal;b = 万博1manbetxsimulink.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解决歧义的一种方法是指定一个信号解析为万博1manbetx仿真软件。信号数据对象。选择信号名称必须解析为Simulink信号对象万博1manbetx“信号属性”对话框中的。

要配置信号数据,请使用代码映射编辑器或代码映射API将信号添加到模型代码映射中,并设置存储类和存储类属性。为万博1manbetxSimulink Coder™,请参阅配置C代码生成的信号数据(万博1manbetx仿真软件编码器).有关嵌入式编码器,请参见配置C代码生成的信号数据(嵌入式编码)

创建持久数据对象

要保留数据对象,以便在关闭MATLAB时持续,您可以:

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

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

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

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

加载data_objects.为模型的预载函数。无论何时打开模型,数据对象都会出现在基本工作区中。

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

另请参阅

||||

相关的话题