Можно использовать Системные объекты в модели для симуляции в Simulink®.
Создайте Системную object™, которая будет использоваться в вашей модели. Для получения дополнительной информации см. раздел «Определение новых системных объектов» в Simulink.
Протестируйте свой новый системный объект в MATLAB®. Смотрите Тестирование новых системных объектов в MATLAB
Добавьте системный объект к модели с помощью блока MATLAB System. Смотрите Добавление Системных Объектов в Модель Simulink для получения информации.
Добавьте другие блоки Simulink по мере необходимости и соедините блоки для создания вашей системы.
Запуск системы
Системный объект является компонентом, который можно использовать для создания системы в MATLAB. Можно записать код в MATLAB и использовать этот код, чтобы создать блок в Simulink. Чтобы определить свой собственный Системный объект, вы записываете файл определения класса, который является текстовым файлом MATLAB, который содержит код, определяющий ваш объект. См. «Интеграция системных объектов с использованием MATLAB System Block».
Создайте системный объект для использования в Simulink. Пример выполняет систему идентификации с помощью адаптивного фильтра методом наименьших средних квадратов (LMS).
Создайте текстовый файл определения класса, чтобы задать системный объект. Код в этом примере создает фильтр наименьших средних квадратов (LMS) и включает индивидуальные настройки значка блока и внешнего вида диалогового окна. Это похоже на Систему идентификации для конечной импульсной характеристики системы, используя пример MATLAB System Блоков Simulink.
Примечание
Вместо создания файла определения класса вручную можно использовать опцию меню New > System Object > Simulink Extension для открытия шаблона. Этот шаблон включает индивидуальные настройки системного объекта для использования в блоке Simulink MATLAB System. Вы редактируете файл шаблона, используя его как руководство, чтобы создать свой собственный системный объект.
На первой линии файла определения класса укажите имя вашего Системного объекта и подкласса из обоих matlab.System
и matlab.system.mixin.CustomIcon
. The matlab.System
базовый класс позволяет использовать все основные методы Системного объекта и задавать имена входа блоков и выводов, заголовок и группы свойств. The CustomIcon
mixin класса включает метод, который позволяет вам задать значок блока.
Добавьте соответствующие базовые методы системного объекта, чтобы настроить, сбросить, задать количество входов и выходов и запустить свой алгоритм. Для реализации каждого из этих методов см. страницы с описанием по каждому методу и полный файл определения класса ниже.
Используйте setupImpl
метод для выполнения разовых вычислений и инициализации переменных.
Используйте stepImpl
метод реализации алгоритма блока.
Используйте resetImpl
метод для сброса свойств состояний или DiscreteState
свойства.
Используйте getNumInputsImpl
и getNumOutputsImpl
методы для определения количества входов и выходов, соответственно.
Добавьте соответствующую CustomIcon
методы для определения внешнего вида блока MATLAB System в Simulink. Для реализации каждого из этих методов см. страницы с описанием по каждому методу и полный файл определения класса ниже.
Используйте getHeaderImpl
метод определения заголовка и описания для отображения в диалоговом окне блока.
Используйте getPropertyGroupsImpl
метод задания групп свойств для отображения в диалоговом окне блока.
Используйте getIconImpl
метод задания текста для отображения на значке блока.
Используйте getInputNamesImpl
и getOutputNamesImpl
методы, чтобы задать метки для отображения входных и выходных портов блоков.
Полный файл определения класса для фильтра наименьших средних квадратов:
classdef lmsSysObj < matlab.System &... matlab.system.mixin.CustomIcon % lmsSysObj Least mean squares (LMS) adaptive filtering. % #codegen properties % Mu Step size Mu = 0.005; end properties (Nontunable) % Weights Filter weights Weights = 0; % N Number of filter weights N = 32; end properties (DiscreteState) X; H; end methods (Access = protected) function setupImpl(obj) obj.X = zeros(obj.N,1); obj.H = zeros(obj.N,1); end function [y, e_norm] = stepImpl(obj,d,u) tmp = obj.X(1:obj.N-1); obj.X(2:obj.N,1) = tmp; obj.X(1,1) = u; y = obj.X'*obj.H; e = d-y; obj.H = obj.H + obj.Mu*e*obj.X; e_norm = norm(obj.Weights'-obj.H); end function resetImpl(obj) obj.X = zeros(obj.N,1); obj.H = zeros(obj.N,1); end end % Block icon and dialog customizations methods (Static, Access = protected) function header = getHeaderImpl header = matlab.system.display.Header(... 'lmsSysObj', ... 'Title', 'LMS Adaptive Filter'); end function groups = getPropertyGroupsImpl upperGroup = matlab.system.display.SectionGroup(... 'Title','General',... 'PropertyList',{'Mu'}); lowerGroup = matlab.system.display.SectionGroup(... 'Title','Coefficients', ... 'PropertyList',{'Weights','N'}); groups = [upperGroup,lowerGroup]; end end methods (Access = protected) function icon = getIconImpl(~) icon = sprintf('LMS Adaptive\nFilter'); end function [in1name, in2name] = getInputNamesImpl(~) in1name = 'Desired'; in2name = 'Actual'; end function [out1name, out2name] = getOutputNamesImpl(~) out1name = 'Output'; out2name = 'EstError'; end end end
Создайте системный объект для использования в Simulink. Пример выполняет систему идентификации с помощью адаптивного фильтра методом наименьших средних квадратов (LMS) и использует циклы обратной связи.
Создайте текстовый файл определения класса, чтобы задать системный объект. Код в этом примере создает целочисленную задержку и включает циклы обратной связи и индивидуальных настроек значка блока. Для получения информации о циклах обратной связи смотрите Использование системных объектов в циклах обратной связи. В этом примере реализуется Системный объект, которую можно использовать для ненаправленных сквозных соединений. Это похоже на Систему идентификации для конечной импульсной характеристики системы, используя пример MATLAB System Блоков Simulink.
В первой линии файла определения класса подкласс из matlab.System
и matlab.system.mixin.CustomIcon
. The matlab.System
базовый класс позволяет использовать все основные методы Системного объекта и задавать имена входа блоков и выводов, заголовок и группы свойств. The CustomIcon
mixin класса включает метод, который позволяет вам задать значок блока. The Nondirect
mixin включает методы, которые позволяют вам задать, как блок обновляется и что он выводит.
Добавьте соответствующие базовые методы системного объекта, чтобы настроить и сбросить объект, и установите и проверьте свойства. Поскольку этот объект поддерживает ненаправленное сквозное соединение, вы не реализуете stepImpl
способ. Вы реализуете updateImpl
и outputImpl
вместо этого методы. Для реализации каждого из этих методов см. страницы с описанием по каждому методу и полный файл определения класса ниже.
Используйте setupImpl
метод для инициализации некоторых свойств объекта.
Используйте resetImpl
метод для сброса состояний свойств.
Используйте validatePropertiesImpl
метод, чтобы проверить, что значения свойств действительны.
Добавьте следующую Nondirect
методы класса mixin вместо stepImpl
метод, чтобы задать, как блок обновляет свое состояние и его выход. Для реализации каждого из этих методов см. страницы с описанием и полный файл определения класса ниже.
Используйте outputImpl
метод реализации кода для вычисления выхода блока.
Используйте updateImpl
метод реализации кода для обновления внутренних состояний блока.
Используйте isInputDirectFeedthroughImpl
метод, чтобы указать, что блок не является прямым сквозным соединением. Его входы не влияют непосредственно на его выходы.
Добавьте getIconImpl
метод для определения значка блока, когда он используется в Simulink через блок MATLAB System. Для реализации этого метода см. страницу с описанием и полный файл определения класса ниже.
Полный файл определения класса для задержки:
classdef intDelaySysObj < matlab.System &... matlab.system.mixin.Nondirect &... matlab.system.mixin.CustomIcon % intDelaySysObj Delay input by specified number of samples. % #codegen properties % InitialOutput Initial output InitialOutput = 0; end properties (Nontunable) % NumDelays Number of delays NumDelays = 1; end properties (DiscreteState) PreviousInput; end methods (Access = protected) function setupImpl(obj, ~) obj.PreviousInput = ones(1,obj.NumDelays)*obj.InitialOutput; end function [y] = outputImpl(obj, ~) % Output does not directly depend on input y = obj.PreviousInput(end); end function updateImpl(obj, u) obj.PreviousInput = [u obj.PreviousInput(1:end-1)]; end function flag = isInputDirectFeedthroughImpl(~,~) flag = false; end function validatePropertiesImpl(obj) if ((numel(obj.NumDelays)>1) || (obj.NumDelays <= 0)) error('Number of delays must be positive non-zero ... scalar value.'); end if (numel(obj.InitialOutput)>1) error('Initial output must be scalar value.'); end end function resetImpl(obj) obj.PreviousInput = ones(1,obj.NumDelays)*obj.InitialOutput; end function icon = getIconImpl(~) icon = sprintf('Integer\nDelay'); end end end
Создайте образец своих новых Системных объектов. Например, создайте образец lmsSysObj
.
s = lmsSysObj;
Запустите объект несколько раз с различными входами. Выполнение этого шага проверяет на синтаксические ошибки и другие возможные проблемы, прежде чем вы добавите его в Simulink. Для примера,
desired = 0; actual = 0.2; s(desired,actual);
Можно включать код системного объекта в модели Simulink с блоком MATLAB Function. Ваша функция может включать один или несколько системных объектов. Фрагменты вашей системы могут быть легче реализованы в среде MATLAB, чем непосредственно в Simulink. Многие Системные объекты имеют аналоги блоков Simulink с эквивалентной функциональностью. Перед записью кода MATLAB для включения в модель Simulink проверьте наличие существующих блоков, которые выполняют необходимую операцию.
Можно включать отдельные системные объекты, которые вы создаете с файлом определения класса, в Simulink с блоком MATLAB System. Эта опция является одним из способов добавить ваши собственные блоки алгоритмов в ваши модели Simulink.
Добавьте системные объекты к модели Simulink с помощью блока MATLAB System, как описано в Mapping System Object Code to MATLAB System Block Dialog Box.
Для получения дополнительной информации смотрите Интегрировать системные объекты с помощью MATLAB System Block.