systemcomposer.profile.Stereotype

Класс, который представляет стереотип

Описание

The Stereotype класс представляет стереотипы архитектуры в профиле.

Создание

Добавьте стереотип к профилю.

addStereotype(profile,'name')

Свойства

расширить все

Имя стереотипа, заданное как вектор символов.

Пример: 'HardwareComponent'

Типы данных: char

Текст описания стереотипа, заданный как вектор символов.

Типы данных: char

Имя значка для стереотипа, заданное как вектор символов.

Пример: 'default'

Пример: 'application'

Пример: 'channel'

Пример: 'controller'

Пример: 'database'

Пример: 'devicedriver'

Пример: 'memory'

Пример: 'network'

Пример: 'plant'

Пример: 'sensor'

Пример: 'subsystem'

Пример: 'transmitter'

Типы данных: char

Стереотип, от которого наследует свойства стереотип, заданный как systemcomposer.profile.Stereotype объект.

Тип элемента, к которому может применяться стереотип, задается в виде вектора символов из следующих опций: 'Component', 'Port', 'Connector', или 'Interface'.

Типы данных: char

Является ли стереотип абстрактным, задается как логика числа 1 (true) или 0 (false). Если true, тогда стереотип не может быть непосредственно применен к элементам модели, но вместо этого служит родительским элементом для других стереотипов.

Типы данных: logical

Квалифицированное имя стереотипа, заданное как вектор символов в форме '<profile>.<stereotype>'.

Типы данных: char

Цвет заголовка компонента, заданный как uint32 1x4 вектор-строка в форме Red Green Blue Alpha The Alpha значение определяет прозрачность.

Пример: 206 232 246 255

Типы данных: uint32

Цвет линии соединителя, заданный как uint32 1x4 вектор-строка в форме Red Green Blue Alpha The Alpha значение определяет прозрачность.

Пример: 206 232 246 255

Типы данных: uint32

Имя стиля линии соединителя, заданное как вектор символов.

Пример: 'Default'

Пример: 'Dot'

Пример: 'Dash'

Пример: 'Dash Dot'

Пример: 'Dash Dot Dot'

Типы данных: char

Стереотип, от которого наследует свойства стереотип, заданный как systemcomposer.profile.Profile объект.

Свойства, содержащиеся в этом стереотипе и унаследованные от стереотипа основы иерархии, заданной как массив ячеек векторов символов.

Типы данных: char

Принадлежащие свойства, содержащиеся в этом стереотипе, заданные как массив ячеек из векторов символов. Свойства не включают свойства, унаследованные от базовой иерархии стереотипов.

Типы данных: char

Функции объекта

addPropertyЗадайте пользовательское свойство для стереотипа
removePropertyУдалить свойство из стереотипа
findПоиск стереотипа по имени
setDefaultComponentStereotypeУстановите стереотип по умолчанию для компонентов
setDefaultConnectorStereotypeУстановите стереотип по умолчанию для соединителей
setDefaultPortStereotypeУстановите стереотип по умолчанию для портов
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')

Подробнее о

расширить все

Введенный в R2019a