このチュートリアルタスクでは、処理フローツールでサブフローを構築するための基本について学習します。サブ処理フローは、複数の処理フローの別々のアクティビティやイベントによってトリガーされたときに実行される別個の処理フローです。サブフローは、シミュレーションモデルまたは一般的な処理フローの特定のイベントによってトリガーされたときに実行される、自己完結型ロジックをまとめたものです。
サブフローは必要に応じて細分化し、処理フローの複数の場所に処理フローアクティビティの特定のブロックを作成できます。サブフローを使用すると、メイン処理フローの特定のアクティビティやイベントによってトリガーされる、より複雑なプロシージャを計算したり、シミュレーションを実行したりできます。サブフローに関連する主要な概念の詳細については、「処理フローサブフロー」を参照してください。
このチュートリアルでは、プロセッサの処理時間を動的に決定する内部サブフローを作成します。作業が完了すると、3Dモデルと処理フローは次の画像のようになります。
サブフローは、[トークンを作成]または[サブフローを実行]アクティビティが[サブフローを開始]アクティビティにトークンを送信するときに開始します。サブフローは、サブフローのすべてのアクティビティを通過して[終了]アクティビティに達すると終了します。
通常サブフローでは、[トークンを作成]または[サブフローを実行]アクティビティがサブフローにトークンを送信するときに、新しいトークンが作成されます。ユーザー独自のモデルロジック要件に沿って、サブフローで新しく作成したこのトークンとメイン処理フローで作成されたトークンの関係性をユーザーが決定する必要があります。次の3つのベーシックオプションがあります。
このチュートリアルタスクでは、主に子トークンと親トークンで作業します。サブフローの子トークンは、メイン処理フローの親トークンでラベルにアクセスする必要があります。
このステップでは、基本的な3Dモデルを構築します。作業が完了すると、3Dモデルは次の画像のようになります。
このモデルを構築するには:
オブジェクト | 新しい名前 |
---|---|
Source1 | ソース |
Queue1 | キュー |
Processor1 | プロセッサ |
Sink1 | シンク |
このセクションの冒頭に表示した画像のようにモデルがなっていることを確認します。
このステップでは、アクティビティを一般的な処理フローに追加して、プロセッサの処理時間を変更する処理フローを構築します。
作業が完了すると、処理フローは次の画像のようになります。
現時点では、これらのアクティビティの追加と処理フローへの接続のみを行います。後のステップで、プロパティを編集して機能を追加します。
これらのアクティビティを追加して接続するには:
アクティビティ | 新しい名前 |
---|---|
ソース | ソース:シミュレーションを開始 |
ラベルを割り当てる | ラベルを割り当て:高速に設定 |
最初のサブフローを実行 | サブフローを実行:高速1 |
2回目のサブフローを実行 | サブフローを実行:高速2 |
3回目のサブフローを実行 | サブフローを実行:高速3 |
アクティビティ | 新しい名前 |
---|---|
ラベルを割り当てる | ラベルを割り当て:低速に設定 |
最初のサブフローを実行 | サブフローを実行:低速1 |
2回目のサブフローを実行 | サブフローを実行:低速2 |
アクティビティ | 新しい名前 |
---|---|
開始 | サブフローを開始 |
イベントを待つ | イベントを待つ:処理時間 |
終了 | 終了して処理時間をオーバーライド |
シミュレーションモデルを保存することをおすすめします。
このステップでは、処理フローのアクティビティのプロパティを編集します。各アクティビティの機能の概要を次に示します。
アクティビティ | 説明 |
---|---|
ソース:シミュレーションを開始 | [スケジュールソース]アクティビティでは、シミュレーションの開始直後にトークンを1つ作成し、そのトークンを[ラベルを割り当てる]アクティビティに送信します。このトークンを作成した後は、追加のトークンは作成されません。トークンは、シミュレーションが終了するまで他のアクティビティをループし続けます。このアクティビティにはデフォルトのプロパティを使用します。 |
[ラベルを割り当てる]アクティビティ | 両方の[ラベルを割り当てる]アクティビティでは、サブフローがプロセッサの処理時間をコントロールするときに参照する「processTime」というラベルを作成して設定します。最初の[ラベルを割り当てる]アクティビティではラベルを2 に設定し、2番目のアクティビティでは10 に設定します。 |
[サブフローを実行]アクティビティ | [サブフローを実行]アクティビティでは、[サブフローを開始]アクティビティで子トークンを作成します。子トークンがサブフローの最後に達するまで、親トークンは[サブフローを実行]アクティビティに残ります。子トークンがサブフローを終了すると、トークンは次の下流アクティビティに移動します。 |
サブフローを開始 | すべてのサブフローは、[サブフローを実行]アクティビティによって作成された子トークンを受け取る[開始]アクティビティから始める必要があります。次に、子トークンを次のアクティビティにリリースします。 |
イベントを待つ:処理時間 | [イベントを待つ]アクティビティはイベントリスニングのアクティビティです。つまり、リスニング対象のイベントが発生するまで、トークンはこのアクティビティで待機します。このアクティビティは、処理時間イベントのプロセッサをリッスンします。プロセッサで処理時間を開始する準備ができると、トークンは[終了]アクティビティにリリースされます。また、このアクティビティを設定して処理時間をオーバーライドします。 |
終了して処理時間をオーバーライド | [終了]アクティビティでは、プロセッサに処理時間の戻り値を提供します。アクティビティではこの戻り値を提供した後、子トークンを破棄し、[サブフローを実行]アクティビティの親トークンに子トークンがサブフローを終了したことを警告します。 |
これらのプロパティを編集するには:
processTime
」と入力します。
2.00
」を入力します。10
」に変更します。シミュレーションモデルを保存することをおすすめします。
モデルをリセットして実行します。
[ソース]で時間0にトークンが作成された後、そのトークンが[高速に設定]アクティビティに入り、そのprocessTimeラベルが2に設定されることがわかります。トークンはその後、最初の[高速1]アクティビティに移動します。ここでは子トークンが作成され、サブフローの[処理時間を待つ]アクティビティに置かれます。
モデルのプロセッサでアイテムが受け取られるとすぐに、[イベントを待つ]ではトークンがリリースされ、処理時間がオーバーライドされます。子トークンはその後破棄され、親トークンは次の[サブフローを実行]アクティビティに移動し、サブフローが再び開始します。これは各アイテムがプロセッサに入るごとに続きます。トークンは、[低速2]を終了すると先頭に戻り、パターンを続けます。
シミュレーションを一時停止し、サブフローのトークンの1つをクリックすると、トークン間の親子接続を示す青い線が表示されます。
ロジックはコーディングせずに簡単に作成できるだけでなく、プロセッサが処理時間のセットのどこにあるかを目視できます。これは貴重なデバッグツールとして使用できます。または統計を収集する際に役立ちます。統計は、アクティビティまたは領域に対して個別にまたは集合的に収集し、プロセッサが一定の状態でどれくらいの時間を費やしたかを記録できます。
次のチュートリアルタスクでは、複数の終了アクティビティを追加してサブフローを構築する別の方法について学習します。チュートリアルタスク3.2 - 複数の終了アクティビティを追加するに進みます。