预订演示

请注意 : 本帮助页面不适用于最新版本的Enterprise Architect. 最新的帮助文档在这里.

前页 后页

信号事件

A信号事件通过发布-订阅集成提供功能“投掷者”和“捕手”的功能。 A投掷者”将广播信号而不是将其发送给特定进程;侦听该特定事件的任何进程都可以使用信号开始事件触发新实例。

信号可以A抛出中间事件或抛出结束事件中抛出,并且可以在开始事件或捕获中间事件(包括边界信号事件)中捕获。

在此示例中,我们通过 BPSim 参数设置演示了这些信号事件及其对任务生命线的影响。

  • 开始信号事件:
    -在顶层进程(Pool1)中通过 Signal1开始
    开始Signal2中断事件子流程eventSubProcess2
        开始Signal1 Non Interrupting in event subprocess eventSubprocess1
  • 抛出中间信号事件:
    -广播信号1
  • 捕获中间信号事件:
    -接收信号1(正常)
          -接收信号2(正常)
          -接收信号2(边界中断)
          -接收信号 1(边界不中断)
          -接收信号 2(在事件网关中)
  • 结束信号事件:
    -以抛出 Signal2 结束

创建 BPMN模型

为了演示通过协作信号事件跨进程进行通信的能力,我们创建了一个具有主泳池和另一个泳池(信号)中的进程的模型。

Collaboration diagram in Business Process Simulation in Sparx Systems Enterprise Architect

创建协作和主流程

创建一个新的协作协作图CollaborationForTestingSignalEvents ,(选择“在名为 BP 的新协作模型中创建此图表”选项)。右键单击图表名称窗口并选择“封装进程浏览器”选项。

创建了A泳池和一个流程BusinessProcess_PoolMain ,并使用自动值设置这些标签:

  • CollaborationForTestingSignalEvents.mainPool设置为PoolMain
  • PoolMain.processRef设置为BusinessProcess_PoolMain

为主流程创建元素

创建一个开始事件S1并将一个序列流添加到一个分叉Parallel Gateway parallelFork

将序列流添加到:

  • 一个任务(20)然后添加这个序列流链:
    - 到一个 Throwing 中间信号事件广播 Signal1
    - 然后到一个任务(10)
    -然后到一个捕获中间信号事件接收Signal2(正常)
    - 然后到一个抽象任务(20)
    - 然后到合并并行网关parallelMerge
    - 然后结束事件E1
  • 一个任务(10)然后添加这个序列流链:
    - 到一个捕获的中间信号事件接收信号接收正常)
    - 然后到一个任务(100),在它上面创建一个边界捕获
    中间信号事件接收Signal2(边界中断)
    - 然后到一个抽象任务(10)
    - 然后到前面的 Merge Parallel Gateway parallelMerge
  • 一个任务(30) ,然后添加这个序列流链:
    - 抽象任务8 (5)
    - 然后到前面的 Merge Parallel Gateway parallelMerge
在边界(30)上,创建一个事件非中断捕获中间信号接收信号接收(边界非中断) 。将序列流添加到事件网关eventGateway ,并将序列流添加到:
  • A捕获中间信号事件事件接收2(在网关中),然后这个序列流:
    - 抽象任务9 (10)
          - 然后到前面的 Merge Parallel Gateway parallelMerge
  • A捕获中间定时器事件Wait (25) ,然后是这个序列流链:
    - 抽象任务10 (10)
    - 然后结束事件E2

在主进程中创建事件子进程(由非中断的开始信号事件触发)

  • 创建一个活动eventSubProcess1 ,并在其“属性”对话框中,将“类型”字段设置为subProcess并将属性“triggeredByEvent”更改为true
  • eventSubProcess1中,通过开始开始-Interrupting创建一个开始事件开始,并在其“属性”对话框中,将“类型”字段设置为事件-Process Non-Interrupting >信号
  • 将序列流添加到目标任务(20)
  • 通过 Throwing Signal2将序列流添加到目标事件,并在元素“属性”对话框中,将“类型”字段设置为信号

创建另一个进程

  • 从工具中,将“泳池”图标拖放到图表上,并将元素命名为工具箱
  • 在浏览器窗口中右击Pool1 ,选择“封装进程”选项;创建了一个流程BusinessProcess_Pool1并将标签“Pool1.processRef”设置为BusinessProcess_Pool1

Pool1创建主进程

  • 通过开始信号一个信号开始事件开始
  • 将序列流添加到目标任务(100)
  • 将序列流添加到目标结束事件E3

创建Event子进程事件Pool1

  • 创建一个活动eventSubProcess1 ,并在“属性”对话框中,将“类型”字段设置为subProcess ;将属性“triggeredByEvent”更改为true
  • eventSubProcess2中,通过 Signal2开始创建一个开始事件开始,并在“属性”对话框中,将“类型”字段设置为事件子进程中断>信号
  • 将序列流添加到目标任务(10)
  • 将序列流添加到目标结束事件E4

创建信号元素并配置信号事件

在 BPMN 2.0工具箱中,展开“BPMN 2.0 - Types”页面并将“信号”图标拖到图表上;命名 ElementSignal1元素再次将图标拖到图表上以创建Signal2 。这些是根元素(所有进程都可以使用),因此它们将直接在模型包下创建。

双击每个信号事件元素,然后在“信号”标签的“值”字段中,单击Browse.按钮并浏览到适当的信号元素。

提示:或者,您可以将浏览器窗口中的信号元素拖放到图表中的事件元素上;将显示一个上下文菜单,您可以从中选择“设置信号参考”选项。

  • 将 signalRef 设置为“Signal1”:
    -广播信号1
         -顶级进程(开始)中的Signal1开始
    -在事件子进程eventSubprocess1通过开始不中断
          -接收信号1(正常)
          -接收信号 1(边界不中断)
  • 将 signalRef 设置为“Signal2”:
    开始Signal2中断事件子进程eventSubProcess2
          -接收信号2(正常)
          -接收信号2(边界中断)
          -接收信号 2(在事件网关中)

配置 BPSim

在本节中,我们创建配置工件,指定模型包并配置每个元素的值。

配置非常简单,因为所有信号事件都不需要任何信号配置。我们所要做的就是设置任务的处理时间,这样我们就可以观察进程、线程和任务是如何启动和中断的。

任务

描述

设置配置

  • 打开配置 BPSim窗口('仿真>过程分析>进程>打开BPSim 管理器')
  • 创建加新元素完全工件示例'选择/创建工件Browse.按钮并单击父包并单击按钮,然后在示例按钮上输入,然后键入单击保存按钮和确定按钮)
然后所有的 BPMN 元素将被加载到配置 BPSim窗口中。

非信号事件

  • 在对话框左侧的元素列表中,展开“StartEvent”组,然后单击S1和“控件”选项卡;单击“新参数”下拉箭头并选择“触发器计数”,然后在“值”字段中键入“ 1 ”
  • 展开“IntermediateEvent”组,然后单击Wait (25)和“控件”选项卡;单击“新参数”下拉箭头并选择“InterTriggerTimer”,然后单击“值”字段中的Browse.按钮;选择“Constant”和“Numeric”,在“Constant Numeric”字段中输入“25”,在“TimeUnit”字段中输入“seconds”

进程虚拟变量

模拟控制器显示一个列表,显示每个元素的运行时令牌计数。例如,在模拟中,有 4 个令牌通过了Gateway元素。这对于某些统计和分析非常有用。但是,它没有显示在模拟期间何时遍历了parallelMerge 。为了获得单个令牌的准确跟踪,我们使用属性跟踪实用程序,它依赖于属性参数。所以我们创建了一个虚拟参数。

在“配置”对话框中,展开“业务流程”组。

  • 单击BusinessProcess_Main和“属性”选项卡,然后用属性改写属性在“值”字段中,单击Browse.按钮并单击“常量”和“数字”,然后在“常量数字”字段中键入“0”
  • 单击BusinessProcess_Pool1并执行与BusinessProcess_Main完全相同的操作

任务处理时间

展开“活动”组和此处列出的每个任务元素:选择“时间”选项卡,单击“新参数”下拉箭头并选择“处理时间”,然后单击“值”列上的Browse.按钮,选择“常量”和“数字”,在“常量数字”字段中键入指示的值,然后在“时间单位”字段中选择“秒”。

  • 任务 1 (20):20 秒
  • 任务 2 (10):10 秒
  • 任务 3 (20):20 秒
  • 任务 4 (10):10 秒
  • 任务 5 (100):100 秒
  • 任务 6 (10):10 秒
  • 任务 7 (30):30 秒
  • 任务 8 (5):5 秒
  • 任务 9 (10):10 秒
  • 任务 10 (10):10 秒
  • 任务 11 (20):20 秒
  • 任务 12 (100):100 秒
  • 任务 13 (10):10 秒

运行仿真

  • 在“配置 BPSim ”对话框工具栏上,单击“运行”图标打开“运行仿真控制器”对话框
  • 点击“运行”图标下拉箭头并选择“标准仿真”
  • 仿真完成后,单击工具栏上的按钮,显示“BPSim PropertyParameter Values”对话框
  • 单击“查询属性”按钮和“按属性分组”选项卡,然后展开“dummyVariable”

分析

从模拟的直接结果来看,发生了什么可能并不明显;但是,如果我们为每项任务画出生命线,就会变得非常清晰。

Timing diagram, BPMN Business Process Simulation in Sparx Systems Enterprise Architect

  • Task1、Task4Task7并行启动
  • Task2Task1完成后立即开始(没有在投掷事件处停止)
  • 在 20 秒时, Signal1由 Throwing IntermediateEventBroadcast事件广播,并且:
    -接收信号 1(正常)被激活,任务 5开始
    开始Signal1 Non-Interrupting已激活,并且eventSubProcess1中的Task11已启动
    开始Signal1已激活,并且Pool1的 Task12已启动
  • 在 40 秒时,事件By Throwing Signal2广播了 Signal2,并且:
    -接收信号 2(正常)被激活并且任务 3开始
    - Task5被中断, Task6开始
    -接收信号 2(在事件网关中)被激活并且任务 9开始
    -开始通过 Signal2 中断被激活,并且:
              > Pool1中的主进程被中断, Task12停止
    > eventSubProcess2中的Task13 已启动
  • 50 秒到达E4时, BusinessProcess_Pool1中的eventSubProcess2完成
  • 在 60 秒到达E1时, BusinessProcess_MainPool完成
  • Intermediate事件(25)没有被激活,因为网关中的信号事件首先被激活;结果, Task10从未启动

注记:每个任务的实际运行时间可以从生成的 BPSimReport元素中观察到,通过:

  1. 双击 <<BPSimReport>>元素。
  2. 扩展“时间”组。
  3. 扩展任务元素。
  4. 检查“任务总时间”。
例如ElementTask5 (100) ,虽然我们设置它的processingTime为 100 秒,但Total时间是 20 秒,任务元素秒时被接收信号 2(边界中断)中断