Функция 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.
