主要内容

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

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

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

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

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

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

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

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

在本例中,小型无人机系统的架构信息在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文件包含模型的接口数据定义。此示例假设Excel源文件中的数据定义与System Composer中的接口层次结构之间存在如下映射。

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

步骤1。实例化ModelBuilder

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

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

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

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

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

选择= detectImportOptions (“DataDefinitions.xlsx”);选择。DataRange =“A2”%强制readtable从第二行开始读取。definitionContents = readtable (“DataDefinitions.xlsx”、选择);% systemcomposer.io.IdService类为a生成唯一的ID%给关键idService = systemcomposer.io.IdService ();rowItr =1:numel(定义内容(:,1)))如果isempty (parentInterface)%在接口的情况下,添加接口名称到模型构建器。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'。为% input元素作为容器在父接口名称中是唯一的。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 elemID interfaceID,数据类型,尺寸,单位,“真实”的、最大、最小);结束结束

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

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

excelContents = readtable (architectureFileName);%遍历表中的每一行。rowItr = 1:元素个数(excelContents (: 1))%读取excel文件的每一行和每一列。类= excelContents.Class (rowItr);父母= excelContents.Parent (rowItr);Name = excelContents.Element {rowItr};%使用构建器填充表的内容。如果比较字符串(类,“组件”) ID = idService.getID(“薪酬”、名称);默认情况下,% Root ID设置为0。如果比较字符串(父,“scExampleSmallUAV”) parentID =“0”其他的parentID = idService.getID (“薪酬”、家长);结束% Builder实用函数来添加组件。builder.addComponent(名称、ID parentID);%读取属性值类型= excelContents.Kind {rowItr};域= excelContents.Domain {rowItr};% *Builder设置原型和属性值。builder.setComponentProperty (ID、“StereotypeName”“UAVComponent。PartDescriptor”“ModelName”、善良、“制造商”域);其他的%在本例中,端口名和父组件名的连接%用作键,为端口生成唯一的id。portID = idService.getID (“端口”strcat(名称、父));%用于根架构上的端口。compID假定为“0”。如果比较字符串(父,“scExampleSmallUAV”)列表=“0”其他的列表= idService.getID (“薪酬”、家长);结束% 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};% connectedTo的格式如下:% (DestinationComponentName:: DestinationPortName)。%在本例中,将当前端口作为连接的源。如果~isempty(connectedTo) connID = idService.getID(“连接”,与);分裂=分裂(与,“::”);%获取连接的端口号。%本例中通过连接方式生成端口ID%端口名称和父组件名称。如果端口id已经存在% generated getID()函数为输入键返回相同的id。connectedPortID = idService.getID (“端口”strcat(分裂(2)将(1)));%使用构建器填充连接表。sourcePortID = portID;destPortID = connectedPortID;% Builder添加连接。builder.addConnection(与、connID sourcePortID destPortID);结束结束结束

步骤3。从填充表导入模型builder.build函数

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

关闭模式

bdclose (modelName)

另请参阅

||

相关的话题