Определите классы данных

В этом примере показано, как подклассифицировать Simulink® классы данных.

Использование MATLAB® синтаксис класса для создания класса данных в пакете. При необходимости присвойте свойства классу данных и определите классы памяти.

Используйте пример, чтобы задать классы данных

  1. Просмотрите +SimulinkDemos пакет классов данных в папке matlabroot/ toolbox/simulink/simdemos/dataclasses (откройте).

    Этот пакет содержит предопределенные классы данных.

  2. Скопируйте папку в место, где необходимо задать классы данных.

  3. Переименуйте папку +mypkg и добавить родительскую папку в путь MATLAB.

  4. Измените определения классов данных.

Вручную задайте класс данных

  1. Создайте папку пакета +mypkg и добавить родительскую папку в путь MATLAB.

  2. Создайте папки классов @Parameter и @Signal внутри +mypkg.

    Примечание

    Simulink требует, чтобы классы данных были определены внутри +Package/@Class папки.

  3. В @Parameter папка, создайте файл MATLAB Parameter.m и откройте его для редактирования.

  4. Задайте класс данных, который является подклассом 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.

Необязательно: Добавить свойства к классу данных

The 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 (см. «Валидация значений свойств») вместо 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.

  1. В конструкторе в вашем классе данных вызовите useLocalCustomStorageClasses способ.

    classdef Parameter < Simulink.Parameter
    	methods
    		function setupCoderInfo(obj)
    			useLocalCustomStorageClasses(obj, 'mypkg');
    			
    			obj.CoderInfo.StorageClass = 'Custom';
    		end
    	end % methods
    end % classdef
    
  2. Откройте Custom Storage Class Designer для пакета.

    cscdesigner('mypkg')
  3. Задайте классы памяти.

Необязательно: Задайте пользовательские атрибуты для классов памяти

  1. Создайте файл MATLAB myCustomAttribs.m и откройте его для редактирования. Сохраните этот файл в +mypkg/@myCustomAttribsпапка, где +mypkg - папка, содержащая @Parameter и @Signal папки.

  2. Задайте подкласс Simulink.CustomStorageClassAttributes использование синтаксиса класса MATLAB. Например, рассмотрим класс памяти, который определяет данные с помощью исходного идентификатора, но также предоставляет альтернативное имя для данных в сгенерированном коде.

    classdef myCustomAttribs < Simulink.CustomStorageClassAttributes
    	properties(PropertyType = 'char')
    		AlternateName = '';
    	end
    end % classdef
    

  3. Переопределите реализацию по умолчанию 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
    
  4. Переопределите реализацию по умолчанию getInstanceSpecificProps способ.

    Для примеров смотрите CSCTypeAttributes_FlatStructure.m в папке matlabroot\ toolbox\simulink\simulink\dataclasses\+ Simulink\@ CSCTypeAttributes _ FlatStructure (открыто) и CSCTypeAttributes_Unstructed.m в папке matlabroot\ toolbox\simulink\simulink\dataclasses\+ mpt\@ CSCTypeAttributes _ Unstructed (откройте).

    Примечание

    Это необязательный шаг. По умолчанию все пользовательские атрибуты зависят от экземпляра и могут изменяться для каждого объекта данных. Однако можно ограничить свойства, разрешенные для конкретного экземпляра.

  5. Переопределите реализацию по умолчанию 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
  6. При использовании сгруппированных классов памяти переопределите реализацию по умолчанию getIdentifiersForGroup метод для определения идентификатора группы в сгенерированном коде.

    Для получения примера см. CSCTypeAttributes_FlatStructure.m в папке matlabroot\ toolbox\simulink\simulink\dataclasses\+ Simulink\@ CSCTypeAttributes _ FlatStructure (откройте).

Похожие темы