タスク1.1 - 標準3Dロジックを使用したタスク
タスクの概要
この一連のチュートリアルでは、タスク実行者用のタスクロジックを作成するさまざまな方法について学習します。タスクやタスク実行者についてよくわからない場合は、このチュートリアルを完了する前に、「タスクロジックについての主要な概念」を参照してください。
この最初のチュートリアルタスクでは、3Dオブジェクトで使用できる標準ロジックを使用したタスクの構築方法を学習します。3D固定リソースの多くは、基本的なロードやアンロードのタスクや、処理中にオペレーターの参加を要求するなど、単純なタスクをタスク実行者に割り当てるために使用できるプロパティと基本ロジックを備えています。このチュートリアルでは、このような単純なタスクのロジックを作成する方法を説明します。このタスクには、この方法の利点と欠点の分析も含まれます。
作業が終了すると、3Dモデルは次の画像と同じように動作します。
ステップ1 3Dモデルを構築する
このステップでは、このチュートリアルの基本的な3Dモデルを構築します。最初にモデル内で3Dオブジェクトのコンテナとして機能する平面を追加します。次に、このモデルに必要な3Dオブジェクトを追加します。
作業が終了すると、モデルは次の画像のようになります。
このモデルを構築するには:
- 3Dモデルウィンドウが開いていてアクティブであることを確認します。[ライブラリ]から3Dモデルに[平面]([ビジュアル]の下)をドラッグします。
- 平面を選択した状態で、[プロパティ]で、平面の名前を「StandardLogic」に変更します。
- [色]ボックスの横にある矢印をクリックして、色選択ツールメニューを開きます。最も明るい色合いの黄色を選択します。
- 平面の[Xサイズ]を 「
21.00
」に変更します。 - 次の3Dオブジェクトを平面上にドラッグします。
- 1つのソース
- 1つのキュー
- 1つのプロセッサ
- 1つのシンク
- 1つのオペレーター
- このステップの冒頭に表示した画像のものとほぼ同じ位置になるように3Dオブジェクトを配置します。
- [Sink1]、[Queue1]など、各3Dオブジェクトの名前が1で終わっているかを再確認します。
モデルがこのステップの冒頭に表示した画像のようになっていることを確認します。
ステップ2 標準3Dオブジェクトロジックを使用してタスクを作成する
このステップでは、3Dオブジェクトで使用可能な標準ロジックを使用して簡単な輸送タスクを作成する方法を学習します。フローアイテムをキューからプロセッサに輸送するようにオペレーターを設定します。これは、FlexSimでは比較的簡単で単純な処理です。アイテム到着率と処理時間も変更します。
これらの変更を行うには:
- 次のオブジェクト間でポート接続(A接続)を作成します。
- [Source1]から[Queue1]へ
- Queue1からProcessor1
- Processor1からSink1
- [Queue1]から[Operator1]へのセンターポート接続(S接続)を作成します。
- [Queue1]をクリックして、右側でそのプロパティを表示します。
- [出力]セクションで[輸送を使用]チェックボックスをオンにします。
- [輸送を使用]ボックスに[
current.centerObjects[1]
]と表示されていることを確認します。 - [Source1]をクリックして、右側でそのプロパティを表示します。
- [ソース]セクションで、[時刻0に到着]ボックスをオンにします。
- [到着時間間隔]ボックスで、現在のテキストを削除し、「
5
」と入力します。
モデルをリセットして実行します。
フローアイテムがキューに到着すると、オペレーターはプロセッサが使用可能になり次第プロセッサにそのアイテムを輸送します。
ステップ3 オペレーターを追加する
標準ロジックを使用して簡単な輸送タスクを作成したので、モデルに2つ目のオペレーターを追加し、もう少し複雑にします。標準ロジックでは、複数のオペレーターにタスクを割り当てるにはディスパッチャーオブジェクトが必要です。このステップでは、このシステムを設定する処理を順を追って説明します。作業が完了すると、3Dモデルは次の画像のようになります。
モデルに2つ目のオペレーターを追加するには:
- [Queue1]と[Operator1]の間のセンターポート接続を削除しますセンターポート接続を削除するには、接続している2つのオブジェクトをクリックしながら、[W]キーを長押しします)。
- [ライブラリ]から[Dispatcher]をドラッグし、[Queue1]に近い平面に配置します。
- また、2つ目の[Operator]も平面上にドラッグします。
- 次のようにオペレーターの名前を変更します。
- [Operator1B]をクリックして選択します。[プロパティ]で、色選択ツールボックスの横にある矢印をクリックし、ターコイズ色を選択します。
- [Dispatcher1]から[Queue1]へのセンターポート接続(S接続)を作成します。
- [Dispatcher1]から[Operator1A]および[Operator1B]へのポート接続(A接続)を作成します。
- [Dispatcher1]をクリックして、右側でそのプロパティを表示します。
- [ディスパッチャー]セクションで[パス先]ボックスの横にある矢印をクリックしてメニューを開きます。[ラウンドロビン(可能な場合)]を選択します。
オブジェクト | 新しい名前 |
---|---|
Operator1 | Operator1A |
Operator2 | Operator1B |
モデルをリセットして実行します。
このシナリオでは2つ目のオペレーターを追加してもあまり変わらないことを確認してください。このシステムは、1つのオペレーターより効率があがるわけではありません。多くのことが、標準ロジックがオペレーターにフローアイテムの処理を終了するまでプロセッサで待機させる方法と関係しています。このロジックでは、余分なオペレーターを持つことはあまり役に立ちません。
ステップ4 2つ目のプロセッサを追加する
可能な目的地を複数追加すると、輸送タスクが複雑になることがあります。このステップでは、モデルに2つ目のプロセッサを追加して、これが標準ロジックにどのように影響するかを確認します。また、オペレーターに作業させる新しいタイプのタスクを追加して、2つ目のプロセッサを追加することによるシステムのロジック全体への影響を確認します。このステップでは、プロセッサの設定時間中にオペレーターが[Processor1A]に存在する必要があります。これは、オペレーターがプロセッサに存在するまで、フローアイテムがプロセッサに待機することを意味します。アイテムを処理できるようにするには、オペレーターは必要な設定を完了する必要があります。
2つ目のプロセッサを追加して設定時間ロジックを作成するには:
- [Dispatcher1]から[Operator1B]へのポート接続を削除します。(ポート接続を削除するには、接続している2つのオブジェクトをクリックしながら、[Q]キーを長押しします)。
- [StandardLogic]平面をクリックして選択します。[クイックプロパティ]で、平面の[Yサイズ] を「
10.00
」に変更して、幅を広げます。 - 2つ目の[Processor]を平面上にドラッグします。
- 次のようにプロセッサの名前を変更します。
- 次のポート接続を作成します(A接続)。
- Queue1からProcessor1B
- Processor1BからSink1
- [Dispatcher1]から両方のプロセッサへのセンターポート接続(S接続)を作成します。
- [Processor1A]をクリックして、右側でそのプロパティを表示します。
- [設定時間]ボックスの[プロセッサ]セクションで、現在の数値を削除し、「
5
」と入力します。 - [オペレーターを設定に使用]チェックボックスをオンにします。
- [オペレーターを選択]ボックスに[
current.centerObjects[1]
]と表示されていることを確認します。 - [Processor1B]をクリックして、右側でそのプロパティを表示します。
- [プロセッサ]セクションで、[処理時間]を「
5
」に変更します。
オブジェクト | 新しい名前 |
---|---|
Processor1 | Processor1A |
Processor2 | Processor1B |
モデルをリセットして実行します。
Operator1Aはこの繰り返しの順序でタスクを実行する傾向があることを確認してください。
- アイテムをProcessor1Aに輸送する
- アイテムをProcessor1Bに輸送する
- Processor1Aの設定時間を完了する(所要時間5秒)
Processor1Bにアイテムを輸送する前に、オペレーターがProcessor1Aの設定を完了させる方が理にかなっていると思われますが、オペレーターは、FIFOロジック(先入れ先出し)を使用してどのタスクを処理するかを決定するため、この順序でタスクを実行しません。つまり、オペレーターは割り当てられたタスクを受け取った順に実行します。
この場合、Queue1とProcessor1Aの両方がオペレーターにタスクを割り当てています。Queue1は、ポートがフローアイテムを受け取れるようになると輸送タスクを割り当てます。Processor1Aは、フローアイテムがあり、設定時間でオペレーターに作業させる準備が整うとタスクを割り当てます。Processor1Aは、常に、Queue1が輸送タスクを割り当てた後にタスクを割り当てるため、Processor1Aがフローアイテムを受け取った直後に設定時間が実行されることはありません。
この問題の解決策は、タスクに優先度レベルとプリエンプトロジックを追加することです。これについては次のステップで説明します。
ステップ5 優先度とプリエンプションを追加する
1つ前のステップの最後に見たように、オペレーターは変わった順序でタスクを実行することがあります。オペレーターはFIFOロジック(先入れ先出し)を使用してタスクを実行するため、効率的でも直感的でもない順序でタスクを実行することがあります。このステップでは、タスクの優先度レベルを使用してこの問題を解決する方法を学習します。
タスクに優先度を割り当てることにより、FIFOタスクロジックを無効にできます。タスク実行者は、優先度の低いタスクの前に優先度の高いタスクを完了します。デフォルトでは、すべてのタスクの優先度は0のため、タスク実行者は優先度が1以上のタスクを先に処理します(詳細については、「タスクの優先度とプリエンプション」を参照してください)。
このステップでは、設定時間タスクに優先度1を割り当て、オペレーターがフローアイテムをそれに配信した直後に作業するようにします。
設定時間タスクに優先度を追加するには:
- [Processor1A]をクリックして、右側でそのプロパティを表示します。
- [プロセッサ]セクションで、[優先度]ボックスをクリックし、数値を「
1.00
」に変更します。 - [プリエンプション]メニューが現在「プリエンプトのみ」に設定されていることを確認します。
モデルをリセットして実行します。
オペレーターは、他のタスクを行う前にProcessor1Aで設定時間を完了するようになることを確認してください。
結論
ここまでで、標準3D運用ロジックを使用して輸送タスクを構築しました。これには次のような利点があることが確認できます。
- 設定が簡単 - 標準運用ロジックを使用する基本モデルの設定が比較的早く簡単にできることがお分かりいただけたでしょう。
- 使いやすい - 標準ロジックを使用する単純な輸送タスクを作成する場合は、簡単で単純な標準運用ロジックを使用するのが最善の方法です。
- プリエンプションと優先度 - 標準3Dオブジェクトロジックを使用してタスクに優先度とプリエンプションを割り当てるのは比較的簡単です。
ただし、標準のオペレーティングロジックを使用することから生じる重大な欠点がいくつかあります。作成したモデルの例を使用するには:
- 非効率性 - 前述のとおり、実際のオペレーターが通常の業務システムで予測どおり行動するわけではないため、オペレーターを追加することがシステムの効率を上げるかどうかを調べるのは容易ではありません。
- 予期しない動作 - シミュレーションモデル内のイベントのタイミングに反応しているために、オペレーターがタスクを変わった順序で実行することがあります。各3Dオブジェクトには、特定のアクションを実行するタイミングをコントロールする特定のイベントの順序があります。問題の1つは、これらのイベントの順序を検出するのは簡単ではなく、そのロジックも見えないため、タイミングの問題によって引き起こされる特定の問題を予測またはトラブルシューティングする方法を知るのが難しいことです。
- 中間タスク - キューとプロセッサの間に中間タスクを追加する必要がある場合はどうでしょうか?たとえば、オペレーターがコンピュータで停止し、フローアイテムのバーコードをスキャンしたり、プロセッサに置く前にフローアイテムを計量したりする必要があるとします。カスタムロジックは標準ロジックシステムに組み込むのが非常に困難です。
- モデルの拡張性 - 一度に2つのオペレーターが1つのフローアイテムを輸送する必要がある場合はどうでしょうか?作業負荷に対応するために必要な従業員の数を調べるのにオペレーターを追加できるようにする場合はどうでしょうか?モデルに複雑さを加えるとすぐに、標準ロジックを拡張するのが難しくなります。
この基本輸送タスクに標準3Dロジックを設定するのは簡単でしたが、より複雑な業務処理に適応させたり、カスタマイズしたりすると設定は簡単なものでなくなります。このような場合、処理フローツールを使用するとより便利になります。
次のいくつかのチュートリアルのタスクでは、処理フローツールを使用して簡単な輸送タスクを作成するためのいくつかの異なる方法について学習します。各システムの利点と欠点についてより詳しく学びます。「チュートリアルタスク1.2 - 処理フローを使用したタスク」に進みます。