exponenta event banner

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

В этом примере показан подкласс классов данных 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')
Символьный вектор (символ)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. Откройте конструктор классов пользовательских хранилищ для пакета.

    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 (открыто).

Связанные темы