サブ処理フロー(略してサブフロー)は、異なる処理フローで別のアクティビティやイベントによってトリガーされたときに実行される別個の処理フローです。サブフローは、シミュレーションモデルまたは一般的な処理フローの特定のイベントによってトリガーされたときに実行される、自己完結型ロジックをまとめたものです。プログラミング用語に精通している場合は、サブフローを関数またはサブルーチンと同様に考えることができます。
サブフローは必要に応じて細分化し、処理フローの複数の場所に処理フローアクティビティの特定のブロックを作成できます。サブフローを使用すると、メイン処理フローの特定のアクティビティやイベントによってトリガーされる、より複雑なプロシージャを計算したり、シミュレーションを実行したりできます。サブフローで簡単な計算を実行して、プロセッサの処理時間を動的に決定できます。または、サブフローにタスクシーケンスを含めて、シミュレーションの実行中に特定のポイントで複数の異なるタスク実行者がこれを使用できます。
たとえば、ある種の組立ラインをシミュレーションするとします。アイテムが組立ラインから出てくると、アイテムの合格または不合格を決める一連の品質保証手順を経る必要があります。トークンが処理フローの特定のアクティビティに到達するとトリガーされるサブフローを使用して、これをシミュレーションできます。
以下のリストは、サブフローの仕組みを最初から最後まで説明したものです。
前のアクティビティで説明したように、サブフローは通常、トークンがメイン処理フローで[サブフローを実行]アクティビティまたは[トークンを作成]アクティビティに入るとトリガーされます。使用すべきアクティビティは、サブフローを使用する目的によって異なります。次のテーブルに示すように、これらの2つのアクティビティには2つの大きな違いがあります。
親トークンは待機する必要がありますか? | 子トークンを[開始]アクティビティなどに送信しますか? | |
---|---|---|
サブフローを実行 | 子トークンがメイン処理フローの次のアクティビティにリリースされる前にサブフローを完了するまで、親トークンを待機させる場合は、[サブフローを実行]アクティビティを使用します。 | [サブフローを実行]アクティビティは、子トークンを[開始]アクティビティにのみ送信できます。 |
トークンを作成 | 親トークンで子トークンを作成し、メイン処理フロー内の次のアクティビティにただちにリリースする場合は、[トークンを作成]アクティビティを使用します。 | [トークンを作成]アクティビティは、サブフロー内の任意のアクティビティにトークンを送信できます。 |
次の画像は、シミュレーションの実行中の簡単な内部サブフローの例です。
内部サブフローは、既存の処理フロー内のサブフローです。内部サブフローは、基本的に[開始]アクティビティで始まり[終了]アクティビティで終了する、アクティビティの独立したブロックです。したがって、[開始]アクティビティで始まるアクティビティのブロックを作成すれば、内部サブフローを作成できます。アクティビティのブロックを作成したら、メイン処理フローにリンクします。詳細については、「サブフローにリンクする」を参照してください。
次の画像は、シミュレーション実行中の外部サブフローの例を示しています。
外部サブフローは、最初に作成されたときにサブフロータイプを割り当てられた、別個の処理フローです。独自の別ウィンドウがあり、[ツールボックス]に別個の処理フローとして表示されます。
外部サブフローを作成するには:
[トークンを作成]アクティビティからサブフローにリンクする場合は、[目的地]プロパティの隣にあるサンプラーボタン を使用して、子トークンを作成するアクティビティ(サブフロー内)を選択できます。
[サブフローを実行]アクティビティからサブフローにリンクするには:
固定リソースの一部のプロパティには、サブフローを開始できるメニューオプション(ピックリスト)があります。たとえば、[ポートに送信]プロパティには、サブフローを参照できるメニューオプションがあります。このサブフローを使用して、どの出力ポートがフローアイテムを受け取るべきかを決定するロジックを実装できます。
ピックリストを使用して、タスクシーケンスのサブフローを参照することもできます。たとえば、設定時間中または処理時間中にタスク実行者を使用するようプロセッサの設定を変更できます。設定、処理、または輸送中に複雑な一連のタスクを完了するためにタスク実行者が必要な場合は、処理フロー上にタスクシーケンスを作成できます。次に、プロセッサの設定、処理中、または輸送のプロパティで選択した[ProcessFlow:タスクシーケンスのサブフローを使用]を使用して、そのタスクシーケンスを開始します。
[開始]アクティビティは、次の画像のサブフロー例に示すように、複数の[終了]アクティビティに接続できます。
同様に、複数の[開始]アクティビティが同一の[終了]アクティビティを共有することがあります。技術的には、各[開始]アクティビティは異なるサブフローの始まりになります。次の画像は、この種のサブフローの例を示しています。
このセクションを読む前に、「サブフローの仕組み」のセクションで説明した親トークンと子トークンの定義を理解していることを確認してください。
サブフローを使用する利点の1つは、親トークンと子トークンのラベル間にリンクを作成できることです。シミュレーションの実行中に親トークンのラベルを更新するよう、子トークンを設定することもできます(逆も同様)。最終的に、親トークンと子トークンのラベルの間に構築する関係は、処理フローのロジックに大きな影響を与えます。そのため、メイン処理フロー上の親トークンとサブフロー上の子トークンとの論理的関係について注意深く考える必要があります。
ラベルアクセスのルールと戦略については、[トークンを作成]アクティビティの参照ページで詳しく説明しています。[次の形式で作成]および[ラベルアクセス]プロパティと、そこにリストされている後続のプロパティに特に注意してください。
親子関係が作成されると、親トークンはデフォルトで処理フロービューにある子の数を表示します。これらの設定は、必要に応じて[処理フローのプロパティ]ページで変更できます。詳細については、「処理フローのビジュアルを変更する」を参照してください。
子トークンをクリックすると、クイックプロパティには、次の画像の例に示すように、子トークンが所有するすべてのラベルと、その子トークンがアクセスできる親トークンのラベルがすべて表示されます。
子ラベルにアクセスできないラベルは、このリストに表示されません。
次のテーブルで、ラベルの記号の意味を説明します。
記号 | 意味 |
---|---|
(P) | ラベルは親が所有しています |
(PP) | ラベルは親の親(祖父母)、またその先々の親が所有しています。 |
+ | これがPの隣にあるとき、子トークンがラベルを書き込める(設定できる)ことを意味します。 |
たとえば、上の画像の例では、次のようになります。
親トークンにアクセスするには、プロパティフィールドに次のように入力します。
token.parent
子トークンには、親を介して、次のコマンドを使用してランクごとにアクセスできます。
token.children[1]
親が持つ子の数を得るには、次のコマンドを使用します。
token.children.length