分析架构
对 System Composer™ 架构进行静态分析,以评估系统的特性。静态分析分析系统结构,针对某些特性对架构进行定量评估。静态分析使用分析函数以及系统模型中捕获的属性和参数的参数值。使用分析计算系统的总体可靠性、质量卷积、性能或热特性,或执行大小、重量和功率 (SWaP) 分析以提高效率。
注意
您可以在分析函数中使用实例特定的参数。要使分析查看器从实例模型中读取参数,请将参数提升到架构模型的根级别。有关详细信息,请参阅 汽车轮胎平均磨损分析 示例。
基于元素属性编写静态分析,以执行数据驱动的权衡研究并验证系统需求。考虑一个机电系统,其中成本与重量之间存在权衡,较轻的组件往往成本较高。决策过程包括根据系统元素的属性分析系统的总体成本和重量,并对属性进行迭代,以得出在成本和重量方面均可接受的解决方案。
分析工作流包括以下步骤:
提示
要了解更多关于 System Composer 概念在系统工程设计中的应用,请参阅System Composer 概念。
设置属性以用于分析
此示例显示了如何通过向模型元素添加构造型并设置属性值来启用分析。该模型为在机器人系统的简单架构模型中分析组件总成本与重量之间的权衡提供了基础。有关详细信息,请参阅使用具有属性的机器人系统进行简单的汇总分析。
打开模型
打开 RobotPhysicalArchitecture
架构模型。
导入配置文件
首先导入配置文件,然后启用属性分析。在工具栏中,导航到 建模 > 配置文件 > 导入,然后浏览到要导入的配置文件。
将构造型应用到模型元素
将构造型应用于分析中的所有模型元素。使用“应用构造型”对话框将构造型应用到某种类型的所有元素。导航至 建模 > 应用构造型。在“应用构造型”中,从将构造型应用于中选择组件。从作用域中选择此层。有关详细信息,请参阅批量应用构造型。
提示
如果要计算累积值,请确保将构造型应用于顶级组件。
设置属性值
为属性检查器中的每个模型元素设置属性值。要打开属性检查器,请导航至 建模 > 属性检查器。
选择模型元素。
在属性检查器中,展开属性的构造型名称和值。
创建用于分析的模型实例
创建可用于分析的架构模型的实例。实例是架构模型元素在给定时间点上的具体体现。实例会冻结实例模型中组件的活动变体或模型引用。
实例模型是实例的集合。您可以根据模型的更改更新实例模型,但实例模型不会根据活动变体或模型引用的更改而更新。您可以使用保存在 MAT
文件中的 System Composer 架构模型的实例模型进行分析。
导航至 建模 > 分析模型 以打开实例化架构模型工具。指定创建和查看分析模型所需的所有参数。
选择构造型树列出了当前会话中已加载的所有配置文件的构造型,并允许您选择其属性应在实例模型中可用的配置文件。此时,您可以浏览分析函数、创建新分析函数或跳过分析。如果分析函数需要模型中元素以外的其他输入(例如计算成本所需的汇率),请在函数参量中输入。选择一种迭代模型元素的模式,例如自下而上,从树的叶子移动到根。严格模式确保实例化模型中的元素只有在组合模型中的相应元素应用了构造型时才会获得属性。
点击实例化创建实例化的架构模型并启动分析查看器工具。
分析查看器显示第一列中的所有元素。其他列显示当前实例选择的所有构造型的属性。如果属性不属于应用于元素的构造型,则该字段将显示为灰色。您可以使用过滤器按钮隐藏某些构造型的属性。当您选择一个元素时,实例属性会显示该元素的构造型和属性值。您可以将实例保存到 MAT 文件中,然后在分析查看器中再次打开。
如果在实例打开时对模型进行了更改,则可以将实例与模型同步。更新将更改从实例推送到模型。刷新从模型中提取对实例的更改。未同步的更改将以不同颜色显示。选择单个元素可启用更新元素的选项。
注意
当您保存子系统引用实例时,该操作会传播到所有其他实例并实现同步。模型引用会持续同步。在分析模型中,为确保所有未保存的子系统引用同步,请保存更改,然后在分析查看器工具中点击刷新或更新。有关详细信息,请参阅 Reference a Subsystem File in a Model 中的编辑和保存子系统引用。
编写分析函数
编写一个函数,使用实例分析架构模型。分析函数对架构的某些特征进行定量评估。分析函数是一个 MATLAB® 函数,它使用模型实例中每个元素的属性以及组件和架构层级的实例特定参数计算评估架构所需的值。使用分析函数计算分析结果。
有关详细信息,请参阅分析函数构造。
在设置分析实例模型时,可以添加分析函数。选择所需的构造型后,点击分析函数字段旁边的 创建模板函数。生成的 M 文件包含从所有要分析的构造型中获取所有属性值的代码。分析函数对单个元素进行操作 - 当您使用分析查看器工具运行分析时,通过对模型中的所有元素迭代此函数来生成聚合值。
function CostAndWeightRollupAnalysis(instance,varargin) % Analysis function for the RobotPhysicalArchitecture.slx example % Calculate total price if instance.isComponent() && ~isempty(instance.Components)... && instance.hasValue('SystemProfile.PhysicalElement.UnitCost') sysComponent_unitPrice = 0; for child = instance.Components if child.hasValue('SystemProfile.PhysicalElement.UnitCost') comp_price = child.getValue('SystemProfile.PhysicalElement.UnitCost'); sysComponent_unitPrice = sysComponent_unitPrice + comp_price; end end instance.setValue('SystemProfile.PhysicalElement.UnitCost',sysComponent_unitPrice); end
在生成的文件中,instance
是分析函数当前运行的元素的实例。您可以执行以下操作进行分析:
访问实例的属性:
instance.getValue("<profile>.<stereotype>.<property>")
设置实例的属性:
instance.setValue("<profile>.<stereotype>.<property>",value)
访问组件的子组件:
instance.Components
访问组件中的连接器:
instance.Connectors
如果属性不存在,则 getValue
函数会生成一个错误。在获取值之前,您可以使用 hasValue
查询模型中的元素是否具有该属性。
例如,以下代码计算组件的重量,作为其子组件重量之和。
% Calculate total weight if instance.isComponent() && ~isempty(instance.Components)... && instance.hasValue('SystemProfile.PhysicalElement.UnitWeight') weight = 0; for child = instance.Components if child.hasValue('SystemProfile.PhysicalElement.UnitWeight') subcomp_weight = child.getValue('SystemProfile.PhysicalElement.UnitWeight'); weight = weight + subcomp_weight; end end instance.setValue('SystemProfile.PhysicalElement.UnitWeight',weight); end
分析函数完成后,将其添加到分析函数框下的分析中。分析函数可以接受额外的输入参量,例如,如果权重在不同的构造型中使用不同的单位,则可以接受转换常量。当此代码从层次结构中最深的组件开始递归地运行到顶级组件时,系统的总权重将被分配给顶级组件的 weight
属性。
运行分析函数
使用分析查看器运行一个分析函数。
使用分析菜单选择或更改分析函数。
选择迭代方法。
Pre-order
- 从顶层开始,移至子组件,并递归处理该组件的子组件,然后再移至同级组件。Top-Down
- 与前序遍历类似,但在移至子组件之前先处理所有同级组件。Post-order
- 从没有子组件的组件开始,处理每个同级组件,然后移至父组件。Bottom-up
- 与后序遍历类似,但先处理所有同一深度的子组件,再将其移至父节点。
迭代方法取决于要进行何种分析。例如,对于组件重量为其组件重量之和的分析,必须确保先计算子组件重量,因此迭代方法必须为自下而上。
点击分析按钮。
System Composer 对每个模型元素运行分析函数并计算结果。计算出的属性在分析查看器中以黄色突出显示。
这里,系统的总成本为 5100 dollars
,总重量为 55 kg
。
另请参阅
工具
对象
函数
iterate
|instantiate
|deleteInstance
|update
|refresh
|save
|loadInstance
|lookup
|getValue
|setValue
|hasValue