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

Можно выполнить большинство основ моделирования 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 к вводам и выводам подсистемы. 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 Editor, в подсказке команды MATLAB, вводят команду open_system и используют аргумент window. Например, если у вас есть открытая модель vdp, чтобы открыть другой экземпляр модели vdp, введите:

open_system('vdp','window')

Получите идентификатор Simulink

Каждый блок в вашей модели имеет Идентификатор 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.

SID включает дополнительные двоеточия в определенные случаи, например, на экземпляре блока от пользовательской библиотеки.

Подсветите блок

  1. Чтобы открыть модель vdp, введите vdp в подсказке команды MATLAB.

  2. Получите SID блока Mu.

    Simulink.ID.getSID('vdp/Mu')
    ans =
    
    vdp:4
    
    
  3. Используйте SID, чтобы подсветить блок.

    Simulink.ID.hilite('vdp:4')

    Блок кажется подсвеченным в модели:

Подсветите аннотацию

  1. Откройте модель vdp.

  2. Выберите аннотацию наверху схемы.

  3. Получите объект аннотации для выбранной аннотации.

    ann = getSelectedAnnotations('vdp')
    ann =
    
    Simulink.Annotation
    
    
  4. Получите SID аннотации.

    ann.SIDFullString
    ans =
    
    vdp:13
    
    
  5. Используйте SID, чтобы подсветить аннотацию.

    Simulink.ID.hilite('vdp:13')

    Аннотация кажется подсвеченной в модели:

Подсветите объект Stateflow

  1. Откройте модель sf_resolve_signal_object.

  2. Получите SID объекта Signal Object Chart Stateflow:

    Simulink.ID.getSID('sf_resolve_signal_object/Signal Object Chart')
    
    ans =
    
    sf_resolve_signal_object:1
    
    

  3. Используйте SID, чтобы подсветить объект.

    Simulink.ID.hilite('sf_resolve_signal_object:1')

    Объект кажется подсвеченным в модели.

Задайте цвета программно

Можно использовать команду 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]')

Смотрите также

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

Похожие темы