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 способ.
