Можно выполнить большинство основ моделирования Simulink® программно в командной строке MATLAB®. Команды, которые соответствуют основным операциям моделирования, таким как создание моделей, добавление блоков к моделям и установки параметров, перечислены в разделе Functions Основных принципов Редактирования Модели. Эти примеры показывают некоторые из этих команд и как можно использовать их.
Загрузка модели загружает его в память, но не открывает его в Редакторе 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
к вводам и выводам подсистемы. Симулинк использует самый прямой путь, чтобы соединить порты.
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.arrangeSystem(system)
system
введите имя модели или указатель или путь к подсистеме. Откройте модель в Редакторе Simulink сначала. Например, разметьте подсистему Aircraft Dynamics Model
в образцовом f14
.
open_system('f14') Simulink.BlockDiagram.arrangeSystem('f14/Aircraft Dynamics Model')
Когда вы открываете модель, модель появляется в окне Simulink Editor. Например, если у вас есть одна открытая модель, и затем вы открываете вторую модель, вторая модель появляется во втором окне.
Чтобы открыть ту же модель в двух окнах Simulink Editor, в подсказке команды MATLAB, вводят команду open_system
и используют аргумент window
. Например, если у вас есть открытая модель vdp
, чтобы открыть другой экземпляр модели vdp
, войдите:
open_system('vdp','window')
Каждый блок в вашей модели имеет Идентификатор Simulink (SID), уникальный и немодифицируемый идентификатор. SID сохраняется в течение времени жизни объекта и сохранен с моделью. Если имя объектных изменений, SID остается то же самое. SID имеет форму model_name:number
. Для получения дополнительной информации смотрите, Определяют местоположение Компонентов Схемы Используя Идентификаторы Simulink.
Идентификатор Simulink (SID) является уникальным обозначением, автоматически присвоенным блоку Simulink, образцовой аннотации или объекту Stateflow® в диаграмме Stateflow. SID помогает идентифицировать определенные экземпляры этих компонентов в вашей схеме, особенно при совместном использовании моделей между людьми в команде.
Чтобы подсветить компонент визуально в модели, получите SID и используйте его с функцией Simulink.ID.hilite
.
SID имеет эти характеристики:
Персистентный в течение времени жизни блока Simulink, образцовой аннотации или объекта Stateflow
Сохраненный в образцовом файле
Остается то же самое, если имя блока или имя объекта изменяются
Не может быть изменен
Формат SID:
model_name:sid_number
model_name
является именем модели, где блок, аннотация или объект Stateflow находятся.
sid_number
является уникальным номером в модели, присвоенной Simulink.
Чтобы открыть образцовый vdp
, введите vdp
в подсказке команды MATLAB.
Получите SID блока Mu
.
Simulink.ID.getSID('vdp/Mu')
ans = vdp:4
Используйте SID, чтобы подсветить блок.
Simulink.ID.hilite('vdp:4')
Блок кажется подсвеченным в модели:
Откройте образцовый vdp
.
Выберите аннотацию наверху схемы.
Получите объект пометок для выбранной аннотации.
ann = getSelectedAnnotations('vdp')
ann = Simulink.Annotation
Получите SID аннотации.
ann.SIDFullString
ans = vdp:13
Используйте SID, чтобы подсветить аннотацию.
Simulink.ID.hilite('vdp:13')
Аннотация кажется подсвеченной в модели:
Откройте образцовый sf_resolve_signal_object
.
Получите SID объекта Signal Object Chart Stateflow:
Simulink.ID.getSID('sf_resolve_signal_object/Signal Object Chart')
ans = sf_resolve_signal_object:1
Используйте SID, чтобы подсветить объект.
Simulink.ID.hilite('sf_resolve_signal_object:1')
Объект кажется подсвеченным в модели.
Можно использовать команду set_param
в командной строке MATLAB или в программе MATLAB, чтобы установить параметры, которые определяют цвет фона схемы и цвет фона и основной цвет элементов диаграммы. Следующая таблица обобщает параметры та схема блока управления цвета.
Параметр | Определяет |
---|---|
| Фон блок-схемы |
| Блок и фон аннотации |
| Блок и передний план аннотации |
Установите цветной параметр или на именованный цвет или на значение RGB.
Именованный цвет: 'black'
, 'white'
, 'red'
, 'green'
, 'blue'
, 'cyan'
, 'magenta'
, 'yellow'
, 'gray'
, 'lightBlue'
, 'orange'
, 'darkGreen'
Значение RGB: rgb
где 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
| load_system
| new_system
| open_system
| save_system
| set_param