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

Simulink Function является графическим представлением вычислительного модуля в Simulink® среда. Если вы создаете Simulink function, он может быть выполнен любым вычислительным модулем и может быть назван в нескольких местах. Можно только вызвать Simulink function в stepImploutputImpl, или 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, смотрите Ограниченный по объему и Глобальная переменная Обзор Функциональных блоков Simulink.

  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 блок с помощью ненастраиваемых свойств Системы object®.

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

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

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

Похожие темы