systemcomposer.ValueType

Тип значения в System Composer

    Описание

    ValueType объект описывает тип значения в System Composer™. Тип значения может использоваться в качестве интерфейса порта или типа для элемента данных.

    Создание

    Добавьте тип значения в словарь.

    model = systemcomposer.createModel('archModel',true);
    dictionary = model.InterfaceDictionary;
    airspeedType = dictionary.addValueType('AirSpeed');

    Свойства

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

    Родительский элемент значения вводит в виде systemcomposer.interface.Dictionary, systemcomposer.interface.DataElement, или systemcomposer.arch.ArchitecturePort объект.

    Родительская модель System Composer значения вводит в виде systemcomposer.arch.Model объект.

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

    Пример: 'AirSpeed'

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

    Тип данных типа значения в виде вектора символов или строки допустимого типа данных MATLAB.

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

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

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

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

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

    Сложность типа значения в виде 'real'комплекс, или 'auto'.

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

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

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

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

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

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

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

    Универсальный уникальный идентификатор для значения вводит в виде вектора символов.

    Пример: '91d5de2c-b14c-4c76-a5d6-5dd0037c52df'

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

    Уникальный внешний идентификатор в виде вектора символов. Внешний ID сохраняется по продолжительности жизни типа значения и посредством всех операций, которые сохраняют UUID.

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

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

    setNameОпределите имя для типа значения, интерфейса или элемента
    setDataTypeУстановите тип данных для типа значения
    setDimensionsУстановите размерности для типа значения
    setUnitsУстановите модули для типа значения
    setComplexityУстановите сложность для типа значения
    setMinimumУстановите минимум для типа значения
    setMaximumУстановите максимум для типа значения
    setDescriptionУстановите описание для типа значения
    applyStereotypeПримените стереотип к элементу модели архитектуры
    getStereotypesПолучите стереотипы, примененные на элемент модели архитектуры
    removeStereotypeУдалите стереотип из элемента модели
    setPropertyУстановите значение свойства, соответствующее стереотипировать примененный элемент
    getPropertyЗаставьте значение свойства, соответствующее стереотипировать примененный элемент
    getPropertyValueПолучите значение свойства архитектуры
    getEvaluatedPropertyValueПолучите оцененное значение свойства от компонента
    getStereotypePropertiesПолучите стереотипные имена свойства на элементе
    hasStereotypeНайдите, имеет ли элемент примененный стереотип
    hasPropertyНайдите, имеет ли элемент свойство
    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')

    Больше о

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

    Введенный в R2021b