В этом примере показано, как разделить классы данных 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') |
| Вектор символов (char) | properties(PropertyType = 'char') |
| Вектор символов с ограниченным набором позволенных значений | properties(PropertyType = 'char', AllowedValues = {'a', 'b', 'c'}) |
Если вы используете валидацию свойства MATLAB (см. Проверку значений свойств (MATLAB)) вместо PropertyType и AllowedValues, валидация свойства не влияет на внешний вид в диалоговом окне свойства класса. Например, булевская переменная (boolean) свойство не появляется в диалоговом окне свойства как флажок. Это - лучшая практика использовать PropertyType и AllowedValues вместо валидации свойства MATLAB.
Можно добавить конструктора в классе данных, чтобы выполнить действия инициализации, когда класс инстанцируют.
В этом примере конструктор инициализирует значение объекта 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
Откройте Custom Storage Class Designer для своего пакета.
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