主要内容

使用Model Builder导入系统编写器架构

此示例显示了如何使用该示例将架构规范导入系统Composer™systemcomposer.io.modelBuilder.效用类。这些架构规范可以在外部源中定义,例如Excel®文件。

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

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

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

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

  • 架构模型中的界面及其对端口的映射。

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

在此示例中,小UV系统的体系结构信息在Excel电子表格中定义,用于创建系统Composer架构模型。

外部源文件

  • archite.xlsx.此Excel文件包含架构模型的分层信息。此示例将外部源数据映射到系统编写器模型元素。以下是列在列名称中的信息映射到系统编写器模型元素。

#元素:元素的名称。可以是组件或端口名称。#父:父元素的名称。#类:可以是组件或端口(端口的输入/输出方向)。#domain:映射为组件属性。属性“制造商”在构造型PartDescriptor下的配置文件Uavcomponent中定义为Excel源文件中的域值。#类型:映射为组件属性。在刻板型PartDescriptor下的配置文件Uavcomponent中定义的属性“modelname”映射到Excel源文件中的各种值。#interfaceName:如果类是端口类型。InterfaceName地图映射到链接到端口的接口的名称。 # ConnectedTo : In case of port type, it specifies the connection to other port defined in format "ComponentName::PortName".
  • datadefinitions.xlsx.此Excel文件包含模型的界面数据定义。此示例假定源Excel文件中的数据定义与系统编曲器中的接口层次结构之间的下面映射。

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

步骤1.实例化模型生成器类

您可以使用配置文件名称实例化模型生成器类。

[stat,fa] = fileattrib(pwd);如果〜fa.userwrite disp(“此脚本必须在可写的目录中运行”);返回;结尾构建模型的%名称。modelname =.'scexamplemodelbuider';个人资料的名称。个人资料='Uavcomponent';源文件的%名称读取架构信息。建筑菲伦仑='体系结构.xlsx';%实例化了模型建立的。builder = systemcomposer.io.modelBuilder(配置文件);

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

在外部源文件中读取信息datadefinitions.xlsx.,我们构建接口数据模型。

从源Excel文件创建Matlab®表。

opts = detectimportoptions('datadefinitions.xlsx');opts.datarange =.'A2';%力可读取以开始从第二行读取。定义Contents = ReadTable('datadefinitions.xlsx',选择);%systemcomposer.io.idservice类生成唯一的ID%给定的钥匙idservice = systemcomposer.io.idservice();为了rowitr = 1:numel(定义contents(:,1))parentInterface = definitionContents.parent {Rowitr};如果isempty(parentInterface)在接口的情况下,将接口名称添加到Model Builder的情况下。InterfaceName = DefinityContents.name {Rowitr};%获取唯一的接口ID。getID(容器,键)生成%或返回(如果键已存在)输入键的值相同容器内的%。InterfaceId = IDservice.getId('界面',interfacename);%Builder实用程序函数添加与数据的接口%字典。builder.addinterface(InterfaceName,InterfaceID);别的百分比元素读取元素属性并将元素添加到%父界面。ElementName = DefinityContents.Name {Rowitr};InterfaceId = IDservice.getId('界面',parentInterface);%ElementID在接口中是唯一的。%在id的ID开始时附加'E'以实现均匀性。生成的ID%输入元素在父界面名称中是唯一的作为容器。elemid = idservice.getId(parentInterface,ElementName,'e');%数据类型,尺寸,单位,最小和最大特性% 元素。datatype = definitedcontents.datatype {rowtr};尺寸= string(定义contents.dimensions(Rowitr));单位=定义Contents.Units(Rowitr);%确保输入到构建器实用程序功能始终是一个% 细绳。如果〜ISCHAR(单位)单位='';结尾最小=定义文本.Minimum {Rowitr};最大=定义窗口.Maximum {Rowitr};%Builder函数以在接口中添加具有属性的元素。Builder.addelementInInterface(ElementName,Ilemid,InterfaceId,数据类型,尺寸,单位,'真实的',最大,最小);结尾结尾

步骤3.构建架构规范

架构规范由Matlab表来自来自源Excel文件的。

ExcelContents = Readtable(architcherfilename);%迭代表中的每一行。为了rowitr = 1:numel(ExcelContents(:,1))%读取Excel文件和列的每一行。class = ExcelContents.class(ROWTR);parent = ExcelContents.Parent(Rowtr);name = ExcelContents.Element {Rowitr};%使用Builder填充表的内容。如果Strcmp(类,'成分')id = idservice.getId('comp',姓名);%root id是默认设置为零。如果Strcmp(父母,'scexamplesmalluav')parentid =“0”;别的parentId = idservice.getId('comp',父母);结尾%builder实用程序函数添加组件。builder.addcomponent(名称,ID,父态);%读取属性值pind = ExcelContents.kind {Rowitr};Domain = ExcelContents.Domain {Rowitr};%*构建器设置刻板图型和属性值。builder.setComponentProperty(ID,'stereotypename''uavcomponent.partdescriptor''型号名称',种类,'制造商',领域);别的%在此示例中,端口名称和父组件名称的串联%用作键以为端口生成唯一ID。portid = idservice.getId('港口',Strcat(名称,父母));根架构上的端口%。CompID被认为是“0”。如果Strcmp(父母,'scexamplesmalluav')compid =“0”;别的compid = idservice.getId('comp',父母);结尾%builder实用程序函数添加端口。builder.addport(名称,类,portid,compid);%interfaceName指定链接到端口的接口的名称。interfaceName = ExcelContents.InterfaceName {Rowitr};%获取接口ID。getID()将返回相同的ID在步骤2中添加接口时生成的%。InterfaceId = IDservice.getId('界面',interfacename);%builder映射到端口的接口。builder.addinterfacetoport(InterfaceId,portid);%读取连接到信息以构建之间的连接% 成分。连接到= ExcelContents.Connectedto {Rowitr};%连接到格式化:%(destinationcomponentname :: destinationPortName)。此示例的%,将当前端口视为连接源。如果〜isempty(连接)connid = idservice.getId('联系',连接到);splits = split(连接到,'::');%获取连接端口的端口ID。%在此示例中,通过连接来生成端口ID%端口名称和父组件名称。如果端口ID已是%生成的getID()函数返回输入键的相同ID。ConnecknectPortID = IDservice.getId('港口',Strcat(分裂(2),分裂(1)));%builder填充连接表。sourceportid = portid;destportId = ConnecomningPortID;%Builder添加连接。builder.addconnection(连接到,connid,sourceportid,destportid);结尾结尾结尾

步骤3.构建器构建方法从填充的表中导入模型

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

关闭模型

bdclose(modelname);

也可以看看

||

相关话题