В этом примере показано, как создать блок MATLAB System, который может разбить алгебраический цикл в модели.
Системные объекты позволяют вам реализовать алгоритмы с помощью MATLAB. Системные объекты являются специализированным видом объекта MATLAB, разработанным специально для реализации и симуляции динамических систем с входами, которые изменяются с течением времени.
После того, как вы задаете Системный объект, можно включить его в модель Simulink с помощью блока MATLAB System.
Этот пример имеет блок MATLAB System, который используется в цикле обратной связи в модели. Цикл обратной связи используется для накопления входных значений, и результат отображается в блоке Scope. Обратная связь в модели создает алгебраический цикл. Чтобы решить алгебраический цикл, Simulink нужен блок, который имеет ненаправленное сквозное соединение. Блоки, которые имеют ненаправленное сквозное соединение, используются в циклах обратной связи, чтобы разбить алгебраические петли. Этот блок может выдать выход в текущем временном шаге, не получая вход первым. В этом примере блок MATLAB System имеет ненаправленное сквозное соединение.
Блок MATLAB System использует системный объект UnitDelayNondirect
что реализует модуль задержку. Этот выход показов, как цикл обратной связи накапливает значения входного сигнала.
Вы можете получить доступ к исходному коду MATLAB, используемому блоком MATLAB System, нажав гиперссылку «Source Code» из диалогового окна блока. The 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