Задайте классы данных

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

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

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')
номер int32properties(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.

  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.

Похожие темы

Была ли эта тема полезной?