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