Элемент данных в интерфейсе данных
DataElement
объект представляет элемент данных в интерфейсе данных.
Создайте элемент данных.
element = addElement(interface,'newElement')
Interface
— Родительский интерфейс данных элемента данныхРодительский интерфейс данных элемента данных в виде systemcomposer.interface.DataInterface
объект.
Name
— Имя элемента данныхИмя элемента данных в виде вектора символов или строки.
Пример: 'newElement'
Типы данных: char |
string
Type
— Тип элемента данныхТип элемента данных в виде systemcomposer.interface.DataInterface
или systemcomposer.ValueType
объект.
UUID
— Универсальный уникальный идентификаторУниверсальный уникальный идентификатор для элемента данных в виде вектора символов.
Пример: '91d5de2c-b14c-4c76-a5d6-5dd0037c52df'
Типы данных: char
ExternalUID
— Уникальный внешний идентификаторУникальный внешний идентификатор в виде вектора символов. Внешний ID сохраняется по продолжительности жизни элемента данных и посредством всех операций, которые сохраняют UUID
.
Типы данных: char
setName | Определите имя для типа значения, интерфейса или элемента |
setType | Установите совместно использованный тип на элементе данных |
createOwnedType | Создайте принадлежавший тип на элементе данных |
destroy | Удалите элемент модели |
Создайте модель архитектуры программно с помощью System Composer™.
Создайте модель
Чтобы создать модель, добавьте словарь данных с интерфейсами данных, элементами данных, и типами значения, затем добавьте компоненты, порты и связи. Присвойте находящийся в собственности интерфейс порту. После того, как модель создана, можно создать пользовательские представления, чтобы фокусироваться на определенных факторах. Можно также запросить модель, чтобы собрать различные элементы модели согласно критериям, которые вы задаете.
Добавьте компоненты, порты, связи и интерфейсы
Создайте модель и извлеките ее архитектуру.
model = systemcomposer.createModel("mobileRobotAPI");
arch = model.Architecture;
Создайте интерфейсный словарь данных и добавьте интерфейс данных. Добавьте элемент данных в интерфейс данных. Добавьте тип значения в интерфейсный словарь данных. Присвойте тип элемента данных к типу значения. Соедините словарь данных с моделью.
dictionary = systemcomposer.createDictionary("SensorInterfaces.sldd"); interface = dictionary.addInterface("GPSInterface"); element = interface.addElement("SignalStrength"); valueType = dictionary.addValueType("SignalStrengthType",'Units','dB','Description','GPS Signal Strength'); element.setType(valueType); linkDictionary(model,"SensorInterfaces.sldd");
Сохраните изменения в интерфейсном словаре данных.
dictionary.save
Просмотрите интерфейсы в Интерфейсном Редакторе.
Добавьте компоненты, порты и связи. Установите интерфейс данных на порты, которые вы соедините позже.
componentSensor = addComponent(arch,'Sensor'); sensorPorts = addPort(componentSensor.Architecture,{'MotionData','SensorData'},{'in','out'}); sensorPorts(2).setInterface(interface) componentPlanning = addComponent(arch,'Planning'); planningPorts = addPort(componentPlanning.Architecture,{'Command','SensorData1','MotionCommand'},{'in','in','out'}); planningPorts(2).setInterface(interface) componentMotion = addComponent(arch,'Motion'); motionPorts = addPort(componentMotion.Architecture,{'MotionCommand','MotionData'},{'in','out'});
Создайте находящийся в собственности интерфейс на 'MotionData'
порт. Добавьте находящийся в собственности элемент данных под находящимся в собственности интерфейсом данных. Присвойте элемент данных "Rotation"
к значению вводят с модульным набором к degrees
.
ownedInterface = motionPorts(2).createInterface("DataInterface"); ownedElement = ownedInterface.addElement("Rotation"); subInterface = ownedElement.createOwnedType('Units','degrees');
Просмотрите интерфейсы в Интерфейсном Редакторе. Выберите 'MotionData'
порт на Motion
компонент. В Интерфейсном Редакторе переключитесь от Представления Словаря до Представления Интерфейса Порта.
Соедините компоненты с интерфейсным правилом и правилом имени по умолчанию. Интерфейсное правило соединяет порты на компонентах, которые совместно используют тот же интерфейс. По умолчанию правило имени соединяет порты на компонентах, которые совместно используют то же имя.
c_sensorData = connect(arch,componentSensor,componentPlanning,'Rule',"interfaces"); c_motionData = connect(arch,componentMotion,componentSensor); c_motionCommand = connect(arch,componentPlanning,componentMotion);
Добавьте и соедините порт архитектуры
Добавьте порт архитектуры на архитектуре.
archPort = addPort(arch,"Command","in");
connect
команда требует порта компонента в качестве аргумента. Получите порт компонента, затем соединитесь.
compPort = getPort(componentPlanning,"Command");
c_Command = connect(archPort,compPort);
Сохраните модель.
model.save
Откройте модель.
systemcomposer.openModel("mobileRobotAPI");
Расположите размещение 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');
Сохраните профиль
profile.save;
Примените профиль к модели
Примените профиль к модели.
applyProfile(model,"GeneralProfile");
Примените стереотипы к компонентам. Некоторые компоненты являются физическими компонентами, в то время как другие являются компонентами программного обеспечения.
applyStereotype(componentPlanning,"GeneralProfile.softwareComponent") applyStereotype(componentSensor,"GeneralProfile.physicalComponent") applyStereotype(componentMotion,"GeneralProfile.physicalComponent")
Примените стереотип коннектора ко всем связям.
batchApplyStereotype(arch,'Connector',"GeneralProfile.standardConn");
Примените общий стереотип элемента ко всем коннекторам и портам.
batchApplyStereotype(arch,'Component',"GeneralProfile.projectElement"); batchApplyStereotype(arch,'Connector',"GeneralProfile.projectElement");
Установите свойства для каждого компонента.
setProperty(componentSensor,'GeneralProfile.projectElement.ID','001'); setProperty(componentSensor,'GeneralProfile.projectElement.Description','''Central unit for all sensors'''); setProperty(componentSensor,'GeneralProfile.physicalComponent.Cost','200'); setProperty(componentSensor,'GeneralProfile.physicalComponent.Weight','450'); setProperty(componentPlanning,'GeneralProfile.projectElement.ID','002'); setProperty(componentPlanning,'GeneralProfile.projectElement.Description','''Planning computer'''); setProperty(componentPlanning,'GeneralProfile.softwareComponent.develCost','20000'); setProperty(componentPlanning,'GeneralProfile.softwareComponent.develTime','300'); setProperty(componentMotion,'GeneralProfile.projectElement.ID','003'); setProperty(componentMotion,'GeneralProfile.projectElement.Description','''Motor and motor controller'''); setProperty(componentMotion,'GeneralProfile.physicalComponent.Cost','4500'); setProperty(componentMotion,'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 = componentMotion.Architecture; motionController = motionArch.addComponent('Controller'); controllerPorts = addPort(motionController.Architecture,{'controlIn','controlOut'},{'in','out'}); controllerCompPortIn = motionController.getPort('controlIn'); controllerCompPortOut = motionController.getPort('controlOut'); motionScope = motionArch.addComponent('Scope'); scopePorts = addPort(motionScope.Architecture,{'scopeIn','scopeOut'},{'in','out'}); scopeCompPortIn = motionScope.getPort('scopeIn'); scopeCompPortOut = motionScope.getPort('scopeOut'); c_planningController = connect(motionPorts(1),controllerCompPortIn); % For outport connections, the interface element must be specified c_planningScope = connect(scopeCompPortOut,motionPorts(2),'DestinationElement',"Rotation"); c_planningConnect = connect(controllerCompPortOut,scopeCompPortIn,'GeneralProfile.standardConn');
Сохраните модель.
model.save
Расположите размещение pressıng Ctrl+Shift+A или использующий эту команду.
Simulink.BlockDiagram.arrangeSystem('mobileRobotAPI/Motion');
Создайте модель - ссылку
Модели - ссылки могут помочь вам организовать большие модели иерархически и задать архитектуры или поведения однажды это, можно затем снова использовать. Когда ссылки компонента другая модель, любые существующие порты на компоненте будут удалены, и порты, которые существуют на модели, на которую ссылаются, появятся на компоненте.
Создайте новую модель System Composer. Преобразуйте Sensor
компонент на ссылочный компонент, чтобы сослаться на новую модель. Добавить дополнительные порты на Sensor
компонент, необходимо обновить модель "mobileSensor"
, на которую ссылаются,.
referenceModel = systemcomposer.createModel("mobileSensor"); referenceArch = referenceModel.Architecture; newComponents = addComponent(referenceArch,"ElectricSensor"); linkDictionary(referenceModel,"SensorInterfaces.sldd"); referenceModel.save linkToModel(componentSensor,"mobileSensor");
Примените стереотип к архитектуре и компоненту соединенного образца модели.
referenceModel.applyProfile("GeneralProfile"); referenceArch.applyStereotype("GeneralProfile.softwareComponent"); batchApplyStereotype(referenceArch,'Component',"GeneralProfile.projectElement")
Добавьте порты и связи со ссылочным компонентом.
sensorPorts = addPort(componentSensor.Architecture,{'MotionData','SensorData'},{'in','out'}); sensorPorts(2).setInterface(interface) connect(arch,componentSensor,componentPlanning,'Rule','interfaces'); connect(arch,componentMotion,componentSensor);
Сохраните модели.
referenceModel.save model.save
Сделайте различный компонент
Можно преобразовать Planning
компонент к различному компоненту с помощью makeVariant
функция. Исходный компонент встраивается в различном компоненте как один из доступных вариантов. Можно спроектировать другие варианты в различном компоненте и переключить активный выбор. Различные компоненты позволяют вам выбирать поведенческие проекты программно в модели архитектуры, чтобы выполнить торговые исследования и анализ.
[variantComp,choice1] = makeVariant(componentPlanning);
Добавьте дополнительный вариант под названием 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');
Сохраните модель.
model.save
Очистка
Не прокомментируйте этот код и запустите его, чтобы очистить артефакты, созданные этим примером.
% bdclose('mobileRobotAPI') % bdclose('mobileSensor') % Simulink.data.dictionary.closeAll % systemcomposer.profile.Profile.closeAll % delete('Profile.xml') % delete('SensorInterfaces.sldd')
Термин | Определение | Приложение | Больше информации |
---|---|---|---|
интерфейсный словарь данных | Интерфейсный словарь данных является объединенным списком всех интерфейсов и типов значения в архитектуре и где они используются. | Локальные интерфейсы на модели System Composer™ могут быть сохранены в интерфейсном словаре данных с помощью Интерфейсного Редактора. Интерфейсные словари могут быть снова использованы между моделями, которые должны использовать данный набор интерфейсов, элементов и типов значения. Словари данных хранятся в отдельных файлах SLDD. | |
интерфейс данных | Интерфейс данных задает вид информации, которая течет через порт. Тот же интерфейс может быть присвоен нескольким портам. Интерфейс данных может быть составным объектом, означая, что это может включать элементы данных, которые описывают свойства интерфейсного сигнала. | Интерфейсы данных представляют информацию, которой делятся через коннектор и вводит или выходит из компонента через порт. Используйте Интерфейсный Редактор, чтобы создать и управлять интерфейсами данных и элементами данных и сохранить их в интерфейсном словаре данных для повторного использования между моделями. | Создайте модель архитектуры со ссылками требования и интерфейсами |
элемент данных | Элемент данных описывает фрагмент интерфейса, такого как коммуникационное сообщение, расчетный или измеренный параметр или другое разложение того интерфейса. | Интерфейсы данных разложены на элементы данных:
| |
тип значения | Тип значения может использоваться в качестве интерфейса порта, чтобы задать атомарную часть данных, которые текут через тот порт и имеют тип верхнего уровня, размерность, модуль, сложность, минимум, максимум и описание. | Можно также присвоить тип элементов данных в интерфейсах данных, чтобы оценить типы. Добавленная стоимость вводит к словарям данных с помощью Интерфейсного Редактора так, чтобы можно было снова использовать типы значения как интерфейсы или элементы данных. | Создайте типы значения как интерфейсы |
находящийся в собственности интерфейс | Находящийся в собственности интерфейс является локально определенным интерфейсом, который локален для определенного порта и не совместно использованный в словаре данных или словаре модели. | Создайте находящийся в собственности интерфейс, чтобы представлять тип значения или интерфейс данных, который локален для порта. | Задайте находящиеся в собственности интерфейсы, локальные для портов |
адаптер | Адаптер помогает соединить два компонента с несовместимыми интерфейсами порта путем отображения между двумя интерфейсами. Адаптер может также действовать как переход уровня или единичная задержка. Используйте блок Adapter, чтобы реализовать адаптер. | С адаптером можно выполнить функции на Интерфейсном диалоговом окне Адаптера:
|
addElement
| removeElement
| getElement
| systemcomposer.ValueType
| systemcomposer.interface.Dictionary
| systemcomposer.interface.DataInterface
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.