编辑推荐: |
本文来自于www.85kf.com,文中主要介绍了何时创建IBD,IBD外框,BDD和IBD:相互补充的模块视图,组成部分属性,引用属性,连接器,项目流等相关方面 |
|
第4章内部模块图
内部模块图(Internal Block Diagram, IBD)和BDD的关系非常密切。你可以在
IBD中显示各种元素来说明系统结构的各个方面,那会对BDD中表达的内容做补充。 IBD还有其独特的能力,它是建模工具箱中的重要部分。
4.1目的
你创建IBD是为了指定单个模块的内部结构。和BDD—样,IBD是系统或者系 统一个组成部分的静态(结构化)视图。和BDD不同的是,IBD不会显示模块;它
会显示对模块的使用——也就是在IBD头部命名的模块的组成部分属性和引用属性。
回顾一下第3章的内容,在BDD中也可以显示组成部分属性和引用属性——或 者是作为模块分隔框中的字符串,或者是作为关联一端的角色名称。但是IBD可以
表达在BDD中无法表达的信息:组成部分属性和引用属性之间的连接;在连接之间 流动的事件、能量和数据的类型;以及通过连接提供和请求的服务。
IBD会表达模块的组成部分必须如何组合才能够创建有效实例。它还会显示模块 的实例必须如何与外部实体(引用属性)连接,以在整体上创建系统的有效实例。
这是一种强大的功能。然而,了解SysML的局限性也很重要。SysML没有提供 对系统的空间结构建模的方法。IBD可以对那些彼此相连的组成部分建模,但是无法
对它们的形状或者彼此之间合适的空间建模。你可能需要使用(非SysML)计算机辅 助设计(Computer
Aided Design, CAD)工具来完成那个目标。
4.2何时创建IBD
IBD和BDD互相补充,提供了模块的信息。BDD让你首先定义模块和它的属性。
然后你可以使用IBD来显示对那个模块的合法配置一模块属性之间特定的一系列 连接。因为这种紧密的关系,你通常会在系统的生命周期中不同的时间点为各种利益
相关者依次创建IBD和BDD。
4.3对模块的回顾
我在4.5节中提供了 IBD的例子。然后,本章剩余的内容会详细讨论能够在IBD 中出现的元素和标识法的类型。然而,在那之前,让我们重新回顾一下模块这个主题。
你应该还记得,模块是出现在IBD中的模型元素的类型。然而,模块不能出现在 IBD中,它们只在BDD中出现。因此,首先会在4.5节中展示一幅BDD,它显示了
用于创建IDB的模块的子集。图4.1中的BDD是图3.1 (出现在第3章的开篇)中大 型BDD的节选。注意模块的名称以及它们之间的关系,你会在图4.2的IBD中再次
看到那些模块的名称。
关键是:BDD和IBD提供了相互补充的模块视图。
4.4 IBD外框
内部模块图的图类型缩写是ibd。对于IBD,唯一允许的模型元素类型就是模块。 IBD的外框总是代表你在系统模型某处定义的模块。在外框之中,你可以显示模块的
组成部分属性和引用属性,以及把它们连接在一起的连接器。
图4.2中的IBD的名称是“面向流的视图”。这幅IBD代表系统模型中的 Communication
and Data Handling Subsystem模块。因此,模块是显不在图中的组成 部分属性和引用属性的所有者。
4.5 BDD和IBD:相互补充的模块视图
图4.1 中的 BDD 表7K Communication and Data Handling
Subsystem 模块有七个组成 部分属性:demod、rx、ant、primaryComputer、backupComputer、mod
和 tx。它有 一个引用属性:eps。同样的8个属性也出现在图4.2的IBD中,这8个属性的名称、
类型和多重性在两幅图之间都是对应的。这样,这两幅图就表现了 Communication and Data
Handling Subsystem模块一致而互补的视图。
图4.2中的IBD提供的信息大多数和图4.1中的BDD所提供的一样,但它还提 供了一些BDD无法提供的额外信息:内部组成部分属性之间的特殊连接,以及它们
与外部引用属性eps之间的连接。你使用属性之间的连接来表示那种组合关系。
除了属性之间的连接器之外,IBD还能够表示在属性之间流动的项目,以及属性 能够通过那些连接器彼此调用的服务。你会在接下来的小节中看到这个IBD每个部
分的详细信息。
4.6组成部分属性
IBD中的组成部分属性和BDD中模块的组成部分分隔框中的组成部分属性有着 相同的意义:它代表一种结构,位于在IBD头部显示名称的模块内部——也就是组成
模块的结构。IBD中组成部分的标识法是带有实线边框的矩形。显示在矩形中的名称 字符串的格式和BDD中模块的组成部分分隔框中显7K的字符串相同:
可以选择在矩形的右上角显示组成部分属性的多重性,而不是在字符串末尾的方 括号中显示。在图4.2中为了介绍显示了这两种标识法。然而,建议在日常工作中创
建图时使用一种一致的标识法。
4. 7 引用属性
IBD中的引用属性和BDD中模块的引用分隔框中的引用属性有着同样的意义: 它代表IBD头部显示的名称代表的模块外部的结构——也就是模块因为某种目的而
需要的模块,或者是为了触发行为,或者是为了交换事件、能fl和数据。IBD中引用 属性的标识法是带有虚线边框的矩形。显示在矩形中的名称字符串和BDD中模块的引用分隔框中显示的字符串格式相同:
和组成部分属性一样,你可以选择在矩形的右上角显示引用属性的多重性。
4.8连接器
IBD中两个属性之间的连接器表示,那两个结构在正确组装且可操作的系统中, 拥有某种方式可以互相访问。你可以选择为一个连接器指定名称和类型,以传达更多
关于连接那两个结构的媒介的额外信息。名称字符串的格式如下:
连接器的名称是可选的,并且是建模者定义的。类型也是可选的,但是,如果你 选择指定一种类型,那么它必须是你在系统模型两个模块之间某处创迚的关联的名称。
关联必须连接同样的两个模块,而那两个模块会指定连接器两端的两个属性的类型。
图4.3中的IBD表示飞行计算机(它是通信和数据处理子系统的组成部分)和电 子电力子系统(它是通信和数据处理子系统的引用)连接。连接器的名称是pcPower,
类型是Power Cable。指定名称和类型会传达更多关于两个结构之间关联的信息。类 型Power
Cable与电子电力子系统模块和飞行计算机模块之间的关联相关,正如前面 图4.1中的BDD所示。
两个相互连接的属性可以都是组成部分属性、引用属性,或者一样一个。如果两 个相互连接的属性拥有兼容的端口——标准端口或者流端口——你就可以选择把连接
器与那些端口连接,而不是直接与属性连接。这样做表示那些属性是在边界的特殊交 互点处连接的。
如果你通过流端口连接两种属性,那么就可以通过那些端口传递能够在属性之间 流动的事件、能量或者数据的类型。例如,在图4.4中,连接器通过边界上的非原子流端口连接了
eps引用属性和primaryComputer组成部分属性。这些非原子流端口都 彼此兼容,因为他们的类型都由同样的流规格Housekeeping
Data以及共扼的两个端 口之一dataOut决定的(在它的类型之前有个波浪线[?])。第3章讲过,共轭意味着
流规格中的流属性的方向和端口相反。
如果你通过标准端口连接两种属性,那么就可以传递一种属性在那些端口提供, 另一种属性需要的服务。例如,在图4.5中,连接器会把eps组成部分属性和cdhs组
成部分属性通过边界上的标准端口连接起来。这幅IBD表示电子电力子系统提供了 Power Generation接口,需要Status
Reporting接口。相反,通伯和数据处理子系统 提供/ Status Reporting接口,需要Power
Generation接口。这些标准端口都是兼容 的,那些结构可以在系统操作过程中通过这个连接器来交换服务。
你还可以在丨BD的外框上显示端口。这样的端口代表IBD代表的模块(其名称 在图的头部显示)边界上的交互点。为了表示复合模块的一个内部组成部分通过边
界上的交互点与组合连接,你可以把边框上的端口和组成部分属性的一个端口连接 起来。这种设计表示复合结构的一个实例可以为行为和项目流传递请求,或者是从
外部客户端到那个内部组成部分,或者是从那个内部组成部分到外部的提供者。
图4.6中的IBD显示(DellSat-77卫星模块的)eps组成部分属性通过solarPanel标准端口与那个模块的边界相连。这幅图还显示,这些标准端口拥有请求接口
Light Source。这个模型表示卫星的电子电力子系统需要一个光源,它会通过卫星边界上的 两个太阳能板访问卫星的外部环境。
4.9项目流
项目流代表在系统中两种结构之间流动的事件、能量或者数据的类型。IBD中 项目流的标识法是实心的三角箭头,它位于连接两个流端口的连接器上(如图4.7所
示)。项目流的类型显示在连接器箭头旁边的标签上;标签必须包含系统模型中某处 存在的模块、值类型或者信号的名称。
项目流代表的类型必须和连接器两端流端口的类型兼容。如果两端的流端口都是 原子流端口,那么对于连接器上的项目流类型,那些端口的类型通常是唯一的。如果
两端的流端口是非原子流端口,那么它们的类型会由流规格指定。流规格必须包含一 个流属性,它的类型和方向要和连接器上的项目流相匹配。
图4.7中的IBD本质上和图4.4中的类似。然而,这个图传达了额外的信息: 在两个非原子流端口之间沿着连接器流动代表丈值的项目流,从eps引用属性流
向primaryComputei?组成部分属性。这个项目流与这些非原子的流端口兼容,因为 Housekeeping
Data流规格拥有类型1^:的流属性,且方向与之相符合。(如果你对此怀 疑,那么可以查看图3.12。)
4.10内嵌组成部分和引用
IBD提供了一种强大的功能:显示内嵌在其他属性中的属性。内嵌让你可以在单 独视图中表示系统层级结构的多个层级。当看图者需要看到内嵌组成部分之间的关联
时,这就很冇必要。(但是,我还是建议你谨慎地使用这种功能;IBD可能会很快变得不可读。)
图4.8提供了带有内嵌属性的IBD例子。在这幅图中,我选择关注组成部分属 性为另一种属性所提供的服务。为了显示这一点,IBD显示了它们的标准端口,以
及赋予那些端U的接口。这幅图把图4.2中所关注的转换到系统设计的另一个方面。 图4.2敁示了流端口,以说明在属性之间流动的事物类型。
注意可以在显示流端口的IBD中显示标准端口。但我更喜欢做的是,在不同的 图中关注系统的两个不同方面。
图4.8中的1BD显示DellSat-77卫星模块拥有一个名为cdhs,类型为通信和数 据处理子系统的组成部分属性。而cdhs组成部分属性拥有名为primaryComputer和
backupComputer的组成部分属性。
模型的这个视图和图4.2中显示的视图一致。那幅IBD代表通信和数据处理子 系统模块,并显示了所有属性。相对而言,图4.8中的丨BD忽略了
cdhs的不少部分, 那些都不是这幅图的关注点所在(ant、tx、rx、mod和demod) 然而,显示的两个
部分都和图4.2中的信息一致。
4.10.1点标识法
SysM L没有限制在丨B D中对属性可以进行多少层内嵌:唯一的限制是你的画布 的维度,以及图的可读性。属性中的内嵌属性会占据图的很大空间SysML为了克服
空间限制,提供了另一种表达内嵌属性的标识法:点标识法。点标识法让你能够以字 符串的形式简洁地表示结构化层级关系。图4.8中IBD顶部的属性就是一个例子。字
符串 sensorPayload.xaxisSS: Star Sensor 表达了多项信息:
□ DellSat-77卫星模块拥有名为sensorPayload的组成部分属性
□ sensorPayload组成部分属性拥有名为x-axisSS的属性
□ x-axisSS属性的类型由名为Star Sensor的模块决定
□ x-axisSS的多重性是1.1 (默认值,因为没有显示任何多重性设置)
正因为内嵌可以有任意深度,所以点标识法的字符串也可以任意长。对于表示系 统层级关系的大量信息以及不同层级上组成部分之间的关联,这是一种非常高效的
方式。
但是点标识法(和内嵌方式相比)也有一些缺点。字符串sensorPayload.x-axisSS:
Star Sensor不会表达以下信息:
口决定组成部分sensorPayload类型的模块名称 □组成部分属性sensorPayload的多重性如果需要看到层级关系每个级别每个属性的类型和多重性,那么你就应该使用内
嵌标识法,而不是点标识法。
4.10.2连接内嵌属性
当你需要为内嵌属性添加连接器的时候,有两种选择:跨越封装内嵌属性的边界 绘制连接器,或者在那个边界的端口处停止,并从指向内嵌属性的那个端口再绘制一
条迮接器两种做法的例子如图4.8所示。
为r显示电子电力子系统和飞行计算机之间的关联,我首先创建了从eps边界上 的标准端I」到cdlls边界的标准端口的连接器。然后创建了从cdhs边界上的标准端
n到网个内嵌组成部分屈性的连接器。相对地,我创建了直接从x-axisSS属性到内嵌 的primaryComputer和backupComputer属性的连接器,在这个过程中跨越了
cdhs边 界,从Ifil M示了垣球传感器和飞行计算机之间的关联。
决定是跨边界绘制连接器,还是在边界上的端口处停下,这应该基于对设计原则 的理解正如笫3章提到的,端口让你以模块化的方式指定模块,显示面向客户端的
接口,它会隐藏模块的内部实现。这是面向对象中的封装原则。这是非常好的原则, 你可以在设计的默认模式下采纳它。
你跨边界绘制连接器的时候,就违背了封装原则。这样做也有很合理的原因 (例如.需要满足要求很高的实时嵌人式系统中的性能约束),但那种情况是例外,而
不是规则。当你必须违背封装原则的时候,要让大家知道,并把理由记录在模型中。
小结
IBD表示r系统结构的一个重要方面:在构建的系统中存在的特殊部分,以及那 些组成部分之间的关联。系统设计的这个方面很好地补充了你可以在BDD中表达的
信息,所以你通常会依次创建这两种图。
IBD拥有一种独特的能力,它可以表示特定组成部分为另一部分提供的服务,以 及能够通过它们的关联流动的事件、能量和数据。系统结构的这方面内容对于系统利
益相关者而言非常有价值。 |