MBSE建模学习之九:参数图及其仿真
参数图(ParametricDiagram)
参数图是SysML增加的一种专门用于系统参数计算的图。参数图本质上是一个特殊的内部模块图,它主要表示模块的约束中的参数和模块的属性之间绑定关系。这里“绑定”的意思,可以理解为变量的“代入”。参数图中通过绑定连接器把值属性和约束的约束参数连起来,参数图仿真的时候就把值属性的值代入到约束的表达式方程中进行计算,并把计算结果返回到对应的属性。不过这个“属性值”和“约束参数值”代入计算、结果再返回到“属性值”的概念,是通过仿真过程类型的实例化、属性(property)生成“槽”(slot),对“槽”赋值来实现的。以下我们通过参数图中的各种元素的意义、仿真的实际过程来说明这个原理,以及如何进行仿真。
建立仿真的语境
SysML的仿真方法是对“类”模型的实例化。我们建立的“模型”主要是建立了一套“类”以及它们相互的关系。在SysML中,对系统建模主要是使用“模块”(Block,是对类--Class的扩展)类。仿真过程中所谓的实例化,是生成用户建立的“模块”的实例。在模型中,用“实例说明”(Instance Specification)来表示一个实例。“实例说明”的“类目”是这个模块,“实例说明”的“槽”(Slot)对应模块每个属性。每个槽有一个“值”,这个“值”又是对应属性的类型的实例。如果属性有默认值的话,当生成槽的时候,这个默认值作为槽的初始值。如果在内部模块图中指定了属性的初始值,初始值比默认值优先。
下面这个案例中定义了“电动牙刷系统”,它有五个子系统。在这图中,我们定义了一个“可靠性指标参数容器”,所有系统和子系统都从这个容器继承,这样所有产品都自动具有了可靠性指标属性,不用每个定义了。
当“电动牙刷系统”模块实例化的时候,生成“电动牙刷系统实例”,这个实例说明中的“槽”和属性对应如下图所示:
在表示类型的“模块”中,属性是用“名称:类型=默认值”这样表示的。而“实例”中,和属性对应的每个槽是用“属性名称=值”这样表示的。在本文第一段中,我们说“属性值”的时候,实际上是指“模块”对应“实例说明”中属性对应槽的值;“把值属性的值代入到约束的表达式方程中进行计算,并把计算结果返回到对应的属性”这句话其实是把“模块的实例说明的槽的值代入到约束的表达式方程中计算,并把计算结果重新赋值给和属性对应的槽”。
定义通用的约束模块
在SysML中增加了“约束模块”这种元素,它的作用是保存一套通用的计算方程,这个方程可以在模型中被复用。
首先我们解释以下准备建立的约束方程的物理意义。我们建立的“可靠性指标参数容器”中的属性解释如下:
可靠度:一个0~1之间的概率值,表示系统在规定的条件下完成规定任务的概率;
任务时间:系统执行一个任务的时间,一般用小时作为单位(为了简化模型,在这案例中我们都用实数作为属性的类型,而没有定义具体值类型。以下MTBF和失效率情况相同);
MTBF:系统平均故障间隔时间,一般用小时;
失效率:系统单位时间内发生故障的次数。
对于失效数据符合指数分布的产品(一般电子产品符合指数分布),这几个指标之间有如下关系:
(1)失效率=1/MTBF,即失效率和MTBF是倒数关系;
(2)可靠度=exp(-1*失效率*任务时间),“exp”是“e的指数”,即“e的(-1*失效率*任务时间)次方”的意思,e是自然常数。
“系统”和作为组成部分的“分系统”之间可靠度一般是按串联计算(所有分系统的功能对于系统来讲都是必不可少的,不是备份的关系)。针对我们上面建立的“电动牙刷系统”来讲,电动牙刷系统的可靠度等于各子系统可靠度的连乘,写成公式就是:
(3)“R=R1*R2*R3*R4*R5”(R对应电动牙刷系统的可靠度,R1~R5对应每个子系统的可靠度)
我们把上面三个公式建立为三个约束模块,如下图所示:
在约束模块中,“约束”属性如果是一个公式,就要用“{}”把公式括起来(否则认为是下一层的约束模块)。“约束”公式中用到的变量,只能是“参数”中定义的约束参数(约束参数本质上也是一个“属性”,可以认为约束模块是只包含约束参数属性、约束属性或约束表达式的模块)。“约束”表达式既可以是等式,也可以是不等式。如果是一个等式,在参数图仿真中把它当一个赋值语句来应用。
定义子系统的参数图
要计算系统的可靠度,我们需要先计算出来每个子系统的可靠度,然后使用系统可靠度计算公式来计算系统的可靠度(根据每个子系统的MTBF计算系统的MTBF:指数分布串联系统的MTBF等于所有子系统MTBF之和,再用单元计算可靠度的方法计算系统的可靠度也是可以的)。计算子系统的可靠度,使用单元可靠度计算公式、失效率计算公式。我们通过定义子系统的参数图来应用这两个公式。我们先定义一个子系统“无线充电底座子系统”参数图,如下图所示:
在这个图中,我们增加为子系统增加了两个“约束属性”,然后设置它们的类型为我们前面建立的约束模块。然后通过这两个约束属性节点的右键菜单“显示>显示/隐藏约束参数”来在约束属性节点中显示作为其类型的约束模块的约束参数。然后在图中添加“值属性”节点,并通过右键菜单“选择已有属性”设置为“无线充电底座子系统”中的值属性。其中“可靠度”、“任务时间”、“失效率”都是继承的属性,不需要修改。“MTBF”属性不“选择已有属性”,而是新增加的,它“重定义”了继承的属性“^MTBF”(继承的属性前面有个^符号,重定义通过属性框设置),因为我们要给它一个默认值“60000”(小时)。定义这个属性的名称、类型、默认值,可以直接在值属性节点中输入就可以,或者通过属性框设置。
图中我们还用“绑定连接器”把值属性和约束属性中的约束参数连起来。绑定连接器上显示一个“=”号,它的意思就是总是要保持两端的属性的值相等。
其它4个子系统的参数图基本相同。在“智睿思维基于模型的系统工程软件”中不需要每个子系统重新画这个参数图,只要在模型浏览器上选择这个图的节点,“复制”;再选择其它四个子系统节点,右键菜单“粘贴”,把这个图复制四份就行了。其它四个子系统中仅仅是“MTBF”属性的默认值不同,在这四个图中选择“MTBF”属性节点,通过属性框或直接修改节点中的文字修改MTBF的默认值(无线充电受电子系统的MTBF=65000,UI子系统的MTBF=58000,电路控制子系统的MTBF=48000,电动子系统的MTBF=50000)。
定义系统的参数图
为模块“电动牙刷系统”建立一个计算其可靠度的参数图,将每个子系统的可靠度和系统的可靠度属性同计算系统可靠度约束公式中的约束参数绑定,通过参数图仿真计算可以计算系统的可靠度。这个参数图如下:
图中“^可靠度:Real”是电动牙刷系统的属性,“^s1.可靠度:Real”是图中增加值属性节点后、右键菜单“选择已有属性”时选择“电动牙刷系统”的部件属性“s1:无线充电底座子系统”的“可靠度”值属性;其它“s2~s5.可靠度:Real”也是其它四个子系统的可靠度值属性。
参数图仿真计算
在模型浏览器上选择“电动牙刷系统”、右键菜单“仿真>运行”(活动当上面这个参数图打开时通过主工具栏“分析>开始”进行仿真计算),即可进行电动牙刷系统参数图仿真计算。在软件中会出现一个显示仿真结果的“变量”窗口,如下所示:
这个窗口中有“电动牙刷系统”的可靠度属性仿真结果:0.913816042044195;约束“:系统可靠度计算公式”下面有这个约束计算时用到的每个约束参数的结果。可以通过工具栏“保存该实例”将仿真结果保存到模型中。这个结果是一个类型为“电动牙刷系统”的实例,上面这个变量表中是这个实例的每个“槽”的值。
————————————————
版权声明:本文为CSDN博主「gsuner」的原创文章
原文链接:https://blog.csdn.net/gsuner/article/details/126097401