Можно выполнить большинство основ моделирования Simulink® программно в Командном окне MATLAB®, таких как создание моделей, добавление блоков к моделям и установки параметров. Эти примеры показывают некоторые из этих команд и как можно использовать их.
Загрузка модели загружает его в память, но не открывает его в Редакторе Simulink для редактирования. После того, как вы загрузите модель, можно работать с нею программно. Можно использовать Редактор 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
коллбэк к значению, которое вы задаете. Сохраните модель, чтобы сохранить настройку.
Например, когда вы задаете переменные в loadvar.m
скрипта MATLAB для модели
modelname.slx
, используйте эту команду:
set_param('modelname','PreloadFcn','loadvar')
K
значение 15
, используйте эту команду:set_param('modelname','PreloadFcn','K=15')
После того, как вы сохраняете модель, PreloadFcn
коллбэк выполняется, когда вы затем открываете модель.
В этом примере показано, как использовать функции, чтобы добавить блоки и соединить блоки программно. Если вы добавили блоки в модель, вы используете три разных подхода, чтобы соединить их: направленные линии, указатели порта и порт IDs. Направленные линии позволяют вам задавать точное (x, y) координаты всех конечных точек сегмента соединительной линии. Указатели порта и порт IDs позволяют соединительным линиям блокировать порты, не имея необходимость знать координаты местоположения порта.
Создайте и откройте пустую модель, названную ‘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
показывает, что расположение порта [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
команда, чтобы направить существующие линии вашей модели. Маршрутизация существующих линий улучшает качество маршрута линии и избегает перекрытий линии с другими линиями и препятствиями в модели.
В то время как можно использовать эти команды с любой открытой моделью, они особенно полезны с моделями, которые вы создаете программно. Для примера смотрите Расположение Программно Заполненная Модель.
Когда вы открываете модель, модель появляется в окне Simulink Editor. Например, если у вас есть одна открытая модель, и затем вы открываете вторую модель, вторая модель появляется во втором окне.
Чтобы открыть ту же модель в двух окнах Simulink Editor, в командной строке MATLAB, вводят open_system
команда и использование window
аргумент. Например, если у вас есть vdp
открытая модель, чтобы открыть другой экземпляр vdp
модель, введите:
open_system('vdp','window')
Чтобы подсветить блок, линию, порт или аннотация в открытой модели, использует hilite_system
.
Можно использовать set_param
команда в командной строке MATLAB или в программе MATLAB, чтобы установить параметры, которые определяют цвет фона схемы и цвет фона и основной цвет элементов диаграммы. Следующая таблица обобщает параметры та схема блока управления цвета.
Параметр | Определяет |
---|---|
| Фон блок-схемы |
| Блок и фон аннотации |
| Блок и передний план аннотации |
Установите цветной параметр или на именованный цвет или на значение RGB.
Именованный цвет: 'automatic'
, 'black'
, 'white'
, 'red'
, 'green'
, 'blue'
Голубой
Пурпурный
, 'yellow'
серый
, '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