Вы можете выполнить большинство 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