systemcomposer.arch.Component

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

Описание

Component класс представляет компонент в модели архитектуры. Этот класс наследовался systemcomposer.arch.BaseComponent. Этот класс выведен из systemcomposer.arch.Element.

Создание

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

model = systemcomposer.createModel('archModel');
arch = get(model,'Architecture');
component = addComponent(arch,'newComponent');

Свойства

развернуть все

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

Пример: 'newComponent'

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

Обработайте, чтобы породить архитектуру, которая владеет компонентом в виде systemcomposer.arch.Architecture объект.

Архитектура, которая задает структуру компонента в виде systemcomposer.arch.Architecture объект. Для компонента, который ссылается на различную модель архитектуры, это свойство возвращает указатель на корневую архитектуру той модели. Для различных компонентов архитектура является архитектурой активного варианта.

Архитектура, которой компонент владеет в виде systemcomposer.arch.Architecture объект. Для компонентов, которые ссылаются на архитектуру, это свойство пусто. Для различных компонентов это свойство является архитектурой, в которой находятся отдельные различные компоненты.

Массив портов компонента в виде массива systemcomposer.arch.ComponentPort объекты.

Массив портов компонента в виде массива systemcomposer.arch.ComponentPort объекты. Для ссылочных компонентов это свойство пусто.

Положение компонента на холсте в виде вектора из координат, в пикселях [left top right bottom].

Имя модели, что ссылки компонента, если соединенный компонент в виде вектора символов.

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

Является ли компонент блоком адаптера в виде логической единицы (true) или 0 (false).

Типы данных: логический

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

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

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

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

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

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

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

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

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

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

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

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

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

saveAsModelСохраните архитектуру компонента, чтобы разделить модель
createSimulinkBehaviorСоздайте поведение Simulink и ссылку на компонент
createStateflowChartBehaviorДобавьте поведение диаграммы Stateflow в компонент
linkToModelСоедините компонент с моделью
inlineComponentВстроенная эталонная архитектура или поведение в модель
makeVariantПреобразуйте компонент в вариант
isReferenceНайдите, является ли компонент ссылкой на другую модель
connectСоздайте связи модели архитектуры
getPortПолучите порт от компонента
applyStereotypeПримените стереотип к элементу модели архитектуры
getStereotypesПолучите стереотипы, примененные на элемент модели архитектуры
removeStereotypeУдалите стереотип из элемента модели
setPropertyУстановите значение свойства, соответствующее стереотипировать примененный элемент
getPropertyЗаставьте значение свойства, соответствующее стереотипировать примененный элемент
getPropertyValueПолучите значение свойства архитектуры
getEvaluatedPropertyValueПолучите оцененное значение свойства от компонента
getStereotypePropertiesПолучите стереотипные имена свойства на элементе
destroyУдалите элемент модели

Примеры

свернуть все

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

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

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

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');

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

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

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

save(model)

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

open_system(gcs);

Расположите размещение pressıng Ctrl+Shift+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ıng Ctrl+Shift+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 функция. Исходный компонент встраивается в различном компоненте как один из доступных вариантов. Можно спроектировать другие варианты в различном компоненте и переключить активный выбор. Различные компоненты позволяют вам выбирать проекты behaviorial программно в модели архитектуры, чтобы выполнить торговые исследования и анализ.

[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ıng Ctrl+Shift+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