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

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

Примечание

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

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

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

  1. Откройте новую модель от Simulink Editor и добавьте Функциональный блок Simulink путем ввода Функции Simulink на холсте Simulink.

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

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

  4. Дважды кликните Триггерную Блокировку порта в Функции Simulink и заметьте, что Function visibility установлен в scoped. Чтобы узнать больше о scoped Функции Simulink, смотрите Ограниченный по объему и Глобальная переменная Обзор Функциональных блоков Simulink.

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

Примечание

Чтобы определить, который вызывает Функция Simulink блок MATLAB System, поверните строки трассировки функции из меню Simulink Editor, выберите Display> Function Connectors.

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

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

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

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

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

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

    Смотрите пример кода Системного объекта ниже. Чтобы узнать больше, как записать Системный объект, смотрите, Задают Объекты Базовой системы (MATLAB).

    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 влияет на вызовы функции в Системном объекте. Например, если функция Simulink задана в более высокой иерархии в модели Simulink, функция задана для всех блоков в той иерархии. Если функция Simulink задана в более низкой иерархии, необходимо квалифицировать Подсистему и имя функции. Например, предположите, что у вас есть Подсистема, которая содержит Функциональный блок Simulink на том же уровне как блок MATLAB System. Когда Функциональный блок Simulink помещается в подсистему, имя функции не видимо к внешней стороне подсистема. Можно вызвать Функциональный блок Simulink путем квалификации имени функции с помощью имени Подсистемы в Системном объекте. Чтобы квалифицировать Подсистему и имя функции выполняют эти шаги:

  1. В методе stepImpl вашего кода Системного объекта вызовите Функцию Simulink, использующую запись через точку. Например, в коде y = Subsystem1.timestwo_func(u), Subsystem1 соответствует Подсистеме, и timestwo_func соответствует Имени функции Simulink.

  2. Точно так же объявите Подсистему и Функцию Simulink в методе getSimulinkFunctionNamesImpl с помощью записи через точку. Код Системного объекта показывает пример timestwo, записанный для Функции, определяемой Simulink при более низкой иерархии, чем блок 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 с помощью ненастраиваемых свойств Системы object®.

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

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

Смотрите также

Похожие темы