exponenta event banner

systemcomposer.profile. Профиль

Класс, представляющий профиль

Описание

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

Создание

Создайте профиль.

profile = systemcomposer.profile.Profile.createProfile('profileName');

Свойства

развернуть все

Имя профиля, указанное как символьный вектор. Должен быть допустимым идентификатором MATLAB ®.

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

Описательное имя профиля, указанное как символьный вектор. Он может содержать пробелы и специальные символы, но не новые строки.

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

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

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

Стереотипы, определенные в профиле, определенные как массив systemcomposer.profile.Stereotype объекты.

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

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

createProfileСоздать профиль
addStereotypeДобавление стереотипа в профиль
removeStereotypeУдаление стереотипа из профиля
getStereotypeНайти стереотип в профиле по имени
getDefaultStereotypeПолучение стереотипа по умолчанию для профиля
setDefaultStereotypeУстановка стереотипа по умолчанию для профиля
findНайти профиль по имени
openОткрыть профиль
loadЗагрузить профиль из файла
saveСохранить профиль как файл
closeЗакрыть профиль
closeAllЗакрыть все открытые профили
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')

Подробнее

развернуть все

Представлен в R2019a