目录
模块定义图
1 BDD介绍
模块定义图(Block Definition Diagram,BDD)是最常见的一种SysML图。可以在BDD中显示不同类型的模型元素和关系,以说明系统结构的信息。还可以降低修改设计所需要的时间和成本。
把出现在BDD中的元素叫做定义元素,BBD中的模型元素有:
- 模块
- 执行者
- 值类型
- 约束模块
- 流说明
- 接口
创建BDD的时机一般发生在执行系统工程活动中,例如:利益相关者需求分析、需求定义、架构设计、性能分析、测试案例开发、集成。
2 BDD外框
图的外框代表的模型元素类(modelElementType)可以是:
- 包
- 模型
- 模型库
- 视图
- 模块
- 约束模块
3 模块
3.1 基本介绍
定义和实例之间的区别涉及系统设计最基本的概念。某些类型的模型元素(例如:模块、值类型、约束模块)表示对类型的定义;其他类型的模型元素(例如:组成部分属性、值属性、约束属性)代表那些类型的实例。
模块的注释是带有元类型<block>的矩形,后面是名称分隔框中的名称,如下图所示。必须显示模块的名称分隔框(一个分隔框如下图所示的一个矩形)通常会显示另外的可选分隔框(如组成部分、参考、值、约束、操作、接受、标准端口、流端口、完整端口、代理端口、流属性、结构等)
可选分隔框会显示模块的特性,特性有两种:
- 结构特性(也称作属性)
- 行为特性
3.2 结构特性
结构特性种类
模块可以拥有五种结构特性(也叫做属性):
- 组成部分属性
- 引用属性
- 值属性
- 约束属性
- 端口
1 组成部分属性
组成部分属性代表模块内部的结构,即模块是由组成部分属性构成的
模块的组成部分分隔框中列举一个组成部分属性时,以如下形式展现:
“<part name> : <type> [<Multiplicity>]”
- 其中组成部分名称(part name)由建模者定义,类型(type)一般是在系统模型某处创建的模块的名称
- 多重性(Multiplicity)是一种约束,限制复杂对象中组成部分属性的实例数量。单个整数或者一系列整数表示(多重性一般默认为1)。若想要一个组成部分属性代表任意数量的实例,可以把多重性设置为0…*,也就是“0或者多个”。或者,把多重性设置为*,那是0…*的缩写。
如下图所示,右边的图是通信和数据处理子系统。primaryComputer有一个实例,作为主要计算机的角色;backupComputer有一到两个实例,作为备份计算机的角色
2 引用属性
引用属性代表模块外部的一种结构,引用属性可以大概描述为“需要”的关系;带有引用属性的模块因为某种目的需要那个外部结构,或者是为了提供一种服务,或者为了交换事件、能量或者数据。
在模块的引用分隔框中列举一个引用属性的时候,会以如下形式展现:
“<reference name> : <type> [<Multiplicity>]”
- 引用名称(reference name)由建模者定义
- 类型(type)一般是在系统模型某处创建的模块或执行者的名称
- 多重性(Multiplicity)是引用属性能够表示的实例的数量限制。
如下图所示,左边的图是电子电力子系统,拥有名为cdhs的引用属性,表示该系统的实例只需要一个通信和数据处理子系统(以满足其设计)
3 值属性
值属性可以代表一个数字(某种类型)、一个布尔值或者一个字符串。当和约束属性结合的时候,值属性会特别有用,那样可以构建系统的数学模型。
在模块的值分隔框中列举一个值属性的时候,会以如下形式展现:
“<value name> : <type> [<Multiplicity>] = <default value>”
- 值的名称(value name)由建模者定义。
- 类型(type)必须是已在系统模型中某处创建的值类型的名称。
- 多重性(Multiplicity)是值属性能够持有的值的数量的限制。
- 默认值(default value)是可选信息,代表它所属模块的实例第一次创建的时候赋予值属性的值。
- 某些值属性会持有赋予的值,其他会持有从系统模型中其他值属性继承(计算)得到的值。为了表示一个值属性是继承得来的、需要在它的名称之前放置一个斜杠(/)。
如下图所示,DellSat-77有多个值属性。eventTimes有任意多个Timestamp值,Timestamp值类型存在于模型层级关系的某处
4 约束属性
约束属性一般代表一种数学关系(一个等式或者不等式),它会使用一系列值属性。在这里所需要的模型精确度要比大多数建模项目所需要的都高。
在模块的约束分隔框中列举一个约束属性的时候,会以如下形式展现:
“<constraint name> : <type>”
- 约束名称(constraint name)由建模者定义
- 类型(type)必须是已在系统模型某处创建的约束模块的名称。
- 创建它是为了封装可重用的约束表达式
如下图所示,有一个名为Sufficent Meomory的封装模块,其中封装了表达式:memoryCapacity >= dataPerorbit *3
这个约束模块作为飞行计算机模块中的约束属性sm的类型,来限制memoryCapacity和dataPerorbit必须那个数学关系,如下图所示:
5 端口
基本介绍
端口是代表结构边缘不同交互点的一种属性,通过那些点外部实体可以和那个结构交互——或者是提供服务,或者是请求服务,或者是交换事件、能量和数据。当建模者为模块添加端口的时候,结构的内部实现会对客户端隐藏。
Sysml v1.2定义了两种端口:
- 标准端口。指定一个交互点,关注模块提供或请求的服务
- 流端口。指定一个交互点,关注能够流入、流出模块的事件、能量、或者数据的类型
- Sysml新版本不再支持这两种端口
标准端口
详细介绍
标准端口是模块在边界交互点上提供或者请求的服务(行为)的模型。如下图所示:
- 标准端口表示为模块边界上的小方块;
- 标准端口是建模者定义的名称,以字符串形式显示在标准端口旁边(可能在模块边界之内,也可能在之外)
- 标准端口可以拥有一种或多种类型,类型是赋予的接口(如图中的Power Generation、Status Reporting)
接口
接口是对元素的一种定义:它定义了一系列操作和接收信息
如下图所示,名称须带有关键字<<interface>>,在第二个和第三个分隔框中显示它的操作信息和接收信息。
(1)提供接口
提供接口使用圆形标识,并且和标准端口连接。提供接口的模块必须实现接口所有操作和接收信息。如下图所示,通信和数据处理子系统模块提供了状态报告接口,而该子系统必须实现接口的两个操作和两种接收信息
(2)请求接口
请求接口使用槽状的标识,并且和标准端口连接。请求接口的模块不要求系统操作必须有所有的操作和接收信息。如下图所示,电子电力子系统模块需要请求状态报告接口,则该子系统可以调用接口的任意多个操作或任意多个接收信息,不要求所有
流端口
Sysml提供两种流端口:非原子流端口和原子流端口
(1)非原子流端口
当需要为通过端口流入或流出的多种项目类型建模时,添加非原子的流端口,如下图所示:
- 流端口会显示为在模块边界的小方块
- 流端口有建模者定义的名称(如:dataOut,dataIn),名称也拥有类型,格式为:名称:类型,类型必须是在系统模型某处创建的流类别的名称
流类别
流类别是对元素的一种定义,定义了一系列能够流入、流出非原子端口的流属性。
流属性的格式如下:
“<direction> <name>: <type>”
- 方向可以是in、out或者inout
- 名称由建模者定义
- 类型必须是创建的值类型、模块或者记号的名称
如下图所示,这是一个Housekeeping Data流类别
如下图所示,有图的飞行计算机模块有Housekeeping Data流类别,表示温度和电压可以传入飞行计算机的实例中;电子电力子系统模块有Housekeeping Data流类别,但有波浪线~,代表数据流出
(2)原子流端口
当需要为通过端口流入或流出的单一类型项目建模时,添加原子的流端口
如下图所示,图中小方块的箭头表示流端口的方向,原子流端口的类型必须是创建的值类型、模块或者记号的名称
3.3 行为特性
基本介绍
SysML提供了两种类型的行为特性:操作(operation)和接收(reception)。可以为模块添加操作和接收特性,表达系统或结构的行为。
1 操作
操作表示一种调用后执行的行为,即操作是由调用事件触发的。
在BDD 中把操作表示为模块操作分隔框中的字符串:
“<operation name> (<parameter list> ) :<return type>[<multiplicity>]”
- 操作名称(operation name)是由建模者定义的。
- 参数列表(parameter list)是由逗号分隔,拥有零个或多个参数的列表。每种参数的格式都会简短显示。
- 返回值(return type)(如果有)必须是在系统模型中某处创建的值类型或者模块的名称。
- 多重性(multiplicity)会约束操作完成时能够给调用方返回类型的实例的数量。
参数列表中的参数代表操作的输入和输出。列表中的每个参数都会以下面的格式显示:
“<direction> <parameter name> : <type>[<multiplicity>]=<default value>”
- 方向(direction)可以是in、out或inout。
- 参数名称(parameter name)是由建模者定义的。
- 类型(type)必须是在模型某处存在的值类型或者模块的名称。
- 多重性(multiplicity)会约束参数能够代表的类型实例的数量。
- 当操作被调用时,如果没有指定一个值作为参数,则赋予参数默认值(default value)
如下图所示,分别是通信及数据处理子系统和电子电力子系统。操作的一个例子是processCommand。这个模型表示的是客户端调用通信和数据处理子系统来执行该操作,其中,客户端可以传递给操作一个或多个命令作为输入,操作完成后,会返回状态值
2 接收
接收代表一种行为,当客户端发送信号来触发的时候,模块就会执行这种行为,即接收是由信号事件触发的。
在BDD 中把接收表示为模块接收分隔框中的字符串:
“ <<signal>><reception name>(<parameter list> ) ”
- 关键字<<signal>>必须总是作为接收名称(reception name)的前缀。
- 接收名称必须与模型中触发它的信号名称匹配。
- 只要有必要,在参数列表(parameter list)中可以显示任意多个参数
列表中的每个参数都会以下面的这样格式显示:
“<parameter name> : <type>[<multiplicity>] =<default value>”
- 参数名称(parameter name)是由建模者定义的。
- 类型(type)必须是在模型某处存在的值类型或者模块的名称。
- 多重性(multiplicity)会约束参数可以代表的类型实例的数量。
- 如果在信号相关属性中没有提供任何值,那么默认值(default value)就是赋予参数的值。
如下图所示,有一个名为AnalogTempDataSampled的信号。这个信号有两种属性:temp(类型是摄氏度)和time(类型是Timestamp)。客户端在系统操作过程中,生成这个信号的实例,为这两个属性提供值,然后,客户端可以把信号示例发送给接受它的目的地(下图的通信和数据处理子系统)
4 模型间的关系
模型的三种关系
模块之间可以存在三种主要类型的关系:关联、泛化和依赖
4.1 关联
基本介绍
引用属性代表模块外部的结构,即模型需要与之连接的结构;组成部分属性代表模型内部的结构,即构成模型的结构。
引用属性和组成部分属性在模块之间创建并在BDD中显示的两类关联相关:引用关联和构成关联。
1 引用关联
BDD中引用关联的标识法是两个模块之间的实线。如果一端有箭头表示单向的访问,如果两端都没有箭头则表示双向访问(箭头端为被访问端)
如下图所示,引用关联是一种电力电缆。从图中可以看出一些规则:
- 可以选择在线的中间位置显示关联的名称
- 可以选择在线的任一端显示角色名称和多重性
- 关联名称是由建模者定义的字符串,描述能够存在于两个模块的实例之间的关联类型
其中,图中下面的BDD显示的是同一模型的等价视图,只是它使用的是引用分隔框标识法,而不是引用关联。
如下图所示,飞行模块中有多个引用属性,则需要绘制多个引用关联。
- 注意:这幅图同时使用了分隔框标识法和引用关联,一般情况下是不需要同时使用的
2 组合关联
两个模块之间的组合关联表示结构上的分解。组合端的模块实例由一些组成部分端模块的实例组合而成。BDD中组合关联的标识法是两个模块之间的实线,在组合端有实心的菱形。
如下图所示:
- DellSat-77 Satellite是组合端,其余四个模块都是组成部分端模块,这说明DellSat-77卫星由一个电子电力子系统、一个高度及轨道控制子系统、一个环境控制子系统以及一个通信和数据处理子系统构成。
- 组合端的多重性的上限必须总是1;多重性的下限可以是0或者1。下限为0表示组成部分可以从组合结构中移除;下限为1表示不能移除
- 在组成部分端有箭头表示从组合端对组成部分的单向访问,如果没有箭头则表示双向访问
如下图所示,模块可以拥有相同类型的多个组成部分的属性
4.2 泛化
泛化:表示两种元素之间的继承关系
- 一个更加一般化的元素,叫做超类型
- 一个更具体的元素,叫做子类型。
如下图所示:
- 泛化的标识法是一条实线,在超类型的一端带有空心的三角箭头
- 泛化是可传递的。泛化表示子类型会继承超类型的所有特性:结构特性和行为特性。子类型还可能拥有超类型所不具备的其他特性。例如,星球地图仪(Star Mapper)是一种星球传感器(Star Sensor),星球传感器(Star Sensor)是一种传感器(Sensor),所以星球地图仪(Star Mapper)是一种传感器(Sensor)
4.3 依赖
依赖意味着:模型中的一种元素,客户端,依赖于模型中的另一种元素,提供者。依赖表示当提供者元素发牛改变时、客户端元素可能也需要改变。
如下图所示:
- 依赖在BDD中:标记是带有箭头的虚线,箭头方向从客户端指向提供者。
- 表示这个子系统模型依赖于接口,接口发生改变,模型也需要改变
5 执行者
执行者代表某人或者某件事物,它拥有系统的外部接口。执行者的名称表示人、组织或者其他系统在与你的系统交互时所扮演的角色
如下图所示:
- SysML为执行者定义了两种标识法:一种是火柴人,一种是在名称前面带有关键字<>的矩形。
- 建模者通常会采用火柴人图形标识法来代表人,矩形标识法来代表系统
当执行者涉及泛化、引用关联以及组合关联这些关系的时候,所有关于那些关系的关键点也全部适用。但有两条约束:
- 无法在执行者和模块之间定义泛化
- 执行者不能拥有组成部分
6 值类型
值类型也是一种定义元素———般会定义一种数量类型。在SysML 中有两种值类型——布尔型和字符串型
值类型可以作为结构化特性的值属性出现,也可以在下述情况出现:
- 模块或者执行者的原子流端口
- 流规格中的流属性
- 约束模块中的约束参数
- 连接器上的条目流(项目流)和条目属性
- 操作的返回值
- 操作和接收的参数
- 活动中的对象节点、固定点和活动参数
在系统模型中定义三种值类型——原始值类型、结构值类型和枚举值类型。
(1)原始值类型
原始值类型没有任何内部结构(它不拥有任何值属性)。它的标识法是名称前带有元类型<<valueType>>的矩形,SysML定义了四种原始值类型:String、Boolean、Integer 和 Real。
- 注意:可以定义自己的原始值类型作为四种原始值类型的特殊情况
(2)结构值类型
它的标识法是名称前带有元类型<<valueType>>的矩形,结构值类型拥有内部结构:一般是两种或多种值属性。Sysml定义了一种结构值类型:Complex,有两个值属性:realPart和imaginaryPart,其都是Real类型。
(3)枚举值类型
通常叫做枚举,定义一系列数值(有效的值)。若一项操作的参数的类型是枚举,则它所持有的值必须是枚举值中的值
例子
如下图所示,BDD定义了CommandKind枚举,将其作为名为buildCommand操作中名为kind的输入参数的类型,当客户端调用这个操作,有效值只能是Stored和Real-Time
7 约束模块
约束模块也是一种定义元素——它定义了一种布尔型的约束表达式(结果要么是true要么是false的表达式),在约束模块中定义的约束表达式是一个等式或者不等式:用来约束模块的值属性的数学关系
如下图所示:
- 约束表达式中的变量叫做约束参数
- BDD中约束模块的标识法是名称前面带有元类型<<constraint>>的矩形
- 约束表达式在约束分隔框中总是会显示在大括号{ }之间
- 约束表达式中的约束参数会分别列在参数分隔框中
该模型表示Hohmann Transfer定义了一个约束表达式,它由两个更简单的约束表达式组成。即约束模块Hohmann Transfe由约束属性ttof和tos组成
8 注释
注释是一种模型元素。它包含唯一的属性:一段文字(注释体)。建模者可以在注释体中传递任何需要的信息,还可以选择在图中把注释附加给其他元素,以提供关于它的额外信息。可以在所有九种SysML图中使用注释
如下图所示:
- 注释的标识法通常是一个笔记符号:一个矩形,右上角有折角
- 可以使用虚线把注释附加给其他元素