Разрыв Алгебраических циклов

В этом примере показано, как создать блок 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

См. также

|

Похожие темы