Класс, который представляет архитектуру в модели
Architecture
класс представляет архитектуру в модели. Этот класс выведен из systemcomposer.arch.Element
.
Создайте модель и получите корневую архитектуру.
model = systemcomposer.createModel('archModel'); arch = get(model,'Architecture')
Name
— Имя архитектурыИмя архитектуры в виде вектора символов. Имя архитектуры выведено из родительского имени компонента или имени модели, которому принадлежит архитектура.
Пример: 'archModel'
Типы данных: char
Definition
— Тип определения архитектурыcomposition
| behavior
| view
Тип определения архитектуры в виде ArchitectureDefintion
перечисление composition
, behavior
, или view
.
Типы данных: ArchitectureDefinition enum
Parent
— Родительский компонентПородите компонент, который владеет архитектурой в виде systemcomposer.arch.Component
объект.
Components
— Дочерние компонентыДочерние компоненты архитектуры в виде массива systemcomposer.arch.Component
объекты.
Ports
— Порты архитектурыПорты архитектуры архитектуры в виде массива systemcomposer.arch.ArchitecturePort
объекты.
Connectors
— Коннекторы, которые соединяют дочерние компоненты этой архитектурыКоннекторы, которые соединяют дочерние компоненты этой архитектуры в виде массива systemcomposer.arch.Connector
объекты.
UUID
— Универсальный уникальный идентификаторУниверсальный уникальный идентификатор для архитектуры в виде вектора символов.
Пример: '91d5de2c-b14c-4c76-a5d6-5dd0037c52df'
Типы данных: char
ExternalUID
— Уникальный внешний идентификаторУникальный внешний идентификатор в виде вектора символов. Внешний ID сохраняется по продолжительности жизни элемента и посредством всех операций, которые сохраняют UUID
.
Типы данных: char
Model
— Родительская модель System Composer™Родительская модель архитектуры в виде systemcomposer.arch.Model
объект.
SimulinkHandle
— Указатель SimulinkУказатель Simulink для архитектуры в виде double
. Это свойство необходимо для нескольких связанных с Simulink потоков операций и для использования API Требования Simulink.
Пример: handle = get(object,'SimulinkHandle')
Типы данных: double
SimulinkModelHandle
— Указатель Simulink, чтобы породить модель System ComposerУказатель Simulink на родительскую модель архитектуры в виде double
. Это свойство необходимо для нескольких связанных с Simulink потоков операций и для использования API Требования Simulink.
Пример: handle = get(object,'SimulinkModelHandle')
Типы данных: double
addComponent | Добавьте компоненты в архитектуру |
addVariantComponent | Добавьте различные компоненты в архитектуру |
addPort | Добавьте порты в архитектуру |
connect | Создайте связи модели архитектуры |
applyStereotype | Примените стереотип к элементу модели архитектуры |
getStereotypes | Получите стереотипы, примененные на элемент модели архитектуры |
removeStereotype | Удалите стереотип из элемента модели |
batchApplyStereotype | Примените стереотип ко всем элементам в архитектуре |
iterate | Выполните итерации по элементам модели |
instantiate | Создайте аналитический экземпляр из спецификации |
setProperty | Установите значение свойства, соответствующее стереотипировать примененный элемент |
getProperty | Заставьте значение свойства, соответствующее стереотипировать примененный элемент |
getPropertyValue | Получите значение свойства архитектуры |
getEvaluatedPropertyValue | Получите оцененное значение свойства от компонента |
getStereotypeProperties | Получите стереотипные имена свойства на элементе |
removeProfile | Удалите профиль из модели |
applyProfile | Примените профиль к модели |
В этом примере показано, как создать модель архитектуры использование 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')
Термин | Определение | Приложение | Больше информации |
---|---|---|---|
архитектура | Архитектура System Composer представляет систему компонентов и как они взаимодействуют через интерфейс друг с другом структурно и поведенчески. Можно представлять определенные архитектуры с помощью альтернативных представлений. | Различные типы архитектур описывают различные аспекты систем:
| Составьте архитектуру визуально |
модель | Модель System Composer является файлом, который содержит архитектурную информацию, включая компоненты, порты, коннекторы, интерфейсы и поведения. | Выполните операции на модели:
Модели System Composer хранятся как | Создайте модель архитектуры |
компонент | Компонент является нетривиальной, почти независимой, и заменимой частью системы, которая выполняет функцию clear в контексте архитектуры. Компонент задает элемент архитектуры, такой как функция, система, оборудование, программное обеспечение или другая концептуальная сущность. Компонент может также быть подсистемой или подфункцией. | Представленный как блок, компонент является частью модели архитектуры, которая может быть разделена на допускающие повторное использование артефакты. | Компоненты |
порт | Порт является узлом на компоненте или архитектуре, которая представляет точку взаимодействия с ее средой. Порт разрешает поток информации к и от других компонентов или систем. | Существуют различные типы портов:
| Порты |
коннектор | Коннекторы являются линиями, которые обеспечивают связи между портами. Коннекторы описывают как информационные потоки между компонентами или архитектурами. | Коннектор позволяет двум компонентам взаимодействовать, не задавая природу взаимодействия. Установите интерфейс на порте задавать, как компоненты взаимодействуют. | Связи |
Component | systemcomposer.arch.Component
| systemcomposer.arch.Element
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.