処理フローを3Dモデルにリンクする
処理フローの3Dモデルへのリンクの概要
処理フローは、必要に応じてシミュレーションモデルから単独で実行できます。ただし、処理フローは3Dモデルにリンクされているときに最も役立ちます。処理フローを使用すると複雑なロジックをモデルに組み込むことできるようになり、複雑なカスタムFlexScriptコードを使用する必要がなくなります。また、必要に応じて、処理フローによってモデルロジックのトラブルシューティングを簡単にすることもできます。その点を考慮して、このトピックでは、処理フローを標準的なシミュレーションモデルと統合する方法について説明します。
処理フローを3Dモデルに接続する主な方法は、イベントリスニングによるものです(この時点で、イベントという用語の意味がよくわからない場合は、「イベントについての主要な概念」を参照してください)。イベントリスニングの処理フローアクティビティは、シミュレーションモデルで特定のイベントをリッスンして、イベントが発生したときに次の下流アクティビティにトークンを作成またはリリースするように設定できます。
処理フローを3Dモデルに接続する別の方法では、処理フローライブラリで[オブジェクト]アクティビティを使用します。たとえば、[オブジェクトを作成]アクティビティは、ソースと同じように機能して、フローアイテムを作成し、3Dモデルに配置します。[オブジェクトを破棄]アクティビティは、シンクのように機能して、モデルからフローアイテムを削除します。また、[オブジェクトを移動]アクティビティでは、モデル内の1つのオブジェクトから別のオブジェクトにフローアイテムを即座に移動できます。
[オブジェクト]アクティビティの使用はかなり直感的なため、このトピックでは詳細を説明しません。このトピックの残りの部分では、イベントリスニングのアクティビティを使用して処理フローを3Dモデルに接続する方法に焦点を当てます。
イベントリスニングのアクティビティ
イベントをリッスンできる処理フローアクティビティは次の2つです。
- イベントトリガーソース - このアクティビティはシミュレーションモデルで発生する特定のイベントをリッスンします。そのイベントが発生すると、1つ以上の新しいトークンが作成され、処理フローの次のアクティビティにトークンが送信されます。トリガーイベントで処理フローを開始させる場合、イベントトリガーソースを使用します。
- イベントを待つ - このアクティビティはトークンを受け取った後、トークンを保持しながらシミュレーションモデル(または処理フロー)で特定のイベントが発生するのを待ちます。そのイベントが発生すると、処理フローの次のアクティビティにトークンがリリースされます。必要であれば、「イベントを待つ」を[決定]アクティビティのように動作させることもできます。つまり、「イベントを待つ」アクティビティは、シミュレーションモデルの特定の条件に基づき、次の異なるアクティビティにトークンを送信することがあります。
イベントリスニングの要件
イベントリスニングのアクティビティのいずれかが3Dモデルにリンクされている場合、次の2つの基本的な質問に答える必要があります。
- このアクティビティはどのオブジェクトをリッスンしますか?
- そのオブジェクトのどのイベントがトークンの作成、リリースをトリガーしますか?
つまり、イベントリスニングアクティビティを設定するには、オブジェクトとイベントの両方が必要になります。これらの2つの要件は、[イベントを待つ]アクティビティと[イベントトリガーソース]アクティビティの[オブジェクト]プロパティおよび[イベント]プロパティと相関関係を持ちます。
オブジェクト
リンク先のオブジェクトを決定する際、いくつかの選択肢があります。
- 静的オブジェクト - 3Dオブジェクトや処理フロー内の別のアクティビティなど、シミュレーションモデル内の特定の静的オブジェクトにリンクできます。
- 動的オブジェクト - 一般的な処理フローを除くすべての処理フローでオブジェクトを
current
に設定できます。イベントリスニングアクティビティは、その処理フローの各インスタンスに関連付けられているオブジェクトをリッスンします(詳細については、「処理フローインスタンス」を参照してください)。 - オブジェクトのグループ - オブジェクトのグループにリンクできます。アクティビティは、そのグループのいずれかのメンバーでイベントが起動するとリッスンします。
- フローアイテムまたはトークン - フローアイテムまたはトークンに動的にリンクできます。たとえば、フローアイテムが固定リソースから出たり、トークンがアクティビティから離れたりするのをリッスンできます。
- モデリングツール - ツールボックスにあるツールの多くは、リッスンできるイベントに関連付けられています。これは特に、ダウンタイムやアップタイムをリッスンできるタイムテーブルのようなオブジェクトに便利です。
イベント
一般に、2つの異なるタイプのイベントがあります。
- 標準イベント - シミュレーション実行中に発生する通常のシミュレーションイベントで、固定リソースに入るアイテムや処理フローのアクティビティに入るトークンなどがあります。各イベントにはトリガーが関連付けられており、そのイベントが発生したときに起動します。シミュレーションイベントとトリガーのより詳しい説明については、「イベントについての主要な概念」を参照してください。
- 統計イベント - 統計イベントは、オブジェクトの統計値が変更されたとき、またはオブジェクトが特定の状態になったときに発生します。たとえば、キュー内のアイテム数が変化するタイミングやプロセッサがアイドル状態になるタイミングなどをリッスンできます。
選択したアクティビティがシミュレーションモデルで発生するたびに、イベントリスニングアクティビティは、トークンを作成、リリースします。
イベントリスニングのアクティビティの設定
イベントリスニングのアクティビティの設定方法は、リッスン対象のオブジェクトの種類によって異なります。次のセクションでは、さまざまな種類のオブジェクトをリッスンする方法について説明します。
静的オブジェクトをリッスンする
静的オブジェクトのイベントリスニングを設定する前に、リッスンするオブジェクトが3Dモデルまたは処理フローに追加されていることを確認してください。
静的オブジェクトのイベントリスニングを設定するには:
- 処理フロータブがアクティブになっている状態で、イベントを待つまたはイベントトリガーソースを処理フローに追加します。
- 次の画像に示すように、アクティビティのアイコンをクリックし、そのプロパティを開きます。
- [オブジェクト]ボックスの横にある[サンプラー]ボタン をクリックし、サンプリングモードにします。リッスンするオブジェクトをクリックします。これでメニューが開きます。そのメニューには、そのオブジェクトで利用可能なすべてのイベントが一覧表示されます。メニューから適切なイベントを選択します。
- 選択したオブジェクトとイベントは、アクティビティのプロパティにある[オブジェクト]ボックスと[イベント]ボックスの両方に表示されます。選択したイベントのタイプに基づいて、追加プロパティの一部がアクティビティのプロパティで使用できるようになりました。
動的オブジェクトをリッスンする
一般的な処理フローでは動的オブジェクトをリッスンできないことに注意してください。ただし、それ以外の3つの処理フローのタイプでは可能です。
動的オブジェクトのイベントリスニングを設定する前に、3Dモデルまたは処理フローをリッスンするオブジェクトのタイプを少なくとも1つ追加できます。このオブジェクトに直接リンクさせない場合でも、このオブジェクトはそのイベントをサンプリングする際に必要になります。
動的オブジェクトのイベントリスニングを設定するには:
- 処理フロータブがアクティブになっている状態で、イベントを待つまたはイベントトリガーソースを処理フローに追加します。
- 次の画像に示すように、アクティビティのアイコンをクリックし、そのプロパティを開きます。
- このプロパティのデフォルト値である
current
が[オブジェクト]ボックスに表示されていることを確認します。違うものが表示されている場合、[オブジェクト]ボックスの隣にある矢印をクリックして、メニューを開きます。メニューから[現在の(インスタンスオブジェクト)]を選択します。 - [イベント]ボックスの横にある[サンプラー]ボタン をクリックして、サンプリングモードに入ります。リッスンするオブジェクトをクリックします。これでメニューが開きます。そのメニューには、そのオブジェクトで利用可能なすべてのイベントが一覧表示されます。メニューから適切なイベントを選択します。
- 選択したイベントは、アクティビティのプロパティの[イベント]ボックスに一覧表示されます。選択したイベントのタイプに基づいて、追加プロパティの一部がアクティビティのプロパティで使用できるようになりました。
グループをリッスンする
グループのイベントリスニングを設定する前に、まずグループを作成する必要があります。グループに少なくとも1つのメンバーが与えられていることを確認します。このオブジェクトに直接リンクさせない場合でも、このオブジェクトはそのイベントをサンプリングする際に必要になります。
グループのイベントリスニングを設定するには:
- 処理フロータブがアクティブになっている状態で、イベントを待つまたはイベントトリガーソースを処理フローに追加します。
- 次の画像に示すように、アクティビティのアイコンをクリックし、そのプロパティを開きます。
- [オブジェクト]ボックスの横にある矢印をクリックして、メニューを開きます。[グループ]をポイントし、リッスンするグループの名前を選択します。
- [イベント]ボックスの横にある[サンプラー]ボタン をクリックして、サンプリングモードに入ります。リッスンするオブジェクトをクリックします。これでメニューが開きます。そのメニューには、そのオブジェクトで利用可能なすべてのイベントが一覧表示されます。メニューから適切なイベントを選択します。
- 選択したイベントは、アクティビティのプロパティの[イベント]ボックスに一覧表示されます。選択したイベントのタイプに基づいて、追加プロパティの一部がアクティビティのプロパティで使用できるようになりました。
フローアイテムをリッスンする
フローアイテムをリッスンするには、イベントリスナーで動的参照を作成する必要があります。フローアイテムのイベントリスニングを設定する前に、3Dモデルにソースを追加する必要があります。トークンのイベントリスニングを設定する前に、リスニング対象のアクティビティが処理フローに追加されていることを確認する必要があります。
フローアイテムのイベントリスニングを設定するには:
- 処理フロータブがアクティブになっている状態で、イベントを待つまたはイベントトリガーソースを処理フローに追加します。
- 次の画像に示すように、アクティビティのアイコンをクリックし、そのプロパティを開きます。
- [オブジェクト]ボックスの横にある[サンプラー]ボタン をクリックし、サンプリングモードにします。3Dモデルの[ソース]をクリックします。これでメニューが開きます。そのメニューには、そのオブジェクトで利用可能なすべてのイベントが一覧表示されます。メニューから[ソース:作成時]を選択します。
トークンをリッスンする
トークンをリッスンするには、イベントリスナーで動的参照を作成する必要があります。トークンのイベントリスニングを設定する前に、リスニング対象のアクティビティが処理フローに追加されていることを確認する必要があります。
フローアイテムまたはトークンのイベントリスニングを設定するには:
- 処理フロータブがアクティブになっている状態で、イベントを待つまたはイベントトリガーソースを処理フローに追加します。
- 次の画像に示すように、アクティビティのアイコンをクリックし、そのプロパティを開きます。
- [オブジェクト]ボックスの横にある[サンプラー]ボタン をクリックし、サンプリングモードにします。リッスンする処理フローのアクティビティをクリックします。これでメニューが開きます。そのメニューには、トークンで利用できるすべてのイベントがリスト表示されます。メニューから適切なイベントを選択します。
- 選択したオブジェクトとイベントは、アクティビティのプロパティにある[オブジェクト]ボックスと[イベント]ボックスの両方に表示されます。選択したイベントのタイプに基づいて、追加プロパティの一部がアクティビティのプロパティで使用できるようになりました。
ツールをリッスンする
サンプラーを使用し、ツールボックス内のオブジェクトにカーソルを合わせて目的のイベントを選択できます。あるいは、プロパティウィンドウでピックリストにカーソルを合わせて、これらのイベントの1つを選択できます。
利用可能なイベント
フローアイテムには次のイベントがあります。
イベント | 説明 |
---|---|
入るとき | フローアイテムが固定リソースに入るとき、またはタスク実行者オブジェクトによってロードされるときに起動。 |
出るとき | フローアイテムが固定リソースから出るとき、またはタスク実行者オブジェクトによってアンロードされるときに起動。 |
トークンには次のイベントがあります。
イベント | 説明 |
---|---|
入るとき | トークンがアクティビティに入るときに起動。 |
出るとき | トークンがアクティビティから出るときに起動。 |
手動リリース時 | releasetoken()コマンドを使用してトークンがアクティビティから手動でリリースされるときに起動。 |
アセット割り当て時 | トークンが共有アセットを割り当てるときに起動。これには、リソースを取得する、リストにプッシュされてゾーンに入る、リストからプルされたときにバックオーダーを作成するなどが相当します。 |
アセット割り当て解除時 | トークンが共有アセットの割り当てを解除するときに起動。これには、リソースをリリースする、リストからプルされてゾーンを出る、バックオーダーを完了するなどが相当します。 |
ラベル値変更時 | ラベル値が変更されるときに起動。これは、ラベルが追跡変数として格納されている場合にのみ使用できます。 |