systemcomposer.io.ModelBuilder

Разработчик моделей для моделей архитектуры System Composer

Описание

Модели Build System Composer™ с помощью сервисного класса разработчика моделей. Модели Build System Composer с этими наборами информации: компоненты и их положение в иерархии архитектуры, портах и их отображениях к компонентам, связях между компонентами через порты и интерфейсах в моделях архитектуры и их отображениях к портам.

Создание

Описание

builder = systemcomposer.io.ModelBuilder(profile) создает ModelBuilder объект.

Входные параметры

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

Файл, который содержит набор свойств для любого элемента модели.

Выходные аргументы

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

ModelBuilder объект раньше создавал модель System Composer.

Свойства

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

Таблица, содержащая иерархическую информацию компонентов, тип компонента (например, ссылка, вариант или адаптер), стереотипы, примененные на компонент и способность установить значения свойств компонента.

Таблица, содержащая информацию о портах, их отображениях к компонентам и интерфейсам, а также стереотипам, примененным на них.

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

Таблица, содержащая определения различных интерфейсов и их элементов.

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

КомпонентыОписание
addComponent(compName, ID, ParentID)Добавьте компонент с именем и ID как дочерний элемент компонента с ID как ParentID. В случае корня, ParentID 0.
setComponentProperty(ID, varargin)

Установите стереотип на компоненте с ID. Пара значения ключа имени свойства и значения, заданного в стереотипе, может быть передана как вход. В этом примере

 builder.setComponentProperty(ID, 'StereotypeName',...
'UAVComponent.PartDescriptor','ModelName',kind,'Manufacturer',domain)
ModelName и Manufacturer свойства под стереотипом PartDescriptor.

ПортыОписание
addPort(portName, direction, ID, compID)Добавьте порт с именем и ID с направлением (любой Ввод или вывод) к компоненту с ID как compID.
setPropertyOnPort(ID, varargin)Установите стереотип на порте с ID. Пара значения ключа имени свойства и значения, заданного в стереотипе, может быть передана как вход.
СвязиОписание
addConnection(connName, ID, sourcePortID,destPortID)Добавьте связь с именем и ID между портами с sourcePortID (направление: выведите), и destPortID (направление: Введите), заданный в таблице портов.
setPropertyOnConnection(ID, varargin)Установите стереотип на связи с ID. Пара значения ключа имени свойства и значения, заданного в стереотипе, может быть передана как вход.
ИнтерфейсыОписание
addInterface(interfaceName, ID)Добавьте интерфейс с именем и ID к словарю данных.
addElementInInterface(elementName, ID, interfaceID, datatype, dimensions, units, complexity, Maximum, Minimum)Добавьте элемент с именем и ID под интерфейсом с ID как interfaceID. Типы данных, размерности, модули, сложность, и максимум и минимум являются свойствами элемента. Эти свойства заданы как строки.
addAnonymousInterface(ID, datatype, dimensions, units, complexity, Maximum, Minimum)Добавьте анонимный интерфейс с ID и свойствами элемента как тип данных, размерности, модули, сложность, максимум и минимум. Тип данных анонимного интерфейса не может быть другим интерфейсным именем. Анонимные интерфейсы не имеют элементов как другие интерфейсы.
Интерфейсы и портыОписание
addInterfaceToPort(interfaceID, portID)Соедините интерфейс с ID, заданным как InterfaceID к порту с ID, заданным как PortID.
МоделиОписание
build(modelName)Создайте модель с именем модели, переданным как вход.
Логгирование и создание отчетовОписание
getImportErrorLog()Получите ErrorLogs сгенерированный при импорте модели. Названный после build() функция
getImportReport()Получите отчет импорта. Названный после build() функция.

Примеры

свернуть все

В этом примере показано, как импортировать технические требования архитектуры в System Composer с помощью systemcomposer.io.modelBuilder () служебный класс. Эти технические требования архитектуры могут быть заданы во внешнем источнике, таком как файл Excel.

В системном компоновщике архитектура полностью задана тремя наборами информации:

  • Компоненты и его положение в иерархии архитектуры

  • Порты и его отображение с компонентами

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

  • Интерфейсы в моделях архитектуры и ее отображении с портами

Этот пример использует systemcomposer.modelBuilder класс, чтобы передать всю вышеупомянутую информацию об архитектуре и импортировать модель System Composer.

В этом примере информация об архитектуре маленькой Системы БПЛА задана в электронной таблице Excel и используется, чтобы создать модель архитектуры System Composer.

Внешние исходные файлы

  • Architecture.xlsx: Этот файл Excel содержит иерархическую информацию модели архитектуры. Этот пример сопоставляет внешние исходные данные с элементами модели System Composer. Ниже отображение информации в именах столбцов к элементам модели System Composer.

     # Element    : Name of the element. Either can be component or port name.
     # Parent     : Name of the parent element.
     # Class      : Can be either component or port(Input/Output direction of the port).
     # Domain     : Mapped as component property. Property "Manufacturer" defined in the
                    profile UAVComponent under Stereotype PartDescriptor maps to Domain values in excel source file.
     # Kind       : Mapped as component property. Property "ModelName" defined in the
                    profile UAVComponent under Stereotype PartDescriptor maps to Kind values in excel source file.
     # InterfaceName : If class is of port type. InterfaceName maps to name of the interface linked to port.
     # ConnectedTo : In case of port type, it specifies the connection to
                     other port defined in format "ComponentName::PortName".
  • DataDefinitions.xlsx: Этот файл Excel содержит интерфейсные определения данных модели. Этот пример принимает ниже отображения между определениями данных в исходном файле Excel и соединяет интерфейсом с иерархией в System Composer:

     # Name        : Name of the interface or element.
     # Parent      : Name of the parent interface Name(Applicable only for elements) .
     # Datatype    : Datatype of element. Can be another interface in format
                     Bus: InterfaceName
     # Dimensions  : Dimensions of the element.
     # Units       : Unit property of the element.
     # Minimum     : Minimum value of the element.
     # Maximum     : Maximum value of the element.

Шаг 1. Инстанцируйте класса разработчика моделей

Можно инстанцировать класса разработчика моделей с именем профиля.

Убедитесь, что текущий каталог перезаписываем, потому что этот пример будет создавать файлы.

[stat, fa] = fileattrib(pwd);
if ~fa.UserWrite
    disp('This script must be run in a writable directory');
    return;
end
% Name of the model to build.
modelName = 'scExampleModelBuider';
% Name of the profile.
profile = 'UAVComponent';
% Name of the source file to read architecture information.
architectureFileName = 'Architecture.xlsx';

% Instantiate the ModelBuilder
builder = systemcomposer.io.ModelBuilder(profile);

Шаг 2. Создайте интерфейсные определения данных.

Считывая информации во внешнем исходном файле DataDefinitions.xlsx, мы создаем интерфейсную модель данных.

Составьте таблицы MATLAB из источника файл Excel.

opts = detectImportOptions('DataDefinitions.xlsx');
opts.DataRange = 'A2'; % force readtable to start reading from the second row.
definitionContents = readtable('DataDefinitions.xlsx', opts);

% systemcomposer.io.IdService class generates unique ID for a
% given key
idService = systemcomposer.io.IdService();

for rowItr =1:numel(definitionContents(:,1))
    parentInterface = definitionContents.Parent{rowItr};
    if isempty(parentInterface)
        % In case of interfaces adding the interface name to model builder.
        interfaceName = definitionContents.Name{rowItr};
        % Get unique interface ID. getID(container,key) generates
        % or returns(if key is already present) same value for input key
        % within the container.
        interfaceID = idService.getID('interfaces',interfaceName);
        % Builder utility function to add interface to data
        % dictionary.
        builder.addInterface(interfaceName,interfaceID);
    else
        % In case of element read element properties and add the element to
        % parent interface.
        elementName  = definitionContents.Name{rowItr};
        interfaceID = idService.getID('interfaces',parentInterface);
        % ElementID is unique within a interface.
        % Appending 'E' at start of ID for uniformity. The generated ID for
        % input element is unique within parent interface name as container.
        elemID = idService.getID(parentInterface,elementName,'E');
        % Datatype, dimensions, units, minimum and maximum properties of
        % element.
        datatype = definitionContents.DataType{rowItr};
        dimensions = string(definitionContents.Dimensions(rowItr));
        units = definitionContents.Units(rowItr);
        % Make sure that input to builder utility function is always a
        % string.
        if ~ischar(units)
            units = '';
        end
        minimum = definitionContents.Minimum{rowItr};
        maximum = definitionContents.Maximum{rowItr};
        % Builder function to add element with properties in interface.
        builder.addElementInInterface(elementName, elemID, interfaceID, datatype, dimensions, units, 'real', maximum, minimum);
    end
end

Шаг 3. Создайте технические требования архитектуры.

Технические требования архитектуры de таблицы Create MATLAB из источника файл Excel.

excelContents = readtable(architectureFileName);
% Iterate over each row in table.
for rowItr =1:numel(excelContents(:,1))
% Read each row of the excel file and columns.
    class = excelContents.Class(rowItr);
    Parent = excelContents.Parent(rowItr);
    Name = excelContents.Element{rowItr};
    % Populating the contents of table using the builder.
    if strcmp(class,'component')
        ID = idService.getID('comp',Name);
        % Root ID is by default set as zero.
        if strcmp(Parent,'scExampleSmallUAV')
            parentID = "0";
        else
            parentID = idService.getID('comp', Parent);
        end
        % Builder utility function to add component.
        builder.addComponent(Name,ID,parentID);
        % Reading the property values
        kind = excelContents.Kind{rowItr};
        domain = excelContents.Domain{rowItr};
        % *Builder to set stereotype and property values*
        builder.setComponentProperty(ID, 'StereotypeName','UAVComponent.PartDescriptor','ModelName',kind,'Manufacturer',domain);
    else
        % In this example, concatenation of port name and parent component name
        % is used as key to generate unique IDs for ports.
        portID = idService.getID('port',strcat(Name,Parent));
        % For ports on root architecture. compID is assumed as "0".
        if strcmp(Parent,'scExampleSmallUAV')
            compID = "0";
        else
            compID = idService.getID('comp',Parent);
        end
        % Builder utility function to add port.
        builder.addPort(Name, class, portID, compID );

        % InterfaceName specifies the name of the interface linked to port.
        interfaceName = excelContents.InterfaceName{rowItr};

        % Get interface ID. getID() will return the same IDs already
        % generated while adding interface in Step 2.
        interfaceID = idService.getID('interfaces',interfaceName);
        % Builder to map interface to port.
        builder.addInterfaceToPort(interfaceID, portID);

        % Reading the connectedTo information to build connections between
        % components.
        connectedTo = excelContents.ConnectedTo{rowItr};
        % connectedTo is in format -:
        % (DestinationComponentName::DestinationPortName).
        % For this example, considering the current port as source of the connection.
        if ~isempty(connectedTo)
            connID = idService.getID('connection',connectedTo);
            splits = split(connectedTo,'::');
            % Get the port ID of the connected port.
            % In this example, port ID is generated by concatenating
            % port name and parent component name. If port id is already
            % generated getID() function returns the same id for input key.
            connectedPortID = idService.getID('port',strcat(splits(2),splits(1)));
            % Using builder to populate connection table.
            sourcePortID = portID;
            destPortID = connectedPortID;
            % Builder to add connections.
            builder.addConnection(connectedTo,connID,sourcePortID,destPortID);
        end
    end
end

Шаг 3. Разработчик создает модель импорта метода из заполненных таблиц.

[model, importReport] = builder.build(modelName);

Закройте модель

bdclose(modelName);
Введенный в R2019b
Для просмотра документации необходимо авторизоваться на сайте