Программируемые основы моделирования

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

Программно блоки Add и Connect

Этот пример показывает, как использовать функции, чтобы добавить блоки и соединить блоки программно. Если вы добавили блоки к модели, вы используете три разных подхода, чтобы соединить их: направленные строки, указатели порта и порт 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');

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

  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.arrangeSystem(system)
Для system введите имя модели или указатель или путь к подсистеме. Откройте модель в Редакторе Simulink сначала.

Например, разметьте подсистему Aircraft Dynamics Model в образцовом f14.

open_system('f14')
Simulink.BlockDiagram.arrangeSystem('f14/Aircraft Dynamics Model')

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

Когда вы открываете модель, модель появляется в окне 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

Идентификатор Simulink (SID) является уникальным обозначением, автоматически присвоенным блоку Simulink, образцовой аннотации или объекту Stateflow® в диаграмме Stateflow. SID помогает идентифицировать определенные экземпляры этих компонентов в вашей схеме, особенно при совместном использовании моделей между людьми в команде.

Чтобы подсветить компонент визуально в модели, получите SID и используйте его с функцией Simulink.ID.hilite.

SID имеет эти характеристики:

  • Персистентный в течение времени жизни блока Simulink, образцовой аннотации или объекта Stateflow

  • Сохраненный в образцовом файле

  • Остается то же самое, если имя блока или имя объекта изменяются

  • Не может быть изменен

Формат SID:

model_name:sid_number

  • model_name является именем модели, где блок, аннотация или объект Stateflow находятся.

  • sid_number является уникальным номером в модели, присвоенной Simulink.

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

  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.

  • Именованный цвет: '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]')

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

| | | | | | | | | |

Похожие темы

Была ли эта тема полезной?