Вы можете выполнить большинство Simulink® основы моделирования программно в MATLAB® Командное окно, такое как создание моделей, добавление блоков к моделям и установка параметров. Эти примеры показывают некоторые из этих команд и то, как вы можете использовать их.
Загрузка модели приводит ее в память, но не открывает ее в Редактор для редактирования. После загрузки модели с ней можно работать программно. Можно использовать Редактор Simulink, чтобы редактировать модель, только если вы открываете модель.
Чтобы загрузить систему, используйте load_system команда. Для примера, чтобы загрузить vdp модель, в командной строке MATLAB, введите:
load_system('vdp')Можно написать функцию, которая создает модель и использует настройки, которые вы предпочитаете. Для примера эта функция создает модель, которая имеет зеленый фон и использует решатель ode3:
function new_model(modelname)
% NEW_MODEL Create a new, empty Simulink model
% NEW_MODEL('MODELNAME') creates a new model with
% the name 'MODELNAME'. Without the 'MODELNAME'
% argument, the new model is named 'my_untitled'.
if nargin == 0
modelname = 'my_untitled';
end
% create and open the model
open_system(new_system(modelname));
% set default screen color
set_param(modelname,'ScreenColor','green');
% set default solver
set_param(modelname,'Solver','ode3');
% save the model
save_system(modelname);
Если вы присваиваете переменную как параметры блоков значение, необходимо задать значение переменной в модели. См. Создание модели. Программно можно задать переменную с помощью PreloadFcn коллбэк с set_param функция. Используйте функцию в этой форме:
set_param('mymodel','PreloadFcn','expression')expression - команда MATLAB или скрипт MATLAB в пути поиска файлов MATLAB. Эта команда устанавливает модель PreloadFcn коллбэк заданного значения. Сохраните модель, чтобы сохранить настройку.
Для примера, когда вы задаете переменные в скрипте MATLAB loadvar.m для модели modelname.slx, используйте эту команду:
set_param('modelname','PreloadFcn','loadvar')K значение 15, используйте эту команду:set_param('modelname','PreloadFcn','K=15')После того, как вы сохраняете модель, PreloadFcn коллбэк выполняется, когда вы следующий откроете модель.
В этом примере показано, как использовать функции для добавления блоков и программного соединения блоков. После добавления блоков к модели для их соединения используются три различных подхода: маршрутизируемые линии, указатели на порты и идентификаторы портов. Трассированные линии позволяют вам задавать точные (x, y) координаты всех конечных точек сегмента соединяющей линии. Указатели на порты и идентификаторы портов позволяют соединять линии с блокирующими портами без необходимости знать координаты местоположения портов.
Создайте и откройте пустую модель с именем "mymodel’.
Добавьте блоки, включая блок подсистемы. Используйте position массив в set_param функция для установки размера и положения блоков. Установите верхний левый и нижний правый углы блоков с помощью координат (x, y).
add_block('simulink/Sources/Sine Wave','mymodel/Sine1');
set_param('mymodel/Sine1','position',[140,80,180,120]);
add_block('simulink/Sources/Pulse Generator','mymodel/Pulse1');
set_param('mymodel/Pulse1','position',[140,200,180,240]);
add_block('simulink/Ports & Subsystems/Subsystem','mymodel/Subsystem1');
set_param('mymodel/Subsystem1','position',[315,120,395,200]);
add_block('simulink/Sinks/Scope','mymodel/Scope1');
set_param('mymodel/Scope1','position',[535,140,575,180]);
Внутренние Subsystem1, удалите соединение по умолчанию между In1 и Out1. Кроме того, добавьте второй входной порт путем копирования и переименования In1 из библиотеки блоков.
delete_line('mymodel/Subsystem1','In1/1','Out1/1');
add_block('simulink/Sources/In1','mymodel/Subsystem1/In2');Измените положение внутренних блоков входного и выходного портов внутри Subsystem1.
set_param('mymodel/Subsystem1/In1','position',[50,50,90,70]);
set_param('mymodel/Subsystem1/In2','position',[50,130,90,150]);
set_param('mymodel/Subsystem1/Out1','position',[500,80,540,100]);
Вставка и позиционирование Add блок внутри Subsystem1.
add_block('simulink/Math Operations/Add','mymodel/Subsystem1/Add1');
set_param('mymodel/Subsystem1/Add1','position',[250,80,290,120]);
Затем добавьте линий, чтобы соединить все блоки в модели. Начните, подключив Sine1 и Pulse1 блоки с использованием маршрутизируемых линий.
Найдите (x, y) координаты Sine1 выходной порт.
Sine1_Port = get_param('mymodel/Sine1','PortConnectivity')
Sine1_Port =
struct with fields:
Type: '1'
Position: [185 100]
SrcBlock: []
SrcPort: []
DstBlock: [1×0 double]
DstPort: [1×0 double]
get_param показывает, что порт Position является [185 100].
Найдите (x, y) координаты Pulse1 выходной порт.
Pulse1_Port = get_param('mymodel/Pulse1','PortConnectivity')
Pulse1_Port =
struct with fields:
Type: '1'
Position: [185 220]
SrcBlock: []
SrcPort: []
DstBlock: [1×0 double]
DstPort: [1×0 double]get_param показывает, что положение порта [185 220].
Соедините выход Sine1 на первый вход Subsystem1 использование трех сегментов маршрутной линии.
add_line('mymodel', [185 100; 275 100]);
add_line('mymodel', [275 100; 275 140]);
add_line('mymodel', [275 140; 310 140]);
Соедините выход Pulse1 ко второму входу Subsystem1 использование трех сегментов маршрутной линии.
add_line('mymodel', [185 220; 275 220]);
add_line('mymodel', [275 220; 275 180]);
add_line('mymodel', [275 180; 310 180]);
Использование get_param для получения указателей портов подключаемых блоков. Затем используйте указатели на порт блока, чтобы соединить выход Subsystem1 на вход Scope1.
SubsysPortHandles = get_param('mymodel/Subsystem1','PortHandles');
ScopePortHandles = get_param('mymodel/Scope1','PortHandles');
add_line('mymodel',SubsysPortHandles.Outport(1),...
ScopePortHandles.Inport(1));Используйте имена портов и идентификаторы для подключения Add1 блок внутри Subsystem1 к входам и выходам подсистемы. Simulink использует самый прямой путь, чтобы соединить порты.
add_line('mymodel/Subsystem1','In1/1','Add1/1');
add_line('mymodel/Subsystem1','In2/1','Add1/2');
add_line('mymodel/Subsystem1','Add1/1','Out1/1');Выберите блок, который является источником для сигнальной линии.
Использовать get_param чтобы назначить указатель на порт текущего выбранного блока переменной p. Использовать get_param присвоить имя сигнальной линии от этого порта переменной l. Затем установите имя сигнальной линии равным 's9'.
p = get_param(gcb,'PortHandles') l = get_param(p.Outport,'Line') set_param(l,'Name','s9')
Вы можете использовать Simulink.BlockDiagram.arrangeSystem команда, чтобы выложить вашу модель. Эта команда выравнивает входные блоки слева, выходные блоки справа и элементы модели в столбцах между входами и выходами. Команда влияет только на один слой за раз.
Вы можете использовать Simulink.BlockDiagram.routeLine команда для маршрутизации существующих линий вашей модели. Маршрутизация существующих линий улучшает качество маршрута линии и избегает перекрытий линии с другими линиями и препятствиями в модели.
Хотя вы можете использовать эти команды с любой открытой моделью, они особенно полезны с моделями, которые вы создаете программно. Для получения примера смотрите Упорядочить программно заполненную модель.
Когда вы открываете модель, модель появляется в окне Редактор. Например, если у вас открыта одна модель, а затем вы открываете вторую модель, вторая модель появится во втором окне.
Чтобы открыть ту же модель в двух окнах Редактор, в командной строке MATLAB введите open_system командовать и использовать window аргумент. Для примера, если у вас есть vdp модель открыта, чтобы открыть другой образец vdp модель, введите:
open_system('vdp','window')Чтобы выделить блок, линию, порт или аннотацию в открытой модели, используйте hilite_system.
Можно использовать set_param команда в командной строке MATLAB или в программе MATLAB для установки параметров, определяющих цвет фона схемы и цвет фона и цвет переднего плана элементов схемы. В следующей таблице представлены параметры, которые управляют цветами блока схем.
| Параметр | Определяет |
|---|---|
| Блок |
| Блок и аннотация фона |
| Блок и аннотация переднего плана |
Установите цветовой параметр либо как именованный цвет, либо как значение RGB.
Именованный цвет: 'automatic', 'black', 'white', 'red', 'green', 'blue', 'cyan', 'magenta', 'yellow', 'gray', 'lightBlue', 'orange', 'darkGreen'
Значение RGB: '[r,g,b]'
где r, g, и b красные, зеленые и синие компоненты цвета нормированы к области значений 0.0 на 1.0.
Для примера следующая команда устанавливает цвет фона текущей выбранной системы или подсистемы на светло-зеленый цвет:
set_param(gcs,'ScreenColor','[0.3, 0.9, 0.5]')
add_block | add_line | delete_block | delete_line | gcb | get_param | hilite_system | load_system | new_system | open_system | save_system | set_param | Simulink.BlockDiagram.routeLine