智睿思维Logo智睿思维

MBSE建模学习之三:系统功能--行为(Behavior)的说明

在MBSE的模型中,行为(Behavior)是一个重要的概念。前面我们主要介绍的模块、模块的属性是系统的结构模型,描述系统是如何构成的,各部分之间有什么关系。而行为是系统的功能模型,或称之为动态模型,它描述的是系统及其各组成部分是如何动态变化的。

“行为”(Behavior)的概念

“行为”(Behavior)是一种通用的动态模型元素。具体的行为元素主要包括“活动”(Activity)、“状态机”(StateMachine)和“交互”(Interaction),它们分别以“活动图”、“状态机图”和“序列图”的方式说明一个行为的过程。这三种图的具体说明我们将在后期的文章中进行说明,这里先讲讲通用行为的概念,以及行为和作为系统结构说明的元素“模块”、需求说明的元素“需求”之间的关系。

“行为”是系统状态随时间变化过程的描述。“行为”代表系统的一种功能,它有输入、输出,它的功能就是把输入转换为输出。在这个转换过程中,可能伴随系统本身状态参数的变化。在设计一个系统的时候,很重要的工作就是设计系统有什么功能、怎么实现这些功能。所以,进行系统行为模型的分析是建模工作的关键内容之一。在对一个新产品进行建模的时候,一般是遵从“需求分析”—“功能分析”(行为分析)--“架构设计”这个大的基本过程。“需求分析”阶段,通过建立系统“功能需求”元素(FunctionalRequirement,它是SysML标准中一个扩展的需求元素)确定功能目标。然后通过建立相应的行为元素及其图形细化这些功能需求(功能需求只能通过一个行为元素来满足)。最后在确定系统架构模型时,将这些行为分配给具体的“模块”(作为模块的“拥有行为”)。

“行为”元素可以放在模型中专用的一个包下面,也可以直接放在具体的某个“模块”下面。

在UML语言中,“行为”也是一个“类”(Class)。相应的在SysML语言中,具体的行为元素(活动、交互和状态机)都是类的扩展元素“模块”(Block)。UML\SysML标准遵循了面向对象的设计概念,这世界上一切都是“对象”(Object)。“对象”是类的实例,也就是说世界上的一切对象都是某个类的实例。“行为”也是一个类,行为的一次“执行”就是这个类的实例。当然,行为是一种特殊的类,它有类的基本特征:可以有属性和操作,而且它还多出来很多描述动态过程的东西(具体的行为元素描述动态过程的方法不同,具有的子元素不同)。可以说“行为”元素是在“类”的基础上增加了描述动态过程的内容。

在SysML标准中,三种具体的行为元素“活动”、“状态机”和“交互”都是“模块”,所以它们可以像模块一样进行分解,把一个复杂的行为分解成小的、局部的或共用行为元素。这个过程也可以对应为设计分析中的“功能分解”过程。上层的行为元素和下层的行为元素都有各自的图形,例如在一个上层“活动图”中,通过一个“调用行为动作”,调用下层的活动元素(或其它行为元素)。

“行为”(Behavior)的语法

前面我们说了,“行为”代表一种功能,有输入、输出,好似软件中的一个“函数”或“过程”(UML本来是用于软件建模的,在UML中一个行为确实对应编程语言中的一个函数或过程)。在定义一个行为元素的时候(例如,在模块的拥有行为分区或类目行为分区中增加一个行为),它遵从以下语法:

<name>‘(’[<parameter-list>]‘)’[‘:’ [<return-type-list>]][<behavior-constraint>]

用中文把上面的语法翻译一下如下:

<名称>‘(’ [<参数列表>] ‘)’ [‘:’ [<返回参数列表> ] ] [ <行为约束>]

上面语法中各部分说明如下:

<name>:行为的名称,不能为空。行为元素也是有命名空间的,如果行为直接定义在一个包下面,这个包就是它的命名空间;如果定义在一个模块下面,模块的名称就是它的命名空间。

< parameter-list>:输入参数的列表,每个参数用“,”分隔。每个参数的语法如下:

<parameter>::=[<direction>] <parameter-name> ’:’<type-expression> [’[’<multiplicity-range>’]’] [’=’<default>][’{’ <parm-property> [’,’ <parm-property>]* ’}’]

对应中文,每个参数用“方向 名称:类型[多重性]=默认值{参数属性}”这样的格式。

<direction>:’in’ | ’out’ | ’inout’ (默认’in’),表示参数是传入、传出或同时是,“无”的话默认是传入。

<parameter-name>:参数名称。

<type-expression>:参数类型。

<multiplicity-range>:集合参数的话参数的数量最少、最多多少个。

= <default>:参数默认值。

<parm-property>:参数属性,有以下选项:

<param-prop> ::= ‘ordered’ |‘unordered’ | ‘unique’ | ‘nonunique’ | ‘seq’ | ‘sequence’

‘ordered’ | ‘unordered’:表示返回的集合参数中是否是有顺序的;

‘unique’ | ‘nonunique’:表示集合中每个参数是否是唯一、不唯一的;

‘seq’| ‘sequence’:这两个选项意义相同,‘seq’ 是 ‘sequence’的缩写,表示参数是一个有序的“袋”(bag),既有序但不唯一。

此外,参数还有以下属性:

isStreaming:是否是“流”。如果是流,则在行为执行期间,这个参数可能一直有数据传入、传出,而不仅仅是在调用或完成时。

isException:是否异常值,只用于是“传出”的参数。如果“是”,则如果这个参数有值,则其它参数不会有值。

effect:影响,取值范围为“生成、读取、更新、删除”中的一种。

< return-type-list>:返回参数列表,每个返回参数用“,”分隔,每个返回参数的语法定义如下:

<return-type-mult-prop> :=<return-type> [‘[‘ <multiplicity-range> ‘]’] [‘{‘<param-prop-list> ‘}’] ]

对应中文,每个返回参数用“类型[多重性]参数属性”这样的格式。

<return-type>:返回类型。和输入参数不同,返回参数没有名称,直接“类型”开头;

<multiplicity-range>:多重性,表示这个参数是个集合的话,集合中每个参数最少、最多的个数;

<param-prop-list>:参数的属性,有以下选项:

<param-prop> ::= ‘ordered’ |‘unordered’ | ‘unique’ | ‘nonunique’ | ‘seq’ | ‘sequence’

‘ordered’ | ‘unordered’:表示返回的集合参数中是否是有顺序的;

‘unique’ | ‘nonunique’:表示集合中每个参数是否是唯一的;

‘seq’ | ‘sequence’:这两个选项意义相同,‘seq’ 是 ‘sequence’的缩写,表示参数是一个有序的“袋”(bag),既有序但不唯一。

<behavior-constraint>:行为的约束,一般是“{}”中一个约束表达式。

另外,行为的属性“isReentrant”(是否可重入)表示这个行为在执行的时候,是否可以再次被调用。

在行为的语法中,每个输入、输出参数既可以是单一值,也可以是一个集合。也就是一个参数的一次传递,可以传递一个值,也可以传递一组值。所以每个参数才有多重性、是否唯一、有序等等这个集合的属性。

在表示行为的语法前面,可能会有表示具体行为类型的构造型,如果«活动»、«状态机»或«交互»。

在MBSES(智睿思维基于模型的系统工程软件)中,行为的参数可以通过一个弹出窗口进行定义。参数的属性通过属性框定义。但是也可以直接在模块的行为分区中按照简化的语法“名称( 参数名称: 参数类型) 返回参数类型”定义一个行为。

行为和模块的关系

在前面的文章中,我们说过“模块”有两种有关行为的分区,“拥有行为”分区和“类目行为”分区。“拥有行为”是当前这个模块中定义的行为,这些“拥有行为”是这个模块的功能,这个模块是这些行为执行时候的语境(也叫上下文,Context)。在一个行为执行的时候,除了可以使用和修改行为的输入、输出参数,还可以使用或改变作为上下文的这个模块的各种属性。例如,一个柴油发电机,具有一个“发电”的行为,在这个行为中,消耗作为输入参数的“柴油”,输出作为输出参数的“交流电”,同时会发热,改变发电机的温度。

“类目行为”是当前这个模块从开始工作到停止工作过程的一个行为过程描述。一般用一个状态机来描述。例如一个设备的“开机”、“运行”、“待机”、“停机”这些状态形成的一个设备工作过程状态机作为设备的“类目行为”。

当一个模块向其它模块提供功能的时候,必须通过这个模块的“行为特征”(BehavioralFeature)来提供,而不是直接提供行为的调用。模块的“行为特征”有“操作”(Operation)和“接收”(Reception)两种。但是在UML/SysML语言中,行为特征本身没有说明行为过程的能力,它的行为过程说明必须通过一个具体的行为元素的图形来说明。说明“操作”或“接收”具体行为过程的行为元素称为它们的“方法”(Method),同时,这个“操作”或“接收”称为对应行为元素的“定义”(specification)。一个行为元素也可以没有对应的行为特征,这时候它只能被当前这个模块的其它行为调用,不能被外部模块调用。行为和它对应的“操作”或“接收”必须参数完全对应。

下面用一个三综合试验箱功能分析的例子说明“行为”的定义和应用。

首先定义一个“三综合试验箱”的模块,这个试验箱有“震动”、“加热”、“加湿”、“冷却”的功能,当然主要的功能还是进行“三综合试验”这个功能。这些功能我们都定义为它的“拥有行为”。同时定义了一个“开始三综合试验”的操作,这个操作的“方法”对应“三综合试验”行为,它们都有一个参数“试验程序号”。当人工的方式开始试验,或者通过远程控制的方式调用这个操作开始试验,则试验箱根据“试验程序号”参数开始对应的试验程序。“三综合试验箱”模块定义如下:

“三综合试验”行为的流程用一个活动图来说明。首先根据“试验程序号”找到对应的试验程序。正式开始试验前,设备要先进行预试验步骤,把箱内温度、湿度控制到试验程序规定的起始条件。然后根据试验程序中的定义,进行“震动”、“加热”、“加湿”,“保持”一定时间,根据程序定义可能进行“冷却”。这个过程可能是个循环过程,用一个“循环节点”来表示。活动图如下所示: