主要内容

使用导入系统作曲家架构型号建筑

使用systemcomposer.io.modelBuilder.效用类。这些架构规范可以在外部源中定义,例如Excel®文件。

在系统作曲家中,架构由四组信息完全定义:

  • 组件及其在架构层次结构中的位置。

  • 端口及其对组件的映射。

  • 通过端口的组件之间的连接。在此示例中,我们还从外部源导入接口数据定义。

  • 架构模型中的接口及其与端口的映射。

本示例使用systemcomposer.io.modelBuilder.类以传递所有上述体系结构信息并导入系统编写器模型。

在本例中,小型无人机系统的架构信息在Excel电子表格中定义,并用于创建system Composer架构模型。

外部源文件

  • Architecture.xlsx—该Excel文件包含体系结构模型的层次信息。此示例将外部源数据映射到System Composer模型元素。下面是列名中的信息到System Composer模型元素的映射。

# Element:元素的名称。可以是组件名,也可以是端口名。Parent:父元素的名称。#类:可以是组件也可以是端口(端口的输入/输出方向)。# Domain:映射为组件属性。属性“Manufacturer”定义在模板PartDescriptor下的profile UAVComponent映射到excel源文件中的Domain值。类型:映射为组件属性。属性“ModelName”在模板PartDescriptor下的配置文件UAVComponent中定义,映射到excel源文件中的Kind值。# InterfaceName:如果类是端口类型。InterfaceName映射到连接到端口的接口名称。 # ConnectedTo : In case of port type, it specifies the connection to other port defined in format "ComponentName::PortName".
  • DataDefinitions.xlsx- 此Excel文件包含模型的接口数据定义。此示例假定在System Composer中的Excel源文件和接口层次结构之间的数据定义之间的下面映射。

# Name:接口或元素的名称。# Parent:父接口名称名称(仅适用于元素)。# Datatype:元素的数据类型。可以是格式为Bus: InterfaceName # Dimensions的另一个接口:元素的尺寸。# Units:元素的单位属性。# Minimum:元素最小值。# Maximum:元素的最大值。

步骤1。实例化型号建筑

你可以实例化型号建筑使用配置文件名称初始化。

[stat,fa] = fileattrib(pwd);如果〜fa.userwrite disp(该脚本必须在可写目录下运行);返回结尾%要生成的模型的名称。modelName ='scexamplemodelbuider'个人资料的%名称。个人资料='uavcomponent'%读取体系结构信息的源文件名称。建筑菲伦仑='建筑.xlsx'%实例化了模特性建筑物。builder = systemcomposer.io.modelBuilder(配置文件);

步骤2.构建接口数据定义

读取外部源文件中的信息DataDefinitions.xlsx,构建接口数据模型。

创建MATLAB®表格从Excel源文件。

opts = detectimportoptions('datadefinitions.xlsx');opts.datarange =.“A2”%力可读取以开始从第二行读取。定义Contents = Readtable('datadefinitions.xlsx',选择);% systemcomposer.io.IdService类为a生成唯一的ID%给关键idService = systemcomposer.io.IdService ();rowitr = 1:numel(定义contents(:,1))parentInterface = definityContents.parent {Rowtr};如果isempty (parentInterface)在接口的情况下,将接口名称添加到Model Builder。interfaceName = definitionContents.Name {rowItr};%获取唯一的接口ID。getID(容器,键)生成的%或返回(如果键已经存在)输入键的相同值%在容器中。interfaceID = idService.getID ('界面',interfacename);%Builder实用程序函数添加到数据的接口%的字典。builder.addInterface (interfaceName interfaceID);别的元素读取元素属性的百分比并将元素添加到%的父接口。elementName = definitionContents.Name {rowItr};interfaceID = idService.getID ('界面', parentInterface);% ElementID在接口中是唯一的。%为了一致性,在ID的开头附加'E'。为%输入元素是父界面名称的唯一作为容器。elemid = idservice.getId(parentInterface,ElementName,'e');的数据类型、尺寸、单位、最小和最大属性% 元素。数据类型= definitionContents.DataType {rowItr};尺寸=字符串(definitionContents.Dimensions (rowItr));单位= definitionContents.Units (rowItr);%确保构建器实用函数的输入始终是%的字符串。如果= ~ ischar(单位)单位''结尾最小= definitionContents.Minimum {rowItr};最大= definitionContents.Maximum {rowItr};% Builder函数在界面中添加带有属性的元素。builder.addelementinInterface(ElementName,Ilemid,InterfaceId,数据类型,尺寸,单位,'真实的'、最大、最小);结尾结尾

步骤3.构建架构规范

架构规范由MATLAB表从Excel源文件创建。

ExcelContents = Readtable(架构文件名);%遍历表中的每一行。rowitr = 1:numel(ExcelContents(:,1))%读取excel文件的每一行和每一列。class = ExcelContents.class(ROWTR);parent = ExcelContents.Parent(Rowitr);name = ExcelContents.Element {Rowitr};%使用构建器填充表的内容。如果比较字符串(类,“组件”)id = idservice.getId('comp'、名称);默认情况下,% Root ID设置为0。如果比较字符串(父,“scExampleSmallUAV”)parentid =.“0”别的parentId = idservice.getId('comp'、家长);结尾%Builder实用程序函数添加组件。builder.addComponent(名称、ID parentID);%读取属性值pind = ExcelContents.kind {Rowitr};Domain = ExcelContents.Domain {Rowitr};%* Builder设置刻板印象和属性值。builder.setComponentProperty (ID、'stereotypename'“UAVComponent。PartDescriptor”'型号名称',种类,“制造商”域);别的%在本例中,端口名和父组件名的连接%用作为端口生成唯一ID的键。portID = idService.getID ('港口'strcat(名称、父));%用于根架构上的端口。compID假定为“0”。如果比较字符串(父,“scExampleSmallUAV”)列表=“0”别的列表= idService.getID ('comp'、家长);结尾% Builder实用函数添加端口。构建器。addPort(名称、类、portID列表);%InterfaceName指定链接到端口的接口的名称。interfaceName = excelContents.InterfaceName {rowItr};%获取接口ID。getID()将返回相同的id在步骤2中添加接口时生成的%。interfaceID = idService.getID ('界面',interfacename);%builder映射到端口的接口。builder.addinterfacetoport(InterfaceId,portid);%读取connectedTo信息以建立之间的连接%的组件。连接到= ExcelContents.Connectedto {Rowitr};%连接到格式化:%(destinationcomponentname :: destinationPortName)。%在本例中,将当前端口作为连接的源。如果〜isempty(连接到)connid = idservice.getId(“连接”,连接到);splits = split(连接到,'::');%获取连接的端口号。%本例中通过连接方式生成端口ID%端口名称和父组件名称。如果端口ID已经存在%生成的getID()函数返回输入键的相同ID。ConnecknectPortID = IDservice.getID('港口',Strcat(分裂(2),分裂(1)));%使用构建器填充连接表。sourceportid = portid;destportId = ConnecomningPortID;% Builder添加连接。builder.addConnection(与、connID sourcePortID destPortID);结尾结尾结尾

步骤3.与填充表的导入模型builder.build函数

[Model,ImportReport] = Builder.Build(ModelName);

关闭模式

bdclose(modelname)

另请参阅

||

相关的话题