В этом примере показан подкласс классов данных Simulink ®.
Для создания класса данных в пакете используйте синтаксис класса 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 Parameter < Simulink.Parameter end % classdef
Использование пользовательского имени класса, отличного от Parameter или Signal, назовите папки классов с помощью пользовательского имени. Например, для определения класса mypkg.myParameter:
Определите класс данных как подкласс Simulink.Parameter или Simulink.Signal.
classdef myParameter < Simulink.Parameter end % classdef
В определении класса присвойте методу конструктора имя myParameter или mySignal.
Назовите папку класса, содержащую определение класса, как @myParameter или @mySignal.
properties и end ключевые слова включают блок определения свойства.
classdef Parameter < Simulink.Parameter properties % Unconstrained property type Prop1 = []; end properties(PropertyType = 'logical scalar') Prop2 = false; end properties(PropertyType = 'char') Prop3 = ''; end properties(PropertyType = 'char',... AllowedValues = {'red'; 'green'; 'blue'}) Prop4 = 'red'; end end % classdef
При добавлении свойств в подкласс Simulink.Parameter, Simulink.Signal, или Simulink.CustomStorageClassAttributes, можно указать следующие типы свойств.
| Тип свойства | Синтаксис |
|---|---|
| Двойной номер | properties(PropertyType = 'double scalar') |
| Номер int32 | properties(PropertyType = 'int32 scalar') |
| Логический номер | properties(PropertyType = 'logical scalar') |
| Символьный вектор (символ) | properties(PropertyType = 'char') |
| Символьный вектор с ограниченным набором допустимых значений | properties(PropertyType = 'char', AllowedValues = {'a', 'b', 'c'}) |
Если используется проверка свойств MATLAB (см. Проверка значений свойств) вместо PropertyTypeсвойства отображаются как поле редактирования в диалоговом окне свойств класса. Если вы используете PropertyType и AllowedValues, затем открывается диалоговое окно свойств:
Флажок для логических скалярных свойств.
раскрывающееся меню для векторов символов и AllowedValues.
Можно добавить конструктор в класс данных для выполнения операций инициализации при создании экземпляра класса. Добавленный конструктор не может требовать входного аргумента.
В этом примере конструктор инициализирует значение объекта obj на основе необязательного входного аргумента.
classdef Parameter < Simulink.Parameter methods function obj = Parameter(optionalValue) if (nargin == 1) obj.Value = optionalValue; end end end % methods end % classdef
Используйте setupCoderInfo для конфигурирования CoderInfo объект вашего класса. Затем создайте вызов useLocalCustomStorageClasses и откройте Custom Storage Class Designer.
В конструкторе в классе данных вызовите useLocalCustomStorageClasses способ.
classdef Parameter < Simulink.Parameter methods function setupCoderInfo(obj) useLocalCustomStorageClasses(obj, 'mypkg'); obj.CoderInfo.StorageClass = 'Custom'; end end % methods end % classdef
Откройте конструктор классов пользовательских хранилищ для пакета.
cscdesigner('mypkg')Определите классы хранения.
Создание файла MATLAB myCustomAttribs.m и откройте его для редактирования. Сохранить этот файл в +mypkg/@myCustomAttribsпапка, где +mypkg является папкой, содержащей @Parameter и @Signal папки.
Определение подкласса Simulink.CustomStorageClassAttributes с использованием синтаксиса класса MATLAB. Например, рассмотрим класс хранения, который определяет данные с использованием исходного идентификатора, но также предоставляет альтернативное имя для данных в сгенерированном коде.
classdef myCustomAttribs < Simulink.CustomStorageClassAttributes properties(PropertyType = 'char') AlternateName = ''; end end % classdef
Переопределить реализацию по умолчанию isAddressable чтобы определить, доступен ли класс хранения для записи.
classdef myCustomAttribs < Simulink.CustomStorageClassAttributes properties(PropertyType = 'logical scalar') IsAlternateNameInstanceSpecific = true; end methods function retVal = isAddressable(hObj, hCSCDefn, hData) retVal = false; end end % methods end % classdef
Переопределить реализацию по умолчанию getInstanceSpecificProps способ.
Примеры см. в разделе CSCTypeAttributes_FlatStructure.m в папке (открыто) и matlabroot\toolbox\simulink\simulink\dataclasses\+Simulink\@CSCTypeAttributes_FlatStructureCSCTypeAttributes_Unstructed.m в папке (открыто).matlabroot\toolbox\simulink\simulink\dataclasses\+mpt\@CSCTypeAttributes_Unstructed
Примечание
Это необязательный шаг. По умолчанию все пользовательские атрибуты зависят от экземпляра и могут быть изменены для каждого объекта данных. Однако можно ограничить, какие свойства должны быть специфичными для экземпляра.
Переопределить реализацию по умолчанию getIdentifiersForInstance способ определения идентификаторов для объектов класса данных.
Примечание
В своей реализации по умолчанию этот метод запрашивает имя или идентификатор объекта данных и использует этот идентификатор в сгенерированном коде. Переопределяя этот метод, можно управлять идентификатором объектов данных в сгенерированном коде.
classdef myCustomAttribs < Simulink.CustomStorageClassAttributes properties(PropertyType = 'char') GetFunction = ''; SetFunction = ''; end methods function 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