主要内容

数据对象

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

将数据对象创建为数据类的实例。内存结构被称为数据类包包含数据类定义。内置包金宝app定义两个数据类,金宝app仿真软件。信号而且金宝app仿真软件。参数,可用于创建数据对象。存储查找表数据,以便在查找表块(例如n-D查找表),你可以使用金宝app仿真软件。LookupTable而且金宝app仿真软件。断点类。

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

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

数据类命名约定

金宝appSimulink使用点表示法来命名数据类:

package.class

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

  • 是类的名称。

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

类名和包名区分大小写。例如,你不能使用MYPACKAGE。MYCLASS而且mypackage.myclass可互换地引用同一类。

中使用数据对象金宝app模型

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

使用参数对象

你可以使用参数对象,而不是数值MATLAB®变量,以指定块参数的值。例如,创建和使用金宝app仿真软件。参数对象命名myParam要指定获得a的参数获得布洛克:

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

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

  3. 的值获得参数myParam

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

  5. 创建新数据对话框,设置价值金宝appSimulink.Parameter (15.23)并点击创建

    金宝app仿真软件。参数对象,myParam,出现在基本工作区中。属性对话框显示对象存储参数值15.23价值财产。

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

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

使用共享查找表数据金宝app仿真软件。LookupTable而且金宝app仿真软件。断点对象,看到打包用于查找表的共享断点和表数据

使用信号对象

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

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

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

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

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

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

  5. 点击按钮在信号名称旁边。选择创造和解决

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

    金宝app仿真软件。信号对象mySig显示在目标工作区中。金宝appSimulink选择信号属性信号名称必须解析为Simulink信号对象金宝app,这迫使模型中的信号使用信号对象存储的属性。若要了解如何控制信号名称解析为信号对象的方式,请参见符号解析

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

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

以编程方式配置信号:

创建信号对象。mySig = 金宝appSimulink.Signal;mySig。数据类型=“布尔”控件的块端口的句柄%目标信号。portandles = get_param(“myModel / myBlock”“portHandles”);outportthandle = portthandles . outport;指定编程端口参数“Name”。set_param (outportHandle“名字”“mySig”设置端口参数“MustResolveToSignalObject”。set_param (outportHandle“MustResolveToSignalObject”“上”

配置根级别外港以编程方式阻塞,你必须使用稍微不同的技术:

创建信号对象。mySig = 金宝appSimulink.Signal;mySig。数据类型=“布尔”指定编程块参数'SignalName'。set_param (“myModel / myOutport”“SignalName”“mySig”设置块参数“MustResolveToSignalObject”。set_param (“myModel / myOutport”“MustResolveToSignalObject”“上”

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

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

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

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

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

  5. 点击按钮在州名旁边。选择创造和解决

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

    金宝app仿真软件。信号对象myState显示在目标工作区中。金宝appSimulink选择块参数状态名必须解析为Simulink信号对象金宝app,它强制模型中的状态使用信号对象存储的属性。要了解如何控制状态名解析为信号对象的方式,请参见符号解析

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

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

以编程方式配置状态:

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

数据对象属性

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

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

有关信号对象属性的列表,请参见金宝app仿真软件。信号.有关参数对象属性的列表,请参见金宝app仿真软件。参数

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

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

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

属性中显示对象的部分或全部属性内容面板(见模型浏览器).属性中的值,单击内容对话框窗格。该值将由允许更改该值的控件替换。

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

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

价值obj.propertyobj.property价值

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

增益= Sim金宝appulink.AliasType;收益。基类型=“uint8”

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

gain.CoderInfo.StorageClass =“ExportedGlobal”

从内置数据类包创建数据对象金宝app

内置包金宝app定义两个数据对象类金宝app仿真软件。参数而且金宝app仿真软件。信号.您可以使用用户界面或以编程方式创建这些数据对象。

创建数据对象

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

  2. 在工具栏中,单击右侧的下箭头添加参数添加信号.在下拉列表中选择金宝app模型参数金宝app仿真软件的信号

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

  3. 单击,可以创建更多对象添加参数添加信号

创建金宝app仿真软件。LookupTable而且金宝app仿真软件。断点对象,在“模型资源管理器”工具栏上使用按钮。

以编程方式创建数据对象

创建一个Simulin金宝appk。参数对象命名myParamwhose value is 15.23.myParam = 金宝appSimulink.Parameter(15.23);创建一个Simulin金宝appk。信号对象命名mySig。mySig = 金宝appSimulink.Signal;

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

您可以将数值变量转换为金宝app仿真软件。参数对象如下。

/*定义数值变量基地工作空间myVar = 5;/*创建数据对象而且分配变量价值myObject = 金宝appSimulink.Parameter(myVar);

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

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

从另一个包创建数据对象

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

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

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

  3. 在对话框中,选中所需类旁边的复选框。例如,选中旁边的复选框myPackage。参数而且myPackage。信号.点击好吧

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

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

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

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

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

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

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

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

从块对话框创建参数对象

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

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

  3. 创建新数据对话框,指定价值作为金宝app仿真软件。参数

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

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

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

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

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

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

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

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

  2. 点击按钮的值旁边信号的名字.选择创造和解决

  3. 创建新数据对话框,指定价值作为金宝app仿真软件。信号

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

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

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

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

    信号对象mySig出现在基本工作区中。在“信号属性”对话框中信号名称必须解析为Simulink信号对象金宝app属性被选中。

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

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

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

  • 信号、参数或状态名。

  • 参数对象的数值。

  • 数据类型。对于信号对象,包括别名类型,例如Sumlink。一个liasType而且金宝app仿真软件。NumericType

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

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

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

  3. 找到选项,选中待创建的数据对象类型前的复选框。选项说明如表所示。

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

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

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

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

    别名类型 中指定的数据类型替换名称配置参数>代码生成>数据类型替换.如果您拥有嵌入式编码器许可证,则数据对象向导将创建金宝app仿真软件。AliasType对象用于这些数据类型替换名称。有关数据类型替换的详细信息,请参见模型配置参数:代码生成数据类型替换(嵌入式编码)
  4. 点击找到

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

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

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

    更改向导用于建议对象的默认参数和信号类:

    • 关于模型资源管理器模型层次结构窗格中,选择一个工作区。例如,选择基本工作空间

    • 在工具栏中,单击右侧的下箭头添加参数添加信号

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

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

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

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

  7. 点击创建

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

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

    • 如果将参数设置为明确的只,向导将强制模型中相应的信号和状态解析为新的信号对象。向导选择该选项信号名称必须解析为Simulink信号对象金宝app在每个信号属性对话框中状态名必须解析为Simulink信号对象金宝app在每个块对话框中。

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

    考虑使用函数关闭模型的隐式信号对象解析disableimplicitsignalresolution.有关更多信息,请参见显式和隐式符号解析

数据对象向导故障处理

  • 数据对象向导编译用于代码生成的模型,以便建议创建信号对象。因此,该向导不能用于对代码生成无效的模型。

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

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

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

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

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

    • 显示为非活动的数据项变异来源而且变体水槽块。向导仅为与活动块相关联的数据项建议对象。

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

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

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

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

  2. 在文件中放置描述要转换为数据对象的外部文件中的数据的信息。例如,下面的信息创建了两个金宝app具有指定属性的数据对象。第一个是参数,第二个是信号:

    %的参数ParCon = 金宝appSimulink.Parameter;ParCon.CoderInfo.StorageClass =“自定义”ParCon.CoderInfo.CustomStorageClass =“常量”;ParCon。价值=3;%的信号SigGlb = 金宝appSimulink.Signal;SigGlb。数据类型=“int8”

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

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

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

  • xmlread

  • xmlwrite

  • xlsread

  • xlswrite

  • csvread

  • csvwrite

  • dlmread

  • dlmwrite

数据对象方法

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

动态方法

动态方法是一种方法,其标识取决于其名称和作为其第一个参数隐式或显式指定的对象的类。可以使用函数或点表示法指定此对象,该对象必须是定义该方法的类的实例,或者是定义该方法的类的子类的实例。例如,假设class一个定义一个方法setName的实例分配名称一个.此外,假设MATLAB工作区包含分配给该变量的A实例obj.然后,您可以使用下列语句之一来分配名称“foo”obj

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

类可以定义一组方法,这些方法与它的某个超类定义的方法具有相同的名称。在这种情况下,子类定义的方法覆盖父类定义的方法的行为。金宝appSimulink从指定为其第一个或隐式参数的对象的类中确定在运行时调用哪个方法。因此,术语动态方法。

请注意

大多数Si金宝appmulink数据对象方法都是动态方法。除非方法的文档另有说明,否则可以假定方法是动态方法。

静态方法

静态方法的标识仅取决于其名称,因此不能在运行时更改。要调用静态方法,请使用它的完全限定名,该名称包括定义它的类的名称,后跟方法本身的名称。例如,金宝app仿真软件。ModelAdvisor类定义了一个名为getModelAdvisor.此静态方法的完全限定名为金宝appSimulink.ModelAdvisor.getModelAdvisor.下面的示例演示了静态方法的调用。

ma = 金宝appSimulink.ModelAdvisor.getModelAdvisor(“vdp”);

构造函数

每个数据类都定义了用于创建该类实例的方法。方法的名称与类的名称相同。的名称金宝app仿真软件。参数类的构造函数为金宝app仿真软件。参数.由Simulink数据类定义的构造函数不带参数。金宝app

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

句柄与值类

金宝appSimulink类包括数据对象类,分为两类:值类和句柄类。

关于价值类

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

例如,金宝app仿真软件。NumericType是值类。执行以下语句

x = 金宝appSimulink.NumericType;Y = x;

创建类的两个实例金宝app仿真软件。NumericType在工作空间中,分配给变量的一个x另一个是y

关于句柄类

的构造函数。处理类返回句柄对象。句柄可以赋值给多个变量或传递给函数,而不会导致创建原始对象的副本。例如,金宝app仿真软件。参数类是句柄类。执行

x = 金宝appSimulink.Parameter;Y = x;

的一个实例金宝app仿真软件。参数类在MATLAB工作空间。变量x和y都通过句柄引用实例。

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

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

大多数Si金宝appmulink数据对象类都是值类。异常包括金宝app仿真软件。信号而且金宝app仿真软件。参数类。

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

复制句柄对象

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

activeConfig = getActiveConfigSet(gcs);developconfig = copy(activeConfig);develConfig。Name =“develConfig”;attachConfigSet (gcs、develConfig);

比较数据对象

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

A = 金宝appSimulink.Signal;B = 金宝appSimulink.Signal;A.DataType =“int8”;B.DataType =“int8”;A.InitialValue =“1.5”;B.InitialValue =“1.5”

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

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

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

如果在“信号属性”对话框中定义了信号,并且使用命令行或在“模型资源管理器”中定义了同名的信号对象,则在Simulink引擎试图解析表示信号名称的符号时,可能存在歧义。金宝app解决歧义的一种方法是指定信号解析为金宝app仿真软件。信号数据对象。选择信号名称必须解析为Simulink信号对象金宝app选项中的“信号属性”。

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

创建持久数据对象

要保存数据对象,以便在关闭MATLAB时保持它们,您可以:

  • 将对象存储在数据字典或模型工作区中。若要确定永久存储模型数据的位置,请参见确定在哪里存储Simulink模型的变量和对象金宝app

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

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

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

负载data_objects作为模型的预加载函数。每当您打开模型时,数据对象就会出现在基本工作区中。

已保存对象的类定义必须存在于MATLAB路径上,以便恢复它们。如果已保存对象的类在保存对象后获得了新属性,则Simulink将新属性添加到对象的恢复版本中。金宝app如果类在保存对象后丢失属性,则只恢复保留的属性。

另请参阅

||||

相关的话题