systemcomposer.arch.Connector

Класс, который представляет соединитель между портами

Описание

The Connector класс представляет соединитель между портами. Этот класс получают из systemcomposer.arch.Element.

Создание

Создайте соединитель.

connector = connect(architecture,outports,inports)

Свойства

расширить все

Указатель на родительскую архитектуру, которая владеет соединителем, задается как systemcomposer.arch.Architecture объект.

Имя соединителя, заданное как вектор символов.

Типы данных: char

Источник соединения как выход порт, заданный как systemcomposer.arch.ArchitecturePort или systemcomposer.arch.ComponentPort объект.

Адресат соединения как вход порт, заданный как systemcomposer.arch.ArchitecturePort или systemcomposer.arch.ComponentPort объект.

Универсальный уникальный идентификатор для соединителя модели, заданный как вектор символов.

Пример: '91d5de2c-b14c-4c76-a5d6-5dd0037c52df'

Типы данных: char

Уникальный внешний идентификатор, заданный как вектор символов. Внешний идентификатор сохраняется в течение срока службы элемента и посредством всех операций, которые сохраняют UUID.

Типы данных: char

Родительская модель соединителя, заданная как systemcomposer.arch.Model объект.

Указатель на Simulink для соединителя, заданный как числовое значение. Это свойство необходимо для нескольких рабочих процессов, связанных с Simulink, и для использования API Simulink Requirement.

Пример: handle = get(object,'SimulinkHandle')

Типы данных: double

Указатель на Simulink в родительскую модель соединителя, заданный как числовое значение. Это свойство необходимо для нескольких рабочих процессов, связанных с Simulink, и для использования API Simulink Requirement.

Пример: handle = get(object,'SimulinkModelHandle')

Типы данных: double

Функции объекта

applyStereotypeПрименить стереотип к элементу модели архитектуры
getStereotypesПолучите стереотипы, примененные к элементу модели архитектуры
removeStereotypeУдалите стереотип из элемента модели
setPropertyУстановите значение свойства, соответствующее стереотипу, примененному к элементу
getPropertyПолучите значение свойства, соответствующее стереотипу, примененному к элементу
getPropertyValueПолучите значение свойства архитектуры
getEvaluatedPropertyValueПолучите оцененное значение свойства из компонента
getStereotypePropertiesПолучите имена свойства стереотипа для элемента
getSourceElementВозвращает элементы интерфейса сигнала, выбранные на исходном порту для соединения
getDestinationElementВозвращает элементы интерфейса сигнала, выбранные в порту назначения для соединения
destroyУдалите элемент модели

Примеры

свернуть все

В этом примере показано, как создать модель архитектуры с помощью System Composer™ API.

Подготовьте рабочую область

Очистить все профили из рабочей области.

systemcomposer.profile.Profile.closeAll;

Создайте модель

Чтобы создать модель, добавьте словарь данных с интерфейсами и элементами интерфейса, затем добавьте компоненты, порты и соединения. После создания модели можно создать пользовательские представления для фокусировки на конкретной проблеме. Можно также запросить модель, чтобы собрать различные элементы модели в соответствии с заданными критериями.

Добавление компонентов, портов и соединений

Создайте модель и извлеките ее архитектуру.

model = systemcomposer.createModel('mobileRobotAPI');
arch = model.Architecture;

Создайте словарь данных и добавьте интерфейс. Соедините интерфейс с моделью.

dictionary = systemcomposer.createDictionary('SensorInterfaces.sldd');
interface = addInterface(dictionary,'GPSInterface');
interface.addElement('Mass');
linkDictionary(model,'SensorInterfaces.sldd');

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

components = addComponent(arch,{'Sensor','Planning','Motion'});
sensorPorts = addPort(components(1).Architecture,{'MotionData','SensorData'},{'in','out'});
sensorPorts(2).setInterface(interface);

planningPorts = addPort(components(2).Architecture,{'Command','SensorData1','MotionCommand'},{'in','in','out'});
planningPorts(2).setInterface(interface);

motionPorts = addPort(components(3).Architecture,{'MotionCommand','MotionData'},{'in','out'});

Соедините компоненты с помощью правила интерфейса. Это правило соединяет порты с компонентами, которые имеют один и тот же интерфейс.

c_sensorData = connect(arch,components(1),components(2),'Rule','interfaces');
c_motionData = connect(arch,components(3),components(1));
c_motionCommand = connect(arch,components(2),components(3));

Сохранение словаря данных

Сохраните изменения в словаре данных.

dictionary.save(); 

Добавление и подключение порта архитектуры

Добавьте архитектурный порт в архитектуру.

archPort = addPort(arch,'Command','in');

The connect команда требует порт компонента в качестве аргумента. Получите порт компонента и соедините:

compPort = getPort(components(2),'Command');
c_Command = connect(archPort,compPort);

Сохраните модель.

save(model)

Откройте модель

open_system(gcs);

Расположить размещение можно с помощью pressв Ctrl + сдвиг + A или с помощью следующей команды:

Simulink.BlockDiagram.arrangeSystem('mobileRobotAPI'); 

Создание и применение профиля и стереотипов

Профили xml файлы, которые могут быть применены к любой модели. Можно добавить стереотипы со свойствами к профилям, а затем заполнить свойства определенными значениями. Наряду со встроенными возможностями анализа System Composer, стереотипы могут помочь оптимизировать вашу систему с точки зрения эффективности, стоимости и надежности.

Создайте профиль и добавьте стереотипы

Создайте профиль.

profile = systemcomposer.createProfile('GeneralProfile');

Создайте стереотип, который применяется ко всем типам элементов:

elemSType = addStereotype(profile,'projectElement');

Создайте стереотипы для различных типов компонентов. Эти типы продиктованы проектами и на ваше усмотрение:

pCompSType = addStereotype(profile,'physicalComponent','AppliesTo','Component');
sCompSType = addStereotype(profile,'softwareComponent','AppliesTo','Component');

Создайте стереотип для соединений:

sConnSType = addStereotype(profile,'standardConn','AppliesTo','Connector');

Добавление свойств

Добавьте свойства к стереотипам. Можно использовать свойства для сбора метаданных для элементов модели и анализа нефункциональных требований. Эти свойства добавляются ко всем элементам, к которым применяется стереотип, в любой модели, импортирующей профиль.

addProperty(elemSType,'ID','Type','uint8');
addProperty(elemSType,'Description','Type','string');
addProperty(pCompSType,'Cost','Type','double','Units','USD');
addProperty(pCompSType,'Weight','Type','double','Units','g');
addProperty(sCompSType,'develCost','Type','double','Units','USD');
addProperty(sCompSType,'develTime','Type','double','Units','hour');
addProperty(sConnSType,'unitCost','Type','double','Units','USD');
addProperty(sConnSType,'unitWeight','Type','double','Units','g');
addProperty(sConnSType,'length','Type','double','Units','m');

Сохраните профиль

save(profile);

Применить профиль к модели

Применить профиль к модели:

applyProfile(model,'GeneralProfile');

Применить стереотипы к компонентам. Некоторые компоненты являются физическими компонентами, а другие - программными компонентами.

applyStereotype(components(2),'GeneralProfile.softwareComponent')
applyStereotype(components(1),'GeneralProfile.physicalComponent')
applyStereotype(components(3),'GeneralProfile.physicalComponent')

Примените стереотип соединителя ко всем соединениям:

batchApplyStereotype(arch,'Connector','GeneralProfile.standardConn');

Примените общий стереотип элемента ко всем коннекторам и портам:

batchApplyStereotype(arch,'Component','GeneralProfile.projectElement');
batchApplyStereotype(arch,'Connector','GeneralProfile.projectElement');

Установите свойства для каждого компонента:

setProperty(components(1),'GeneralProfile.projectElement.ID','001');
setProperty(components(1),'GeneralProfile.projectElement.Description','''Central unit for all sensors''');
setProperty(components(1),'GeneralProfile.physicalComponent.Cost','200');
setProperty(components(1),'GeneralProfile.physicalComponent.Weight','450');
setProperty(components(2),'GeneralProfile.projectElement.ID','002');
setProperty(components(2),'GeneralProfile.projectElement.Description','''Planning computer''');
setProperty(components(2),'GeneralProfile.softwareComponent.develCost','20000');
setProperty(components(2),'GeneralProfile.softwareComponent.develTime','300');
setProperty(components(3),'GeneralProfile.projectElement.ID','003');
setProperty(components(3),'GeneralProfile.projectElement.Description','''Motor and motor controller''');
setProperty(components(3),'GeneralProfile.physicalComponent.Cost','4500');
setProperty(components(3),'GeneralProfile.physicalComponent.Weight','2500');

Установите свойства соединений идентичными:

connections = [c_sensorData c_motionData c_motionCommand  c_Command];
for k = 1:length(connections)
    setProperty(connections(k),'GeneralProfile.standardConn.unitCost','0.2');
    setProperty(connections(k),'GeneralProfile.standardConn.unitWeight','100');
    setProperty(connections(k),'GeneralProfile.standardConn.length','0.3');
end

Добавление иерархии

Добавьте два компонента с именем Controller и Scope внутри Motion компонент. Определите порты. Соедините их с архитектурой и друг с другом, применяя стереотип коннектора. Иерархия в схеме архитектуры создает дополнительный уровень детализации, который задает поведение компонентов внутри системы.

motionArch = components(3).Architecture;
motion = motionArch.addComponent({'Controller','Scope'});

controllerPorts = addPort(motion(1).Architecture,{'controlIn','controlOut'},{'in','out'});
controllerCompPortIn = motion(1).getPort('controlIn');
controllerCompPortOut = motion(1).getPort('controlOut');

scopePorts = addPort(motion(2).Architecture,{'scopeIn','scopeOut'},{'in','out'});
scopeCompPortIn = motion(2).getPort('scopeIn');
scopeCompPortOut = motion(2).getPort('scopeOut');

c_planningController = connect(motionPorts(1),controllerCompPortIn);
c_planningScope = connect(scopeCompPortOut,motionPorts(2));
c_planningConnect = connect(controllerCompPortOut,scopeCompPortIn,'GeneralProfile.standardConn');

Сохраните модель.

save(model)

Расположить размещение можно с помощью pressв Ctrl + сдвиг + A или с помощью следующей команды:

Simulink.BlockDiagram.arrangeSystem('mobileRobotAPI/Motion');

Создайте Модель-ссылку

Модели-ссылки полезны для организации больших моделей иерархически и позволяют вам задавать архитектуры или поведения один раз и повторно использовать их. Когда компонент ссылается на другую модель, все существующие порты компонента удаляются, и порты, существующие в модели-ссылке, будут появляться в компоненте.

Создайте новую модель System Composer. Преобразуйте Sensor компонент в ссылочный компонент для ссылки на новую модель. Чтобы добавить дополнительные порты на Sensor необходимо обновить ссылочную модель mobileSensor.

newModel = systemcomposer.createModel('mobileSensor');
newArch = newModel.Architecture;
newComponents = addComponent(newArch,'ElectricSensor');
save(newModel);

linkToModel(components(1),'mobileSensor');

Примените стереотип к архитектуре и компоненту связанного образца модели.

referenceModel = get_param('mobileSensor','SystemComposerModel');
referenceModel.applyProfile('GeneralProfile');
referenceModel.Architecture.applyStereotype('GeneralProfile.softwareComponent');
batchApplyStereotype(referenceModel.Architecture,'Component','GeneralProfile.projectElement')

Добавьте порты и соединения к компоненту ссылки.

sensorPorts = addPort(components(1).Architecture,{'MotionData','SensorData'},{'in','out'});
sensorPorts(2).setInterface(interface)
connect(arch,components(1),components(2),'Rule','interfaces');
connect(arch,components(3),components(1));

Сохраните модели.

save(referenceModel)
save(model)

Создание исполнительного компонента

Можно преобразовать Planning компонент в компонент варианта с помощью makeVariant функция. Исходный компонент встроен в компонент варианта как один из доступных вариантов выбора. Можно проектировать другие варианты в компоненте варианта и переключать активный выбор. Варианты компонентов позволяют вам выбрать поведенческие проекты программно в модели архитектуры, чтобы выполнить торговые исследования и анализ.

[variantComp,choice1] = makeVariant(components(2));

Добавьте дополнительный вариант с именем PlanningAlt. Второй аргумент определяет имя, а третий аргумент определяет метку. Метка определяет выбор. Активный выбор контролируется меткой.

choice2 = addChoice(variantComp,{'PlanningAlt'},{'PlanningAlt'});

Создайте необходимые порты на PlanningAlt.

setActiveChoice(variantComp,choice2)
planningAltPorts = addPort(choice2.Architecture,{'Command','SensorData1','MotionCommand'},{'in','in','out'});
planningAltPorts(2).setInterface(interface);

Делайте PlanningAlt активный вариант.

setActiveChoice(variantComp,'PlanningAlt')

Расположить размещение можно с помощью pressв Ctrl + сдвиг + A или с помощью следующей команды:

Simulink.BlockDiagram.arrangeSystem('mobileRobotAPI/Planning');

Сохраните модель.

save(model)

Очистка

Раскомментируйте следующий код и запуск, чтобы очистить программные продукты, созданные этим примером:

% bdclose('mobileRobotAPI')
% bdclose('mobileSensor')
% Simulink.data.dictionary.closeAll
% systemcomposer.profile.Profile.closeAll
% delete('Profile.xml')
% delete('SensorInterfaces.sldd')

Подробнее о

расширить все

Введенный в R2019a
Для просмотра документации необходимо авторизоваться на сайте