本章描述需要建模行为的概念根据流的输入、输出、和控制使用一个活动图。活动图类似与传统的功能流程图,但有许多附加的特征来精确说明行为。活动可以描述行为不需要显式引用职责是执行行为的结构元素。可选的是,活动可以描述一个系统或它的组件行为被执行通过特定模块或组成部分。
在SysML中,一个活动是一种描述行为的形式化方法,通过一个受控的动作序列说明输入到输出的转变。在SysML中,活动图是建模基于流行为的主要表示方法并类似于已经被广泛使用对应建模系统行为的功能流程图。活动提供增强功能在传统的功能流程图上,诸如,表示它们关系的功能到系统的结构方面(例,模块,组成部分),和建模连续流行为的能力。活动的一个选择子集的语义是非常精确的能使它们被执行通过一个执行环境[39]。
动作是活动的构建模块,并描述活动如何执行。每个动作可以接收输入并生成输出称为令牌。令牌被放置在输入和输出缓冲上,称为引脚,直到它们被准备就绪将被消耗。这些令牌可以对应到流中的任何事物,诸如,信息或物理项(例,水)。尽管动作是叶子节点或活动行为原子层次,动作的一个特定类是调用动作,可以调用其它活动,其被进一步分解到其它动作。以这种方式, 调用动作可以用来将活动组合成活动层次结构。
对象流的概念描述输入和输出项在动作之间如何流动。对象流可以连接一个动作的输出引脚到另外一个动作的输入引脚,来传递令牌。流可以是分离的或连续的,其中连续续流表示的情形是,令牌之间的时间间隔有效为0。动作之间的对象令牌复杂的路由可以被指定通过控制节点。
控制流的概念提供附加的约束关于动作何时和以什么顺序在一个活动内部将执行。一个控制令牌在一个输入控制流上使能一个动作开始执行, 当一个动作完成它的执行并且一个控制令牌被提供在一个输出的控制流。当一个控制流连接一个动作到另外一个,动作在控制流的目标终点不能启动,直到原始动作已经完成。控制节点,诸如,连接(join)、分叉(fork)、决定(decision)、合并(merge)、初始(initial)、和最终(final)节点,可以被用来控制令牌的路由来进一步指定动作序列。
信号的发送和接收是一种机制对应活动执行在不同的模块语境之间的通讯,和对应处理事件,诸如,超时。信号有时被使用作为一个外部的控制输入来初始化一个动作在一个活动内部,其已经被启动。
流引脚允许新的令牌流入并生成一个动作输出,当它执行时,其中非流引脚仅接收并生成令牌在开始和终止执行时。活动也包含更高级的建模概念,诸如,扩展到流语义来处理中断、流量、和概率。
SysML提供一些机制来关联活动到执行它们的模块。活动分区被使用来划分动作在一个活动中根据有责任来执行它们的模块。
可选的是,活动可以被指定作为一个模块的主要行为,描述模块的输入和输出如何被处理。活动也可被指定作为模块的一个操作的方法,也即调用对应那种操作一个服务请求的结果。当一个模块的行为被指定使用一个状态机时, 当状态机在状态之间转变时活动常常被使用来描述模块的行为,或模块处于一个特定状态的行为。
在SysML中,其它传统的系统工程功能表示方法也被支持。活动可以表示在模块定义图上来显示活动层次类似于功能层次。活动图也可以被使用来表示增强的功能流程框图(EFFBDs)。
用来描述活动的主要图被称为活动图(activity diagram)。活动图定义动作在活动中伴随它们之间的输入、输出和控制。完整的标题对应一个活动图如下:
act [model element type] activity name [diagram name]
活动图对应的图的类型为act,和模型元素类型可以是一个活动或控制操作符。
图9.1显示一个活动图对应活动Log On带有一些基础活动图标志。Log On包含调用其它活动的动作,诸如,动作a2调用Read User Data活动。动作有输入和输出引脚,显示为小的矩形。引脚描述动作如何接收令牌,可以表示信息单元、事物、或能量。引脚被连接使用对象流和控制流(分别用实线和虚线)。活动图的符号被显示在附录表A.14 到 A.17。
图9.2显示一个活动层次的例子,可以表示在一个模块定义图上。活动层次提供一个显示在活动图的动作和调用活动的可替代的视图;然而,它不包含动作之间的流和其它活动构件,诸如,控制节点。结构的层次被显示使用来自父活动的组合关联,在这种情况下Generate Video Outputs与其它活动,诸如,Process Frame。在关联上有功能名称,诸如,a2,对应于在活动图中调用活动的动作的名称。来显示活动层次在模块定义图的符号被描述在附录,表A.9。
正如先前描述的,一个活动分解成一组动作集,其描述活动如何执行和转变它的输入到输出。在SysML中,有一些动作的不同分类描述在本章中,但本节提供所有动作的基本行为的一个总结。SysML 活动是基于令牌流语义关联到Petri-Nets[42,43]。令牌持有输入、输出、和控制的值,流动从一个动作到另外一个。动作的过程令牌位于它的引脚上。一个引脚作为一个缓存,其中一个动作输入和输出的令牌可以被存储优先于执行;令牌在输入引脚上被消耗,处理通过动作,并放置在输出引脚上被其它动作接收。
图9.1一个例子活动图
图9.2一个活动层次在一个模块定义图中的一个例子
每个引脚有一个多重性,描述令牌的最小和最大数目,动作消耗或生成令牌在任何一次执行中。如果一个引脚有一个最小多重性为0,随后它是可选的,标记通过关键字optional在书名号中。否则,它被认为是需要的。
动作标志变化依赖于动作类型,但典型的,它是一个带有圆角的矩形。引脚标志是小的盒子紧贴动作标志的外表面和可以包含箭头说明是否引脚是一个输入或输出。一旦一个引脚被连接到一个流和流的方向变得明显,箭头符号在引脚中的可以被忽略。
图9.3显示一个典型的动作,称为a1带有一组输入和输出引脚集。一个输入引脚和一个输出引脚被需要。也即是,它们有一个最低的多重性绑定大于0。其它两个引脚是可选的;也即是,它有一个多重性下限为零的绑定。动作也有一个输入的控制流一个输出的控制流;参考第9.6节获取控制流的一个详细描述。当令牌在它需要的输入上是可用的时,包含它的控制输入,一个动作将开始执行,如下面所述。
图9.3 一个动作带有输入和输出引脚和输入和输出控制流
下面的规则汇总动作开始和结束执行的需求:
对象和控制令牌被路由使用控制节点,其可以缓存、拷贝、和删除令牌。获取更多信息,参考第9.5节的对象流和第9.6节的控制流。
先前的段落描述动作的基本语义,但下面的附加语义被讨论在本章的后面:
模块的语义和活动之间的关系被讨论在第9.11节。
活动提供动作执行的语境。活动被使用,和更重要的是重用,通过调用动作。调用动作允许活动组合进任意深的层次,其允许一个活动建模的规模从简单的功能描述到非常复杂的算法和过程。
活动可以有多个输入和多个输出称为参数。注意这些参数与第8章的约束参数不同。每个参数可以有一种类型,诸如,一个数值类型或模块。数值类型的范围从简单的整数到复杂的向量并可以有相应的单位制和数量类型。参数也可输入一个模块,其可以对应一个结构实体,诸如,水流或一个汽车零件流动通过一条装配线。参数有一个方向,可以是in或out或两者。
参数也有一个多重性,说明对应这个参数的令牌数目可以被消耗作为输入或生成作为输出通过活动的每次执行。多重性的下限说明令牌的最小数目,其必须被消耗或生成通过每次执行。正如使用引脚,如果下限是大于0的,随后参数被称为是必须的;否则,它被称为是可选的。多重性的上限指定令牌的最大数目,其可以被消耗和生成通过活动的每次执行。
活动参数被表示在一个活动图使用活动参数节点(activity parameter nodes)。在一个活动执行过程参数节点包含令牌,其持有的变量对应它的参数。活动参数节点被关联到精确的一个活动的参数,并且必须有相同的类型同它对应的参数。如果一个参数被标记作为inout,随后它需要至少2个活动参数参数节点与它关联,一个对应输入和另外一个对应输出。
一个参数可以被设计作为流或非流,其影响相应的活动参数节点的行为。一个非流的活动参数节点的输入参数可以仅接收令牌先于启动活动的执行,和活动参数节点对应一个非流输出参数可以仅提供令牌,一旦活动结束执行。这种对比与一个流参数,其中相应的活动参数节点可以持续来获取流输入令牌或生成流输出令牌贯穿于活动执行。流参数添加明显的灵活性来表示一定类型的行为。参数有许多其它特征描述在本章的后续部分。
活动参数节点标志是矩形,其跨越活动框架边界。每个标志包含一个名称字符串,由参数名称、参数类型、和参数多重性组成,因此:
parameter name: parameter type[multiplicity]
如果没有多重性被显示,随后多重性“1..1”被假定。一个可选的参数被显示通过关键字«optional»在活动参数节点中的名称字符串上面。相反的,关键字«optional»的缺乏说明,参数被需要。
参数的额外特征,诸如,它的方向和是否它是流, 被显示在括号中或在参数节点标志内部,在名称字符串之后或浮动紧邻标志。
没有特定的图形化符号来说明一个活动参数节点的方向在它的标志上,尽管参数的方向可以被文本性的显示在标志内部。一些建模指导建议输入参数节点被显示在活动的左侧和输出参数节点在右侧。一旦活动参数节点已经被连接通过流动到节点在活动内部,活动参数节点方向被隐含的定义通过对象流上的箭头方向。
图9.4显示Operate Camera活动的输入和输出,其是摄像头的主要行为。正如可以被查看从参数节点上的符号, Light来自摄像头的环境是可用的作为输入使用current image参数和两个视频信号类型被生成作为输出使用composite out和MPEG out参数。这个输入参数config被使用来提供摄像头的配置数据,当它启动时。
活动消耗一个输入并生成输出流,正如它执行时,正如说明通过{stream}注释符号在主参数节点上。其它参数config,由于它有一个单一值不是流,当活动开始时其被读。正如前面陈述的,当多重性没有显示,例如,在参数config上,这说明一个的一个下限和上限。其它参数是流和没有明确的最小数目的令牌消耗或生成,所以它们被显示作为«optional»。
图9.4 指定一个活动使用一个框架在一个活动图中
最重要的活动类型是调用行为动作(call behavior action),其调用一种行为当它执行时。调用行为被假定为本章中的一个活动, 尽管它可以是其它类型的SysML行为。一个调用行为动作有一个引脚对应调用行为的每个参数,和在调用行为中,那些引脚的特征必须匹配它们相应的参数的多重性和类型。一个引脚的名称字符串有相同的形式正如名称字符串对应一个活动参数节点标志,但浮动在引脚标志的外部。
如果一个活动参数在调用活动上是流,随后相应引脚在调用行为动作上也有流语义。正如前面陈述的,令牌在非流引脚上,诸如,那些显示在图9.3,可以仅可用于动作对应过程在动作执行开始时(在输入引脚的情形下)或在动作执行终止时(在输出引脚的情形下)。通过对比,令牌持续将是可用的通过流引脚,而它们拥有的动作被执行,尽管令牌数目的消耗或生成通过每次执行是一直受控的通过它的多重性的上限和下限。作为一个结果,通常合适的来定义一个无限制的上限对应参数。
引脚的名称字符串可以包含相应参数的特征,诸如,流。一个可选的符号对应一个流引脚是阴影引脚标志。
调用行为动作标志是一个圆角盒子,包含一个名称字符串,带有动作的名称和称为行为的名称(例,活动),分隔通过一个冒号如下:
action name : behavior name
默认的符号正好包含动作名称没有冒号。当动作被显示但是没有命名的,冒号被包含到区分这个符号与默认的。在调用行为动作符号的右下角的一个前角符号表示在另一个图中所描述的活动被调用。
为了传输光进视频信号, Operate Camera活动调用其它活动,其执行多个子任务使用调用行为动作,正如显示在图9.5。动作命名字符串采用形式:Activity Name说明动作没有名称。参数节点和引脚是可选的,在这种情况下由于相应动作可以开始执行即使它们没有令牌。这个图正好显示活动参数节点和动作带有它们的输入和输出。注:引脚的类型在这里被省略为了减少混乱。
所有调用的活动消耗和生成流的输入和输出令牌,正如说明通过{stream}注释在动作的引脚上。Collect Images是一个模拟过程执行通过摄像头镜头。Capture Video数字化图像从外部世界到一种形式的视频输出。Generate Video Outputs采用内部视频流和生成MPEG,并组合输出对应传输到摄像头的用户。
对象流路由输入、输出令牌,令牌表示对象节点之间的信息和/或物理项。活动参数节点和引脚是对象节点的两个例子。对象流可以被用来路由项从在一个活动的边界上的参数节点到/从它的组成动作上的引脚,或直接连接引脚到其它引脚。所有情况下,对象流的方向必须与它的终点的对象节点的方向(即,in或out)是兼容的,和对象节点的类型在两个对象流的终点必须是相互兼容的。
图9.5 在一个活动图中调用动作
连接源和目标之间的数据流动的对象流,有一个指向目标的箭头。处于两个引脚之间的一个对象流,引脚有相同的特征。可选的号可以被使用,引脚标志在动作上在对象流的两个终点被隐藏和替换通过一个单一的矩形标志,特别被称为一个对象节点标志。在这种情况下,对象流连接原始动作到对象节点标志带有一个箭头在对象节点标志终点,和随后连接对象节点标志到目标动作,带有一个箭头在目标终点。对象节点标志有相同的注释作为一个引脚标志,由于它实际表示在源和目的动作的引脚。
图9.6 连接引脚和参数使用对象流
在图9.6中, Operate Camera的子活动显示在图9.5,现在被互联通过对象流来建立流从光进入摄像头到视频图像输出以两种需要的格式。进入的光表示通过参数称为current image流进Collect Images动作;它的输出captured image是Capture Video的输入(注:这个对象节点使用一个矩形标志)。Capture Video生成视频图像,通过它的video out引脚, 其依次变成Generate Video Outputs的输入。Generate Video Outputs转换它的输入视频信号到MPEG和组合输出,被随后路由到相应的Operate Camera的输出参数节点。
在图9.6,动作没有名称,其被表示通过一个冒号存在在动作标志的名称字符串。参考图9.8 获取其中动作被命名的一个例子。
有许多情况,其中简化的链接对象节点使用对象流不允许一个令牌的流的充分的描述通过活动。SysML提供一种数字机制对应数量的表示对应路由流。首先,每个对象流可以有一个看门狗表示,其指定一个规则来控制那个令牌是有效对应对象流。此外,有一些构件在SysML活动中,称为集体的控制节点,其提供更便利的流机制,包含:
连接节点的默认的行为可以被重载通过提供一个连接规范,其指定一个逻辑表达式,令牌在输入流上的到达必须满足来在输出流上生成一个输出令牌。
决策节点可以有一个随后的决策输入行为,被使用来评估每个输入对象令牌。它的结果可以被使用在看门狗表达式中。
分支和连接标志被显示作为实心棒,通常水平或垂直分布。决策和合并标志被显示作为钻石标志。其中分支和连接、或决策和合并、是相邻的 (即,会被连接通过只是一个流没有看门狗),它们可以被显示作为一个单个标志都连接到那个标志带有输入和输出。图9.12,在本章的后续部分中,包含一个组合合并的例子和决策节点。
连接规范和决策输入行为被显示在注释上附着到相关的节点。
图9.7显示一个连接规范的例子。连接节点有三个输入流:flow 1、flow 2和flow 3和连接规范陈述如果输入令牌被接收在flow 1和flow 2上或在flow 2和flow 3上时,输出令牌被生成。表达式使用流名称,所以在这种情形中流必须命名。另外一种流名称的使用是流分配(第14.7节)。图9.12显示一个决策输入的一个例子。
图9.7 一个连接规范的例子
在图9.8, Generate Video Outputs活动接收一个输入视频信号并输出它到对应外部的使用的合适的格式,在这种情况下是Composite视频和MPEG4。如果期望,a1:Produce Test Signal动作允许Generate Video Outputs生成一个测试信号。参考Produce Test Signal规范在随后图9.14中,来了解活动如何知道何时生成信号。测试信号,当生成时被合并到视频帧的流使用一个合并节点,并且这些合并的流随后被转换到视频帧通过a2:Process Frame。注:如果令牌被生成在input signal参数节点和test signal引脚上,随后它们将被交错成raw frames引脚通过合并节点。也即是期望的行为在这种情况下,但如果不是,随后附加的控制,诸如,一个特定的测试模型,会被需要来确保,传入的令牌流是唯一的。
图9.8 调用之间的对象流路由
一旦过程继续,令牌表示过程框架被随后分叉和提供到两个独立的动作:a4:Convert to Composite生成composite out和a3:Encode MPEG其生成MPEG输出。这两个动作可以执行以并行方式,每个消耗表示帧的令牌和执行一个适合的转变。注:分支节点不意味着,帧数据被拷贝(尽管它们可以是),但仅仅a3:Encode MPEG和a4:Convert to Composite有权限获取数据通过它们的输入令牌。
在这个例子中,调用行为动作的名称字符串包含动作名称和活动名称,当可以说动作不需要命名。这帮助来演示映射从这个活动图的活动到模块定义图上相同的活动表示在图9.26在第9.12.1节。
活动的参数可以被分组进参数集(parameter sets),参数集中所有的输入或输出参数必须是参数成员。当活动有输入参数集时,对应参数集的参数节点最多一个输入参数集上可以有令牌。当活动有输出参数集,参数节点对应最多一个输出参数集可以包含令牌。一个给定的参数可以是多个参数集的一个成员。
每个参数集在活动的外部边界上被显示通过一个矩形,这部分封闭的参数节点集,对应参数在集中。这些矩形可以重叠来反映参数集的重叠成员。
图9.9显示一个活动称为Request Camera Status使用两个明显的输出集。表示使用一个camera number作为输入, 如果摄像头有一个问题时,Request Camera Status将输出一个参数集包含一个error和diagnostic,如果摄像头是可选的Request Camera Status将输出一个参数集包含一个power status和一个current mode。
图9.9 带有参数集的一个活动
如果一个调用活动有参数集,随后引脚的分组对应不同的参数集被显示在调用行为动作上使用类似的符号表示活动上的参数集。
图9.10显示对象流对应一个Handle Status Request活动,其输入一个camera id并写一个camera status,它调用Request Camera Status使用一个输入camera number并对应两个输出参数集,每个参数集包含2个参数: 一个参数集对应一个error和一个diagnostic,另一个参数集对应一个power status和一个current mode。这两个输出集被使用通过两种不同的字符串格式函数 Create Error String和Create Status String。无论哪一个格式化函数接收输入都会生成一个输出字符串,也即是随后通过一个合并节点传递到camera status输出参数节点。
图9.10 调用一个活动使用参数集
引脚和活动参数节点是两个最通用的对象节点的类型,但也有例外的情形,当需要额外的构件时。中央缓存节点(central buffer node)提供一种存储对象令牌的方式在引脚和参数节点的外部。令牌流进一个中央缓存节点和被存储直到它们再次流出。当一个单一令牌的缓冲流在同一时间有多个生产者和消费者时中央缓存节点被需要。与此相反,引脚和活动参数节点,其中有一个单一的生产者或单个消费者对应每一个令牌。
有时,活动要求在执行过程中存储用于访问的相同的对象令牌的一种类型的对象节点称为数据存储节点(data store node)可以被使用对应这一点。不像一个中央存储节点, 一个数据存储节点提供存储的令牌的副本,而不是原始的。当一个输入令牌表示已在存储中的对象时,它会覆盖先前的令牌。数据存储可以提供令牌当接收动作被启用的,因此支持传统的流程图将语义。数据存储可以提供令牌当一个接收动作被启用时, 从而支持传统流程图的拉动语义。
当它们的父活动执行时,数据存储节点和中央缓存节点仅存储令牌。如果令牌值需要更持久的存储,随后一个属性被使用。可以被用来读和写属性值的基本的动作,描述在第9.14.3节。
数据存储节点和中央缓存节点都被表示通过一个带有一个名称字符串的矩形,使用关键字«datastore»和«centralBuffer»在名称字符串上面。它们的名称有相同的形式同引脚:buffer or store name: buffer or store type,但没有多重性:一个中央缓存节点例子被显示在图9.19在。
图9.11描述Capture Video活动的内部行为。光线进入摄像头镜头被聚焦通过活动Focus Light,其生成一个图像也即被存储在一个数据存储节点称为current image。图像存储在current image随后被使用通过2个其它活动:Convert Light抽样图像来生成视频帧和Adjust Focus分析当前图像对应锐度和提供一个focus position to Focus Light。一个数据存储节点的使用这里促进转变来自镜头的输入光的模拟本质和视频流的数字本质之间。(参考图9.17在流9.9.1子节对应这个图的一个增强版本,包含流量信息。)在这种情况下,数据存储可以被分配到摄像头的焦平面阵列伴随:Convert Light动作(参考第14.7节获取分配的一个描述)。
图9.11使用一个数据存储节点来捕捉入射光
对象节点标志称为focus position被输入到Focus Light,是否Convert Light和Adjust Focus接收它们的输入从一个数据存储节点。用于表示的流的对象节点表示的符号和缓冲节点的表示是非常相似的,但缓存节点一直有关键字«datastore»或«centralBuffer»在它们名称上面。
第9.9.2和9.9.3节讨论其它机制来指定令牌流使用数据存储和中央缓存节点,以及其它对象节点。
正如先前提及的,有与对象流相关的控制语义,诸如,当一个动作等待最小数量的令牌在所有输入引脚上,在进行使用它的执行之前。然而,有时对象令牌在需要的引脚上的可用性不是充分的来指定所有的执行约束在一个动作上。在这种情况下,控制流(control flows)可用来提供进一步控制使用控制令牌。尽管对象流已描述在本章的开始,一个活动的设计不需要必须的启动使用对象流的规范。在传统的流程图中,常常是控制流,其首先被建立和随后对象路由。
此外,对于任何执行预先需要的建立通过需要的输入引脚,一个动作也不能启动执行直到它接收一个控制令牌在所有输入控制流上。当一个动作已经完成它的执行时,它放置控制令牌在所有即将离开的控制流上。动作的序列可因此被控制通过控制令牌流,在使用的动作和控制流之间。
动作可以有超过一个控制流输入。这有相同的语义作为连接多个传入的控制流到一个连接,和连接输出控制流从连接到动作。相似的,如果一个动作有超过一个控制流输出,它可以被建模通过连接动作通过一个即将离开的控制流到一个分支使用多个控制流输出。正如描述在第9.6.2节,控制令牌可以被用来取消使能动作以及使能它们。
所有构件用来路由对象流也可以被使用来路由控制流。此外,一个连接节点有特定的语义关于控制令牌;即使它消耗多个控制令牌,它仅释放一个控制令牌一次它的连接规范被满足。连接节点也可以消耗一个控制和对象令牌的混合,在这种情形下,一旦所有需要的令牌已经被提供到连接节点,所有的对象令牌被提供在即将流出的流伴随一个控制令牌。
除了描述在第节9.5.1的构件,也有一些特定的构件,其提供额外的控制逻辑:
注:虽然一个初始节点可以有多个持续流出的流,一个控制令牌将仅被放置在其中的一个上。典型的看门狗被使用当有多个流,为了确保仅一个是有效的,但如果不是这种情形,随后流的选项是任意的。
控制流可以被表示或通过使用一条带有一个箭头到它的目标端的实线像一条对象流或, 为了更明显的区分它与对象流,通过使用一条虚线带有一个箭头在目标终点。
初始节点标志被显示作为一个小的实体黑圆圈。活动最终节点标志被显示作为一个“靶心,”活动的初始和最终节点的例子被显示在图9.12。
图9.12 控制流在活动中
流的最终节点标志是一个中空的圆包含一个X。图9.21包含一个流终点的一个例子。
控制台软件提供功能来驱动一个摄像头通过一个预先设置的扫描路径,正如显示在图 9.12。活动Follow Scan Route将跟随一个路由。也即是摄像头的一组位置集定义的根据平移和倾斜的角度。它有一个输入参数,route作为一个位置的固定长度集合带有尺寸route size。当启动是,活动重设它的count属性,随后迭代在路由中所有点-增加count对应每个点—并最后终止,相关的决策输入行为的返回值评估为false时(和因此满足[false],而不是[true] 看门狗)说明最后的点在路由中被到达。决策的输入条件是一个不透明的表达式用Alf语言书写 (参考第9.14.2节获取一个Alf编程语言的描述)。作为使用约束, 语言使用来指定动作可以被添加在括号中在表达式之前。Position Camera活动被调用对应每个位置令牌提供在route参数上。控制流规定在其执行活动中的顺序。
注:在这种情况下,有一个组合合并和决策标志,其接受2个输入控制流和有2个输出控制流: 一个导致到一个活动最终节点和另外一个导致到另外一个算法中的迭代。活动的count属性被初始化和增加使用动作“this.count=0;”和“this.count=this.count+1 ;”这些是不透明动作;也即是,它们的功能被表达在一些SysML的外部语言中(在这种情形 Alf)。
一个动作带有非流输入和输出典型的启动,一旦它有预先需要的输入令牌和终止执行当它完成它的输出生成时。然而,特别是如果动作是一个调用动作带有流输入和/或输出,完成行动的动作可能需要被外部控制。为了实现这一点,一个值可以通过一个控制流发送到行动,使或禁用其调用的活动。SysML提供一种特定控制枚举对应被称为控制值(ControlValue),有值使能(enable)和取消使能(disable)。对应一个动作来接收这种控制输入,它需要来提供可以接收它的一个控制引脚。一个使能的控制值有相同的语义作为一个控制令牌的到达,和一个取消使能的控制值将终止调用活动。
一个特定的行为称为一个控制操作符(control operator)生成控制值通过一个输出参数,类型化使用ControlValue。控制操作符可以包含复杂的控制逻辑并可以被重用,通过一个调用行为动作,在许多不同的活动中。一个控制操作符也能接收一个控制值在一个合适的类型化的输入参数并将对待它作为一个对象令牌而不是一个控制令牌。
控制数值类型可以被扩展在一个配置文件中(参考第15章)来包含其它控制值,除了enable和disable。控制操作符可以随后输出这些新的值。一个控制值suspend可以,例如,不终止动作的执行像disable。动作会允许执行来重新开始,其中它离开时,当它接收一个resume控制值。
一个控制操作符的定义被表示通过关键字«controlOperator» 的存在,正如模型元素 类型在图标签在活动图框架上。
图9.13显示一个简单的控制操作符,称为Convert Bool to Control,其需要在一个布尔参数中称为bool in和,依赖于它的值,或输出一个使能或取消使能在它的control out输出参数上。值被生成使用基础动作,称为值规范动作,它的目的是输出一个特定值。通过约定,这些动作的输入和输出引脚被隐藏 (参考第9.14.3节获取关于基础动作的讨论) Convert Bool to Control是一个通用有用的控制操作符,其可以被重用在许多应用中。
图9.13使用一个控制操作符来生成一个控制值
一个控制操作符是一种类型的行为和所以可以被调用使用一个正常的调用行为动作。一个调用行为动作,其调用一个控制操作符有关键字«controlOperator» 在它的名称字符串上面。一个控制引脚标志是一个标准引脚标志带有附加的属性名称control在括号中浮动在引脚标志附近。
一个测试信号不是一直需要在视频输出上。一种机制来禁止测试信号生成被显示在图9.14。Convert Bool to Control控制操作符显示在图9.13,读一个Boolean标志,test in,,从活动Receive Test Messages并使用到输出一个使能或取消使能的值在一个控制引脚称为control out。这个引脚依次被连接通过一个控制流到Generate Test Signal活动的inhibit引脚上。Generate Test Signal解释这个输入作为一个控制值,由于inhibit是一个控制引脚,正如说明通过一个符号{control}。当Generate Test Signal是使能的,它读时间以2 Hz来自一个接收时间事件动作 (参考第9.7节获取一个时间事件的讨论)。活动Receive Test Messages被定义在图9.24。
图9.14使用一个控制操作符来控制一个活动的执行
除了获得输入和生成输出使用它的参数,一个活动可以接收一个信号使用一个接收事件动作(accept event action)对应一个信号事件(通常称为一个接收信号动作)和发送信号使用一个发送信号动作(send signal action)。通讯可以随后被实现在活动之间通过包含一个发送信号动作在一个活动中和一个接收信号动作对应一个信号事件表示相同的信号在另外一种活动中。更多典型的信号被发送来自或接受通过模块的实例,其拥有和执行活动,正如描述在第9.11.2节。通讯通过发生的信号异步地;也即是,发送者不等待信号被接受者接收,在继续其它动作之前。
一个接收信号动作可以输出接收的信号在一个输出引脚上。一个发送信号动作有一个输入引脚信号的每个属性将被发送和一个输出引脚指定信号目标对应。
一个接收事件动作接收其它类型的事件,包含:
一个接收事件动作没有带输入控制流被使能只要它拥有活动(或拥有可中断区域,参考第9.8.1节)开始来执行。然而,不像其它动作,它保持使能在它接收一个事件之后和所以准备来接收其它事件。
正如SysML 1.3,接收事件动作和发送信号动作都可以行动通过端口包含内嵌端口。参考第7.6节对应端口的一个描述。一个接收事件动作可以声明,一个事件正在被接收应该发生在一个特定的端口,诸如,一个信号到达一个给定的端口。一个发送信号动作可以声明它的信号必须被发送通过一个给定端口。
一个发送信号动作被表示通过一个带有小三角的矩形附着到一个终点, 和一个接受事件动作表示由一个矩形与一个三角形的部分缺失在一个端点上。当接收的事件是一个时间事件,接收事件动作可以被显示作为一个沙漏标志(参考图9.14)。
同SysML 1.3,如果一个事件被接收通过一个端口,到端口的路径被给定作为作为接受事件动作名称的前缀格式是:«from»(portname,.)。如果一个信号将被发送通过一个端口随后到端口的路径被给定作为接收事件动作的名称字符串的一个前缀使用格式:via portname,..。
图9.15显示MPEG帧如何获得传播在整个监控摄像头网络中。Transmit MPEG活动首先发送一个Frame Header信号来说明,一个视频将随后被被发送。它随后执行Send Frame Contents,其划分帧并打包发送它们。当发送帧内容完成,它输出一个packet count并且2个信号动作被执行,一个Frame Footer信号被发送,和随后一个接收信号动作等待一个Frame Acknowledgment信号。最后 Check Transmission活动被调用,一旦Frame Acknowledgment信号已经被接收,为了检查包计数返回使用确认信号对应计数被提供作为Send Frame Contents的一个输出。如果包计数匹配,随后传输被确认已经成功和transmission OK被设置为true。这个变量被随后测试在一个决策节点传出的看门狗上,和如果true,随后活动终止;否则,早前已经存储的视频帧重新发送。
图9.15使用信号来在活动之间通讯.
有多种方式在其中在一个活动的动作中可以一起分组来获得特定的执行语义。中断区域允许一组节点执行将被中断。结构化的活动节点提供一个可选的机制到活动对应执行一组动作集带有通用的输入和输出作为一个单一的组。
当被终止时,所有动作执行在一个活动的内部被终止。然而,有一些情形当建模者需要动作的一个子集将被终止,但不是所有。
中断区域(interruptible region)可以被用来建模这种情形。可中断区域分组动作的一个子集在一个活动内部和包含对应那些动作的中断执行一种机制,称为中断边(interrupting edge),它的源是可中断区域的一个内部节点和它的目的地是外部的一个节点。控制和对象流可以都被设计作为中断边。正常(即,非中断)的流可以有一个目的地在区域外面;令牌发送在这些流上不中断区域的执行。
当一个中断区域被进入,至少一个动作在区域内开始执行。无论何时一个令牌被接收通过个中断区域的一个中断边,一个中断发生时,其离开区域。这个中断引起所有中断区域内执行的动作终止,并执行继续使用活动节点或从中断边接收令牌的节点。(它可以是超过一个节点,由于中断边可以连接到一个分支节点。)
在一个中断边上的一个令牌常常导致一个信号的接收, 如果它有一个或通过活动包含中断区域,或模块拥有活动。在那种情况下,信号被接收通过一个接收信号动作在中断区域内,其提供一个令牌在一个即将离开中断边上到一些区域外部的活动节点。有特定的语义与接收事件动作相关包含在中断区域内。只要它们没有进入中断边,接收事件动作不开来执行直到中断区域被进入,与正常的情况不同,当封闭的活动开始时,接收事件动作开始,。
一个中断区域被高亮通过绘制一条围绕一组活动节点集的圆角盒子虚线。正如在SysML v1.2中,区域的名称可以出现在区域内部, 当有多个中断区域时其是有用。中断边被表示或通过一个高亮的螺栓标志或通过一个常规的流线带有一个小的高亮的螺栓符号,浮动接近它的中央。
图9.16显示一个摄像头整体行为的一个更完整的定义, Operate Camera先前显示在图9.6。在调用Initialize活动之后,摄像头等待一个Start Up信号将被接收通过一个接收信号动作,同时处理之前,摄像头执行主要活动: Collect Images、Capture Video和Generate Video Outputs。这些被触发,紧跟Start Up信号的接收,使用一个分支节点拷贝单个的控制令牌从接收信号动作到控制流终止在每个动作上。
动作被封闭在一个中断区域和持续来执行直到一个Shut Down信号被接收通过一个接收信号动作。当一个Shut Down信号已经被接收时,一个中断的边离开可中断区域,所有的动作随着它终止,和控制转变到动作调用Shutdown活动。一旦Shutdown活动已经完成,一个控制令牌被发送到一个活动最终节点,其终止Operate Camera。注:其它流离开中断区域,但由于它们不是中断边,它们不引起它的终止。
图9.16 一个中断区域
活动在本质并发的,实际中动作执行仅控制通过对象和控制令牌的可用性。然而, 如果建模者希望来执行一组动作集在一个活动内作为一个组, SysML提供一个结构化的活动节点(structured activity node)。一个结构化的活动节点可以有一组引脚集通过它们令牌流动到和来自它的内部动作。一个结构化的活动节点, 像一个动作,不能启动直到在它的输入上达到需要的对象和控制令牌数目,当所有它的内部动作已经完成了它们的执行时,仅提供令牌在它的输出上。一个结构化的活动节点被常常用来选择一个活动,当它的动作可能将被重用在超过一种语境中。一个结构化的活动节点的结构被显示在相同的图作为拥有的活动,而一个被称为行为的内容通常是不。
有三种特定类型的结构化的活动节点:
一个节点序列是结构活动节点的最简单特定形式,仅包含一个单一的动作组。一个后继的动作在序列中不能开始来执行直到它的先前者已经完成它的执行,即使它的其它所有执行要求 (参考第9.3节)已经被满足。
一个条件节点包含一组语句,每个包含一个测试和一个体。它类似于编程语言像Java中的一个if语句,当条件节点开始来执行时,所有语句的测试被执行和如果一个测试生成一个true结果,随后它的语句的体被执行。一条语句的体可以执行;体将执行选项,如果超过一个测试生成true没有定义通过语言。然而,建模者可以指定一个对应语句的评估顺序,其允许它们来确定此类情形的输出。有一个特定的语句,称为else语句,其测试常常生成true,其将被选择对应执行,如果没有其它语句被执行。
一个循环节点包含三个小节,设置、测试和体。它类似于while和for语句在一种编程语言像C。设置在节点的入口被执行一次,设置之后, 当测试生成true时,节点的体被执行;测试可以执行在体之前或体之后。一个循环节点可以包含循环变量,类似于那些提供在C编程语言,其被获取到设置,测试和节点的体段。
一个结构化的活动节点被显示作为一个圆形的矩形带有一条虚线边界和关键字«structured»在它的名称字符串上面。没有图形化符号在SysML中对应序列,条件或循环节点;然而,FUML的动作语言(Alf),描述在第9.14.2节提供一个它们的文本语义。
在SysML中,有一个默认的假设,令牌流流流动的速度决定根据执行动作和令牌流进和流出一个对象节点以相同的顺序和使用相等的概率。SysML提供构件来处理这些假设无效的情形。
任何流参数可以有一个速率(rate)属性附着到它,其指定期望的速率,在这种速率下令牌流入和流出一个相关的引脚或参数节点。注:附着的速率符号不是指速率在一个节点变更随着时间。连续流是一个特定的情形,其说明期望的流速率是无限的,或相反令牌到达的时间是0。换句话说,一直有新到的令牌可用于读任何令牌速率。对于离散的速率,一个建模者可以指定一个速率或说明一个任意离散的速率。其中一个速率被指定,该值仅是统计的期望速率值。实际的值可以随时间变化,仅计算出整个长时间内的平均期望值。
流也可被注释使用一个持续的或分离的速率。当一个流的一个速率被提供时,它指定期望的令牌数目,每个时间间隔遍历边;也即是, 它们离开源节点和到达目标节点期望的速率。
一个持续速率被表示通过关键字«continuous»在名称字符串相应标志的上面。一个特定离散的速率被指定使用属性对rate=rate value,在括号中或在内部或浮动伴随相应标志。一个任意的离散速率被表示通过关键字«discrete»。
在图9.17,对象流在Capture Video活动中与光线相关的是连续的。Focus Light和Adjust Focus动作调用模拟过程使用连续的输入和输出,正如说明通过关键字«continuous» 出现在与那些动作相关的对象节点上,包含current image参数节点。然而,图形生成通过Convert Light动作必须被生成以速率30帧/秒,正如说明在视频输出参数节点上。
图9.17 持续流和分离流带有速率信息的使用
正如先前描述的在本章中,令牌可以排队在引脚或其它对象节点上,正如它们等待动作处理,受一个指定的上限的管制。当一个对象节点的上限大于1,建模者可以指定顺序,根据顺序令牌被读,使用节点的排序属性(ordering property),其可以采用的排序(ordered)值:先进/先出(FIFO)、后进/先出(LIFO)、或无序的(unordered)。如果顺序属性被指定作为ordered,建模者必须提供一个明确的选择行为,其定义顺序。这种机制可以被用来选择令牌基于一些值,诸如,表示的对象的优先权。
当一个提供的令牌将导致令牌的数量超过对象节点的上限时,一个建模者可以选择来重写那些已经存在的令牌,或丢弃新到达的令牌。
顺序符号的名称值对:ordering=orderung value ,放置在在括号接近对象节点或在它内部。如果没有顺序被显示,随后默认的FIFO被假定。关键字«overwrite»被使用来说明,一个令牌到达一个完整的节点,替换队列中的最后令牌根据节点的ordering属性。可选的是,关键字«noBuffer»可以被用来丢弃新到的令牌,其不能快速处理通过动作。
在适当的时候,一个流可以被标记使用一个probability来指定一个给定的令牌将遍历一个特定的流之间的可用的替代流的可能性。这是典型的遭遇在流中,出自一个决策节点,尽管概率也可被指定在多个边上将流出对象节点(包含引脚)。每个令牌仅遍历一个边,带有指定的概率。如果概率流被使用,随后所有可选的流必须有一个概率和所有流的概率的总和必须等于1。
概率显示或在活动流标志或参数集标志上,作为一个属性/值对,probability=probability value 封闭在括号中浮动在适当的标志附近。
图9.18显示对应传输MPEG的活动图,先前介绍在图9.15。在这个例子中,成功传输的概率被添加。对应成功和不成功传输的2个流,已经被标记使用它们相关的发生概率
图9.18 概率流
在活动执行上的约束被涵盖在第9.3节。本节描述附加的建模技术,其可以被用来执行详细执行约束。
当所有令牌的先决条件已经被提供在它的输入端时一个动作能执行,和相似当它提供后续的令牌在它的输出上时可以终止。然而,有时附加约束的应用,其是基于那些当前持有在执行环境中的令牌的值或条件。这些约束可以被表达使用前置条件(pre-conditions)和后置条件(post-conditions)在动作上、和在调用动作时、它们调用的行为上。
在特定的情形下,当一个对象表示通过一个令牌有一个相关的状态机的,一个对象节点可以显式的指定需要的当前状态或对象在一个状态约束中的状态。
前置和后置条件的显示依赖于,是否它们指定对应行为或动作。前置和后置条件在行为上(在这种情形的活动中)被指定作为文本字符串放置在活动框架内部,前缀通过关键字«precondition»或«postcondition»。在动作上,前置和后置条件被放置在备注标志附着到动作,使用关键字«localPrecondition»或«localPostcondition» 在备注的顶部,条件文本的前缀。
一个状态约束在一个对象节点被显示通过包含状态名称在方括号中,在标志对应对象节点的名称字符串下面。这等效于一个本地前置和后置条件在拥有的动作请求特定的状态。
尽管ACME监控系统公司不制造摄像头,它们希望对生产过程有一些要求。图9.19显示它们选择的过程。生成过程的优化路径是通过Assemble Cameras作为Package Cameras。然而,它们的经验是一些组装摄像头不能正常工作,但可以被修理并销售作为二手的,修理的成本根据原因,。
修理过程被建模作为Repair Cameras活动。一些摄像头作为不固定的,但即使随后摄像头可以被拆解对应备用件(通过Cannibalize Cameras活动)其可以反馈回装配过程。一个摄像头在生产过程中通过许多状态(参考第11章获取状态机的描述)正如它移动在生产中,和不同活动需要或提供摄像头在一个特定状态。Assemble Cameras可以快速地生成摄像头超过它们被打包或修理,所以它们被放置在一个缓存称为assembled cameras。如果它们的状态是operational,它们或直接到过程Package Cameras;否则, 如果它们的状态是damaged,它们到过程Repair Cameras。Repair Cameras接受摄像头处于damaged状态,和当活动已经完成时,它们是repaired或认为是unfixable。
图9.19使用状态在引脚上的例子
注:Build Cameras活动仅建模构建摄像头的过程,使用令牌来表示摄像头。在这个例子中,令牌流可以快速接近物理摄像头流通过一个生产系统; 例如,中央缓存阶段可以被分配到一个存储架。然而,物理生产系统可以是非常不同的, 只有当这些活动被分配给物理处理节点时,令牌流的物理意义被理解。
先前的讨论描述输入和输出引脚上的状态如何可以分别被使用来指定前置条件和后置条件。一个约束在输入和输出的关系也可以被指定,通过结合前置处理条件和后置处理条件的影响。这些约束可以,例如,表示一些即将到来燃气和温度读数之间的关系提供通过一些将离开的电信号。可选的是,这可以被用来表示与动作或活动关联的一个精度的或时间约束。约束可以被捕捉使用一个约束模块来支持详细的参数分析。
SysML 提供一种特定形式的约束,其可以被用来指定一个动作执行的持续的时间。约束被显示使用标准约束符号,一个备注附着到被约束动作。
图9.20显示一个附加的时间约束在传输框架上。它被使用来说明那个动作调用Send Frame Contents活动有最多10毫秒来执行。
图9.20 添加时间约束到动作
活动常常被指定独立于结构(即,模块),并且它们的执行语义不依赖模块的存在。然而,正如系统设计过程,一个系统行为之间的联系,表示在这种情况下使用活动、和一个系统的结构、表示使用模块,最终常常需要被建立。
不同的方法解决这一点使用不同的方式。一个经典的系统工程功能分解方法分配功能到组件正如描述在第16章的方法中。其它方法解决这一点有点不同,通过建立一个模块层次结构和模块之间的场景驱动,正如描述在方法在第17章。
SysML也有两种其它机制来关联模块和活动。第一个是一个活动划分的使用来断言一个给定的模块(或组成部分)负责执行一组动作集。第二是对于一个模块有它自己的活动,正如介绍在第7.5.1节,并使用这作为一个基础用于指定模块的行为的某些方面。
一组活动节点集,和在特定的调用动作中,可以被分组进一个活动分区(activity partition)(也被称为一个泳道),被使用来说明那些节点的执行的职责。一个典型的情形是当一个活动分区表示一个模块或一个组成部分,并说明任何行为调用通过调用动作在那个分区中是模块或组成部分的职责。分区的使用说明,该行为是对应的那个模块的职责,指定一个系统或组件功能需求定义通过模块。
活动分区被描绘作为矩形标志,其物理上封装动作标志和其它活动节点在分区内部(所谓的泳道(swimlane)符号)。每个分区标志有一个头包含模型元素的名称字符串表示通过分区。在一个组成部分或引用属性的情形下,名称字符串包含组成部分或引用名称紧随类型(模块)名称,分隔通过一个冒号。在一个模块的情形下,名称字符串简单包含模块的名称。分区可以被水平或垂直布置来形成行或列, 或可选的可以表示为一个组合的水平和垂直行,以形成一个网格模式。用于调用动作的活动分区的另一个表示形式是包括在操作名称上面的节点中的括号中的分区或分区的名称。
图9.21包含一个分区的例子选自ACME surveillance system的一个模型。它显示新的入侵者情报如何被分析和处理提供security guard和company security system在一些整体系统语境中。一旦security guard有接收新的情报(信号Intruder Intel),他或她可以需要并行解决2个关注,所以令牌表示信号被分支成两个对象流。如果入侵者有移动,随后一个Move Joystick动作被执行来紧随他或她。如果入侵者被认为已经移动出当前摄像头的范围,随后一个Select Camera活动被执行来选择一个更合适的摄像头。在两种情形下,一个流的最终节点被使用来处理令牌引用信号数据,当没有动作被需要。
company security system存储当前选择的摄像头在一个数据存储节点。它使用这个信息,当它响应到操作命令通过发送Pan Camera和Tilt Camera命令到选择的摄像头。Security guard和company security system是组成部分,正如说明通过名称字符串在划分标题。
分区自身可以有子分区,其可以表示表示元素的进一步分解。图9.22显示一个Operator (security guard)登录到一个Surveillance System (company security system)的过程。security guard进入他或她的细节,其被读通过User Interface、company security system的组成部分,和确认提供另外一种组成部分Controller,其随后适当的反应。User Interface和Controller被表示通过内嵌的分区在company security system内部。在这种情况下, security guard和company security system它们自身显示作为一个模块表示的语境的内嵌划分对应监测系统和它的用户。
图9.21 活动分区
一个分配活动划分是一种特定的类型的划分,其可以被用来执行行为分配,正如描述在第14章。
图9.22 内嵌的活动分区
在SysML中,活动可以拥有模块,在那种情形下拥有模块的一个实例执行活动。对于一个模块,一个活动可以表示一些服务的实现,这被称为一种方法(参考第7.5.5节),或它可以描述模块在它的生命周期的行为,这被称为分类行为或主要行为(参考第7.5.1节)。一个活动的执行过程,它占有模块的一个实例提供它的执行语境。活动的执行可以存取存储状态信息来自实例和访问队列中的请求权限。
当一个活动服务作为一个分类行为,活动的参数可以被映射到端口的流属性在占有的模块上。映射的端口必须是行为端口;也即是,它们的输入和/或输出必须被消耗和/或生成通过模块行为而不是作为代理对应模块的组成部分。SysML不指定,流属性如何匹配参数由于有许多不同的方法,依赖于方法学和域。一个明显的策略匹配参数到流属性基于最少的类型和方向。如果这仍然是模棱两可的结果,名称也被使用来确认一个匹配。分配也可被使用表示映射。
图9.23显示一个模块称为Camera,对应一个ACME公司的监控摄像头的设计描述。它有4个代理端口,其中的三个允许光线流入摄像头,和流出视频是组合格式或MPEG4格式。第四个允许配置数据将被传递到摄像头。它还有一个端口使用一个提供的接口,其支持一组控制信号用来控制摄像头的操作。摄像头的模块行为是活动Operate Camera,其已经出现在许多先前的图中,最近的是图9.16。在图9.23,活动的参数匹配,和可以因此被绑定到, Camera模块的代理端口的流属性 (注:接口模块对应代理端口没有显示在这里,但Video Interface被显示在图7.41)。
在图9.23中,没有直接的对应关系在Camera的control端口和一个参数或参数在它的模块行为Operate Camera之间。然而,当一个活动作为一个块的行为,它一个接收信号接收通过在模块上的标准端口,只要模块申明那个信号的一个接收。这些信号可以被接收使用一个接收事件动作在活动内部。
图9.24显示活动Receive Test Messages的规范,其被调用作为Produce Test Signal部分,正如显示在图9.14。一旦活动开始,它简单等待Start Test Signal使用一个接收信号动作,和随后等待Stop Test Signal,和随后重复序列。接收信号动作触发value specification动作通过控制流,其生成正确的Boolean值和这些值被合并到一个test value输出。由于Receive Test Messages执行作为Operate Camera执行的部分(尽管几个级别深入在活动层次中),它的执行已经获取到信号接收通过占有的而语境,在这种情况下,是一个Camera实例。其它2个信号识别通过control端口在图9.23是Shutdown和Start Up,其被显示在图 9.16。
图9.23 一个模块带有代理端口和一个模块行为.
图9.24使用信号来控制活动流
当使用作为一个拥有的模块的一种方法时,一个活动需要有相同的签名(即,相同的参数名称、类型、多学科、和方向)作为模块相关的行为特征。有两种类型的行为特征。一个操作支持同步请求(即,请求者等待一个响应)和异步请求(即,请求者不等待一个响应)。接收仅支持异步请求。一个接收说明对象可以接收一种特定类型的信号,作为一个发送信号动作的结果(参考第9.7节)。一种方法被调用,当拥有模块的实例(对象)消耗一个请求对应它相关的行为特征。活动执行直到它到达一个活动终点,当服务被认为将被处理,和如果请求是同步的,任何输出(包含返回) 变量被传递回初始的请求。
SysML有一种特定动作来调用方法通过操作,称为一个调用操作动作(call operation action)。这有引脚匹配操作的参数,和一个附加的输入引脚使用来表示目标。当动作被执行时,它发送一个请求到目标对象,处理请求通过调用方法方法对应操作传递它的输入参数,并传递回输出变量。
正如一个信号可以被发送通过一个端口,一个操作可以被调用通过一个端口。端口的路径被显示在标志中对应调用操作动作使用格式:via port name,.
在活动执行过程中,如果一个活动调用作为操作活动带有流参数的结果,随后调用操作动作的引脚可以消耗和生成令牌。然而,在一个典型的系统设计的客户端/服务器方法中,所有参数是非流的来满足更简单到一个客户端/服务器范式。
图9.25显示Surveillance System模块带有一个它的一个端口,称为status。状态端口提供一个接口Camera Status,其包含一个操作称为get camera status如图所示,带有一个输入参数称为camera id和一个输出参数称为camera status。活动Handle Status Request初始的显示在图9.10,被设计将是get camera status方法,所以它有相同的参数。一个调用操作动作,称为a1,对应get camera status被显示,带有引脚对应两个参数和一个引脚来标识target;也即是,到Surveillance System的请求必须被发送。调用操作动作将导致在调用Handle Status Request带有一个camera id参数,和它将期望一个有关camera status的响应。
图9.25 一个模块带有行为特征和相关的方法
SysML有一个行为的通用概念,其提供一种同样的基础形式对应它的三种行为形式:活动、状态机、和交互。这提供选择行为的合适形式对应建模任务。一个调用行为动作或调用操作动作在一个活动中,可以被用来调用任何类型的行为。然而,设计和分析方法必须进一步说明语义和/或约束对应一个调用动作来调用一个状态机或一个交互从一个活动中,由于这不是当前完整指定的。我们期待SysML的未来版本,或许域特定扩展,来提供更精确的语义.
状态机可以使用在任何SysML行为中,描述当一个模块处于一定的状态和当它在状态之间转变时发生了什么。在实践中,活动常常被使用来描述行为如下:
状态机被讨论在第11章。
活动可以被表示作为层次采用模块使用一个模块定义图定义非常相似的方式。当以这种方式表示时,活动层次(activity hierarchies)重新组织传统的功能分解层次。
活动的调用通过调用行为动作被建模使用标准的组合关联,其中调用活动被显示在黑色的钻石终点和调用活动是在关联的另一个终点。在一个模块定义图上,活动被显示使用一个模块标志使用关键字«activity»。角色名称是调用行为动作的名称,其执行调用。
图9.26显示模块定义图等效于活动层次对应Generate Video Outputs,正如描述在图9.8和图9.16。模块定义图不可以表示流在活动图上,但可以包含参数和对象节点,正如显示在图9.27。
图9.26一个活动层次建模在一个模块定义图上
参数和其它对象节点也可被表示在模块定义图上。然而,按照惯例,活动与对象节点的关系被表示使用一个引用关联,由于令牌包含在对象节点内部被引用到实体,不是执行活动的部分,并且当活动执行终止时,它们没有必要销毁。然而,当活动和引用的对象之间的组合语义应用时,可以使用组合。如果白色钻石符号被使用,随后活动被显示在白色钻石终点和对象节点类型在另一个终点,和功能名称在组成部分终点是对象节点的名称。对象节点的属性可以被浮动显示可以被显示附近浮动相应功能名称。
图9.27显示活动的层次对应Capture Video活动,初始的显示在图9.11,包含它自己的参数节点和在的多个子活动的参数节点。数据存储, current image也被显示。
图9.27活动层次与参数
约束活动执行的参数方面有时是非常有用的,诸如,资源用法(例,处理器时刻)、或性能特性(例,平均执行时间)。活动可以被作为模块和因此可以有数值属性和随后约束模块可以被用来约束它们的值,通过绑定它们到约束参数。
在一个模块定义图中,一个活动可以被显示作为一个模块,一个模块标志带有所有舱段。这允许,例如,一个值舱段来显示活动的数值属性。一个活动也可被表示通过参数图来显示约束属性和它们绑定到活动的属性。
图9.28显示一个模块定义图对应Generate Video Outputs活动和相关的动作,带有附加的数值属性来捕捉内存使用。它也显示一个约束模块称为Memory Use带有4个参数,期指那个表示内存使用和第四个其表示可用的内存。它的约束评估总的内存使用是小于可用的内存的。
图9.28 一个bdd描述数值属性和约束对应一个活动
图9.29显示参数图对应Memory Use约束模块。它的参数被绑定到Generate Video Outputs的属性和它的子动作,其表示内存使用和可用的内容。
图9.29 一个参数图描述约束在一个活动中
增强的功能流程框图(EFFBD)或它的变种已经被广泛使用在系统工程中来表示行为。功能在EFFBD中类似于动作在活动中。EFFBD不包含一个调用活动和一个活动的区分。
EFFBD的大多数功能,可以被表示作为一个SysML活动图的一个约束的使用。约束被记录在SysML标准[1]的附录D。使用关键字«effbd»在一个活动的标题说明其符合EFFBD约束。这些约束排除活动划分的使用和连续的和流动的流,以及许多其它特征在活动图内部。
一些EFFBD语义是不明显的处理活动图。特别是, 当所有触发的输入、控制输入、和功能的特定资源可用时,一个功能在一个EFFBD中可以仅被执行。一个‘资源’不是SysML中的明显的构件,但资源约束可以被建模使用前置和后置条件和参数正如在先前的章节描述的。在EFFBD中触发的输入对应于活动图中的‘请求的输入’,非触发输入对应‘可选的输入’,和控制输入对应活动图中的控制流在。EFFBD和活动图之间的详细映射,伴随在使用一个映射的例子,被描述在书[44]。
一个SysML模型可以被用来指定一个系统的结构和行为。正如在这本书的第二部分讨论的。常常一个SysML模型被简单地使用来提升项目团队之间的交流;但有时模型试图被解释通过机器或计算程序来仿真它指定的系统。这种后来的模型的分类常常被称为一个可执行规范,由于它包含所有信息需要对应一个机器来执行它。可执行的规范构件需要建模格式(SysML在这种情况下)来有语义精确充分的定义允许模型的执行。本节描述SysML如何使用fUML支持活动的执行。
为了一个活动将被执行,它的所有处理的完整的细节,诸如,属性值的传输必须被精确说明。SysML包含一组支持基础对象操作的基础动作集,诸如,生成、删除、存取到属性、对象通讯、和其它。fUML提供这些活动的一个执行语义。
SysML也允许建模者来包含‘不透明的’构件在它们的模型中;其是构件,它的规范被表示作为使用一些语言的文本而不是SysML。这些不透明的构件被常常使用来指定执行行为和正常情形下与执行的技术一起,正如讨论在第18章。一个重要的不透明的构件的使用,包含行为表达在一种语言称为Alf,其是一种基于文本具体语法fUML。
在2010年,OMG采纳了一个UML的一个子集规范,简称为Foundational UML或fUML,其选择一个UML2的子集并指定它的基本的执行语义[39]。fUML被包含在UML4SysML内部,UML的子集是SysML的基础,和因此SysML建模者可以使用fUML来精确指定活动的执行
fUML定义:
一些执行引擎基于fUML标准是可用的。
fUML最初的版本被定位针对大规模的软件开发者,和所以尽管它涵盖一个基础的SysML活动构件的一个主要部分,它有许多缺失的功能,对于系统建模是有用的,诸如:
正如上面提及的,fUML也解决系统结构的一些方面,聚焦在UML类和关联。然而,有许多明显的排除在FUML中的结构部分,其影响SysML模块:
fUML标准将被持续更新, 随着时间的推移,应该开始解决这些差距中的一些。
OMG已经采纳一个补充的规范到fUML称为fUML的动作语言,或简称为Alf[46]。Alf是fUML模型元素对应的一种文本的具体语法。Alf的关键使用是来扮演作为符号对应指定执行的行为在UML, 例如,方法对应类操作,一个类的行为,或状态机的转变影响。Alf也提供一个扩展的符号,其可以被使用来表示一个有限的结构建模元素的子集。由于SysML结构和行为构件,诸如,模块和活动,是基于UML的,Alf可以被用来指定SysML模型的那些方面.
Alf语法主要反映了一个类似C语言的,其应该是类似于Java、C++和C#程序。然而,Alf也采用许多语法规范来自OCL[33]利用它的能力来操作序列的值。
Alf的执行语义被给定通过映射Alf具体语法到抽象语法指定通过fUML。一个Alf文本片段的执行因此被给定通过fUML模型的语义到它被映射。
图9.30一个活动指定使用 Alf
Alf集成到活动或使用一个不透明的行为或一个不透明动作。当使用来指定一个不透明的行为,它描述完整的行为,其随后可以例如被调用通过一个调用行为动作。一个不透明动作指定在Alf可以被插入到一个活动和关联到其它动作在活动中。
图9.30显示活动Position Camera来自图9.12,指定使用Alf。在这种情况下,Position Camera有一个单一的不透明动作,它的语言被定义将是Alf和它的体是一个Alf语句。它确保position处于一个范围内部和调用摄像头设备驱动器使用(潜在备选的)位置。
SysML包含一组基础动作集,贯穿FUML和Alf, 对应它们的一个精确的定义和符号。其它系统工程工具可以指定可选的语义和符号,其可以被映射到这些基础动作。
这些基础动作中的一些已经被先前描述在本章中:
此外,有许多动作,有一个更局部的影响,诸如,更新属性和生成或销毁对象。这些动作可以被广泛分类作为:
注:动作集定义在SysML中,不包含基础操作,诸如,数学操作符。这些的一组集被提供在fUML的基础模型库,但对应外部执行域,这些不得不被提供作为不透明的行为库,或更像函数的行为,适合对应域。
SysML提供一个可选的符号对应基础动作。基础动作被显示使用一个动作标志(圆角矩形) 带有动作类型动作显示在书名号中,和适合动作的一组引脚集。
图9.31显示Alf表达式的可选的表示:this.count=this.count+1 在算法在图9.12中,但使用基础动作代替不透明动作。结果活动片段首先不得不执行一个read self动作,来建立语境说明通过this。已经获得了这一点,一个read structural feature动作被使用来获得语境(执行活动)的count属性的值。count属性的值被随后传递到一个调用+函数行为在fUML Integer Functions包中。其它输入被提供通过一个value specification动作,输出值1。求和的结果随后被提供到一个add structural feature value动作,其更新count属性。使用基础动作来生成模型可以是非常艰巨的,所以Alf或其它文本表示是一个更简洁的方式对应指定低层级行为。
图9.31 基础动作的例子
当一个模型被使用作为一个系统的一个蓝本,它被期望持续的活动将被执行通过物理设备,诸如,电机、传感器、或人员。在这种情况下,活动的规范可以是一个等式集,或它可以被简单的被分配到一些组件也即是已经了解来提供合适的行为。Alf和参数的约束正如描述在第9.12.3节都可以被用来指定这些等式。
然而,有时非常重要来仿真这些持续的活动优先于构建系统自身。许多不同的技术存在来执行持续活动的模型和它们相应的等式。它们典型的施加限制在构件上,其可以被使用在活动的定义中(非令牌缓冲,例如)和有它们拥有的特定函数库,需要被集成到模型中。它们也常常需要额外的构建和语义。在SysML中,这些构件可以被提供使用一个配置文件。关于配置文件的更多信息可以被查找在第15章,和SysML与外部工具的集成的一个讨论,诸如,仿真工具可以被查找在第18章。
活动提供一种方式描述基于流行为,其被表示在活动图和模块定义图上。
讨论多种方式,活动使用持续流可以被执行。