Класс, который представляет архитектуру в модели
The 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
- Уникальный внешний идентификаторУникальный внешний идентификатор, заданный как вектор символов. Внешний идентификатор сохраняется в течение срока службы элемента и посредством всех операций, которые сохраняют UUID
.
Типы данных: char
Model
- Модель родительской System Composer™Родительская модель архитектуры, заданная как systemcomposer.arch.Model
объект.
SimulinkHandle
- указатель на SimulinkУказатель на Simulink для архитектуры, заданный как double
. Это свойство необходимо для нескольких связанных с Simulink рабочих процессов и для использования Simulink Requirement APIs.
Пример: handle = get(object,'SimulinkHandle')
Типы данных: double
SimulinkModelHandle
- указатель Simulink на родительскую модель System ComposerУказатель на Simulink в родительскую модель архитектуры, заданный как double
. Это свойство необходимо для нескольких связанных с Simulink рабочих процессов и для использования Simulink Requirement APIs.
Пример: handle = get(object,'SimulinkModelHandle')
Типы данных: double
addComponent | Добавление компонентов в архитектуру |
addVariantComponent | Добавление исполнительных компонентов к архитектуре |
addPort | Добавьте порты к архитектуре |
connect | Создайте соединения модели архитектуры |
applyStereotype | Применить стереотип к элементу модели архитектуры |
getStereotypes | Получите стереотипы, примененные к элементу модели архитектуры |
removeStereotype | Удалите стереотип из элемента модели |
batchApplyStereotype | Применить стереотип ко всем элементам архитектуры |
iterate | Итерация над элементами модели |
instantiate | Создайте образец анализа из спецификации |
setProperty | Установите значение свойства, соответствующее стереотипу, примененному к элементу |
getProperty | Получите значение свойства, соответствующее стереотипу, примененному к элементу |
getPropertyValue | Получите значение свойства архитектуры |
getEvaluatedPropertyValue | Получите оцененное значение свойства из компонента |
getStereotypeProperties | Получите имена свойства стереотипа для элемента |
removeProfile | Удалите профиль из модели |
applyProfile | Применить профиль к модели |
В этом примере показано, как создать модель архитектуры с помощью 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.