MBSE建模学习之十:包图及模型扩展
包图(PackageDiagram)
包图是定义模型架构的图。模型的架构主要是通过“包”(Package)来组织的。包图的代表元素是一个“包”元素(元素-Element,是指模型中任何一种数据),图中定义的元素默认的命名空间就是这个包。除了“包”之外,包图的代表元素也可以是一个“模型”(Model)、“模型库”(ModelLibrary),或者是一个“概要文件”(Profile)元素。
包图经常用来定义整体的模型架构,也就是模型的层级关系。这种情况下,包图中一般显示的元素是各层级的“包”或其它作为类型的元素。也可以在包图中直接定义各种类型元素,例如通用的“模块”(Block)、“值类型”(ValueType)、“接口模块”(InterfaceBlock)等。这时候,包图和模块定义图的作用并没有太大差别(模块定义图的代表元素一般也是一个包)。在智睿思维基于模型的系统工程软件中,你只需要切换包图的默认图形工具栏为模块定义图的工具栏,就可以在包图中添加各种类型。另外,包图也可以定义扩展标准模型元素的构造型,为标准元素添加建模时的构造型属性。
例如,下面的包图定义了MagicGrid方法论中“问题域”的模型架构(我们接下来会用几篇文章详细说明MagicGrid方法论,敬请关注公众号)
包(Package)
包的作用是用来组织模型中元素数据,相当于元素数据存放的一个目录。包是包中元素的“命名空间”。“命名空间”是为了唯一标识一个模型元素的空间,在一个“命名空间”中,不允许元素的名称重复。例如,在一个房子中每个人的名字是唯一的,在一层楼中每个房子的名称(编号)也是唯一的。再向上,这个大楼、小区等各层空间的名称都唯一,这样就可以建立一套唯一的路径名称。SysML中模型元素的命名原理就是这样,包含了所有各层命名空间路径的名称称为元素的“完全限定名称”(fully qualified name),各层路径用“::”分隔。例如在上面的包图中,“电功率”模块的完全限定名称是“1 问题域::黑盒::3 系统上下文::交换项目::电功率”。 除了包之外,其它很多元素也可以用作“命名空间”。例如“模型”、“模型库”、“概要文件”和包类似,相等于一个文件夹。“模块”也是一个命名空间,它是模块中的属性或方法的命名空间。
包导入关系
在SysML图中显示的元素并不一定就是这个图的代表元素包含的元素。根据模型说明的需要,经常也会显示其它包中的元素。当元素的命名空间不是这个图的代表元素(默认命名空间),也没有关系能表示这个元素的命名空间的时候(例如命名空间包含关系,或者在另外一个包的内部显示),这个元素就会显示“完全限定名称”,就是包含了一长串路径的名称。有时候,显示了太长路径的名称也不利于显示和阅读模型。这时,可以建立一个“包导入”关系(公有或私有),将名称很长的元素“导入”到当前图代表元素下面。这时候,被导入的元素就只显示名称了。下面是解决方案系统架构图中显示逻辑架构中模块的例子,为了建立和显示两个架构之间的抽象映射关系(解决方案架构中模块应该都有逻辑架构的模块对应),左图是没有导入关系的视图,右图是建立了导入关系后的视图(在MBSES软件中,模型浏览器上包节点可以通过右键菜单直接建立包导入关系,也不一定要显示到图中)。
模型库(ModelLibrary)
模型库是指一套通用的、可以重复使用的元素。这些元素通常用“模型库”元素作为它们的命名空间。“模型库”就是这样一种专门存放模型库元素的“包”。
在实施MBSE的过程中,需要将那些通用的、或者以后会重复使用的模型作为模型库管理起来。在新产品研制、建模的时候,引用这些通用的或已有的模型,会使建模工作起到事半功倍的效果。当然,万事开头难,刚开始应用MBSE技术需要打基础的过程。打好基础了才能见到成效。
一般企业实施MBSE,需要建立这些模型库:
(1)企业通用的值类型、单位模型库。产品的性能参数属性一般建为模块的值属性。如果这个性能参数具有专业的工程意义,需要建立对应的值类型及单位。企业建立统一的库,可以在每个项目中使用,避免重复。
建模软件中一般也有通用的库。最基础的值类型库就是SysML标准中的“基本数值类型”(PrimitiveValueTypes)库,这个库中包含最原始的数据类型,有“Real”(实数)、“Integer”(整数)、“Boolean”(布尔,值只能是True、False这样数据)、“Complex”(复数,有实部、虚部)、“String”(字符串)。更复杂的值类型,需要从这些基本数据类型继承、再定义。
在SysML标准的附录中有“ISO 80000”国际标准计量单位库,包含各专业常用的值类型和单位。(有需要这个库的用户请微信联系“智睿思维MBSE”18022886980获取)。
其它企业专用的值类型或单位,需要建立企业自己专用的模型库。
(2)专用的约束模块库。约束模块是包含可重用的参数图仿真公式的模块。企业在进行系统性能指标分析的时候,通用的约束公式可以建立为模型库,在任何项目和产品上可以使用。通用的约束模块模型库,是经过仿真验证是正确的方程。使用通用的库,避免每个人自己去花时间写公式和验证公式。
(3)通用的标准模块。这些模块是在多个项目或产品中共用的标准部件。建立一次,然后抽取出来作为模型库,可以重复使用。
概要文件(Profile)、构造型(Stereotype)和模型扩展
为什么MBSE的技术路线有多种,而以UML\SysML建模语言的方法论和技术路线成为主流?是因为UML\SysML语言超强大的扩展能力和系统性。我们知道,SysML是从UML扩展来的,SysML本身就是一个应用于系统工程技术领域的“概要文件”。“概要文件”表示一套标准的扩展定义的模型库,是包含了一套扩展元素定义的“包”。
构建概要文件的主要元素是“构造型”。“构造型”类似一个“类”(在UML自身描述语法中,它是从类继承的概念元素),它有“属性”。定义了一个“构造型”,当把它应用在已有概念元素上,是生成一个这个构造型的实例,定义这个实例具体的值,并附加到原先这个概念元素上来给它增加新的属性或意义。
我们来看看在SysML标准中对“Block”(模块)的定义:
“Block”本质上是对类扩展的一个构造型,增加了一个“isEncapsulated”(是否封装的,True的话表示这个模块是一个黑盒子,外部的连接器只能连到它的端口上;False的话可以连接到它内部)构造型属性。当我们在图中定义一个“Block”的时候,其实是定义了一个“Class”(类)并应用了“Block”构造型。例如定义了一个“M8汽车”模块,图中显示如下:
构造型“«block»”会显示在上面,构造型的属性会显示在“{}”中。
如果对已有概要文件或原始的UML模型元素进行扩展,可以定义新的构造型。从已有构造型继承,或直接扩展UML元素。例如下面定义一个“«汽车»”构造型,定义了“设计阶段”、“类型”的构造型属性。把这个构造型应用到上面的“M8汽车”,为它增加专用的模型属性。构造型属性可以显示在专用的分区中,也可以只显示在节点的头部。
要区分构造型的属性和“模块”类本身属性的差别。构造型属性在建模的时候就确定了具体值、可以输入值和保存值。“模块”类本身的属性是在实例化的时候才有值。例如这个“M8汽车”模块,有一个“重量”的值属性,这是在对模块仿真、生成它的实例的时候才有具体值。在上面这个例子中,“类型”属性其实也可以是“汽车”类的值属性(当建模的目的是为了车辆信息的管理的时候)。但是当我们的目的是为了设计车、明确这个模型是某种类型的车(如“电动车”)的模型,它的模型会具有一些专门的特征或要求(“电动车”的模型应该有电池模块,工作原理应该用“电”来驱动)的时候,我们把它作为构造型属性。
对某种专业的应用领域,对模型标准的扩展可能还需要专门的视图、建模方法去支持。这时候可能还需要对建模软件的功能进行对应的二次开发。随着MBSE应用技术的不断发展,可能会出现很多专用技术领域的扩展UML\SysML的建模标准及软件工具。