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

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

Похожие темы