A 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 см. Обзор Scoped и Global Simulink Function Blocks.
Добавьте блок 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
блокируйте с использованием нетронутых свойств системного объекта ®.
The MATLAB System
блок вызывает один из Simulink Functions
внутри двух различных подсистем, в зависимости от значения сигнала, поступающего от Sine Wave
блок. Если значение сигнала меньше 10, MATLAB System
блок вызывает timestwo_func
Simulink Function
внутри SS1
Subsystem
блок. Если значение больше 10, это вызывает timesthree_func
в SS2 Subsystem
блок.
Имена функции определены как нетронутые свойства, переключаются со строки на функции с помощью str2func
функция. Затем эти функции объявляются как свойства в getSimulinkFunctionNamesImpl
способ.