主要内容

轮胎压力监测系统的架构分配

使用分配来分析一个轮胎压力监测系统。

概述

在系统工程中,通常在不同的抽象级别上描述一个系统。例如,您可以根据系统的高级功能来描述系统。这些功能可能没有与它们相关的任何行为,但很可能追溯到系统必须满足的一些操作需求。我们将此层(或体系结构)称为功能体系结构.在这个例子中,一个汽车轮胎压力监测系统被描述为三个不同的架构:

  1. 功能体系结构——从高级功能的角度描述系统。连接显示了函数之间的依赖关系。

  2. 逻辑体系结构——从逻辑组件的角度描述系统,以及如何在它们之间交换数据。此外,该体系结构为模型模拟指定了行为。

  3. 平台架构——描述系统在高层次上所需的物理硬件。

分配过程被定义为连接这三个完整描述系统的体系结构。链接捕获关于每个体系结构层的信息,并使其可被其他层访问。

使用此命令打开项目。

scExampleTirePressureMonitorSystem

tire_pressure_example_model.png

打开FunctionalAllocation.mldatx文件,该文件显示来自的分配TPMS_FunctionalArchitectureTPMS_LogicalArchitecture配置编辑器.的元素TPMS_FunctionalArchitecture显示在第一列中。的元素TPMS_LogicalArchitecture显示在第一行。箭头表示模型元素之间的分配。

tire_pressure_example_allocationtableexample.png

箭头显示模型中已分配的组件。您可以观察模型层次结构中每个元素的分配情况。

其余的例子展示了如何使用这个配置信息来进一步分析模型。

功能到逻辑分配和覆盖分析

本节将展示如何执行覆盖分析来验证所有的功能分配。这个过程需要使用在功能架构和逻辑架构之间指定的分配信息。

要开始分析,请加载分配集。

allocSet = systemcomposer.allocation.load (“FunctionalAllocation”);场景= allocSet.Scenarios;

验证系统中每个功能的分配。

进口systemcomposer.query。*;[~, allFunctions] = allocSet.SourceModel.find(HasStereotype(IsStereotypeDerivedFrom))“TPMSProfile。函数”)));unAllocatedFunctions = [];i = 1:元素个数(allFunctions)如果isempty(scenario.getAllocatedTo(allFunctions(i))) unAllocatedFunctions = [unAllocatedFunctions allFunctions(i)];结束结束如果isempty (unAllocatedFunctions)流(所有的功能都分配的);其他的流('未分配%d函数'元素个数(unAllocatedFunctions));结束
所有功能都被分配了

结果显示所有功能都被分配了验证系统中所有功能的分配。

分析供应商提供的功能

本节说明如何确定使用指定分配的供应商将提供哪些功能。由于供应商将向系统集成商交付这些组件,因此供应商信息存储在逻辑模型中。

供应商= {“供应商”“Supplier B”“供应商C”《供应商D '};函数名= arrayfun(@(x) . name, allFunctions,“UniformOutput”、假);numFunNames =长度(allFunctions);numSuppliers =长度(供应商);allocTable =表(“大小”(numFunNames numSuppliers),“VariableTypes”repmat (“替身”1、numSuppliers));allocTable.Properties.VariableNames =供应商;allocTable.Properties.RowNames = functionname;i = 1: numFunNames elem = scenario.getAllocatedTo (allFunctions(我));j = 1:numel(elem) elemSupplier = elem(j).getEvaluatedPropertyValue(“TPMSProfile.LogicalComponent.Supplier”);allocTable{i, strcmp(elemSupplier, suppliers)} = 1;结束结束

下表显示了哪些供应商负责相应的职能。

allocTable
allocTable =8×4表供应商A供应商B供应商C供应商D __________ __________ __________ __________计算轮胎压力0 1 0 0报告低轮胎压力1 0 0测量旋转0 1 0 0测量轮胎温度0 0 0 1测量轮胎压力0 0 1测量轮胎压力0 0 0计算压力是否低1 0 0 0报告轮胎压力等级1 0 0 0

分析软件部署策略

您可以确定引擎控制单元(ECU)是否有足够的容量容纳所有软件组件。软件组件被分配到核心本身,但ECU是具有预算属性的组件。

获取平台架构。

platformArch = systemcomposer.loadModel (“PlatformArchitecture”);

负载分配。

softwareDeployment = systemcomposer.allocation.load (“SoftwareDeployment”);frontECU = platformArch.lookup (“路径”“PlatformArchitecture / ECU面前”);rearECU = platformArch.lookup (“路径”“PlatformArchitecture /后方ECU”);scenario1 = softwareDeployment.getScenario (场景1的);scenario2 = softwareDeployment.getScenario (场景2的);frontECU_availMemory = frontECU.getEvaluatedPropertyValue (“TPMSProfile.ECU.MemoryCapacity”);rearECU_availMemory = rearECU.getEvaluatedPropertyValue (“TPMSProfile.ECU.MemoryCapacity”);frontECU_memoryUsed1 = getUtilizedMemoryOnECU(frontECU, scenario1);frontECU_isOverBudget1 = frontECU_memoryUsed1 > frontECU_availMemory;rearECU_memoryUsed1 = getUtilizedMemoryOnECU(rearECU, scenario1);rearECU_isOverBudget1 = rearECU_memoryUsed1 > rearECU_availMemory;frontECU_memoryUsed2 = getUtilizedMemoryOnECU(frontECU, scenario2);frontECU_isOverBudget2 = frontECU_memoryUsed2 > frontECU_availMemory;rearECU_memoryUsed2 = getUtilizedMemoryOnECU(rearECU, scenario2);rearECU_isOverBudget2 = rearECU_memoryUsed2 > rearECU_availMemory;

构建一个表来展示结果。

softwareDeploymentTable =表([frontECU_memoryUsed1; frontECU_availMemory;...frontECU_isOverBudget1; rearECU_memoryUsed1 rearECU_availMemory; rearECU_isOverBudget1),...[frontECU_memoryUsed2;frontECU_availMemory;frontECU_isOverBudget2; rearECU_memoryUsed2;...rearECU_availMemory;rearECU_isOverBudget2),...“VariableNames”, {场景1的场景2的},...“RowNames”, {'前端ecum内存使用(MB)'“前ECU内存(MB)”“前面ECU超载”...'后ECU内存使用(MB)'“后ECU内存(MB)”“后方ECU超载”})
softwareDeploymentTable =6×2表场景1场景2 __________ __________前ECU板内存已用(MB) 110 90 ECU板前内存(MB) 100 100 ECU板前过载10 ECU板后内存已用(MB) 0 20 ECU板后内存(MB) 100 100 ECU板后过载00
函数memoryUsed = getUtilizedMemoryOnECU(ecu,场景)

每个组件的ECU,积累所需的二进制大小为每个软件组件分配。

coreNames = {“Core1”“嵌”“Core3”“Core4”};memoryUsed = 0;i = 1:numel(coreNames) core = ecu.Model.lookup(“路径”, (ecu.getQualifiedName' / 'coreNames{我}]);allocatedSWComps = scenario.getAllocatedFrom(核心);j = 1: numl (allocatedSWComps) binarySize = allocatedSWComps(j).getEvaluatedPropertyValue(“TPMSProfile.SWComponent.BinarySize”);memoryUsed = memoryUsed + binarySize;结束结束结束

另请参阅

|||||||||

相关的话题

Baidu
map