systemcomposer.io.ModelBuilder

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

Описание

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

Создание

builder = systemcomposer.io.ModelBuilder(profile) % Creates the ModelBuilder object

Свойства

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

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

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

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

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

Примеры

свернуть все

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

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

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

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

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

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

Этот пример использует systemcomposer.io.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. Создайте технические требования архитектуры

Технические требования архитектуры создаются таблицами 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);

Больше о

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

Алгоритмы

КомпонентыОписание
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() функция.
Введенный в R2019b