Основы программного моделирования

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

Назовите сигнал программно

  1. Выберите блок, который является источником для сигнальной линии.

  2. Использовать 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 для установки параметров, определяющих цвет фона схемы и цвет фона и цвет переднего плана элементов схемы. В следующей таблице представлены параметры, которые управляют цветами блока схем.

ПараметрОпределяет

ScreenColor

Блок

BackgroundColor

Блок и аннотация фона

ForegroundColor

Блок и аннотация переднего плана

Установите цветовой параметр либо как именованный цвет, либо как значение 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]')

См. также

| | | | | | | | | | | |

Похожие темы