Этот пример показывает, как разделить классы данных 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_FlatStructure
и CSCTypeAttributes_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
.
Похожие темы