主要内容

导入系统编写器架构使用ModelBuilder

将体系结构规范导入System Composer™ 使用systemcomposer.io.ModelBuilder实用程序类。这些架构规范可以在外部源中定义,例如Excel®文件。

在System Composer中,架构完全由四组信息定义:

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

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

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

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

此示例使用systemcomposer.io.ModelBuilder类以传递所有上述架构信息并导入System Composer模型。

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

外部源文件

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

#元素:元素的名称。可以是组件或端口名称。#父元素:父元素的名称。#类:可以是组件或端口(端口的输入/输出方向)。#域:映射为组件属性。属性“制造商”在配置文件UAVComponent中的原型PartDescriptor下定义的映射到excel源文件中的域值。#种类:映射为组件属性。属性“ModelName”在配置文件UAVComponent中的原型PartDescriptor下定义的映射到excel源文件中的种类值。#InterfaceName:如果类是端口类型。InterfaceName映射到链接到端口的接口的名称。#ConnectedTo:如果是端口类型,它指定到以“ComponentName::PortName”格式定义的其他端口的连接。
  • DataDefinitions.xlsx—该Excel文件包含模型的接口数据定义。此示例假设Excel源文件中的数据定义与System Composer中的接口层次结构之间存在如下映射。

#名称:接口或元素的名称。#父:父接口名称的名称(仅适用于元素).#数据类型:元素的数据类型。可以是总线格式的另一个接口:InterfaceName#维度:元素的维度。#单位:元素的单位属性。#最小值:元素的最小值。#最大值:元素的最大值。

步骤1.实例化ModelBuilder等级

可以实例化ModelBuilder使用配置文件名称初始化。

(统计,fa] = fileattrib (pwd);如果~足总。UserWrite disp ('此脚本必须在可写目录中运行');返回;结束%要生成的模型的名称。modelName =“scExampleModelBuider”;%配置文件的名称。形象=“UAVComponent”;%用于读取体系结构信息的源文件的名称。architectureFileName =“Architecture.xlsx”;%实例化ModelBuilder。builder = systemcomposer.io.ModelBuilder(配置文件);

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

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

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

选择= detectImportOptions (“DataDefinitions.xlsx”);选择。DataRange =“A2”;%强制readtable从第二行开始读取。definitionContents = readtable (“DataDefinitions.xlsx”、选择);% systemcomposer.io.IdService类为a生成唯一的ID%给定键idService = systemcomposer.io.IdService ();对于rowItr =1:numel(定义内容(:,1)))如果isempty(父接口)%在接口的情况下,添加接口名称到模型构建器。interfaceName=定义内容。名称{rowItr};%获取唯一的接口ID。getID(容器,键)生成的%或为输入键返回相同的值(如果键已存在)%在容器中。interfaceID = idService.getID (“接口”, interfaceName);% Builder实用函数,以添加接口到数据%的字典。builder.addInterface(interfaceName,interfaceID);其他的%如果是元素,读取元素属性并添加元素%父接口。elementName=definitionContents.Name{rowItr};interfaceID=idService.getID(“接口”,家长界面);%ElementID在接口中是唯一的。%在ID的开头添加“E”以实现一致性。生成的ID% input元素作为容器在父接口名称中是唯一的。elemID = idService.getID (parentInterface elementName,“E”);%数据类型、尺寸、单位、最小和最大属性%的元素。datatype=definitionContents.datatype{rowItr};dimensions=string(definitionContents.dimensions(rowItr));units=definitionContents.units(rowItr);%确保构建器实用函数的输入始终是%绳子。如果~ischar(单位)单位='';结束最小= definitionContents.Minimum {rowItr};最大= definitionContents.Maximum {rowItr};%生成器函数,用于在接口中添加具有属性的元素。builder.addElementInInterface (elementName elemID interfaceID,数据类型,尺寸,单位,“真实”的、最大、最小);结束结束

步骤3。构建体系结构规范

体系结构规范由Excel源文件中的MATLAB表格创建。

excelContents = readtable (architectureFileName);%迭代表中的每一行。对于rowItr = 1:元素个数(excelContents (: 1))%读取excel文件的每一行和每一列。类= excelContents.Class (rowItr);父母= excelContents.Parent (rowItr);Name = excelContents.Element {rowItr};%使用生成器填充表的内容。如果strcmp(等级,“组件”) ID = idService.getID(“薪酬”,姓名);默认情况下,% Root ID设置为0。如果strcmp(母公司、,“SCExampleMalluav”) parentID =“0”;其他的parentID = idService.getID (“薪酬”,家长);结束% Builder实用函数来添加组件。builder.addComponent(名称、ID、父ID);%读取属性值类型= excelContents.Kind {rowItr};域= excelContents.Domain {rowItr};% *Builder设置原型和属性值。builder.setComponentProperty(ID,“StereotypeName”,“UAVComponent.PartDescriptor”,“ModelName”、善良、“制造商”,域名);其他的%在本例中,连接端口名和父组件名%用作键,为端口生成唯一的id。portID=idService.getID(“端口”,strcat(姓名、父母));%用于根架构上的端口。compID假定为“0”。如果strcmp(母公司、,“SCExampleMalluav”)康皮德=“0”;其他的compID=idService.getID(“薪酬”,家长);结束%用于添加端口的生成器实用程序函数。builder.addPort(名称、类、端口号、compID);% InterfaceName指定连接到端口的接口名称。interfaceName=excelContents.interfaceName{rowItr};%获取接口ID。getID()将返回相同的ID%在步骤2中添加接口时生成。interfaceID = idService.getID (“接口”, interfaceName);% Builder将接口映射到端口。builder.addInterfaceToPort (interfaceID portID);%读取connectedTo信息以在%组成部分。与= excelContents.ConnectedTo {rowItr};% connectedTo的格式如下:% (DestinationComponentName:: DestinationPortName)。%对于本例,将当前端口视为连接源。如果~isempty(connectedTo) connID = idService.getID(“连接”,与);分裂=分裂(与,“::”);%获取所连接端口的端口ID。%在本例中,端口ID是通过连接生成的%端口名称和父组件名称。如果端口id已经存在% generated getID()函数为输入键返回相同的id。connectedPortID = idService.getID (“端口”strcat(分裂(2)将(1)));%使用生成器填充连接表。sourcePortID = portID;destPortID = connectedPortID;% Builder添加连接。builder.addConnection(connectedTo、connID、sourcePortID、destPortID);结束结束结束

步骤3。从填充表导入模型建筑商函数

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

封闭模型

bdclose (modelName)

另见

||

相关的话题