2 模块定义图

常见的一种SysML图就是模块定义图。可以在BDD中显示不同类型的模型元素和关系,以说明系统结构的信息。还可以采用创建扩展系统结构的设计技术,那种实践会在利益相关者的需求发生变更时,降低修改设计所需要的时间和成本。

2.1目的

在BDD中显示的模型元素——模块、执行者、值类型、约束模块、流说明、接口——都是其他模型元素的类型,它们会出现在其他8种SysML图中。把出现在BDD中的元素叫做定义元素。在实际情况下,定义元素形成了系统模型中其他内容的基础。这正是首先介绍BDD的原因所在。

定义元素非常重要;它们之间的结构关系——关联、泛化和依赖——可能更重要。 在BDD上也会显示这些关系。使用这些关系,通常会创建说明系统分解和类型分类的BDD。

2.2何时创建BDD

经常——你应该经常创建BDD。

这看起来是一种滑头的答案,但很准确。BDD并不会与系统生命周期的特定阶段或者设计等级绑定。你和团队会在执行所有这些系统工程活动的时候创建它(并参考它):利益相关者需求分析、需求定义、架构设计、性能分析、测试案例开发、集成。你通常会和其他SysML图一起创建BDD,从而为所关注系统的一个方面提供完整的视图。

简而言之,你应该——也会经常创建BDD。

2.3 BDD外框

模块定义图的类型缩写是BDD。图的外框代表的模型元素类型可以是以下这些:

  • 模型
  • 模型库
  • 视图
  • 模块
  • 约束模块

如前面所讨论的,图代表的模型元素会作为图中显示的其他元素的命名空间。命名空间只是一种模型元素,可以在其中包含其他模型元素。也就是说,它可以包含其他模型层次结构中的元素。因此,命名空间是在一种只在系统模型中才有意义的概念,它在系统实例中 没有任何意义。

很多类型的SysML元素都可以作为命名空间。然而,包是针对出现在BDD中各种定义元素常见的命名空间。因此,BDD中头部命名的元素通常是在模型层级结构某处创建的包。

图3.1中的BDD的名称是“ DellSat-77卫星结构和属性”。图的头部也告诉我们这个图表示系统模型中的Structure包。因此,Structure包就是图中显示的元素的命名空间。

让我们详细看一下你可以在BDD中显示的元素和关系的种类。

2.4模块

模块是SysML结构中的基本单元。可以使用模块为系统中或者系统外部环境中任意一种感兴趣的实体类型创建模型。

注意定义和实例(SysML指的是“使用”)之间的区别。这种区别涉及系统设计基本的概念,并且在SysML中经常出现。某些类型的模型元素(例如:模块、 值类型、约束模块)表示对类型的定义;其他类型的模型元素(例如:组成部分属 性、值属性、约束属性)代表那些类型的实例。打个比方,房屋的蓝图是对房屋类型的定义;在各个地点根据图纸盖起来的房屋就是那个类型的实例。

知道上面的内容之后,我可以重新说明一下:模块代表的是实体的类型,而不是一个实例的类型。例如,可以在系统模型中创建名为DesktopWorkstation的模块。 那个模块代表一种类型,其中定义了一系列属性——像显示器、键盘、鼠标、CPU、 制造厂商、磁盘空间、价格等——它们对于所有实例都通用。而IT部门为每个办公室和工位购买的每台桌面工作站都是那个DesktopWorkstation模块的不同实例。

你很容易就能够指出元素的定义和在系统模型中对元素的使用之间的区别。元素的定义只有一个名称(例如,DesktopWorkstation),而对元素的使用则有名称和类型, 二者之间用冒号分隔(例如,SDXI205LJD : DesktopWorkstation)。需要显示模块的名称分隔框。通常会显示另外的可选分隔框,其中会显示模块的特性。

特性有两种:结构特性(也叫做厲性)和行为特性。接下来的两节深入讨论这两类特性。

以下是以选择显示的分隔框:

  • 组成部分
  • 参考
  • 约朿
  • 操作
  • 接受
  • 标准端口(在SysML vl.2及更早版本中)
  • 流端口(在SysML vl.2及更早版本中)
  • 完整端口(在SysML vl.1中)
  • 代理端口(在SysML vl.1中)
  • 流属性(在SysML vl.1中)
  • 结构

结构分隔框只是分隔框,其中不会列举特性。它只是一种图形分隔框,显示模块的内部结构。你可以在那个分隔框中显示所有你能够在内部模块图中显示的相同标记。建模者一般不会显示这些分隔框。

请注意,尽管我们也可以在分隔框中显示模块的端口,但更常见的是把端口显示为模块边框上的小方块。

2.4.1结构特性

模块可以拥有五种结构特性(也叫做属性):

  • 组成部分属性
  • 引用属性
  • 值属性
  • 约束属性
  • 端口

1. 组成部分属性

组成部分属性会列在模块的组成部分分隔框中(如图1.1所示)。组成部分属性代表模块内部的结构。换句话说,模块是由组成部分属性构成的。这种关系是一种所属关系。

然而,SysML并没有定义所属关系,这个概念在不同的领域有不同的意义。在硬件领域,所属关系通常指的是物理组成关系。而在软件领域,所属关系通常指的是一个对象负责创 建和销毁另一个对象。当为一个复杂对象分配内存的时候,也会为它的每个组成部分分配;同样,当为一个复杂对象释放内存的时候,也会为每个组成部分释放内存。

但是SysML明确声明,所属关系意味着一个组成部分属性一次只能属于一个复杂结构。然而,一个组成部分属性可以从复杂结构的一个实例上移除,然后添加到另一个复杂结构的实例上。例如,我一次只能把特定的天线安装在一个卫星上,而无法安装在两个甚至多个上面。但是,那个天线可以从一个卫星上拆除下来,然后在某个时候重新安装在另一个卫星上。

当你在模块的组成部分分隔框中列举一个组成部分属性的时候,会显示下面这样的字符串:组成部分名称由建模者定义,类型一般是你在系统模型某处创建的模块的名称。 多重性是一种约束,限制复杂对象中组成部分属性的实例数量,以单个整数或者一系列整数表示。

例如,图1.1表示通信和数据处理子系统模块的有效实例必须只包含一个飞行计算机模块的实例——那个实例会起到主要计算机的角色。此外,它必须再包含一到两个飞行计算机的实例——起到备份计算机的角色。

如果你想要一个组成部分属性代表任意数量的实例,那么就可以把多重性设置为 “0或者多个”。或者,可以把多重性设置为*,那是0…*的缩写。

如果对于组成部分属性没有设置任何多重性,那么默认就是1 (等同于1…1 )。注意几乎总是SysML中的默认多重性设置。然而,也有一种重要的例外情况,这会在1.5.2节中讨论。

当一个组成部分属性的多重性的上限大于1的时候(例如:1…2, 0…10, *),我们就称那个组成部分属性为(实例的)集合。关键的问题是组成部分属性和实例意义并不相同;如果复杂结构的多重性允许,那么其中单独的组成部分属性可能代表多个实例。

2. 引用属性

引用属性会列举在模块的引用分隔框中(如图1.4所示)。引用属性代表模块外部的一种结构。

和组成部分属性不同,引用属性并不表示所属关系。引用属性可以大概描述为 “需要”的关系;带有引用属性的模块因为某种目的需要那个外部结构,或者是为了提供一种服务,或者为了交换事件、能量或者数据。这意味在它们之间必须存在某种联系。

注意,在模块之中出现的引用属性,本身不会说明其目的。如果你需要说明那个目的,可以在内部模块图中这么做。

当在模块的引用分隔框中列举一个引用属性的时候,会显示这种格式的字符串:

 <reference name> : []

引用名称由建模者定义。类型必须是你已在系统模型某处创建的模块或者执行者的名称。多重性是引用属性能够表示的实例的数量限制。

例如,图1.4显示电子电力子系统模块拥有名为cdhs的引用属性。这个模块表示电子电力子系统的实例只需要一个通信和数据处理子系统(以满足它的设计目的)。 需要再次说明的是,这个视图本身并没有表达那样做的目的是什么,它只是表示二者之间必须存在某种类型的关系。

和组成部分属性一样,引用属性的默认多重性是1 (如果没有显示任何多重性设置)。同样和组成部分属性类似,当多重性的上限大于1时,引用属性代表的是一个集合。

3. 值属性

值属性列举在模块的值分隔框中(如图1.5所示)。值属性可以代表一个数字(某种类型)、一个布尔值或者一个字符串。然而,更常见的情况下,可以为值属性赋予一个数字。当和约束属性结合的时候,值属性会特别有用,那样可以构建系统的数学模型。

当模块的值分隔框中列举一个值属性的时候,它会是下面这种格式的字符串:

值的名称由建模者定义。类型必须是你已在系统模型中某处创建的值类型的名称。多重性是值属性能够持有的值的数量的限制。默认值是可选信息,代表它所属模块的实例第一次创建的时候赋予值属性的值。

图1.5表示DellSat-77卫星模块拥有多个值属性。eventTimes值属性可以持有任意多个Timestamp值(多重性表示为0…*)。Timestamp是一种值类型,它存在于模型层级关系的某处。

和组成部分属性及引用属性类似,值属性的默认多重性也是1(如果没有设置多重性)。类似地,当它的多重性的上限大于1时,值属性就代表一个集合。

某些值属性会持有赋予的值,其他会持有从系统模型中其他值属性继承(计算)得到的,为了表示一个值属性是继承得来的,需要在它的名称之前放置一个反斜杠()。 例如,图1.5 DellSat-77卫星模块拥有两个继承得到的值属性mass和period。模型的这种视图不会标识用来计算那些值的等式,也不会显示哪些值属性为那些等式提供输人,而要使用约束表达式来指定那些数学关系。

4. 约束属性

约束属性会列举在模块的约朿分隔框中(如图1.6所示)。约束属性一般代表一种数学关系(一个等式或者不等式),它会使用一系列值属性。在这里所需要的模型精确度要比大多数建模项目所需要的都高。然而,对于构建系统的数学模型来说,约束属性是一种核心组成部分,你会在参数图中显示它。

当在模块的约束分隔框中列举约束属性的时候,它会显示为这种格式的字符串:

约束名称由建模者定义。类型必须是你已在系统模型某处创建的约束模块的名称。

约束模块只是一种特殊的模块——创建它是为了封装可重用的约束表达式。常见的情况下,约束表达式是一个等式或者不等式。例如,图1.7显示了一个名为Sufficient Memory的约束模块,其中封装了约束表达式:

memoryCapacity >= dataPerOrbit * 3

这个约束模块是作为飞行计算机模块中约束属性sm的类型而存在的(如图1.6所示)。这表示两个值属性中(MemoryCapacity和dataPerOrbit)持有的两个值必须始终满足那个数学关系(在名义上操作的系统中)。

注意,这里并没有要求你使用约束模块来影响值属性上的数学关系。直接在模块的约束分隔框中指定约束表达式也没有问题(如图1.8所示)。当只有一个模块需要那个约束表达式的时候,你就会这么做(即,不需要在多处重用)。然而,我还是建议你总是把等式和不等式封装到约束模块中;如果需求增长,这可以重用。

现在,你要记住这些关键点:

  • 模块可以拥有约束属性(以约束值属性)。
  • 约束属性的类型是约束模块,其中一般会封装数学关系。

5. 端口

端口是代表结构边缘不同交互点的一种属性,通过那些点外部实体可以和那个结构交互—或者是提供服务,或者是请求服务,或者是交换事件、能量和数据。

当你为模块添加端口的时候,其实就是把一种结构针对它的环境建模为一个黑盒:结构的内部实现会对客户端隐藏。那些客户端只知道结构的接口(它所提供和请求的服务,以及能够流入、流出的事件、能量和数据的类型)。需要特别声明的是,接口会将模块的客户端与所有特定的内部实现解耦。

使用一系列端口来封装模块,让你可以在稍后重新设计模块的内部实现,而不会影响系统其他部分的设计。当客户的需求在生命周期后期发生变更的时候,这种实践会减少系统修改所需要花费的时间,而时间上的节省会转换成为成本上的节省。

端口可以代表你所需要建模的任意类型的交互点。例如,它可以代表硬件对象边界上的物理对象(例如:龙头、HDMI接口、燃油喷嘴,或者仪表)。它也可以代表软件对象边界上的交互点(例如:TCP/IP插槽、消息队列、共享内存片段、图形化用户界面、数据文件)。它还可以代表两家商业组织之间的交互点(例如: 支付汀单、传件员、网站、邮箱)。SysML不会对能够代表什么样的端口做任何限制。

SysML vl.2 (以及更早版本)定义了两种端口——标准端口和流端口——你可以把它们添加到模块上,以指定不同类型的接口。标准端口可以指定一个交互点,关注模块提供或者请求的服务;流端口可以指定一个交互点,关注能够流入、流出模块的事件、能量或者数据的类型。

注意 SysML vl.1不再支持标准端口和流端口,作为替代,它定义了两种新的端口:完整端口和代理端口。我会在附录B中详细讨论这些内容。我在这一章中会关注标准端口和流端口,因为在我撰写这本书的时候,它们仍是系统模型中端口的主要类型。此外,当前版本的OCSMP认证考试也覆盖了标准端口和流端口的内容。另外,某些建模工具没有跟上SysML的改变,暂时还不支持完整端口和代理端口。

标准端口是模块在边界交互点上提供或者请求的服务(行为)的模型。常见的情况下,你会把标准端口表示为模块边界上的小方块(如图1.9所示)。你会注意到,在标准端口分隔框中把标准端口以字符串形式列举也是可以的,但那种标识法并不常见。

标准端口可以拥有建模者定义的名称(例如:sp_cdhs、sp_eps),以字符串的形式显示在标准端口旁边(可能在模块边界之内,也可能在之外)。标准端口可以拥有一种或多种类型;类型是你赋予它的接口(例如:Power Generation、Status Reporting) 和模块类似,接口也是对元素的一种定义——它定义了一系列操作和接收信息, 也就是客户端和提供方需要遵循的行为契约。你可以在BDD中把接口显示为一个矩形框,名称前面带有关键字<> ;你可以在第二个和第三个分隔框中显示它的操作和接收信息。图3.10用这种标识法显示了 Power Generation和状态报告接口。

当你为标准端口赋予接口的时候,可能会将其赋予提供接口也可能赋请求接口。提供接口使用圆形标识——和标准端口连接,像棒棒糖一样的符号(如图1.9所 示)。提供接口的模块必须实现接口所有操作和接收信息。例如,图3.9表示通信和数据处理子系统模块提供了状态报告接口,而这意味着它会实现那个接口中的两个操作和两种接收信息。

请求接口使用槽状的标识来表示——和标准端口连接,带有半圆的直线(如图3.9所示)。请求接口的模块可能会在系统操作的某些时候调用一个或多个——不一定是所有——操作或者接收信息。例如,图3.9表示电子电力子系统模块需要请求状态报告接口,这意味着它可能会调用那个接口中四种操作和接收信息中的任意多个 (或者所有)。

使用标准端口建模这种方式,可以对客户端和提供程序提供解耦,让你可以为抽象而不是具体实现来设计。这种可扩展性让你可以在任何时候添加新的接口提供程序,而不会影响那些接口的现有客户端。

流端口会为能够在边界交互点流入、流出模块的事件、能量或者数据建模。和标准端口一样,通常会把流端口显示为连接在模块边缘上的小方块(如图3.11所示)。 然而,和标准端口不同的是,流端口在小方块中会显示一个符号。把流端口显示为分隔框中的字符串也没有问题——叫做“流端口”的分隔框——但那并不是一种常见的标识法。

流端口可以拥有建模者定义的名称(例如:dataOut、dataln);它也可以拥有类型(例如:Housekeeping Data)。名称和类型都显示为流端口附近的字符串,以名称:类型的格式用冒号分隔。你为流端口制定的类型以及显示在方块中的符号取决于你建模的流端口的种类。SysML提供两种流端口:非原子流端口和原子流端口。

图3.11显示了非原子流端口的例子。当你需要为通过端口流入或流出的多种项目类型建模时,就会为模块添加非原子的流端口(符号是 <>)。非原子流端口的类型必须是你在系统模型某处创建的流类别的名称和模块一样,流类别也是对元素的一种定义——它会定义一系列能够流入、流出非原子流端口的流属性。可以在BDD上把流类别显示为一个矩形框,名称前面带有元类型说明Properties)的分隔框中显示它的流属性。图1.12显示了使用种标识法显示的Housekeeping Data流类别。

流属性代表的是能够通过流端口流入、流出模块的特定项目。每个流属性都有其自身的方向、名称、类型,以下面的格式显示为一个字符串:

方向可以是in、out或incnit。名称由建模者定义。类型必须是你已经在模型层级关系中某处创建的值类型、模块或者记号的名称。

图3.11显示飞行计算机模块拥有名为dataln的非原子流端口,它的类型是Housekeeping Data流类别。这个模型表示温度和电压值在系统操作的某个时间点可以传人到飞行计算机的实例中。

图3.11还显示电子电力子系统模块拥有名为dataOut的非原子流端口,它的类型也是Housekeeping Data流类别。然而,在这种情况下,类型Housekeeping Data前面有一个波浪线(~)。这个符号表7K dataOut流端口是共耗的。这意味着Housekeeping Data流类别中流属性的方向会针对那个流端口反转。

另一种那个流端口是原子流端口。图1.11显示了这种端口的例子。当你需要为能够通过那个端口流入或流出的单一类型项目建模时,就会添加原子流端口。小方块中的符号是一个箭头,表示流的方向。原子流端口的类型必须是你在模型层级结构某种定义的值类型、模块或者信号的名称。

图3.13显示Modulator模块和Transmitter模块拥有名为coupler的原子流端口, 类型是同样的值类型Radio Frequency cycle。这些端口只在流的方向上有所不同。这 个模型表示射频信号可以通过耦合器——位于各自边界上的交互点——从发射机传递 到调制器上。

【SysML精粹】模块定义图相关推荐

  1. 初入SysML之模块定义图

    如果把系统工程看做一座山,那么基于SysML或UML的各种图就是从不同角度去看这座山所形成的"画"."横看成岭侧成峰,远近高低各不同",每幅"画&qu ...

  2. 第三章 模块定义图:模块

    第三章 模块定义图 1. 模块 1.1 结构特性 1.1.1 约束属性 1.1.2 端口 1.2 行为特性 1.2.1 操作 1.2.2 接收   在BDD中出现的元素叫做定义元素.定义元素形成了其它 ...

  3. 《SysML精粹》学习记录--第十章

    <SysML精粹>学习记录 第十章:包图 包图简介 特定包 包图与模块定义图的选择 小结 第十章:包图 包图简介   包图是显示系统模型的组织方式时所创建的图.系统模型的组织方式由包的层级 ...

  4. 《SysML精粹》学习记录--第二章

    <SysML精粹>学习记录 第二章:系统建模语言概览 SysML介绍 SysML与UML SysML图概览 SysML通用图 小结 第二章:系统建模语言概览 SysML介绍   SysML ...

  5. SysML精粹学习笔记一

    一.MBSE(Model Based Systems Engineering,基于模型的系统工程) 1.MBSE的三大支柱:建模语言.建模方法.建模工具 2.能够构建和阅读形式良好的模型,是MBSE的 ...

  6. 《SysML精粹》学习记录--第七章

    <SysML精粹>学习记录 第七章:序列图 序列图简介 序列图元素 消息 约束 组合片段 交互使用 小结 第七章:序列图 序列图简介   序列图是另一种可以用来说明系统动态行为信息的Sys ...

  7. 《SysML精粹》学习记录--第八章

    <SysML精粹>学习记录 第八章:状态机图 状态机图简介 状态机图元素 状态 转换 伪状态 区域 小结 第八章:状态机图 状态机图简介   状态机图是能够用于说明系统动态行为信息的三种S ...

  8. 《SysML精粹》学习记录--第十一章

    <SysML精粹>学习记录 第十一章:需求图 需求图简介 需求图元素 需求关系 需求关系标识法 小结 第十一章:需求图 需求图简介   需求图是SysML中的主要媒介,可用于向利益相关者传 ...

  9. 《SysML精粹》学习记录--第九章

    <SysML精粹>学习记录 第九章:参数图 参数图简介 参数图元素 小结 第九章:参数图 参数图简介   参数图是一种独特的SysML图,它用于说明系统的约束.这些约束一般以数学模型的方式 ...

最新文章

  1. [oracle]常用SQL汇总
  2. hover与click样式冲突
  3. 经典算法:牛顿迭代法求平方根
  4. mysql序列号发生器
  5. hive最新UDF函数(2016-10-25)
  6. SAP Spartacus pagefold学习笔记
  7. 微信内部浏览器私有接口 - WeixinJSBridge介绍
  8. 巧用Android网络通信技术,在网络上直接传输对象
  9. 【图像处理】基于matlab GUI视频处理系统【含Matlab源码 756期】
  10. PX4的软件仿真(SITL)环境配置过程
  11. 给定一个英文字符串,请写一段代码找出这个字符串中首先出现三次的那个英文字符(需要区分大小写)。
  12. python+selenium,打开浏览器时报selenium.common.exceptions.WebDriverException: Message: 'chromedriver' execut
  13. excel求回归直线方程的公式_如何用excel做线性回归分析-用excel做线性回归分析求回归方程...
  14. 如何判断两条线(轨迹)的重叠区域
  15. 最新FFmpeg RTSP流抓取
  16. 关于微信第三方平台$APPID$.wx.abc.com的问题
  17. AHRS(航姿参考系统)和IMU(惯性测量单元)的区别【转】
  18. 苹果手机屏幕突然变暗_手机突然屏幕失灵
  19. (三)模仿学习-Action数据的模仿
  20. 关于 ARAS PLM (一) 部署

热门文章

  1. 数字油画 matlab,数字油画制作中的k均值聚算法
  2. 计算机等考试三级-网络技术考点总结
  3. 1到n的数按字典序排序
  4. Esp8266进阶之路16 esp8266的 基于Nonos移植红外线H1838,实现红外遥控器配网,远程控制一盏灯。(附带固件)
  5. ETL 与 ELT的关键区别
  6. 简单解释 P2P 技术之 UDP 打洞
  7. 2017年总结-我的学习之路
  8. 形式语言大作业_清华大学本科一年级设计作业展示|仅是手绘就秒杀我的照片级效果图...
  9. 20分钟配置 让Win8 DP与Win7和平共存
  10. 指针p++与p+1的区别