タスクロジックに関する主要な概念

タスクロジックシステムの概要

3Dオブジェクトを使用する」に関する章で説明したように、タスク実行者はモデル全体を移動してフローアイテムと相互作用できる3Dオブジェクトです。

シミュレーションモデルで完了するタスクを割り当てることができるため、タスク実行者と呼ばれます。

タスクロジックとは、タスク実行者が関与するあらゆる種類のロジックであり、シミュレーションモデルのロジックを設計する上で最も困難な部分の1つになることがあります。タスク実行者にタスクを完了させることには、いくつかの異なるロジックの問題が関係している可能性があるため、タスクロジックは複雑になる可能性があります。

これらの各問題には、その問題を解決するための独自のシステム、つまり問題解決に使用できる一連のツールまたはプロセスがあります。シミュレーションモデルにはこれらの問題のうちの複数に対する非常にシンプルな答えがあるかもしれません。その場合、ロジックの設定はシンプルかつ簡単でしょう。しかし、ほとんどのシミュレーションモデルは、これらの問題の1つ以上に対して複雑な答えを持っている可能性があります。このトピックでは、これらのさまざまな問題について詳しく説明し、それらを解決するために使用できるツールとプロセスについて説明します。

タスクの生成

タスクロジックの設計にあたり対処する必要がある最初の問題の1つは、どのタスクがタスク実行者により処理される必要があるのかという明白な問題です。タスクは、タスク実行者によって実行される単一の指示またはアクションです。たとえば、タスク実行者は次のことができます。

  • 移動
  • フローアイテムのロードとアンロード
  • プロセッサの設定または操作
  • そして他の多くのさまざまなシミュレーションタスクの実行

シンプルなタスク生成の例

輸送タスクは最も一般的なタスクである傾向があります。そのため、3Dオブジェクトの標準ロジックには、輸送タスクを設定するためのシンプルで簡単な方法がいくつかあります。たとえば、ポート接続を設定した後に、固定リソースの[フロー]タブの[輸送を使用]ボタンをクリックして設定するだけでよい場合があります。3Dオブジェクトは、そのセンターポート接続を使用して、タスクシーケンス全体とタスク実行者がタスクを完了するために必要な情報を含む輸送リクエストを割り当てます。

3Dオブジェクトの標準ロジックを使用して作成できたほぼすべてのタスクを、処理フローを使用することでも実行できることに注意が必要です。主な違いは、処理フローを設計するときに、どのタスクがタスク実行者に割り当てられるかというロジックとその順序について、もう少し慎重に検討する必要があることです。たとえば、シンプルな輸送タスクと同等の処理フローは、次の画像のようになります。

複雑なタスク生成の例

タスク実行者を使用するシミュレーションプロジェクトには、カスタムタスクが必要なものがあります。カスタムタスクの作成に最適なツールは、処理フローツールです。処理フローツールには、よく使用されるタスクのライブラリがあり、それらを組み合わせて任意の数のカスタムタスクシーケンスを作成できます。

処理フローツールに関して留意すべきことの1つは、通常、ほとんどのタスクは、シンプルな移動、遅延、取得アクティビティで表せるということです。たとえば、マシンの変更中にマシンをクリーニングするオペレーターをシミュレーションするとします。これを一連の移動と遅延としてシミュレーションできます。

  1. クリーニングサプライストレージに移動 - オペレーターは、クリーニングサプライが保管されている場所に移動します
  2. サプライを取得 - オペレーターがサプライを取得します
  3. マシンに移動 - オペレーターはその後マシンへ移動します
  4. クリーニングによる遅延 - オペレーターはマシンを遅延させて、マシンのクリーニングと変更の準備にかかる時間をシミュレーションします
  5. クリーニングサプライストレージに戻る - オペレーターは、クリーニングサプライが保管されている場所に戻ります
  6. サプライをリリース - オペレーターは、サプライクローゼットにサプライを戻します。

次の画像は、シミュレーション実行中にこのタスクロジックがどのように機能するかを示しています。

処理フローライブラリで利用可能なアクティビティを使用して、ユーザーが構築したいと考えるタスクのほとんどを構築できます。処理フローライブラリで利用できるタスクアクティビティは、ロード、アンロード、移動、遅延など、シミュレーションモデリングで使用される一般的なタスクのほとんどを網羅しています。ただし、ライブラリの[カスタムタスク]アクティビティを使用して利用できる、事前にプログラムされたタスクがいくつかあります。

これらのカスタムタスクを使用する場合は、「タスクシーケンスクイックリファレンス」を参照してください。[クイックリファレンス]では、各カスタムタスクタイプのプロパティを入力する方法に関する詳細な情報を提供しています。また、各タスクの詳細なガイドへのリンクもあります。

タスクの送付

タスクロジックを設計する際に解決しなければならないもう1つの問題は、どのタスク実行者が必要なタスクを実行するかです。以下はいくつかの関連する質問です。

  • タスクはどのように実行者に割り当てられますか?
  • 複数のタスク実行者がいる場合、どのタスク実行者がタスクを実行しますか?
  • タスクの完了に十分なタスク実行者がいない場合はどうなりますか?
  • 一部のタスクは他のタスクよりも優先されますか?より重要なタスクに他のタスクをプリエンプト(割り込み)させることができますか?
  • 複数のタスク実行者が1つのタスクを達成するために協力する(協調タスクとも言う)必要がある場合はどうなりますか?

シンプルなタスク送付の例

タスク実行者が1人だけのシミュレーションモデルであれば、通常は設定が非常に簡単です。タスク実行者へのセンターポート接続を作成することも、処理フロー内のタスクを特定のタスク実行者に割り当てることもできます。

複数のタスク実行者を使用することは、それらをディスパッチャーオブジェクトに接続するか、すべてのタスク実行者を処理フローリソースにリンクされるグループに配置するかすれば、それほど難しくありません。

複雑なタスク送付の例

複数のタスク実行者を使用するシミュレーションモデルでは、特にそれらのタスク実行者が複数の3Dオブジェクトからのタスクリクエストや処理フローを同時に受け取っている場合、複雑になる可能性があります。タスク実行者が複数のソースからリクエストを受け取っている場合は、それらのタスク間に潜在的な競合があるかどうかと、それらの解決方法について検討する必要があります。シミュレーションモデルで問題が発生する可能性がある理由の詳細な説明については、「タスク実行者がタスクを処理する方法」を参照してください。

さまざまなタスクが他のタスクより優先されるシナリオでも、複雑になる可能性があります。このシナリオを処理する最良の方法の1つは、タスクまたはタスクシーケンスをリストにプッシュし、特定の基準に基づいてタスク実行者にリストからタスクをプルさせることです。詳細については、「リストについての主要な概念」を参照してください。

もう1つの複雑なシナリオは、1つのタスクを処理するために複数のタスク実行者が同時に作業する必要がある場合です。これは通常、協調タスクと呼ばれます。協調タスクに関わるタスク実行者ごとに並列タスクロジックを用意することで、処理フローにこれらの種類のタスクを作成できます。各タスク実行者のタスクのトラックは、さまざまなポイントで他のタスク実行者のトラックと同期する必要があります。詳細については、「協調タスク」を参照してください。

アイテムフローとルーティング

タスク実行者がある固定リソースから別の固定リソースへのアイテムの輸送に関与している場合、アイテムフローとルーティングの問題はタスクロジックに関連します。アイテムルーティングのロジックは、タスク実行者自体のロジックではなく、固定リソースを介して処理されることに注意が必要です。つまり、あるオブジェクトから別のオブジェクトへのアイテムフローを決定するロジックは、主に固定リソース上のロジック、または固定リソース上のイベントをリッスンしている処理フローを介して決定されます。

シンプルなアイテムルーティングの例

最もシンプルな種類のアイテムルーティングは、1つの固定リソースがフローアイテムを隣接する固定リソースに直接渡す場合です。ポート接続はこのロジックをとても簡単に処理できます。ポートは、それほど多くの困難を伴わずに一対多のアイテムルーティングを処理することもできます。

複雑なアイテムルーティングの例

多対多アイテムルーティングシステムは、設計がもう少し複雑になる可能性があります。複雑なシステムの一例として、上流オブジェクトが複数の下流オブジェクトにアイテムを送るための特別な基準や条件付きロジックが必要なものがあります。

シミュレーションモデルのニーズに応じて、FlexSimには、リスト、コンベヤ、処理フローなど、固定リソースから別のリソースへのアイテムのルーティングに使用できるさまざまなシステムがあります。これらの異なるシステムを使用してアイテムルーティングロジックを構築する方法の詳細については、「3Dオブジェクトフローを接続する」に関する章を読むことをおすすめします。

輸送または移動ルーティング

タスク実行者がアイテムを輸送したり、長距離を移動したりする必要がある場合は、あるポイントから別のポイントに移動するためにどのパスを使用するかタスク実行者に指示するロジックを作成する必要がある場合があります。

シンプルな移動ルーティングの例

デフォルトでは、タスク実行者は、そのパスに他のオブジェクトがある場合でも、2つの場所の間の最短パスを移動します。タスク実行者がオブジェクト間を短い距離で移動するだけで良い場合は、デフォルトの移動メカニズムがシステムのすべてのニーズに対応する可能性があります。

複雑な移動ルーティングの例

タスク実行者が単純な直線ではない経路を移動する必要がある場合は、タスク実行者がより正確なパスをたどるのを助けるためにFlexSimの移動システムのいずれかを使用することをおすすめします。もっとも、これらの異なる移動システムのそれぞれは同じ基本原則に基づいて運用されています。1つの移動システムの使い方を学んでしまえば、同じ基本原則の多くが適用されるので、他のシステムの使い方を学ぶのはそれほど難しくありません。各種の移動システムのさまざまな利点と欠点の詳細な説明については、「移動に関する主要な概念」を参照してください。

FlexSimには3つの異なる移動システムがあります。1つは移動ネットワークシステムです。

もう1つはA*ナビゲーションシステムです。

そして最後のシステムは、無人搬送車(AGV)ネットワーク用です。

チュートリアルと詳細な情報

タスクの詳細については、以下の関連チュートリアルを実行して、この章で説明している概念を実際に体験することをおすすめします。

タスク実行者の仕組みに関する詳細な説明については、「参照 - タスク実行者の概念」も参照してください。

この章の残りの部分では、タスク一般と特定の種類のタスク実行者に関するトピックについて説明します。