exponenta event banner

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

Большинство основ моделирования 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');

Имя сигнала программно

  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 для трассировки существующих линий модели. Маршрутизация существующих линий улучшает качество трассы линии и позволяет избежать перекрытий линии с другими линиями и препятствиями в модели.

Хотя эти команды можно использовать с любой открытой моделью, они особенно полезны для моделей, создаваемых программно. Пример см. в разделе Упорядочение программно заполненной модели.

Открыть одну и ту же модель в нескольких окнах

При открытии модели модель появляется в окне редактора Simulink Editor. Например, если открыта одна модель, а затем открыта вторая модель, вторая модель появится во втором окне.

Для открытия одной и той же модели в двух окнах редактора Simulink в командной строке MATLAB введите open_system и используйте window аргумент. Например, если у вас есть vdp модель открыта, чтобы открыть другой экземпляр vdp модель, введите:

open_system('vdp','window')

Поиск элементов схемы с помощью выделения

Чтобы выделить блок, линию, порт или аннотацию в открытой модели, используйте hilite_system.

Программно задать цвета

Вы можете использовать set_param в командной строке MATLAB или в программе MATLAB для установки параметров, определяющих цвет фона диаграммы и цвет фона и цвет переднего плана элементов диаграммы. В следующей таблице представлены параметры, управляющие цветами блок-схем.

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

ScreenColor

Фон блок-схемы

BackgroundColor

Фон блоков и аннотаций

ForegroundColor

Передний план блоков и аннотаций

Задайте для параметра 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]')

См. также

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

Связанные темы