В этом примере показано, как создать блок MATLAB System, который может повредить алгебраический цикл в модели.
Системные объекты позволяют вам реализовывать алгоритмы с помощью MATLAB. Системные объекты являются специализированным видом объекта MATLAB, специально разработанного для реализации и симуляции динамических систем с входными параметрами то изменение в зависимости от времени.
После того, как вы зададите Системный объект, можно включать его в модель Simulink с помощью блока MATLAB System.
Этот пример имеет блок MATLAB System, который используется в обратной связи в модели. Обратная связь используется, чтобы накопить входные значения, и результат отображен в блоке Scope. Обратная связь в модели создает алгебраический цикл. Чтобы решить алгебраический цикл, Simulink нужен блок, который имеет непрямое сквозное соединение. Блоки, которые имеют непрямое сквозное соединение, используются в обратной связи, чтобы повредить алгебраические циклы. Этот блок может произвести выход на шаге текущего времени, не получая вход сначала. В этом примере блок MATLAB System имеет непрямое сквозное соединение.
Блок MATLAB System использует Системный объект UnitDelayNondirect
это реализует единичную задержку. Выход показывает, как обратная связь накапливает значения входного сигнала.
Можно получить доступ к исходному коду MATLAB, используемому блоком MATLAB System путем нажатия на гиперссылку "Source Code" от диалогового окна блока. UnitDelayNondirect
Системный объект реализует resetImpl
outputImpl
, и updateImpl
методы. Системный объект имеет одно свойство под названием State
.
resetImpl
инициализирует State
свойство к 0.
outputImpl
возвращает значение, сохраненное в State
. Этот Системный объект имеет непрямое сквозное соединение потому что outputImpl
не использует входных параметров.
updateImpl
использует входные параметры, чтобы обновить State
.
classdef UnitDelayNondirect < matlab.System % UnitDelayNondirect Delay input by one time step properties(DiscreteState) State end methods(Access = protected) function resetImpl(obj) obj.State = 0; % Initialize states end function y = outputImpl(obj, ~) y = obj.State; % Output current state % Input is not used in this method end function updateImpl(obj,u) obj.State = u; % Update state with input end end end