主要内容

定义数据类

这个例子展示了如何子类仿真软件金宝app®数据类。

使用MATLAB®包中的类语法来创建一个数据类。可选地,将属性分配给数据类和定义存储类。

用一个例子来定义数据类

  1. 查看+金宝app SimulinkDemos数据类包文件夹matlabroot/工具/模型/ s金宝appimdemos / dataclasses(开放)。

    这个包包含预定义的数据类。

  2. 将文件夹复制到你想要的位置来定义数据类。

  3. 重命名文件夹+ mypkg并将它的父文件夹添加到MATLAB路径。

  4. 修改数据类定义。

手动定义数据类

  1. 创建一个包文件夹+ mypkg并将它的父文件夹添加到MATLAB路径。

  2. 创建类文件夹@ phase@Signal内部+ mypkg

    请注意

    金宝app模型需要定义数据类+包/ @Class文件夹。

  3. @ phase文件夹中,创建一个MATLAB文件Parameter.m打开该文件进行编辑。

  4. 定义一个数据类的一个子类金宝appSimulink.Parameter使用MATLAB类语法。

    classdef参数< Simulink金宝app.Parameter结束% classdef

使用一个自定义类名之外参数信号使用自定义名称,名称类文件夹。例如,定义一个类mypkg.myParameter:

  • 定义数据类的一个子类金宝appSimulink.Parameter金宝appSimulink.Signal

    classdefmyParameter < 金宝appSimulink.Parameter结束% classdef

  • 在类定义,构造函数的方法myParametermySignal

  • 名字的类文件夹,其中包含类定义的@myParameter@mySignal

可选:类添加属性数据

属性结束关键词附上一个属性定义块。

classdef参数< Simulink金宝app.Parameter属性%不受约束的属性类型Prop1 = [];结束属性(PropertyType =“逻辑标量”)Prop2 = false;结束属性(PropertyType =“字符”)Prop3 =;结束属性(PropertyType =“字符”,AllowedValues = {“红色”;“绿色”;“蓝”})Prop4 =“红色”;结束结束% classdef

如果你添加属性的一个子类金宝appSimulink.Parameter,金宝appSimulink.Signal,或金宝appSimulink.CustomStorageClassAttributes,您可以指定下列属性类型。

属性类型 语法
两倍数量 属性(PropertyType =“双标量”)
int32数量 属性(PropertyType = int32标量)
逻辑数 逻辑标量属性(PropertyType = ' ')
特征向量(字符) 属性(PropertyType =“字符”)
有限的特征向量组允许的值 属性(PropertyType =“字符”,AllowedValues = {' a ', ' b ', ' c '})

如果你添加一个属性,需要特殊的复制行为,您定义行为通过重写copyElement方法。例如,在+金宝app SimulinkDemos数据类包,类定义文件Parameter.m定义了属性GenericProperty无约束属性类型。的copyElement方法指定复制行为GenericProperty。当你添加、删除或更改属性,需要特殊的复制行为,你必须也要更新copyElement方法。

如果你使用MATLAB属性验证(见验证属性值)而不是PropertyType,显示的属性是作为一个类的属性对话框中的编辑字段。如果你使用PropertyTypeAllowedValues,然后属性对话框:

  • 逻辑标量属性的一个复选框。

  • 特征向量和下拉菜单AllowedValues

可选:初始化代码添加到数据类

您可以添加您的数据类中的构造函数执行在实例化类时初始化活动。添加构造函数不需要一个输入参数。

在这个例子中,构造函数初始化对象的价值obj基于一个可选的输入参数。

classdef参数< Simulink金宝app.Parameter方法函数obj =参数(optionalValue)如果(输入参数个数= = 1)obj。值= optionalValue;结束结束结束%的方法结束% classdef

可选:定义存储类

使用setupCoderInfo方法配置CoderInfo您的类的对象。然后,创建一个调用useLocalCustomStorageClasses方法和开放的自定义存储类设计师。

  1. 在自己的数据类,在构造函数中调用useLocalCustomStorageClasses方法。

    classdef参数< Simulink金宝app.Parameter方法函数setupCoderInfo (obj) useLocalCustomStorageClasses (obj,“mypkg”);obj.CoderInfo。StorageClass =“自定义”;结束结束%的方法结束% classdef
  2. 打开自定义存储类设计师为您的包。

    cscdesigner (“mypkg”)
  3. 定义存储类。

可选:为存储类定义自定义属性

  1. 创建一个MATLAB文件myCustomAttribs.m打开该文件进行编辑。保存这个文件+ mypkg / @myCustomAttribs文件夹,+ mypkg文件夹包含吗@ phase@Signal文件夹。

  2. 定义一个子类金宝appSimulink.CustomStorageClassAttributes使用MATLAB类语法。例如,考虑一个使用原始的存储类,它定义了数据标识符,还提供了数据的另一个名称生成的代码。

    classdefmyCustomAttribs < 金宝appSimulink.CustomStorageClassAttributes属性(PropertyType =“字符”)AlternateName =;结束结束% classdef

  3. 覆盖默认的实现isAddressable方法来确定存储类是可写的。

    classdefmyCustomAttribs < 金宝appSimulink.CustomStorageClassAttributes属性(PropertyType =“逻辑标量”)IsAlternateNameInstanceSpecific = true;结束方法函数retVal = isAddressable (hObj hCSCDefn hData) retVal = false;结束结束%的方法结束% classdef
  4. 覆盖默认的实现getInstanceSpecificProps方法。

    例如,看到这些覆盖函数:

    函数道具= getInstanceSpecificProps (hObj)% GETINSTANCESPECIFICPROPERTIES返回特定属性%(自定义属性可以修改每个数据对象)。如果hObj。IsStructNameInstanceSpecific道具= findprop (hObj,“StructName”);其他的道具= [];结束结束
    函数道具= getInstanceSpecificProps (hObj)% GETINSTANCESPECIFICPROPERTIES返回特定属性%(自定义属性可以修改每个数据对象)。道具= [];如果hObj。IsOwnerInstanceSpecific ptmp = findprop (hObj,“主人”);道具=[道具;ptmp];结束如果hObj。IsDefinitionFileInstanceSpecific ptmp = findprop (hObj,“DefinitionFile”);道具=[道具;ptmp];结束如果hObj。IsPersistenceLevelInstanceSpecific ptmp = findprop (hObj,“PersistenceLevel”);道具=[道具;ptmp];结束结束

    请注意

    这是一个可选的步骤。默认情况下,所有自定义属性为每个数据对象特定,并可以修改。然而,您可以限制哪些属性可以是特定的。

  5. 覆盖默认的实现getIdentifiersForInstance方法为对象的数据类定义标识符。

    请注意

    在其默认的实现中,该方法查询的名称或标识符标识符的数据对象,并使用生成的代码。通过重写这个方法,你可以控制你的数据对象的标识符生成的代码。

    classdefmyCustomAttribs < 金宝appSimulink.CustomStorageClassAttributes属性(PropertyType =“字符”)GetFunction =;SetFunction =;结束方法函数retVal = getIdentifiersForInstance (hCSCAttrib,hCSCDefn hData,标识符)retVal =结构(“GetFunction”,hData.CoderInfo.CustomAttributes.GetFunction,“SetFunction”,hData.CoderInfo.CustomAttributes.SetFunction);结束%结束%的方法结束% classdef
  6. 如果您使用的是分组存储类,覆盖默认的实现getIdentifiersForGroup方法为集团指定的标识符生成的代码。

    例如,看到的CSCTypeAttributes_FlatStructure.m在文件夹matlabroot、工具箱、仿真软件金宝app\仿真软件\ dataclasses \ +仿真软件\ @CSCTypeAttributes_FlatStructure(开放)。

相关的话题