Можно использовать Системные объекты в модели, чтобы симулировать в Simulink®.
Создайте Систему object™, чтобы использоваться в вашей модели. Смотрите Задают Новые Системные объекты для Использования в Simulink для получения информации.
Протестируйте свой новый Системный объект в MATLAB®. Смотрите тест новые системные объекты в MATLAB
Добавьте Системный объект в свою модель при помощи блока MATLAB System. Смотрите Добавляют Системные объекты к Вашей Модели Simulink для получения информации.
Добавьте другие блоки Simulink по мере необходимости и соедините блоки, чтобы создать вашу систему.
Запустите систему
Системный объект является компонентом, который можно использовать, чтобы создать систему в MATLAB. Можно написать код в MATLAB и использовать тот код, чтобы создать блок в Simulink. Чтобы задать ваш собственный Системный объект, вы записываете файл определения класса, который является основанным на тексте файлом MATLAB, который содержит код, задающий ваш объект. Смотрите Интегрируют Системные объекты Используя MATLAB System Block.
Создайте Системный объект для использования в Simulink. Пример выполняет систему идентификации с помощью наименьшее количество средних квадратичных (LMS) адаптивный фильтр.
Создайте текстовый файл определения класса, чтобы задать ваш Системный объект. Код в этом примере создает фильтр наименьшее количество средних квадратичных (LMS) и включает индивидуальные настройки в значок блока и внешний вид диалогового окна.
Примечание
Вместо того, чтобы вручную создать ваш файл определения класса, можно использовать пункт меню New> System Object> Simulink Extension открыть шаблон. Этот шаблон включает индивидуальные настройки Системного объекта для использования в блоке Simulink MATLAB System. Вы редактируете файл шаблона, с помощью него в качестве инструкции, чтобы создать собственный Системный объект.
На первой линии файла определения класса задайте имя своего Системного объекта и подкласса от matlab.System
. matlab.System
базовый класс позволяет вам использовать все методы объекта базовой системы и задать имена ввода и вывода блока, заголовок и группы свойства.
Добавьте соответствующие методы объекта базовой системы настроить, сбросить, определить номер вводов и выводов и запустить ваш алгоритм. Смотрите страницы с описанием для каждого метода и полного файла определения класса ниже для реализации каждого из этих методов.
Используйте setupImpl
метод, чтобы выполнить одноразовые вычисления и инициализировать переменные.
Используйте stepImpl
метод, чтобы реализовать алгоритм блока.
Используйте resetImpl
метод, чтобы сбросить свойства состояний или DiscreteState
свойства.
Используйте getNumInputsImpl
и getNumOutputsImpl
методы, чтобы задать количество вводов и выводов, соответственно.
Добавьте соответствующие методы, чтобы задать внешний вид блока MATLAB System в Simulink. Смотрите страницы с описанием для каждого метода и полного файла определения класса ниже для реализации каждого из этих методов.
Используйте getHeaderImpl
метод, чтобы задать заголовок и описание, чтобы отобразиться на диалоговом окне блока.
Используйте getPropertyGroupsImpl
метод, чтобы задать группы свойств отобразиться на диалоговом окне блока.
Используйте getIconImpl
метод, чтобы задать текст, чтобы отобразиться на значке блока.
Используйте getInputNamesImpl
и getOutputNamesImpl
методы, чтобы задать метки, чтобы отобразиться для портов ввода и вывода блока.
Полный файл определения класса для наименьшего количества фильтра средних квадратичных:
classdef lmsSysObj < matlab.System % 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) адаптивный фильтр и использует обратную связь.
Создайте текстовый файл определения класса, чтобы задать ваш Системный объект. Код в этом примере создает целочисленную задержку и включает обратную связь и индивидуальные настройки к значку блока. Для получения информации об обратной связи смотрите Системные объекты Использования в Обратной связи. Этот пример реализует Системный объект, который можно использовать для непрямого сквозного соединения. Пример Simulink.
На первой линии файла определения класса разделите на подклассы от matlab.System
. matlab.System
базовый класс позволяет вам использовать все методы объекта базовой системы и задать имена ввода и вывода блока, заголовок и группы свойства.
Добавьте соответствующие методы объекта базовой системы настроить и сбросить объект и установить и подтвердить свойства. Начиная с этого поддержка объектов непрямое сквозное соединение вы не реализуете stepImpl
метод. Вы реализуете updateImpl
и outputImpl
методы вместо этого. Смотрите страницы с описанием для каждого метода и полного файла определения класса ниже для реализации каждого из этих методов.
Используйте setupImpl
метод, чтобы инициализировать некоторые свойства объекта.
Используйте resetImpl
метод, чтобы сбросить состояния свойства.
Используйте validatePropertiesImpl
метод, чтобы проверять, что значения свойств допустимы.
Добавьте следующие методы класса вместо stepImpl
метод, чтобы задать, как блок обновляет свое состояние и свой выход. Смотрите страницы с описанием и полный файл определения класса ниже для реализации каждого из этих методов.
Используйте outputImpl
метод, чтобы реализовать код, чтобы вычислить блок выход.
Используйте updateImpl
метод, чтобы реализовать код, чтобы обновить внутренние состояния блока.
Используйте isInputDirectFeedthroughImpl
метод, чтобы указать, что блок не является прямым сквозным соединением. Его входные параметры непосредственно не влияют на его выходные параметры.
Добавьте getIconImpl
метод, чтобы задать значок блока, когда это используется в Simulink через блок MATLAB System. Смотрите страницу с описанием и полный файл определения класса ниже для реализации этого метода.
Полный файл определения класса для задержки:
classdef intDelaySysObj < matlab.System % 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 как описано в Отображении Кода Системного объекта к Диалоговому окну MATLAB System Block.
Для получения информации смотрите, Интегрируют Системные объекты Используя MATLAB System Block.