Этот пример показывает, как программно добавить блок MATLAB function к модели и заполнить блок с кодом MATLAB®. Если вы уже имеете код MATLAB и не хотите добавлять его к блоку MATLAB function вручную, этот рабочий процесс может быть удобным.
Создайте файлы для примера.
Создайте и сохраните образцовый myModel
.
Создайте эту функцию MATLAB и сохраните ее в myAdd.m
m.
function c = myAdd(a, b)
c = a + b;
Запишите скрипт MATLAB, который добавляет блок MATLAB function к myModel
и заполняет его с содержимым myAdd.m
m.
% Add a MATLAB Function block to a model and populate % the block with MATLAB code. % % Copyright 2017 The Mathworks, Inc. open_system('myModel.slx'); libraryBlockPath = 'simulink/User-Defined Functions/MATLAB Function'; newBlockPath = 'myModel/myBlockName'; add_block(libraryBlockPath, newBlockPath); blockHandle = find(slroot, '-isa', 'Stateflow.EMChart', 'Path', newBlockPath); blockHandle.Script = fileread('myAdd.m');
Эта строка скрипта добавляет блок MATLAB function к модели:
add_block(libraryBlockPath, newBlockPath);
В памяти открытые модели и их части представлены иерархией объектов. Корневым объектом является slroot
. Эта строка скрипта возвращает объект, который представляет новый блок MATLAB function:
blockHandle = find(slroot, '-isa', 'Stateflow.EMChart', 'Path', newBlockPath);
Свойство Script
объекта содержит содержимое блока, представленного как вектор символа. Эта строка скрипта загружает содержимое файла myAdd.m
в свойство Script
:
blockHandle.Script = fileread('myAdd.m');
Запустите скрипт.
Вы видите новый блок MATLAB function в myModel
.
Чтобы видеть код, который вы добавили к блоку, дважды кликните блок myBlockName
.
Сохраните и закройте модель.
Измените скрипт для своей модели.
Замените myModel
на имя вашей модели.
Установите newBlockPath
на путь для нового блока для вашей модели.
Замените myAdd.m
на имя файла, который содержит функцию MATLAB, которую вы хотите в блоке MATLAB function. Также можно задать код непосредственно в векторе символа. Например:
blockHandle.Script = 'function c = fcn(a, b)';