使用MATLAB ®类语法在一个包来创建一个数据类
将属性分配给数据类并定义自定义存储类。
使用示例来定义数据类
手动定义数据类
可选:向数据类添加属性
可选:将初始化代码添加到数据类
可选:定义自定义存储类
可选:定义自定义存储类的自定义属性
查看+SimulinkDemos文件夹中的数据类包matlabroot/toolbox/simulink/simdemos/dataclasses(打开)。
该包包含预定义的数据类。
将文件夹复制到要定义数据类的位置。
重命名文件夹+mypkg并将其父文件夹添加到MATLAB路径。
修改数据类定义。
创建一个包文件夹+mypkg,并将其父文件夹添加到MATLAB路径中。
创建类的文件夹@Parameter和@Signal里面+mypkg。
Simulink要求在+Package/@Class文件夹内定义数据类。
在该@Parameter文件夹中,创建一个MATLAB文件Parameter.m并将其打开以进行编辑。
定义一个数据类,它是Simulink.Parameter使用MATLAB类语法的子类。
classdef参数<Simulink.Parameter 结束 %classdef
要使用除Parameteror 之外的自定义类名Signal,请使用自定义名称命名类文件夹。例如,要定义一个类mypkg.myParameter:
将数据类定义为Simulink.Parameter或 的子类Simulink.Signal。
classdef myParameter <Simulink.Parameter 结束 %classdef
在类定义中,将构造方法命名为myParameter或mySignal。
将包含类定义的类文件夹命名为@myParameter或@mySignal。
在properties和end关键字附上属性定义块。
classdef参数<Simulink.Parameter properties %Unconstrained属性类型 Prop1 = []; 结束 属性(PropertyType = ‘逻辑标量’) Prop2 = false; 结束 属性(PropertyType = ‘char’) Prop3 = ‘’ ; 结束 properties(PropertyType = ‘char’,… AllowedValues = { ‘red’ ; ‘green’ ; ‘blue’ }) Prop4 = ‘红色’ ; 最终结束 %classdef如果你添加属性的子类Simulink.Parameter, Simulink.Signal或者Simulink.CustomStorageClassAttributes,你可以指定下列属性类型。
如果使用MATLAB属性验证(请参阅验证属性值(MATLAB))而不是PropertyType和AllowedValues,则属性验证不会影响类的属性对话框中的外观。例如,Boolean(boolean)属性不会作为复选框出现在属性对话框中。它是利用最佳实践PropertyType和AllowedValues替代MATLAB属性验证。
您可以在数据类中添加构造函数,以在实例化类时执行初始化活动。
在此示例中,构造函数obj基于可选的输入参数初始化object的值。
classdef参数<Simulink.Parameter 方法 函数 obj =参数(optionalValue) if(nargin == 1) obj.Value = optionalValue; end end end %methods end %classdef可选:定义自定义存储类使用该setupCoderInfo方法配置CoderInfo类的对象。然后,创建对useLocalCustomStorageClasses方法的调用并打开自定义存储类设计器。
在数据类的构造函数中,调用该useLocalCustomStorageClasses方法。
classdef参数<Simulink.Parameter 方法 函数 setupCoderInfo(obj) useLocalCustomStorageClasses(obj,‘mypkg’); obj.CoderInfo.StorageClass = ‘Custom’ ; 端 端 %方法结束 %classdef打开包的自定义存储类设计器。
cscdesigner(‘mypkg’)定义自定义存储类。
创建一个MATLAB文件myCustomAttribs.m并打开它进行编辑。将此文件保存在+mypkg/@myCustomAttribs文件夹中,其中+mypkg包含文件夹@Parameter和@Signal文件夹。
定义Simulink.CustomStorageClassAttributes使用MATLAB类语法的子类。例如,考虑使用原始标识符定义数据的自定义存储类,但也为生成的代码中的数据提供备用名称。
classdef myCustomAttribs <Simulink.CustomStorageClassAttributes 属性(PropertyType = ‘char’) AlternateName = ‘’ ; 最终结束 %classdef
覆盖方法的默认实现,isAddressable以确定自定义存储类是否可写。
classdef myCustomAttribs <Simulink.CustomStorageClassAttributes 属性(PropertyType = ‘logical scalar’) IsAlternateNameInstanceSpecific = true; 结束 方法 函数 retVal = isAddressable(hObj,hCSCDefn,hData) retVal = false; 端 端 %方法结束 %classdef覆盖方法的默认实现getInstanceSpecificProps。
例如,请参阅CSCTypeAttributes_FlatStructure.m文件夹matlabroot\toolbox\simulink\simulink\dataclasses+Simulink@CSCTypeAttributes_FlatStructure(打开)和CSCTypeAttributes_Unstructed.m文件夹matlabroot\toolbox\simulink\simulink\dataclasses+mpt@CSCTypeAttributes_Unstructed(打开)。
这是一个可选步骤。默认情况下,所有自定义属性都是特定于实例的,并且可以为每个数据对象进行修改。但是,您可以限制允许哪些属性特定于实例。
覆盖方法的默认实现,getIdentifiersForInstance以定义数据类对象的标识符。
在其默认实现中,此方法查询数据对象的名称或标识符,并在生成的代码中使用该标识符。通过重写此方法,您可以在生成的代码中控制数据对象的标识符。
classdef myCustomAttribs <Simulink.CustomStorageClassAttributes 属性(PropertyType = ‘char’) GetFunction = ‘’ ; SetFunction = ‘’ ; 结束 方法 函数 retVal = getIdentifiersForInstance(hCSCAttrib,… hCSCDefn,hData,identifier) retVal = struct(’ GetFunction ',… hData.CoderInfo.CustomAttributes.GetFunction,… ’ SetFunction ',hData.CoderInfo.CustomAttributes.SetFunction); end % end %methods end %classdef如果使用分组自定义存储类,请覆盖方法的默认实现,getIdentifiersForGroup以在生成的代码中指定组的标识符。
有关示例,请参阅CSCTypeAttributes_FlatStructure.m文件夹matlabroot\toolbox\simulink\simulink\dataclasses+Simulink@CSCTypeAttributes_FlatStructure(打开)。