systemcomposer.profile.Profile

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

Описание

The 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Удалите элемент модели

Примеры

свернуть все

В этом примере показано, как создать модель архитектуры с помощью 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