Системные объекты в модели можно использовать для моделирования в Simulink ®.
Создайте системный object™, который будет использоваться в модели. Дополнительные сведения см. в разделе Определение новых системных объектов для использования в Simulink.
Протестируйте новый системный объект в MATLAB ®. См. раздел Тестирование новых системных объектов в MATLAB
Добавьте объект System в модель с помощью блока MATLAB System. Дополнительные сведения см. в разделе Добавление системных объектов в модель Simulink.
Добавьте другие блоки Simulink при необходимости и подключите блоки для создания системы.
Запустите систему
Системный объект - это компонент, который можно использовать для создания системы в MATLAB. Код можно записать в MATLAB и использовать его для создания блока в Simulink. Для определения собственного системного объекта необходимо написать файл определения класса, который является текстовым файлом MATLAB, содержащим код, определяющий объект. См. раздел Интеграция системных объектов с использованием системного блока MATLAB.
Создайте объект System для использования в Simulink. В примере выполняется идентификация системы с использованием адаптивного фильтра наименьших средних квадратов (LMS).
Создайте текстовый файл определения класса для определения системного объекта. Код в этом примере создает фильтр наименьших средних квадратов (LMS) и включает настройки для значка блока и внешнего вида диалогового окна. Он аналогичен примеру «Идентификация системы для системы FIR с использованием Simulink системных блоков MATLAB».
Примечание
Вместо создания вручную файла определения класса можно использовать команду меню «Создать» > «Системный объект» > «Расширение Simulink» для открытия шаблона. Этот шаблон включает настройки объекта System для использования в системном блоке Simulink MATLAB. Файл шаблона редактируется с использованием его в качестве руководства для создания собственного объекта System.
В первой строке файла определения класса укажите имя системного объекта и подкласса из обоих matlab.System и matlab.system.mixin.CustomIcon. matlab.System базовый класс позволяет использовать все основные методы объекта System и задавать входные и выходные имена блоков, названия и группы свойств. CustomIcon класс mixin включает метод, позволяющий указать значок блока.
Добавьте соответствующие базовые методы объекта System, чтобы настроить, сбросить, задать количество входов и выходов и запустить алгоритм. Для реализации каждого из этих методов см. страницы ссылок для каждого метода и полный файл определения класса ниже.
Используйте setupImpl способ выполнения разовых вычислений и инициализации переменных.
Используйте stepImpl способ реализации алгоритма блока.
Используйте resetImpl для сброса свойств состояния или DiscreteState свойства.
Используйте getNumInputsImpl и getNumOutputsImpl для определения количества входов и выходов соответственно.
Добавить соответствующее CustomIcon методы для определения внешнего вида системного блока MATLAB в 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
Создайте объект System для использования в Simulink. Пример выполняет идентификацию системы с использованием адаптивного фильтра наименьших средних квадратов (LMS) и использует петли обратной связи.
Создайте текстовый файл определения класса для определения системного объекта. Код в этом примере создает целочисленную задержку и включает циклы обратной связи и настройки значка блока. Сведения о контурах обратной связи см. в разделе Использование системных объектов в контурах обратной связи. В этом примере реализован объект System, который можно использовать для непрямого прохождения. Он аналогичен примеру «Идентификация системы для системы FIR с использованием Simulink системных блоков MATLAB».
В первой строке файла определения класса, подкласс из matlab.System и matlab.system.mixin.CustomIcon. matlab.System базовый класс позволяет использовать все основные методы объекта System и задавать входные и выходные имена блоков, названия и группы свойств. CustomIcon класс mixin включает метод, позволяющий указать значок блока. Nondirect mixin включает методы, позволяющие указать способ обновления блока и его выходные данные.
Добавьте соответствующие базовые методы объекта System, чтобы настроить и сбросить объект, а также задать и проверить свойства. Поскольку этот объект поддерживает непрямое сквозное соединение, вы не реализуете stepImpl способ. Вы реализуете updateImpl и outputImpl вместо этого методы. Для реализации каждого из этих методов см. страницы ссылок для каждого метода и полный файл определения класса ниже.
Используйте setupImpl для инициализации некоторых свойств объекта.
Используйте resetImpl метод сброса состояний свойства.
Используйте validatePropertiesImpl для проверки допустимости значений свойств.
Добавить следующее Nondirect методы класса mixin вместо stepImpl чтобы указать, как блок обновляет свое состояние и свои выходные данные. Для получения информации о реализации каждого из этих методов см. страницы ссылок и полный файл определения класса ниже.
Используйте outputImpl способ реализации кода для вычисления вывода блока.
Используйте updateImpl способ реализации кода для обновления внутренних состояний блока.
Используйте isInputDirectFeedthroughImpl чтобы указать, что блок не проходит прямой канал. Его входы не влияют непосредственно на его выходы.
Добавить getIconImpl метод определения значка блока при его использовании в Simulink через системный блок MATLAB. Для получения информации о реализации этого метода см. справочную страницу и полный файл определения класса ниже.
Полный файл определения класса для задержки:
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
Создайте экземпляр нового объекта System. Например, создайте экземпляр lmsSysObj.
s = lmsSysObj;
Запустить объект несколько раз с различными входами. Этот шаг используется для проверки синтаксических ошибок и других возможных проблем перед добавлением в Simulink. Например,
desired = 0; actual = 0.2; s(desired,actual);
Объектный код системы можно включить в модели Simulink с помощью функционального блока MATLAB. Функция может включать один или несколько системных объектов. Части системы может быть проще реализовать в среде MATLAB, чем непосредственно в Simulink. Многие системные объекты имеют аналоги блоков Simulink с эквивалентной функциональностью. Перед записью кода MATLAB для включения в модель Simulink проверьте наличие блоков, выполняющих требуемую операцию.
Отдельные системные объекты, созданные с помощью файла определения класса, можно включить в Simulink с помощью системного блока MATLAB. Эта опция является одним из способов добавления собственных блоков алгоритмов в модели Simulink.
Добавьте системные объекты в модель Simulink с помощью системного блока MATLAB, как описано в разделе Отображение системного кода объекта в диалоговое окно Системный блок MATLAB.
Дополнительные сведения см. в разделе Интеграция системных объектов с использованием системного блока MATLAB.