信号代表对象之间异步通讯的一种数据结构。信号也是一种类目(是Classifier的特化类型),但是信号只能有“属性”(Property)这一种特征。
“信号”工具在模块定义图的工具栏中,定义一个信号元素的方法和定义模块的方法一致。
信号可以定义在某个包中,在定义模块(block)的接收(Reception)时使用。
信号作为异步通讯的数据使用,意思是发送信号的模块执行发送动作之后,他不会等待接收模块返回消息,而是直接进行下面的动作。但是接收模块执行和这个信号对应的接收(Reception)行为之后,是有可能返回数据给发送模块的。发送模块对这个返回数据的处理是在一个事件中进行处理的。
操作方法:从模块定义图的工具栏拉出信号工具到图中,然后通过节点的右键菜单或拖拽属性工具到节点上,为信号添加属性。
例如,在下图中定义了一个名称为“SensorData”代表传感器数据的信号类型。
在模块的“接收”(Reception)中,选择某个“接收”,右键“选择类型”,选择一个信号元素作为类型。选择之后,接收的名称、参数会自动采用信号的名称、属性。
如下图中定义了一个传感器网络的案例。其中“接收数据服务”模块有一个信号类型为“SensorData”的接收。这个接收的“方法”(Method)是一个名称为“数据接收和存储”的活动。也就是说,这个“SensorData”接收的实现是在“数据接收和存储”这个行为的活动图中体现的。在后面案例说明中展示了这个活动的活动图内容。
在上图中“传感器组件”模块有一个“数据发送”活动(Activity),这个活动的活动图中有一个发送“SensorData”的发送信号动作,而这个发送信号动作的目标是“接收数据服务”。也就是它将把“SensorData”信号发送到“接收数据服务”模块,相当于调用了“接收数据服务”的“SensorData”接收,而这个接收将引发“数据接收和存储”活动。在“数据接收和存储”的活动图中有一个“接收事件动作”,它的触发器事件类型为“接收信号”事件,这个事件的信号类型为“SensorData”。所以,前面的“数据发送”动作发送的信号,最终传给了这个“接收事件动作”。图中,这个“接收事件动作”将类型为“SensorData”的“栓”(Pin)数据传给“存储传感器数据”动作。
上图中,设置“发送信号动作”的信号类型,通过节点的“设置信号类型”菜单。
在上图中,选择“接收事件动作”节点,通过右键菜单“设置触发器”,定义触发器的事件类型为信号事件,然后通过“选择信号”定义信号类型为“SendsorData”。操作界面如下: