Функция Simulink - это графическое представление вычислительного блока в среде Simulink ®. После создания функции Simulink она может выполняться любым вычислительным блоком и вызываться в нескольких местах. Вы можете вызвать функцию Simulink только внутри stepImpl, outputImpl, или updateImpl метод системного object™. Дополнительные сведения о функциях Simulink см. в разделе Обзор функций Simulink.
Примечание
Interpreted mode не поддерживается для модели, содержащей системный блок MATLAB, вызывающий функцию Simulink.
Настройка блока функции Simulink, реализующего простую функцию, например y = 2 * u.
Откройте новую модель из редактора Simulink и добавьте блок Simulink Function, введя команду Simulink Function на холсте Simulink.
При открытии окна прототипа функции введите y = timestwo_func(u) в качестве определения функции. Это означает, что вы определяете функцию с именем timestwo_func для этого требуется u в качестве входного аргумента и создает y в качестве выходного аргумента. Либо определите имя функции из параметров блока Simulink Function.
Дважды щелкните блок Simulink Function и убедитесь, что появляется функциональный блок Trigger Port, а также блок входных и выходных аргументов.
Дважды щелкните блок «Порт триггера» в функции Simulink и убедитесь, что для параметра «Видимость функции» установлено значение scoped. Дополнительные сведения scoped
Функции симулятора (Simulink Functions), см. Обзор функциональных блоков симулятора (Scoped and Global Simulink Function Blocks).
Добавьте блок усиления и установите для него значение 2. Соедините его с блоком входных и выходных аргументов. Щелкните Перейти вверх к родительской (Navigate Up to Parent), чтобы вернуться к главной модели.
Примечание
Чтобы определить, какую функцию Simulink вызывает системный блок MATLAB, включите строки трассировки функций. На вкладке «Отладка» выберите «Информационные наложения» > «Функциональные соединители».
Перетащите блок MATLAB System в модель и реализуйте объект System в этом блоке.
Добавьте системный блок MATLAB в модель Simulink.
В диалоговом окне блока из New выберите «Основные». Откроется базовый шаблон системного объекта для ввода кода.
Для подкласса объекта из matlab.System, заменить Untitled с именем системного объекта. Для этого примера назовите его SimulinkFcnCaller.
В stepImpl метод объекта System, объявите функцию Simulink с помощью getSimulinkFunctionNamesImpl.
См. пример кода объекта System ниже. Дополнительные сведения о записи системного объекта см. в разделе Определение основных системных объектов.
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 влияет на вызовы функций в объекте System. Например, если функция Simulink определена в более высокой иерархии в модели Simulink, функция определяется для всех блоков в этой иерархии. Если функция Simulink определена в более низкой иерархии, необходимо определить подсистему и имя функции. Например, предположим, что подсистема содержит функциональный блок Simulink на том же уровне, что и системный блок MATLAB. При размещении блока функции Simulink в подсистеме имя функции не отображается за пределами подсистемы. Можно вызвать блок Simulink Function, определяя имя функции с помощью имени подсистемы в объекте System. Чтобы определить подсистему и имя функции, выполните следующие действия:
В stepImpl вызовите функцию Simulink, используя точечную нотацию. Например, в коде y = Subsystem1.timestwo_func(u), Subsystem1 соответствует подсистеме, и timestwo_func соответствует имени функции Simulink.
Аналогично, объявите подсистему и функцию Simulink в getSimulinkFunctionNamesImpl с использованием точечной нотации. Код объекта System показывает timestwo пример, написанный для функции Simulink, определенной в более низкой иерархии, чем системный блок MATLAB.
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
Сохраните файл объекта System и присвойте ему имя SimulinkFcnCallerQualified.m.
В этом примере показаны два Simulink Functions условно вызываемый MATLAB System с использованием неперестраиваемых свойств системного объекта ®.
MATLAB System блокирующие вызовы одного из Simulink Functions внутри двух различных подсистем, в зависимости от значения сигнала, поступающего от Sine Wave блок. Если значение сигнала меньше 10, то MATLAB System блок вызывает timestwo_func Simulink Function внутри SS1 Subsystem блок. Если значение больше 10, он вызывает timesthree_func в SS2 Subsystem блок.
Имена функций определяются как неперестраиваемые свойства, переключаются из строки в функцию с помощью str2func функция. Затем эти функции объявляются как свойства в getSimulinkFunctionNamesImpl способ.
