タスク実行者の概念

タスク実行者とは

タスク実行者は、ライブラリ内のいくつかのオブジェクトの最上位クラスです。オペレーター、トランスポーター、ASRS搬送車、クレーン、その他のモバイルリソースは、タスク実行者クラスを継承します。これらのオブジェクトはすべて、移動やフローアイテムのロード/アンロードを実行したり、処理ステーションの共有リソースとして機能したり、その他多数のシミュレーションタスクを実行したりできます。

タスク実行者とそのサブクラスは次のことができます。

  • タスクシーケンスの実行
  • オフセット移動の実行

タスク実行者は、ディスパッチャークラスのサブクラスでもあるため、実際には他のチームメンバーにタスクシーケンスをディスパッチするチームリーダーとして機能できます。しかし、その処理とディスパッチロジックはディスパッチャーとは微妙に異なります。タスク実行者は、タスクシーケンスを受信すると、まずアクティブなタスクシーケンスがすでにあるかどうかを確認します。アクティブなタスクシーケンスがない場合、または新しく受信したタスクシーケンスがプリエンプトで、現在アクティブなタスクシーケンスよりも優先度が高い場合は、新しいタスクシーケンスの実行を開始し、必要に応じてアクティブなタスクシーケンスをプリエンプトします。それ以外の場合は、通常のディスパッチャーロジックを実行します。タスクシーケンスがすぐに渡されない場合は、タスク実行者のタスクシーケンスキューに入れられます。タスク実行者がアクティブなタスクシーケンスを完了したときにそのタスクシーケンスがまだキューに残っている場合、タスク実行者はそのタスクシーケンスを実行します。

ユーザー定義プロパティ

すべてのタスク実行者には、モデラーが定義できる次のフィールドがあります。

  • 容量 - このパラメータは、オブジェクトの最大コンテンツの値を定義します。デフォルトのオペレーションでは、オブジェクトがこの値よりも多くのフローアイテムをロードすることは決してありません。
  • 最大速度、加速、減速 - これらはタスク実行者の最大速度、加速、減速を定義します。最大速度は単位時間あたりの長さの単位で定義され、加速と減速は単位時間の二乗あたりの長さの単位で定義されます。たとえば、モデルをメートルと秒で定義する場合、速度値はm/sです。これらの値は、TASKTYPE_TRAVELやTASKTYPE_TRAVELTOLOCなどのタスクタイプの実行中にオブジェクトのピーク速度と速度変化を定義する際に使用されます。
  • ロード/アンロードタスクのオフセットを移動 - この値は、タスク実行者がフローアイテムをロードまたはアンロードするときに、ロード/アンロード位置へのオフセット移動を実行する必要があるかどうかを決定します。たとえば、このチェックボックスがオンになっておらず、タスク実行者がネットワーク上を移動している場合、タスク実行者はロード/アンロードステーションにあるネットワークノードにのみ移動し、ロードを実行している間、そのノードにとどまります。
  • 移動中に回転 - ここでは、移動する方向にオブジェクトを回転させるかどうかを指定できます。これはモデル出力には影響しません。視覚的な目的のためだけに使用されます。
  • Load Time - 詳細については、[Load Time]イベントを参照してください。
  • Unload Time - 詳細については、[Unload Time]イベントを参照してください。
  • 中断先の要件 - このフィールドは、タスク実行者が中断タスクまたはcallsubtasksタスクに到達すると実行されます。戻り値はタスクシーケンスに参照されます。このフィールド内のロジックでは、タスク実行者のタスクシーケンスキューを検索し、中断先として適切なタスクシーケンスを見つける必要があります。

オフセット移動

オフセット移動は、さまざまなタイプのオブジェクトが同じ移動インターフェイスを使用しながらも、異なる方法で移動できるようにするメカニズムです。たとえば、あるオブジェクトが所定のベイとラックレベルにアイテムを配置するとします。この場合、オブジェクトがアイテムをドロップする適切な位置に移動する方法は、オブジェクトのタイプによって異なります。オペレーターはベイの位置まで歩き、アイテムを所定のレベルに配置します。トランスポーターはベイに移動しますが、そのフォークを適切な高さにリフトする必要があります。トランスポーターはx方向とy方向の両方に移動できますが、z方向に移動できるのはそのフォークだけです。ASRS搬送車はそれ自体のx軸に沿ってのみ移動し、そのプラットフォームを所定の高さに持ち上げ、ラックからアイテムをプルします。このように移動の実行方法はオブジェクトごとに異なりますが、適切な場所に移動してラックにアイテムを配置するというインターフェイスは同じです。オフセット移動は、基本的にタスク実行者の各サブクラスを区別する唯一のものです。各サブクラスがオフセット移動をどのように実行するかの詳細については、オブジェクトのヘルプページの「詳細」セクションを参照してください。オフセット移動は、次のタスクで使用されます。

  • ロード
  • アンロード
  • traveltoloc
  • travelrelative
  • pickoffset
  • placeoffset

オフセット移動インターフェイスは非常にシンプルです。すべてのタイプのオフセットリクエストは、x、y、zのオフセット距離、ときにはフローアイテムへの参照に変換されます。たとえば、あるオブジェクトに位置(5,0,0)へのtraveltolocタスクを与え、そのオブジェクトの現在の位置が(4,0,0)の場合、そのオブジェクトは自動でそのタスクを(1,0,0)のオフセットリクエストに変換します。これはx方向に1単位を移動する必要があることを意味します。travelrelativeタスクは直接変換されます。たとえば、(5,0,0)へのtravelrelativeタスクは、オブジェクトにx方向に5単位移動するよう指示します。「ロード/アンロードタスクのオフセットを移動」チェックボックスがオンになっている場合は、ロード/アンロードタスクでもオフセット移動が使用されます。オブジェクトがステーションからフローアイテムをロードする必要がある場合は、ステーションにアイテムの位置を問い合わせます。また、アイテムをアンロードする必要がある場合は、ステーションにアイテムをアンロードする位置を問い合わせます。ステーションはx/y/zのオフセット距離を返し、タスク実行者はこの距離を使用してオフセットを移動します。また、ロード/アンロードタスクの場合は、タスク実行者のオフセットリクエストにアイテムへの参照が含まれています。これは、オブジェクトのタイプに応じて、オブジェクトの移動方法に影響する場合と影響しない場合があります。たとえば、トランスポーターのオフセット移動メカニズムの実装では、アイテムが存在する場合、つまりトランスポーターがアイテムをロードまたはアンロードしている場合、トランスポーターはフォークをz方向にリフトします。アイテムが存在しない場合、つまりトランスポーターがtraveltolocまたはtravelrelativeタスクを実行している場合は、フォークをリフトする代わりに実際にz方向に移動します。

オフセット値は、オブジェクトのx/y中心とオブジェクトのz基点を基準にして計算します。たとえば、ロボットは位置(0,0,0)に配置されます。サイズは(2,2,1)です。これからx/y中心とz基点は位置(1,-1,0)として計算できます(注:yサイズは負のy軸に沿って伸長します)。すべてのオフセット計算は、この(1,-1,0)位置を使って行う必要があります。ロボットにtraveltolocタスクを渡すとこの計算が自動で行われますが、この位置を手動で計算し、travelrelativeタスクを使用することが必要になる場合があります。ロボットに(1,0,0)のtravelrelativeタスクを与えた場合、正確な移動位置は、ロボットのx/y中心とz基点の1単位右側になります。これは位置(2,-1,0)に変換されます。これは、ロボットが、それ自体の位置が(2,-1,0)になるように移動するという意味ではありません。また、x/y中心とz基点がその位置になるように移動することもありません。ロボットなので、回転し、アームの先端が位置(2,-1,0)になるようにアームを伸ばします。実際の位置はまったく変わりません。したがって、オブジェクトのx/y中心とz基点からの計算を使用すれば、すべてのオブジェクトに共通でありながらも、各タイプのオブジェクトがそれぞれ異なる方法で扱うことができる、望ましい目的地を指定できます。

イベント

次のセクションでは、タスク実行者のイベントに関する重要な考慮事項について説明します。イベントの詳細については、「イベントリスニング」ページを参照してください。

On Entry

OnEntryイベントは、TaskExecuterがフローアイテムを受け取ったときに起動します。これには、アイテムがTaskExecuterに移動したときに加えて、TaskExecuterがアイテムをロードしたときも含まれます。

次のパラメータがあります。

イベントパラメータ タイプ 説明
Entering Item オブジェクト オブジェクトに入ったフローアイテム。
Input Port 整数 フローアイテムが入った入力ポート番号。

On Exit

OnExitイベントは、TaskExecuterがフローアイテムを送ったときに起動します。これには、アイテムがTaskExecuterから離れて移動したときに加えて、TaskExecuterがアイテムをアンロードしたときも含まれます。

次のパラメータがあります。

イベントパラメータ タイプ 説明
Exiting Item オブジェクト オブジェクトから出るフローアイテム。
Output Port 整数 フローアイテムが出る出力ポート番号。

On Load

On Loadイベントは、フローアイテムがオブジェクトにロードされるたび、ロード時間が完了した後に起動します。このイベントは、オブジェクトのOn Loadトリガーを実行します。

次のパラメータがあります。

イベントパラメータ タイプ 説明
Loaded Item オブジェクト オブジェクトによってロードされたフローアイテム。
From Station オブジェクト タスク実行者がロードしたオブジェクト。

Load Time

Load Timeイベントは、各ロードタスクの開始時に起動します。タスク実行者がロードタスクとアンロードタスクのオフセットを移動するように構成されている場合は、最初に正しいオフセットを移動し、ロード時間を開始することに注意してください。したがって、ロード時間はオフセット移動時間の最後に加算されます。オフセット移動時間の一部ではありません。

次のパラメータがあります。

イベントパラメータ タイプ 説明
Item オブジェクト ロードされるフローアイテム。
Station オブジェクト タスク実行者がロードするオブジェクト。

[Load Time]フィールドの戻り値は、タスク実行者がフローアイテムをロードして次のタスクに移るまで待機する遅延時間です。

On Unload

On Unloadイベントは、フローアイテムがオブジェクトからアンロードされるたび、アンロード時間が完了した後に起動します。このイベントは、オブジェクトのOn Unloadトリガーを実行します。

次のパラメータがあります。

イベントパラメータ タイプ 説明
Unloaded Item オブジェクト アンロードされるフローアイテム。
To Station オブジェクト タスク実行者がアンロードする必要があるオブジェクト。

Unload Time

Unload Timeイベントは、各アンロードタスクの開始時に起動します。タスク実行者がロードタスクとアンロードタスクのオフセットを移動するように構成されている場合は、最初に正しいオフセットを移動し、ロード時間を開始することに注意してください。したがって、ロード時間はオフセット移動時間の最後に加算されます。オフセット移動時間の一部ではありません。

次のパラメータがあります。

イベントパラメータ タイプ 説明
Item オブジェクト アンロードされるフローアイテム。
Station オブジェクト タスク実行者がアンロードするオブジェクト。

[Unload Time]フィールドの戻り値は、タスク実行者がフローアイテムをアンロードして次のタスクに移るまで待機する遅延時間です。

On Receive Task Sequence

On Receive Task Sequenceイベントは、タスク実行者が新しいタスクシーケンスを受信するたびに起動します。このイベントは、On Receive Task Sequenceトリガーを実行します。

次のパラメータがあります。

イベントパラメータ タイプ 説明
Task Sequence ツリーノード タスク実行者が受信したタスクシーケンス。

On Start Task

On Start Taskイベントは、タスク実行者によって新しいタスクが開始されるたびに起動します。

次のパラメータがあります。

イベントパラメータ タイプ 説明
Task Sequence ツリーノード タスクが含まれているタスクシーケンス。
Task Rank 整数 開始されるタスクのタスクシーケンス内のランク。
Task Type 整数 開始されるタスクのタイプ(TASKTYPE_LOADなど)。

On Finish Task

On Finish Taskイベントは、タスク実行者によってタスクが完了されるたびに起動します。

次のパラメータがあります。

イベントパラメータ タイプ 説明
Task Sequence ツリーノード タスクが含まれているタスクシーケンス。
Task Rank 整数 完了されるタスクのタスクシーケンス内のランク。
Task Type 整数 完了されるタスクのタイプ(TASKTYPE_LOADなど)。

On Preempt

On Preemptイベントは、タスク実行者が別のタスクシーケンスを処理するためにアクティブなタスクシーケンスからプリエンプトされると起動します。

次のパラメータがあります。

イベントパラメータ タイプ 説明
Preempted Task Sequence ツリーノード プリエンプトされるアクティブなタスクシーケンス。
Task Rank 整数 プリエンプトされたときにタスク実行者が処理していたタスクのランク。
Task Type 整数 プリエンプトされたときにタスク実行者が処理していたタスクのタイプ(TASKTYPE_LOADなど)。
Preempting Task Sequence ツリーノード アクティブなタスクシーケンスをプリエンプトしたタスクシーケンス。

Break To

Break Toイベントは、タスク実行者が「中断」タスクを実行するときにのみ起動します。標準のタスクシーケンスは、移動 - ロード - 中断 - 移動 - アンロードのタスクシーケンスで構成されます。

タスク実行者が中断タスクを受信した場合、タスク実行者は、現在アクティブなタスクシーケンスをキューに戻し、現在のタスクシーケンスを終了する前に実行する必要があるタスクシーケンスが他にあるかどうかを確認してもよいという通知を受けたことになります。これにより、複数のアイテムをドロップする前にロードするなどの機能が可能になります。このような場合、タスク実行者はまず、現在「マルチタスク処理」が可能であることを確認します。これは「コンテンツを処理する余力があるか」と自問することによって行われます。このチェックボックスがオンの場合、[Break To]フィールドを実行して中断先のタスクシーケンスを検索します。新しいタスクが終了すると、タスク実行者は元のタスクシーケンスに戻ります。

次のパラメータがあります。

イベントパラメータ タイプ 説明
Active Task Sequence ツリーノード 中断タスクが開始されたときにタスク実行者が処理しているタスクシーケンス。

[Break To]がNULLを返した場合、タスク実行者は一切中断しません。有効なタスクシーケンスが返された場合は、中断して新しいタスクシーケンスに切り替えて、そのタスクシーケンスを実行します。

On Resource Available

このイベントは、ディスパッチャーとタスク実行者で動作が少し異なります。ディスパッチャーの場合は、下流のタスク実行者が利用可能になるたびにイベントが起動します。タスク実行者の場合は、そのイベント実行者がタスクシーケンスを終了するたびにイベントが起動します。タスク実行者がディスパッチャーである場合、つまりタスクをディスパッチするチームを持っている場合は、両方のケースでイベントが起動します。

次のパラメータがあります。

イベントパラメータ タイプ 説明
Output Port 整数 このイベントがディスパッチャーで起動するものである場合、これは利用可能なタスク実行者の出力ポート番号です。
Resource オブジェクト 利用可能になったタスク実行者。
Next Task Sequence ツリーノード タスク実行者のタスクシーケンスが入っている場合、これは次に実行されるタスクシーケンスになります。
Finished Task Sequence ツリーノード 完了したばかりのタスクシーケンス。このタスクシーケンスは、このイベントが完了すると破棄されます。

On Resource Availableトリガーが0を返した場合、ディスパッチャー/タスク実行者はそれ自体のディスパッチロジックを実行します。関数が1を返した場合、ディスパッチャー/タスク実行者は何も行わず、TaskSequence.move()メソッドとTaskSequence.dispatch()メソッドを使用するこのトリガーのディスパッチロジックがすべて完了したと想定します。

Pass To

この関数は、ディスパッチャーがタスクシーケンスを受信すると起動し、ディスパッチャーがタスクシーケンスを渡す出力ポートを返します。0が返された場合、タスクシーケンスは、使用可能なディスパッチャーまたはタスク実行者にタスクシーケンスを渡せるようになるまで、定義されたキュー方法に従って自動でキューに入れられます。0より大きい値が返された場合、タスクシーケンスは返されたポート番号にすぐに送信されます。-1の値が返された場合、ディスパッチャーは何も行わず、TaskSequence.move()メソッドとTaskSequence.dispatch()メソッドを使用するパス先関数のディスパッチロジックがすべて完了したと想定します。

このイベントにはパラメータがありません。

Queue Strategy

このイベントにはパラメータがありません。

On Message

On Messageイベントは、オブジェクトのメッセージ時トリガーを起動させます。このイベントは、オブジェクトがメッセージを受信すると起動します。

次のパラメータがあります。

イベントパラメータ タイプ 説明
Sending Object オブジェクト メッセージを送信したオブジェクト。
Message Param 1 バリアント これはメッセージを介して渡されたパラメータであり、数値、文字列、ツリーノード、配列になります。
Message Param 2 バリアント これはメッセージを介して渡されたパラメータであり、数値、文字列、ツリーノード、配列になります。
Message Param 3 バリアント これはメッセージを介して渡されたパラメータであり、数値、文字列、ツリーノード、配列になります。

On Stop

このイベントは、Object.stop()を使用したコードか、タイムテーブルまたはMTBF/MTTRツールを使用することによってオブジェクトが停止したときに起動します。

次のパラメータがあります。

イベントパラメータ タイプ 説明
# Stop Requests 整数 オブジェクトに与えられた停止リクエストの数。この数には現在の停止リクエストが含まれます。
State 整数 停止中のオブジェクトが入る状態。
ID 整数 停止リクエストのIDまたはキー。
Priority 倍精度浮動小数点数 停止リクエストの優先度。
State Profile 整数 新しい状態のプロファイル番号。デフォルトの状態プロファイルは0です。

On Resume

このイベントは、Object.resume()を使用したコードか、タイムテーブルまたはMTBF/MTTRツールを使用することによってオブジェクトが再開したときに起動します。

次のパラメータがあります。

イベントパラメータ タイプ 説明
# Stop Requests 整数 オブジェクトに残っている停止リクエストの数。
ID 整数 再開リクエストのIDまたはキー。
State Profile 整数 オブジェクトが停止したときの状態のプロファイル番号。デフォルトの状態プロファイルは0です。

On Content Change

このイベントは、オブジェクトのコンテンツが変更されるたびに起動します。これは、フローアイテムがオブジェクトにロードされたとき、またはオブジェクトからアンロードされたときに発生します。

このイベントにはパラメータがありません。

On Input Change

このイベントは、フローアイテムがオブジェクトにロードされたときに起動します。

このイベントにはパラメータがありません。

On Output Change

このイベントは、フローアイテムがオブジェクトからアンロードされたときに起動します。

このイベントにはパラメータがありません。

On Staytime Change

このイベントは、On Output Changeイベントの直後に、フローアイテムがオブジェクトからアンロードされたときに起動します。

このイベントにはパラメータがありません。

On State Change

このイベントは、オブジェクトの状態が変化すると起動します。このイベントでは、オブジェクトの状態が特定の状態に変化するのをリッスンしたり、オブジェクトの状態を追跡記録したりできます。

次のパラメータがあります。

イベントパラメータ タイプ 説明
State Profile Node ツリーノード [To State]がデフォルトの状態プロファイルにある場合、このパラメータはNULLです。それ以外の場合、このパラメータは、オブジェクトのstate_profile属性ノードにあるState Profile Node(追跡変数)の参照です。
To State 整数 オブジェクトが設定される状態番号。
From State 整数 新しい状態が設定される前のオブジェクトの状態番号。

On State Value Change

On State Value Changeイベントは、オブジェクトの状態統計を保存する追跡変数に関連付けられます。このイベントをリッスンすると、変更ルールを使用できます。このイベントは、On State Changeイベントと同時に起動します。

このイベントには状態プロファイル番号が必要です。デフォルトの状態プロファイルを使用している場合、この番号は0です。

On Reset

リセット時イベントは、モデルがリセットされたとき、オブジェクトごとに起動します。

このイベントにはパラメータがありません。

On Draw

On Drawイベントは、3Dビューが再ペイントされるたびに起動します。これは、実行速度と更新レートに応じて、さまざまなタイミングで発生します。モデルの再現性を確認するために、On Drawトリガーで使用されるコードでは、FlexSimの乱数ジェネレータを使用するstochasticsコマンド(distributions)を使用しないでください。

次のパラメータがあります。

イベントパラメータ タイプ 説明
View ツリーノード オブジェクトが描画されているビュー。複数の3Dビューを開いていると、それぞれのビューでOn Drawイベントが起動します。

プロパティ

タスク実行者でサポートされるプロパティ名は次のとおりです。

プロパティタイプ
Acceleration単位
AvailableOnStartブール値
BreakToコード
Capacity数字
Deceleration単位
DoAnimationsブール値
ExtensionSpeed単位
FlipThreshold数字
LiftSpeed単位
LoadTime単位コード
MaxSpeed単位
OffsetTravelオプション
PassToコード
QueueStrategyコード
UnloadTime単位コード

状態

タスク実行者の状態は、タスク実行者が実行するタスクのタイプに完全に依存します。多くのタスクはハードコードされた状態に関連付けられますが、一部のタスクでは、タスク実行者がそのタスクを実行するときの状態をモデラーが明示的に指定できます。次に、よくあるタスク実行者の状態をいくつか示します。

タスク実行者の状態は次のとおりです。

アイドル

オブジェクトはどのタスクも実行していません。

空の移動

オブジェクトはフローアイテムをロードせずに目的地オブジェクトに移動しています。この状態は、TASKTYPE_TRAVELタスクにのみ関連付けられます。

ロードした状態での移動

オブジェクトは目的地オブジェクトに移動しており、1つ以上のフローアイテムをロードしています。この状態は、TASKTYPE_TRAVELタスクにのみ関連付けられます。

空のオフセット移動

オブジェクトはオフセット移動を実行しており、フローアイテムをロードしていません。

ロードした状態でのオフセット移動

オブジェクトはオフセット移動を実行しており、1つ以上のフローアイテムをロードしています。

ロード中

オブジェクトはフローアイテムをロードしています。この状態はTASKTYPE_LOADタスクに対応し、オブジェクトがオフセット移動を完了し、アイテムをロードする前にモデラー定義のロード時間を待機している時間にのみ適用されます。

アンロード中

オブジェクトはフローアイテムをアンロードしています。この状態はTASKTYPE_UNLOADタスクに対応し、オブジェクトがオフセット移動を完了し、アイテムをアンロードする前にモデラー定義のアンロード時間を待機している時間にのみ適用されます。

活用

オブジェクトはステーションで活用されています。この状態は、通常、オペレーターがステーションに到着し、処理、設定、または修理時に活用されているときにオペレーターに対して使用されます。活用状態は、通常はTASKTYPE_UTILIZEタスクに関連付けられますが、このタスクでは別の状態を指定することもできます。TASKTYPE_DELAYなどのその他のタスクタイプでも活用状態を使用できます。

ブロックされました

オブジェクトは現在移動していますが、ネットワーク上でブロックされています。

統計

次のセクションでは、タスク実行者の統計に関する重要な考慮事項について説明します。

State

カテゴリ追跡変数は、各オブジェクトの状態履歴を収集するために使用されます。このデータを使用して、各状態の合計時間を取得したり、ダッシュボード上にオブジェクトの現在の状態を表示したり、モデル実行全体の状態履歴を表示したりできます。詳細については、「ダッシュボード」、「統計コレクター」、「追跡変数」のページを参照してください。

スループット

スループットは、入力統計と出力統計で構成されます。タスク実行者によってロードされたフローアイテムごとに、入力が1ずつ増加します。フローアイテムがアンロードされると、出力が1だけ増加します。スルーアウトの統計は常に増加します。

コンテンツ

コンテンツ統計には、タスク実行者の内部にあるフローアイテムの数が記録されます。オブジェクトのコンテンツは、モデルの実行中に増減できます。コンテンツ統計からは、最小値、最大値、平均値を含む追加データを収集することもできます。このデータはモデル実行全体から計算されます。

滞在時間

滞在時間統計は、タスク実行者がアンロードするフローアイテムごとに記録されます。滞在時間は、Unload Time - Load Timeと同じです。滞在時間統計からは最小値、最大値、平均値を含む追加データを収集することもできます。このデータはモデル実行全体から計算されます。

移動距離

タスク実行者の合計移動距離は、移動タスクが実行されるときに記録されます。