Класс, который представляет компонент варианта в модели System Composer
The VariantComponent класс представляет компонент варианта, который позволяет вам создать несколько вариантов проекта для компонента. Этот класс наследует от systemcomposer.arch.BaseComponent. Этот класс получают из systemcomposer.arch.Element.
Создайте компонент варианта.
varComp = addVariantComponent(archObj,'compName'); addVariantComponent метод создает systemcomposer.arch.VariantComponent объект.
Name - Имя варианта компонентаИмя компонента варианта, заданное как вектор символов.
Типы данных: char
Position - Положение компонента на холстеПоложение компонента на холсте, заданное как вектор координат, в пикселях [left top right bottom].
Parent - Архитектура, которая владеет вариантом компонентаАрхитектура, которая владеет исполнительным компонентом, задается как systemcomposer.arch.Architecture объект.
Architecture - Архитектура активного выбора вариантаАрхитектура активного варианта выбора, заданная как systemcomposer.arch.Architecture объект.
Ports - Входные и выходные портыВходной и выходной порты компонента варианта, заданные как systemcomposer.arch.ComponentPort объекты.
OwnedArchitecture - Архитектура, принадлежащая вариантному компонентуАрхитектура, принадлежащая вариантному компоненту, задается как systemcomposer.arch.Architecture объект.
OwnedPorts - Массив портов компонентовМассив портов компонентов, заданный как массив systemcomposer.arch.ComponentPort объекты.
UUID - Универсальный уникальный идентификаторУниверсальный уникальный идентификатор для компонента модели, заданный как вектор символов.
Пример: '91d5de2c-b14c-4c76-a5d6-5dd0037c52df'
Типы данных: char
ExternalUID - Уникальный внешний идентификаторУникальный внешний идентификатор, заданный как вектор символов. Внешний идентификатор сохраняется в течение срока службы элемента и посредством всех операций, которые сохраняют UUID.
Типы данных: char
Model - Модель родительской System Composer™Родительская модель компонента, заданная как systemcomposer.arch.Model объект.
SimulinkHandle - указатель на SimulinkУказатель на Simulink для компонента, заданный как числовое значение. Это свойство необходимо для нескольких связанных с Simulink рабочих процессов и для использования Simulink Requirement APIs.
Пример: handle = get(object,'SimulinkHandle')
Типы данных: double
SimulinkModelHandle - указатель Simulink на родительскую модель System ComposerУказатель на Simulink в родительскую модель компонента, заданный как числовое значение. Это свойство необходимо для нескольких связанных с Simulink рабочих процессов и для использования Simulink Requirement APIs.
Пример: handle = get(object,'SimulinkModelHandle')
Типы данных: double
addChoice | Добавьте варианты выбора к вариантному компоненту |
setCondition | Установите условие на выбор варианта |
setActiveChoice | Установите активный выбор для варианта компонента |
getChoices | Получите доступные варианты в варианте компонента |
getActiveChoice | Получите активный выбор по варианту компонента |
getCondition | Возврат управления вариантом на выбор в компоненте варианта |
applyStereotype | Применить стереотип к элементу модели архитектуры |
getStereotypes | Получите стереотипы, примененные к элементу модели архитектуры |
removeStereotype | Удалите стереотип из элемента модели |
getPort | Получите порт из компонента |
getPropertyValue | Получите значение свойства архитектуры |
getEvaluatedPropertyValue | Получите оцененное значение свойства из компонента |
getStereotypeProperties | Получите имена свойства стереотипа для элемента |
getProperty | Получите значение свойства, соответствующее стереотипу, примененному к элементу |
setProperty | Установите значение свойства, соответствующее стереотипу, примененному к элементу |
isReference | Найдите, является ли компонент ссылкой на другую модель |
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')
| Термин | Определение | Приложение | Дополнительная информация |
|---|---|---|---|
| архитектура | Архитектура System Composer представляет систему компонентов и то, как они взаимодействуют друг с другом структурно и поведенчески. Представлять определенные архитектуры можно с помощью альтернативных представлений. | Различные типы архитектур описывают различные аспекты систем:
| Составьте архитектуру визуально |
| модель | Модель System Composer является файлом, содержащим архитектурную информацию, включая компоненты, порты, соединители, интерфейсы и поведение. | Выполните операции над моделью:
Модели System Composer хранятся как | Создайте модель Архитектуры |
| компонент | Компонент является нетривиальной, почти независимой и заменяемой частью системы, которая удовлетворяет функцию clear в контексте архитектуры. Компонент определяет элемент архитектуры, такой как функция, система, оборудование, программное обеспечение или другая концептуальная сущность. Компонент может также быть подсистемой или подфункцией. | Представленный как блок, компонент является частью модели архитектуры, которая может быть разделена на переиспользуемые программные продукты. | Компоненты |
| порт | Порт является узлом компонента или архитектуры, который представляет точку взаимодействия с его окружением. Порт разрешает поток информации к другим компонентам или системам и из них. | Существуют различные типы портов:
| Порты |
| соединитель | Коннекторы являются линиями, которые обеспечивают соединения между портами. Коннекторы описывают, как информация переходит между компонентами или архитектурами. | Соединитель позволяет двум компонентам взаимодействовать, не определяя характер взаимодействия. Установите интерфейс на порте, чтобы определить, как взаимодействуют компоненты. | Связи |
| Термин | Определение | Приложение | Дополнительная информация |
|---|---|---|---|
| вариант | Вариант является одним из многих структурных или поведенческих вариантов в компоненте варианта. | Используйте варианты, чтобы быстро заменить различные архитектурные проекты для компонента при выполнении анализа. | Создание вариантов |
| управление вариантом | Управление вариантом является строкой, которая управляет выбором активного варианта. | Установите управление вариантом, чтобы программно контролировать, какой вариант является активным. | Установите условие |
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.