Класс, представляющий компонент варианта в модели System Composer
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 - Модель Composer™ родительской системыРодительская модель компонента, заданная как systemcomposer.arch.Model объект.
SimulinkHandle - Рукоятка симулятораДескриптор Simulink для компонента, заданный как числовое значение. Это свойство необходимо для нескольких рабочих потоков, связанных с Simulink, и для использования API требований Simulink.
Пример: handle = get(object,'SimulinkHandle')
Типы данных: double
SimulinkModelHandle - дескриптор Simulink для родительской модели System ComposerДескриптор Simulink для родительской модели компонента, заданный как числовое значение. Это свойство необходимо для нескольких рабочих потоков, связанных с Simulink, и для использования API требований Simulink.
Пример: handle = get(object,'SimulinkModelHandle')
Типы данных: double
addChoice | Добавление вариантов в компонент исполнения |
setCondition | Задать условие при выборе варианта |
setActiveChoice | Задать активный выбор для компонента варианта |
getChoices | Получение доступных вариантов в компоненте исполнения |
getActiveChoice | Получить активный выбор для компонента варианта |
getCondition | Возврат элемента управления вариантом при выборе в компоненте варианта |
applyStereotype | Применение стереотипа к элементу модели архитектуры |
getStereotypes | Применить стереотипы к элементу архитектурной модели |
removeStereotype | Удаление стереотипа из элемента модели |
getPort | Получить порт из компонента |
getPropertyValue | Получение значения свойства architecture |
getEvaluatedPropertyValue | Получение вычисленного значения свойства из компонента |
getStereotypeProperties | Получение имен свойств стереотипа для элемента |
getProperty | Получение значения свойства, соответствующего стереотипу, применяемому к элементу |
setProperty | Установка значения свойства, соответствующего стереотипу, применяемому к элементу |
isReference | Найти, является ли компонент ссылкой на другую модель |
destroy | Удалить элемент модели |
В этом примере показано, как построить архитектурную модель с помощью системного API 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);
Упорядочьте макет, нажав клавиши 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)
Упорядочьте макет, нажав клавиши 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 функция. Исходный компонент встраивается в компонент исполнения в качестве одного из доступных вариантов исполнения. Можно создать другие варианты исполнения в компоненте исполнения и переключить активный вариант. Компоненты вариантов позволяют программно выбирать поведенческие конструкции в архитектурной модели для выполнения торговых исследований и анализа.
[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')Упорядочьте макет, нажав клавиши 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')
| Термин | Определение | Приложение | Дополнительные сведения |
|---|---|---|---|
| архитектура | Архитектура System Composer представляет собой систему компонентов и их структурное и поведенческое взаимодействие. Можно представлять определенные архитектуры с помощью альтернативных представлений. | Различные типы архитектур описывают различные аспекты систем:
| Визуальное создание архитектуры |
| модель | Модель System Composer - это файл, содержащий архитектурную информацию, включая компоненты, порты, соединители, интерфейсы и варианты поведения. | Выполните операции с моделью:
Модели System Composer хранятся как | Создание модели архитектуры |
| компонент | Компонент является нетривиальной, почти независимой и заменяемой частью системы, которая выполняет четкую функцию в контексте архитектуры. Компонент определяет элемент архитектуры, такой как функция, система, аппаратное обеспечение, программное обеспечение или другой концептуальный объект. Компонент также может быть подсистемой или подфункцией. | Представленный в виде блока компонент является частью архитектурной модели, которую можно разделить на многократно используемые артефакты. | Компоненты |
| порт | Порт - это узел компонента или архитектуры, представляющий собой точку взаимодействия с его средой. Порт разрешает поток информации в другие компоненты или системы и из них. | Существуют различные типы портов:
| Порты |
| соединитель | Соединители - это линии, обеспечивающие соединения между портами. Соединители описывают потоки информации между компонентами или архитектурами. | Соединитель позволяет двум компонентам взаимодействовать без определения характера взаимодействия. Задайте интерфейс порта для определения способа взаимодействия компонентов. | Связи |
| Термин | Определение | Приложение | Дополнительные сведения |
|---|---|---|---|
| вариант | Вариант является одним из многих структурных или поведенческих вариантов в компоненте варианта. | Используйте варианты для быстрой замены различных архитектурных проектов для компонента при выполнении анализа. | Создание вариантов |
| управление вариантами | Элемент управления исполнениями - это строка, управляющая активным выбором исполнения. | Установите элемент управления исполнениями для программного управления активным вариантом. | Задать условие |
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.