Функция Simulink является графическим представлением вычислительного модуля в среде Simulink®. Если вы создаете функцию Simulink, она может быть выполнена любым вычислительным модулем и может быть названа в нескольких местах. Можно только вызвать функцию Simulink в stepImpl
, outputImpl
или методе updateImpl
Системы object™. См. Обзор Функций Simulink для получения дополнительной информации о функциях Simulink.
Interpreted mode
не поддержан для модели, которая содержит блок MATLAB System, вызывающий Функцию Simulink.
Настройте Функциональный блок Simulink, который реализует простую функцию, такую как y = 2 * u
.
Откройте новую модель от Simulink Editor и добавьте Функциональный блок Simulink путем ввода Функции Simulink на холсте Simulink.
Когда окно Function prototype откроется, введите y = timestwo_func(u)
как функциональное определение. Это указывает, что вы задаете функцию под названием timestwo_func
, который берет u
в качестве входного параметра и производит y
как выходной аргумент. Также задайте имя функции от параметров Функционального блока Simulink.
Дважды кликните Функциональный блок Simulink и заметьте, что Триггерный блок Функции порта появляется, а также вход и блок выходного аргумента.
Дважды кликните Триггерную Блокировку порта в Функции Simulink и заметьте, что Function visibility установлен в scoped
. Чтобы узнать больше о scoped
Функции Simulink, смотрите Ограниченный по объему и Глобальная переменная Обзор Функциональных блоков Simulink.
Добавьте блок Gain и установите его значение к 2. Соедините его с блоком аргумента ввода и вывода. Нажмите Up to Parent, чтобы возвратиться к основной модели.
Чтобы определить, который вызывает Функция Simulink блок MATLAB System, поверните строки трассировки функции из меню Simulink Editor, выберите Display> Function Connectors.
Перетащите блок MATLAB System в модель и реализуйте Системный объект к этому блоку.
Добавьте блок MATLAB System в свою модель Simulink.
В диалоговом окне блока, из списка New
, выбирают Basic. Это открывает шаблон объектов базовой системы для вас, чтобы ввести ваш код.
Чтобы разделить объект на подклассы от matlab.System
, замените Untitled
на имя вашего Системного объекта. В данном примере назовите его SimulinkFcnCaller
.
В методе 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
Сохраните файл и назовите его SimulinkFcnCaller.m
.
Иерархия Функционального блока Simulink влияет на вызовы функции в Системном объекте. Например, если функция Simulink задана в более высокой иерархии в модели Simulink, функция задана для всех блоков в той иерархии. Если функция Simulink задана в более низкой иерархии, необходимо квалифицировать Подсистему и имя функции. Например, предположите, что у вас есть Подсистема, которая содержит Функциональный блок Simulink на том же уровне как блок MATLAB System. Когда Функциональный блок Simulink помещается в подсистему, имя функции не видимо к внешней стороне подсистема. Можно вызвать Функциональный блок Simulink путем квалификации имени функции с помощью имени Подсистемы в Системном объекте. Чтобы квалифицировать Подсистему и имя функции выполняют эти шаги:
В методе stepImpl
вашего кода Системного объекта вызовите Функцию Simulink, использующую запись через точку. Например, в коде y = Subsystem1.timestwo_func(u)
, Subsystem1
соответствует Подсистеме, и timestwo_func
соответствует Имени функции Simulink.
Точно так же объявите Подсистему и Функцию 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
Сохраните файл Системного объекта и назовите его SimulinkFcnCallerQualified.m
.
Этот пример показывает два 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
.