Большинство основ моделирования 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 обратный вызов указанного значения. Сохраните модель, чтобы сохранить настройку.
Например, при определении переменных в сценарии 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 для трассировки существующих линий модели. Маршрутизация существующих линий улучшает качество трассы линии и позволяет избежать перекрытий линии с другими линиями и препятствиями в модели.
Хотя эти команды можно использовать с любой открытой моделью, они особенно полезны для моделей, создаваемых программно. Пример см. в разделе Упорядочение программно заполненной модели.
При открытии модели модель появляется в окне редактора Simulink Editor. Например, если открыта одна модель, а затем открыта вторая модель, вторая модель появится во втором окне.
Для открытия одной и той же модели в двух окнах редактора Simulink в командной строке MATLAB введите open_system и используйте window аргумент. Например, если у вас есть vdp модель открыта, чтобы открыть другой экземпляр vdp модель, введите:
open_system('vdp','window')Чтобы выделить блок, линию, порт или аннотацию в открытой модели, используйте hilite_system.
Вы можете использовать set_param в командной строке MATLAB или в программе MATLAB для установки параметров, определяющих цвет фона диаграммы и цвет фона и цвет переднего плана элементов диаграммы. В следующей таблице представлены параметры, управляющие цветами блок-схем.
| Параметр | Определяет |
|---|---|
| Фон блок-схемы |
| Фон блоков и аннотаций |
| Передний план блоков и аннотаций |
Задайте для параметра color либо именованный цвет, либо значение 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