タスク4.4 - AGVのカスタム設定
タスクの概要
このチュートリアルタスクでは、さまざまなタイプのフローアイテムのカスタムロード時間とカスタムアンロード時間の作成方法を学習します。このチュートリアルタスクは、到着スケジュールを変更し、積み荷エリアに輸送される必要がある汚れた洗濯物や廃棄物が上階で定期的に作られるようにすることから始まります。最後のステップでは、グローバルテーブルを使って各タイプのフローアイテムのカスタムロード時間とカスタムアンロード時間を作成する方法を紹介します。
作業が完了すると、シミュレーションモデルは次の画像のようになります。
ステップ1 追加の配送スケジュールを作成する
このステップでは、前のチュートリアルタスクで作成したDeliveryScheduleの処理フローに追加のアクティビティを追加します。最終的に、これらの新しいアクティビティによって、各上階のキュー内で定期的に汚れた洗濯物や廃棄物が作られるロジックを作成できます。
作業が完了すると、処理フローは次の画像のようになります。
現時点では、これらのアクティビティの追加と処理フローへの接続のみを行います。後のステップで、プロパティを編集して機能を追加します。
これらのアクティビティを追加して接続するには:
- メインツールバーで[処理フロー]ボタンをクリックして、メニューを開きます。[DeliverySchedule]を選択して、この処理フローを開きます。
- ライブラリの[フローチャート]グループから、[処理]形状を追加します。
- 新しい処理形状の名前を[汚れた洗濯物]に変更します。
- [汚れた洗濯物]形状内に、[スケジュールソース]([トークンの作成]の下)を追加します。
- 次のアクティビティを使ってスタックブロックを作成します。
- [オブジェクトを作成]アクティビティ([オブジェクト]の下)
- [遅延]アクティビティ([ベーシック]の下)
- 分かりやすくするために、新しいアクティビティの名前を次のように変更します。
- [ソース:シミュレーションを開始する]アクティビティから[遅延:収集時間]アクティビティへの接続を作成します。
- [オブジェクトを作成:上階のアイテム]アクティビティから[遅延:収集時間]アクティビティにループバックする接続を作成します。
アクティビティ | 新しい名前 |
---|---|
ソース | ソース:シミュレーションを開始する |
オブジェクトを作成 | オブジェクトを作成:上階のアイテム |
遅延 | 遅延:収集時間 |
処理フローがこのステップの冒頭で表示されている画像のようになっていることを確認してください。
ステップ2 配送スケジュールロジックを編集する
このステップでは、前のステップで追加した新しいアクティビティのロジックを作成します。各アクティビティと共有アセットの機能の概要を次に示します。
アクティビティ | 説明 |
---|---|
ソース:シミュレーションを開始する | このアクティビティでは、[汚れた洗濯物]形状にある残りのアクティビティをループし続けるトークンを3つ作成します。各トークンで[Destination]の名前のラベルに固有の値を割り当てます。1つのトークンで[Floor2DirtyLaundry]キューのトークンを作成し、別のトークンで[Floor3DirtyLaundry]キューのトークンなどを作成します。すべてのトークンが同時に次のアクティビティに移動しないように、一部のトークンのタイミングをオフセットすることもできます。 |
オブジェクトを作成:上階のアイテム | このアクティビティを編集して、新しい[DirtyLaundry]フローアイテムを作成し、上階のキュー内に配置できます。トークンの[Destination]ラベルを使うと、どのキューを使えばいいかわかります。また、[LoadType]というラベルを新しいフローアイテムに追加して、どのタイプのフローアイテムであるかを示します。[DirtyLaundry]フローアイテムには3の値を使います。 |
遅延:収集時間 | トークンにはさまざまな時間の遅延が発生します。これはスタッフが洗濯物を収集する時間を表します。1800秒(15分)スケールの指数分布を使います。トークンの遅延が終了すると、[オブジェクトを作成]アクティビティにループバックします。 |
これらの編集を加えた後に、これらのアクティビティのコピーを作成して、廃棄物収集をシミュレーションできます。アクティビティにいくつか編集を追加します。
アクティビティ | 説明 |
---|---|
ソース:シミュレーションを開始する(Waste) | このスケジュールソースは[汚れた洗濯物]のスケジュールソースと同じです。唯一の違いは、900秒の短いオフセット時間をこのアクティビティに追加するという点です。また、[Destination]ラベルを割り当てて、Floor4WasteのキューやFloor3Wasteのキューなどのトークンを作成します。 |
オブジェクトを作成:上階のアイテム | このアクティビティを編集して、新しいWasteフローアイテムを作成し、[UnloadingDock]キュー内に配置します。[LoadType]ラベルを編集して、Wasteフローアイテムで4つの値を使うこともできます。 |
このロジックを作成するには:
- [ソース:シミュレーションを開始する]アクティビティをクリックして選択します。[クイックプロパティ]で、[追加]ボタン をクリックして新しい行を追加します。
- 3行追加するまで、前のステップを繰り返します。
- [ラベル]ボックスを
1
に増やします。 - テーブル内で、新しいラベル列の名前を[Destination]に変更します。
- [Destination]列の一番目のセルをクリックして選択します。このセルに「
Floor2DirtyLaundry
」と入力します。 - [Destination]列の2行目に、「
Floor3DirtyLaundry
」と入力します。 - [Destination]列の3行目に、「
Floor4DirtyLaundry
」と入力します。 - [時間]列の2行目に「
300
」と入力します。 - [時間]列の2行目に「
600
」と入力します。 - [オブジェクトを作成:上階のアイテム]アクティビティをクリックして選択します。[クイックプロパティ]で[オブジェクト]ボックスの横にある矢印をクリックして、メニューを開きます。[FlowItems]をポイントして、[DirtyLaundry]を選択します。
- [次の形式で作成]オプションが選択されていることを確認します。このオプションの下にあるボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル]を選択して、[Destination]を選択します。
- [作成されたオブジェクトにラベルを割り当て]で、[追加]ボタン をクリックしてラベルを追加します。
- [名前]ボックスで、現在のテキストを削除し、「
LoadType
」と入力します。 - [値]ボックスで、現在のテキストを削除し、「
3.00
」と入力します。 - [遅延:収集時間]アクティビティをクリックして選択します。[クイックプロパティ]の[遅延]ボックスの横にある[プロパティを編集]ボタン をクリックして、統計分布プロパティを開きます。
- [スケール]を「
1800
」に変更します。 - [汚れた洗濯物]形状をクリックして選択します。Ctrl+Cを押して形状をコピーします。処理フロー内の空白領域をクリックして、Ctrl+Vを押して形状のコピーを処理フロー内に貼り付けます。
- コピーした形状の名前を[Waste]に変更します。
- [Waste]形状内で、[ソース:シミュレーションを開始する]アクティビティをクリックして選択します。[オフセット時間]ボックスに、「
900.00
」と入力します。 - [到着]テーブルで、[Destination]列の2行目に、「
Floor4Waste
」と入力します。 - [Destination]列の2行目に、「
Floor3Waste
」と入力します。 - [Destination]列の3行目に、「
Floor2Waste
」と入力します。 - [オブジェクトを作成:上階のアイテム]アクティビティをクリックして選択します。[クイックプロパティ]で[オブジェクト]ボックスの横にある矢印をクリックして、メニューを開きます。[FlowItems]をポイントして、[Waste]を選択します。
- [LoadType]ラベルの[作成されたオブジェクトにラベルを割り当て]の下にある[値]ボックスの現在のテキストを削除し、「
4.00
」と入力します。
この時点でシミュレーションモデルを保存することをおすすめします。
ステップ3 ドロップロジックを変更する
このステップでは、積み荷エリアに2番目のキューを追加します。1つ目のキューでクリーニング施設に送られる汚れた洗濯物を収集し、2つ目のキューで撤去する廃棄物を収集します。ドロップロジックを変更し、積み荷エリアにある2つのキューで汚れた洗濯物と廃棄物のフローアイテムを[ItemsReadyForDelivery]グローバルリストからプルするようにします。また、上階のアイテムを積み荷エリアに輸送する必要があるため、「次の作業を検索」接続をAGVのメインネットワークから各上階に追加します。
ドロップロジックを変更するには:
- ライブラリから、積み荷エリアの近くの3Dモデルに[キュー]を追加します。
- 新しいキューの名前を[WasteRemoval]に変更します。
- Aキーを長押しして接続モードに入ります。[MainDropOffPoint]コントロールポイントをクリックします。次に、[WasteRemoval]キューをクリックしてメニューを開きます。[場所]を選択します。コントロールポイントとキューを接続すると青いラインが現れます。
- [WasteRemoval]キューをダブルクリックして、プロパティウィンドウを開きます。[フロー]タブの[入力]グループで、[プル方法]チェックボックスをオンにします。
- [プル方法]ボックスの横にある矢印をクリックして、メニューを開きます。[リストを使用]をポイントし、[アイテムリストからプル]を選択して、ピックリストウィンドウを開きます。
- [リスト]ボックスの横にある矢印をクリックしてメニューを開き、[ItemsReadyForDelivery]を選択します。
- [クエリ]ボックスの横にある[追加]ボタン をクリックして、メニューを開きます。[WHERE(フィルタ)]をポイントして[LoadType]を選択します。
- [クエリ]ボックスで、リストクエリの最後の部分を「
== 4
」に変更します。 - [OK]ボタンをクリックして変更を保存し、ウィンドウを閉じます。
- [LoadingDock]キューをダブルクリックして、プロパティウィンドウを開きます。
- [フロー]タブの[プル方法]ボックスの横にある[プロパティを編集]ボタン をクリックして、ピックリストウィンドウを開きます。
- [クエリ]ボックスの横にある[追加]ボタン をクリックして、メニューを開きます。[WHERE(フィルタ)]をポイントして[LoadType]を選択します。
- [クエリ]ボックスで、リストクエリの最後の部分を「
== 3
」に変更します。 - [OK]ボタンをクリックして変更を保存し、ウィンドウを閉じます。
シミュレーションモデルをリセットして実行します。
モデルを実行すると、上階のキューに汚れた洗濯物と廃棄物が徐々に表れはじめ、AGVはそれらのアイテムを積み荷エリアの最初に利用可能なキューに輸送します。
ステップ4 ロード時間とアンロード時間をカスタマイズする
このステップでは、グローバルテーブルを作成し、輸送中のロードタイプに応じて、AGVのロード時間とアンロード時間をコントロールできます。作業が完了すると、グローバルテーブルは次の画像のようになります。
グローバルテーブルの設定後、3DモデルのAGVを更新し、このグローバルテーブルを使って、4つの異なるフローアイテムのロード時間とアンロード時間を決定します。このステップでは、グローバルテーブルを参照する2つの方法を実演します。[ロード時間]プロパティでは、ピックリストを使ってグローバルテーブルを参照する方法を学習します。[アンロード時間]プロパティでは、FlexScriptを使った異なる方法でグローバルテーブルを参照します。両方の方法を確認して適切な方法を決定します。
ロード時間をカスタマイズするには:
- [ツールボックス]で[追加]ボタン をクリックして、メニューを開きます。[グローバルテーブル]を選択して、新しいテーブルを作成します。
- [クイックプロパティ]で、テーブル名をItemLoadTypesに変更します。
- [行]ボックス内で、数値を「
4
」に増やします。 - [列]ボックス内で、数値を「
3
」に増やします。 - 行ヘッダーの名前を次のように変更します。
- 列ヘッダーの名前を次のように変更します。
- セル値を次のように入力します。
- [モデル]タブをクリックして、3Dモデルビューに戻ります。
- 必要に応じて、すべてのAGVをドラッグして、[AGVEntryPoint]コントロールポイントからモデル内の異なるエリアに移動し、それぞれにアクセスできるようにします。
- [AGV1]をダブルクリックして、プロパティウィンドウを開きます。
- [TaskExecuter]タブで、[ロード時間]ボックスの横にある矢印をクリックしてメニューを開きます。[グローバルテーブルルックアップ別]を選択して、ピックリストウィンドウを開きます。
- [テーブル]ボックスの横にある矢印をクリックして、メニューを開きます。[ItemLoadTypes]を選択します。
- [行]ボックスに「
item.LoadType
」と入力します。 - [列]ボックスに「
"LoadTime"
」と入力します。 - [アンロード時間]ボックスに次の式を入力します。
Table("ItemLoadTypes")[item.LoadType]["UnloadTime"]
- [OK]ボタンをクリックして変更を保存し、ウィンドウを閉じます。
- 前のステップを繰り返して、残りのAGVの[ロード時間]と[アンロード時間]のプロパティを変更します。適切なグローバルテーブルのルックアップ方法を使います。
行番号 | 行名 |
---|---|
行1 | MedSupplies |
行2 | CleanLaundry |
行3 | DirtyLaundry |
行4 | Waste |
列番号 | 列名 |
---|---|
列1 | LoadType |
列2 | LoadTime |
Col3 | UnloadTime |
LoadType | LoadTime | UnloadTime | |
---|---|---|---|
MedSupplies | 1 | 30 | 45 |
CleanLaundry | 2 | 15 | 20 |
DirtyLaundry | 3 | 15 | 20 |
Waste | 4 | 10 | 10 |
シミュレーションモデルをリセットして実行します。
シミュレーションモデルを実行すると、フローアイテムのタイプによって、AGVがフローアイテムをロードまたはアンロードするのにかかる時間の違いに気が付きます。
結論
AGVのチュートリアルを完了し、AGVモデルを構築する際に利用できるさまざまな機能や設定について理解が深まりました。ほとんどコードを使わずにかなり複雑なAGVシミュレーションモデルを構築できました。AGVの機能や処理フローのテンプレートを使うと、簡単にAGVのシステムを構築して、必要に応じて大規模なシミュレーションプロジェクトに合うように拡張できます。
FlexSimにおけるAGVシステムのモデリングの詳細については、「タスク実行者を操作する」に関する章でAGVについてのセクションを参照してください。これでAGVのチュートリアルは終了です。