Вызов функций Simulink из MATLAB System Block

A Simulink Function является графическим представлением вычислительного модуля в Simulink® окружение. Как только вы создаете Simulink function, он может быть выполнен любым вычислительным модулем и может быть вызван в нескольких местах. Вы можете вызвать только Simulink function внутри stepImpl, outputImpl, или updateImpl метод Системной object™. Смотрите Обзор функций Simulink для получения дополнительной информации о Simulink functions.

Примечание

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

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

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

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

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

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

  4. Дважды кликните блок Trigger Port в Simulink Function и заметьте, что для Function visibility задано значение scoped. Чтобы узнать больше о scoped Simulink Functions см. Обзор Scoped и Global Simulink Function Blocks.

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

Примечание

Чтобы определить, какой Simulink Function вызывает блок MATLAB System, включите линии трассировки функции. На вкладке Debug выберите Information Overlays > Function Connectors.

Создайте MATLAB System Block и определите системный объект

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

  1. Добавьте блок MATLAB System к модели Simulink.

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

  3. Чтобы подклассифицировать объект из matlab.System, заменить Untitled с именем системного объекта. В данном примере назовите его SimulinkFcnCaller.

  4. В stepImpl метод вашего Системного объекта, объявите Simulink Function используя getSimulinkFunctionNamesImpl.

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

    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 System Block

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

  1. В stepImpl метод кода Системного объекта, вызовите Simulink Function с помощью записи через точку. Для примера в коде y = Subsystem1.timestwo_func(u), Subsystem1 соответствует Subsystem, и timestwo_func соответствует имени Simulink Function.

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

    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. Сохраните файл Системного объекта и назовите его SimulinkFcnCallerQualified.m.

Вызов функций Simulink из MATLAB System Block

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

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

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

См. также

Похожие темы