exponenta event banner

Вызов функций симулятора из системного блока MATLAB

Функция Simulink - это графическое представление вычислительного блока в среде Simulink ®. После создания функции Simulink она может выполняться любым вычислительным блоком и вызываться в нескольких местах. Вы можете вызвать функцию Simulink только внутри stepImpl, outputImpl, или updateImpl метод системного object™. Дополнительные сведения о функциях Simulink см. в разделе Обзор функций Simulink.

Примечание

Interpreted mode не поддерживается для модели, содержащей системный блок MATLAB, вызывающий функцию Simulink.

Создание функционального блока Simulink

Настройка блока функции Simulink, реализующего простую функцию, например y = 2 * u.

  1. Откройте новую модель из редактора Simulink и добавьте блок Simulink Function, введя команду Simulink Function на холсте Simulink.

  2. При открытии окна прототипа функции введите y = timestwo_func(u) в качестве определения функции. Это означает, что вы определяете функцию с именем timestwo_func для этого требуется u в качестве входного аргумента и создает y в качестве выходного аргумента. Либо определите имя функции из параметров блока Simulink Function.

  3. Дважды щелкните блок Simulink Function и убедитесь, что появляется функциональный блок Trigger Port, а также блок входных и выходных аргументов.

  4. Дважды щелкните блок «Порт триггера» в функции Simulink и убедитесь, что для параметра «Видимость функции» установлено значение scoped. Дополнительные сведения scoped Функции симулятора (Simulink Functions), см. Обзор функциональных блоков симулятора (Scoped and Global Simulink Function Blocks).

  5. Добавьте блок усиления и установите для него значение 2. Соедините его с блоком входных и выходных аргументов. Щелкните Перейти вверх к родительской (Navigate Up to Parent), чтобы вернуться к главной модели.

Примечание

Чтобы определить, какую функцию Simulink вызывает системный блок MATLAB, включите строки трассировки функций. На вкладке «Отладка» выберите «Информационные наложения» > «Функциональные соединители».

Создание системного блока MATLAB и определение системного объекта

Перетащите блок MATLAB System в модель и реализуйте объект System в этом блоке.

  1. Добавьте системный блок MATLAB в модель Simulink.

  2. В диалоговом окне блока из New выберите «Основные». Откроется базовый шаблон системного объекта для ввода кода.

  3. Для подкласса объекта из matlab.System, заменить Untitled с именем системного объекта. Для этого примера назовите его SimulinkFcnCaller.

  4. В stepImpl метод объекта System, объявите функцию Simulink с помощью getSimulinkFunctionNamesImpl.

    См. пример кода объекта System ниже. Дополнительные сведения о записи системного объекта см. в разделе Определение основных системных объектов.

    classdef SimulinkFcnCaller < matlab.System
        % Public, tunable properties
        
        % SimulinkFcnCaller calls a Simulink Function from a  
        % MATLAB System block to multiply the signal's value by 2.
    
        methods(Access = protected)
            
            function y = stepImpl(obj,u)
                % Implement algorithm. Calculate y as a function of input u and
                % discrete states.
                y = timestwo_func(u);
            end       
            function names = getSimulinkFunctionNamesImpl(obj)
                % Use 'getSimulinkFunctionNamesImpl' method to declare  
                % the name of the Simulink Function that will be called  
                % from the MATLAB System block's System object code.
                names = {'timestwo_func'};
            end
        end
    end
  5. Сохраните файл и присвойте ему имя SimulinkFcnCaller.m.

Вызов функции Simulink в подсистеме из системного блока MATLAB

Иерархия блока Simulink Function влияет на вызовы функций в объекте System. Например, если функция Simulink определена в более высокой иерархии в модели Simulink, функция определяется для всех блоков в этой иерархии. Если функция Simulink определена в более низкой иерархии, необходимо определить подсистему и имя функции. Например, предположим, что подсистема содержит функциональный блок Simulink на том же уровне, что и системный блок MATLAB. При размещении блока функции Simulink в подсистеме имя функции не отображается за пределами подсистемы. Можно вызвать блок Simulink Function, определяя имя функции с помощью имени подсистемы в объекте System. Чтобы определить подсистему и имя функции, выполните следующие действия:

  1. В stepImpl вызовите функцию Simulink, используя точечную нотацию. Например, в коде y = Subsystem1.timestwo_func(u), Subsystem1 соответствует подсистеме, и timestwo_func соответствует имени функции Simulink.

  2. Аналогично, объявите подсистему и функцию Simulink в getSimulinkFunctionNamesImpl с использованием точечной нотации. Код объекта System показывает timestwo пример, написанный для функции Simulink, определенной в более низкой иерархии, чем системный блок MATLAB.

    classdef SimulinkFcnCallerQualified < matlab.System 
        
        % SimulinkFcnCallerQualified calls a Simulink Function embedded in a Subsystem  
        % from a MATLAB System block, and multiplies the signal's value by 2.
        
        methods(Access = protected)
    
            function y = stepImpl(obj,u)
                % Use the '.' notation to call a scoped Simulink Function from
                % a Simulink Function block.
                % Subsystem1 corresponds to  the block name, where 
                % timestwo_funct is the Simulink Function name.
                y = Subsystem1.timestwo_func(u);
            end
    
            function names = getSimulinkFunctionNamesImpl(obj)
                % Use the 'getSimulinkFunctionNamesImpl' method with the '.' 
                % notation to declare the name of a Simulink Function in  
                % MATLAB System block's System object code.
                names = {'Subsystem1.timestwo_func'};
            end
        end
    end

  3. Сохраните файл объекта System и присвойте ему имя SimulinkFcnCallerQualified.m.

Вызов функций Simulink из системного блока MATLAB

В этом примере показаны два Simulink Functions условно вызываемый MATLAB System с использованием неперестраиваемых свойств системного объекта ®.

MATLAB System блокирующие вызовы одного из Simulink Functions внутри двух различных подсистем, в зависимости от значения сигнала, поступающего от Sine Wave блок. Если значение сигнала меньше 10, то MATLAB System блок вызывает timestwo_func Simulink Function внутри SS1 Subsystem блок. Если значение больше 10, он вызывает timesthree_func в SS2 Subsystem блок.

Имена функций определяются как неперестраиваемые свойства, переключаются из строки в функцию с помощью str2func функция. Затем эти функции объявляются как свойства в getSimulinkFunctionNamesImpl способ.

См. также

Связанные темы