タスク1.2 - リソースを使用したタスク
タスクの概要
このチュートリアルタスクでは、処理フローのリソースを使用したタスク構築方法の基本を全般的に学びます。このチュートリアルでは、以下のようなリソースを扱う際の利点と欠点をいくつか説明します。
- 中間タスクを追加する
- タスク実行者を追加する
- 処理フローロジックと標準ロジックを組み合わせる
一連のさまざまなシミュレーションモデルを構築し、最終的に次の画像に類似したモデルを作成します。
ステップ1 3Dモデルをコピーして変更する
このステップでは、標準ロジックの構築に使用した元のシステムをコピーします。次のステップでは、代わりに処理フローロジックを使用するようにこのシステムを変更します。作業が完了すると、3Dモデルは次の画像のようになります。
平面をコピーするには:
- [Processor1A]をダブルクリックして、[プロパティ]ウィンドウを開きます。
- [プロセッサ]タブで[設定時間]を「
0
」に変更します。 - [オペレーターを設定に使用]チェックボックスをオフにします。
- [OK]ボタンをクリックして変更を保存し、ウィンドウを閉じます。
- [StandardLogic]平面をクリックして選択します。
- [Ctrl + C]キーを押して、平面とその上にあるすべてのオブジェクトをコピーします。モデルの空白部分をクリックして、元の平面の選択を解除します。[Ctrl + V]を押して平面を貼り付けます。
- コピーした平面を選択した状態で、[クイックプロパティ]で平面の名前を「ResourceLogic」に変更します。
- [色]ボックスの横にある矢印をクリックして、色選択ツールメニューを開きます。オレンジ色の最も淡い色合いを選択します。
- 新しくコピーした平面から[Dispatcher1]を削除します。
- コピーされた平面上の各3Dオブジェクトの名前を、[Sink2]、[Operator2A]、[Processor2A]など、1から2に置き換えて変更します。
- 次のポート接続を削除します(接続している2つのオブジェクトをクリックしながら、[Q]キーを長押しします)。
- [Queue1]から[Processor1B]へ(StandardLogic平面内)
- [Queue2]から[Processor2A]へ(StandardLogic平面内)
- [Queue2]から[Processor2B]へ(StandardLogic平面内)
3Dモデルがこのステップの冒頭に表示した画像のようになっていることを確認します。
ステップ2 リソースを使用してタスクを作成する
このステップでは、一般的な処理フローにアクティビティを追加して、リソースを使用して輸送タスクロジックを構築する処理フローを構築します。
作業が完了すると、処理フローは次の画像のようになります。
現時点では、これらのアクティビティの追加と処理フローへの接続のみを行います。後のステップで、プロパティを編集して機能を追加します。
これらのアクティビティを追加して接続するには:
- メインツールバーで[処理フロー]ボタンをクリックして、メニューを開きます。[Add a General Process Flow]を選択します。
- 処理フローの空白をクリックして、何も選択されていない状態にします。[クイックプロパティ]で、処理フローの名前を「ResourceLogic」に変更します。
- 処理フローを開き有効にした状態で、ライブラリから[処理]形状([フローチャート]の下)を追加し、処理フローにドラッグします。
- [クイックプロパティ]で、形状の名前を[リソースを使用したタスク]に変更します。
- [色]ボックスの横にある矢印をクリックしてオレンジ色に変更します。ResourceLogic平面の色と一致するようにオレンジ色を使用します。
- [リソースを使用したタスク]形状で、次のアクティビティを追加してスタックブロックを作成します。
- イベントトリガーソース(トークンの作成の下)
- [リソースを取得]([共有アセット]で)
- [ロード]([タスクシーケンス]で)
- [アンロード]([タスクシーケンス]で)
- [リリース]([共有アセット]の下)
- シンク(ベーシックの下)
- スタックブロックの横にある[リソース]共有アセット([共有アセット]の下)を追加します。
- アクティビティの名前を次のように変更します。
アクティビティ | 新しい名前 |
---|---|
ソース | ソース:Queue2に入るアイテム |
取得 | オペレーターを取得 |
ロード | アイテムをQueue2からロードする |
アンロード | Processor2Aでアイテムをアンロードする |
リリース | オペレーターをリリース |
シンク | シンク:アイテムの処理完了 |
リソース | リソース:演算子 |
処理フローがこのステップの冒頭に表示した画像のようになっていることを確認します。
ステップ3 処理フローロジックを作成する
このステップでは、処理フローのアクティビティのプロパティを編集します。各アクティビティと共有アセットの機能の概要を次に示します。
アクティビティ | 説明 |
---|---|
リソース:演算子 | この共有アクティビティを3DモデルのOperator2Aにリンクして、輸送タスク用に取得できるようにします。 |
ソース:Queue2に入るアイテム | [イベントトリガーソース]は、3Dモデルでイベントをリッスンするイベントリスニングアクティビティです。フローアイテムがQueue2に入ると、このアクティビティはトークンを作成し、これを次の下流アクティビティにリリースします。このトークンに、イベントをトリガーする特定のフローアイテムへの参照を含む、[FlowItem]という名前のラベルを割り当てます。 |
オペレーターを取得 | このアクティビティは、輸送タスクを処理するためのリソース(Operator2A)の取得を試みます。オペレーターがタスクで作業できない場合、トークンはオペレーターが使用可能になるまでこのアクティビティで待機します。オペレーターがタスクで作業できる場合は、トークンはリソースを取得し、そのトークンを次の下流オブジェクトにリリースします。リソースが取得されると、トークンに、Operator2Aへの参照を含む[Operator]という名前のラベルを割り当てます。 |
アイテムをQueue2でロードする | このアクティビティは、選択する必要があるフローアイテムと、そのフローアイテムの場所をオペレーターに指示します。[Operator]ラベルを使用して、前に取得したのと同じオペレーターにタスクを割り当て、[FlowItem]ラベルを使用して、輸送する必要があるアイテムをオペレーターに指示します。 |
Processor2Aでアイテムをアンロードする | このアクティビティは、フローアイテムをアンロードする場所をオペレーターに指示します。[Operator]ラベルを使用して、前に取得したのと同じオペレーターにタスクを割り当て、[FlowItem]ラベルを使用して、輸送する必要があるアイテムをオペレーターに指示します。ここではProcessor2Aをサンプリングし、フローアイテムをどこにアンロードするかをオペレーターに伝えます。 |
オペレーターをリリース | 輸送タスクが完了すると、このアクティビティはオペレーターをリリースします。[Operator]ラベルを使用してオペレーターをリリースします。 |
シンク:アイテムの処理完了 | このアクティビティは、処理フローからトークンを削除します。デフォルト設定を使用します。 |
この機能を作成するには:
- [リソース:オペレーター]共有アセットをクリックして選択します。[参照]ボックスの横にある[クイックプロパティ]で[サンプラー]ボタン をクリックして、サンプリングモードに入ります。
- 3Dモデルで、[Operator2A]をクリックしてサンプリングします。
- [ソース:アイテムがQueue2に入る]アクティビティをクリックして選択します。このアクティビティの横にある[感嘆符]ボタン をクリックして、サンプリングモードに入ります。
- 3Dモデルで[Queue2]をクリックして、メニューを開きます。[Queue2:入るとき]を選択します。サンプリングされたオブジェクトの名前がアクティビティの横に表示されます。
- [クイックプロパティ]の[ラベルの割り当て]テーブルで、[ラベル名または値]列の下の[入るアイテム]行にあるセルをクリックします。「FlowItem」と入力します。
- [オペレーション]の[入るアイテム]行にあるセルをクリックしてメニューを開きます。[割り当てる]を選択します。
- [オペレーターを取得]アクティビティをクリックして選択します。このアクティビティの横にある[感嘆符]ボタン をクリックして、サンプリングモードに入ります。
- [リソース:オペレーター]共有アセットをクリックしてサンプリングします。このアクティビティと共有アセットが青い線でリンクされます。
- [クイックプロパティ]の[ラベルに割り当てる]ボックスで、現在のテキストを削除して「
token.Operator
」と入力します。 - [アイテムをQueue2からロード]アクティビティをクリックして選択します。[クイックプロパティ]で[実行者/タスクシーケンス]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル]をポイントし、[Operator]を選択します。
- [アイテム]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル]をポイントし、[FlowItem]を選択します。
- [Processor2Aでアイテムをアンロード]アクティビティをクリックして選択します。[クイックプロパティ]で[実行者/タスクシーケンス]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル]をポイントし、[Operator]を選択します。
- [アイテム]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル]をポイントし、[FlowItem]を選択します。
- [ステーション]ボックスの横にある[サンプラー]ボタン をクリックして、サンプリングモードに入ります。
- 3Dモデルで[Processor2A]をクリックしてメニューを開きます。[ResourceLogic/Processor2A]を選択します。
- [オペレーターをリリース]アクティビティをクリックして選択します。[割り当て先のリソース]の横にある矢印をクリックして、メニューを開きます。[トークンラベル]をポイントし、[Operator]を選択します。
モデルをリセットして実行します。
オペレーターが標準3Dオブジェクトロジックで動作する方法と同様に、処理フローを使用するオペレーターは到着するフローアイテムをプロセッサに輸送します。また、処理フロー内のトークンは、フローアイテムが輸送タスクで移動するときにそのフローアイテムを表していることがわかります。
ただし、リソースロジックを使用するオペレーターは、標準ロジックを使用するオペレーターよりもわずかに効率的です。Operator2Aは、アイテムの処理が終了してポートを開くまでProcessor2Aで待機するのではなく、別のフローアイテムをロードするためにキューに戻ります。モデルから得られる統計データに影響する可能性があるため、この種の違いに注意する必要があります。
ステップ4 オペレーターを追加する
このステップでは、輸送タスクを支援する2つ目のオペレーターを追加する方法を学習します。これを行うには、[Operator2A]と[Operator2B]を[ResourceOperators]という新しいオブジェクトグループに追加します。次に、[ResourceOperators]グループを[リソース:オペレーター]共有アセットにリンクします。
トークンの[Operator]ラベルは、2つのオペレーターを使用することに簡単に適応できるため、処理フローのロジックはあまり変更する必要がありません。このラベルには、取得されたオペレーターに応じて、[Operator2A]または[Operator2B]のいずれかへの参照が含まれます。このラベルは、後続のすべてのタスクとアクティビティをそのオペレーターに割り当てるために使用されます。
また、このステップの最後に、比較用に2つ目のオペレーターを標準ロジックモデルに再追加します。
これらの変更を行うには:
- 3Dモデルで[Operator2A]を右クリックして、メニューを開きます。[オブジェクトグループ]をポイントし、[新しいグループに追加]を選択します。
- グループプロパティウィンドウで、グループの名前を「ResourceOperators」に変更します。
- [サンプラー]ボタン をクリックして、サンプリングモードに入ります。
- 3Dモデルで[Operator2B]をクリックしてサンプリングし、グループに追加します。
- グループプロパティウィンドウを閉じます。
- [ResourceLogic]処理フローで、[リソース:オペレーター]共有アセットをクリックします。[クイックプロパティ]で[参照]ボックスの横にある矢印をクリックして、メニューを開きます。[グループ]をポイントし、[ResourceOperators]を選択します。
- 3Dモデルで、[Dispatcher1]から[Operator1B]へのポート接続(A接続)を作成します。
モデルをリセットして実行します。
これで、2つのモデルで輸送タスクの作業する2組のオペレーターを比較できるようになりました。リソース処理フローを使用するオペレーターは、標準ロジックを使用するオペレーターよりもいくらか効率が良いことを確認してください。
実際には、それらは効率が良すぎて、一度にプロセッサに多すぎるアイテムをロードしています。これらの違いは微妙なように見えるかもしれませんが、シミュレーションモデルから収集する統計情報の品質に最終的に影響する可能性があります。次のステップでこの問題を解決する方法を学びます。
ステップ5 プロセッサ用のリソースを追加する
リソース処理フローによって制御されるシミュレーションモデルには別の潜在的な問題があることに注意してください。両方のオペレーターが次々とプロセッサにフローアイテムをアンロードするため、プロセッサは一度に2つのアイテムを処理することがあります。デフォルトでプロセッサに複数のフローアイテムが存在することは決してない標準ロジックのシステムとは対照的です。
一度に処理できるフローアイテムの数を制限するかどうかによる、潜在的な問題に過ぎないことに注意してください。標準ロジックをよりよくエミュレートし、プロセッサにロードできるアイテムの数を制限する場合は、処理フローでこの問題を解決できるソリューションがいくつかあります。このステップでは、リソースを使用してこの問題を解決する方法を示します。モデル内のプロセッサの可用性を表すリソースを作成します。
プロセッサを制御するために、処理フローにいくつかのアクティビティを追加します。作業が終了すると、処理フローは次の画像のようになります。
新しいアクティビティと共有アセットが機能する方法の概要を次に示します。
アクティビティ | 説明 |
---|---|
リソース:プロセッサ | このリソースを3Dモデルの[Processor2A]にリンクして、フローアイテムの目的地として取得できるようにします。 |
プロセッサを取得する | このアクティビティは、オペレーターがフローアイテムをアンロードする準備ができるとプロセッサの取得を試みます。プロセッサがフローアイテムを受け取ることができない場合、トークンはプロセッサが使用可能になるまでこのアクティビティで待機します。プロセッサが使用可能な場合は、トークンがリソースを取得し、そのトークンを次の下流オブジェクトにリリースします。リソースが取得されると、トークンに、Processor2Aへの参照を含む[Processor]いう名前のラベルを割り当てます。 |
イベントを待つ:処理完了 | これはイベントリスニングのアクティビティです。つまり、3Dモデル内のオブジェクトをリッスンし、イベントが発生すると、トークンを次の下流アクティビティにリリースします。このアクティビティは、プロセッサがアイテムの処理を終了するまで待機してから、トークンを次のアクティビティにリリースします。 |
プロセッサをリリースする | このアクティビティは、別のフローアイテムを受け入れることができるようにプロセッサをリリースします。[Processor]ラベルを使用してプロセッサをリリースします。 |
これらの変更を行うには:
- 処理フローをアクティブにして、[リソース]をドラッグし、処理フローの[リソース:オペレーター]の下に置きます。
- [リソースを取得]アクティビティ([共有アセット]の下)をドラッグし、[Queue2からアイテムをロード]アクティビティの後に挿入します。
- [イベントを待つ]アクティビティ([ベーシック]の下)をドラッグして、[オペレーターをリリース]アクティビティの後に挿入します。
- [リソースをリリース]アクティビティ([共有アセット]の下)をドラッグし、[イベントを待つ]アクティビティの後に挿入します。
- 新しいアクティビティと共有アセット(および1つの追加アクティビティ)の名前を変更します。
- [リソース:プロセッサ]共有アセットをクリックして選択します。[参照]ボックスの横にある[クイックプロパティ]で[サンプラー]ボタン をクリックして、サンプリングモードに入ります。
- 3Dモデルで、[Processor2A]をクリックしてサンプリングします。
- [プロセッサを取得]アクティビティをクリックして選択します。アクティビティの横にある[感嘆符]ボタン をクリックして、サンプリングモードに入ります。
- [リソース:プロセッサ]共有アセットをクリックしてサンプリングします。このアクティビティと共有アセットが青い線でリンクされます。
- [クイックプロパティ]の[ラベルに割り当てる]ボックスで、現在のテキストを削除して「
token.Processor
」と入力します。 - [イベントを待つ:処理完了時]アクティビティをクリックして選択します。アクティビティの横にある[感嘆符]ボタン をクリックして、サンプリングモードに入ります。
- 3Dモデルで[Processor2A]をクリックしてメニューを開きます。[Processor2A:処理完了時]を選択します。
- [プロセッサをリリース]アクティビティをクリックして選択します。[割り当て先のリソース]の横にある矢印をクリックして、メニューを開きます。[トークンラベル]をポイントし、[Processor]を選択します。
アクティビティ | 新しい名前 |
---|---|
リソース | リソース:プロセッサ |
取得 | プロセッサを取得する |
イベントを待つ | イベントを待つ:処理完了 |
リリース | プロセッサをリリースする |
シンク:アイテムの処理完了 | シンク:Sink2にリリースされたアイテム |
モデルをリセットして実行します。
ここで、オペレーターは、フローアイテムをロードする前にプロセッサが空き状態になるまで待つことを確認してください。また、ロジックが標準ロジックモデルと非常によく似ていることにも注意してください。唯一の違いは、次のタスクを待つ間にオペレーターが待機する場所です。残念なことに、これも、リソース処理フローモデルにおけるオペレーターの全体的な効率を低下させ、2つ目のオペレーターを不要にします。
ステップ6 プロセッサを追加する
このステップでは、システムの効率を上げるために2つ目のプロセッサを追加します。3Dモデルのプロセッサへの直接参照ではなく、[Processor]ラベルを使用するように、処理フローロジックの一部を更新する必要があります。[Processor]ラベルを使用すると、処理フローロジックを複数のプロセッサに容易に適用できます。このラベルには、取得されたプロセッサに応じて、[Processor2A]または[Processor2B]のいずれかへの参照が含まれます。処理フローのさまざまなアクティビティでは、このラベルを使用して3Dモデルのロジックを制御します。
このステップの最後に、比較のために2つ目のプロセッサを標準ロジックモデルに再追加します。
これらの変更を行うには:
- 3Dモデルで[Processor2A]を右クリックして、メニューを開きます。[オブジェクトグループ]をポイントし、[新しいグループに追加]を選択します。
- グループプロパティウィンドウで、グループの名前を「ResourceProcessors」に変更します。
- [サンプラー]ボタン をクリックして、サンプリングモードに入ります。
- 3Dモデルで[Processor2B]をクリックしてサンプリングし、グループに追加します。
- グループプロパティウィンドウを閉じます。
- [ResourceLogic]処理フローで、[リソース:オペレーター]共有アセットをクリックします。[クイックプロパティ]で[参照]ボックスの横にある矢印をクリックして、メニューを開きます。[グループ]をポイントし、[ResourceProcessors]を選択します。
- [Processor2Aでアイテムをアンロード]アクティビティをクリックして選択します。アクティビティの名前を「プロセッサのアイテムをアンロード」に変更し、明確にします。
- このアクティビティの[クイックプロパティ]で、[ステーション]ボックスの横にある矢印をクリックしてメニューを開きます。[トークンラベル]をポイントし、[Processor]を選択します。
- [イベントを待つ:処理完了]アクティビティをクリックして選択します。[クイックプロパティ]で[オブジェクト]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル]をポイントし、[Processor]を選択します。
- 3Dモデルで、[Queue1]から[Processor1B]へのポート接続(A接続)を作成します。
モデルをリセットして実行します。
現在、2つのモデルはほぼ同じように機能し、リソース処理フローモデルはやや効率的なレベルで動作していることがわかります。アイテムが処理されている間、オペレーターはプロセッサで待機しないため、リソース処理フローモデルはより効率的に動作します。プロセッサがフローアイテムを処理している間にキューに戻ることで時間を節約できます。
ステップ7 タスクの順序を変更する
前のステップでは、リソース処理フローモデルは標準ロジックを使用するモデルよりもいくらか効率が良いことを確認しました。FlexSimロジック全般に関する重要な概念を学ぶために、この処理フローでタスクの順序を変更し、その変更が3Dモデルのオペレーターの動作にどのように影響するかを観察します。
この変更を加えるには:
- 処理フローのリソースを使用したタスク形状で、アクティビティのスタックブロックをクリックして選択します。
- [アイテムをQueue2からロードする]アクティビティの前後にある[リンク解除]ボタン をクリックして、スタックブロックからアイテムを分離します。
- 2つ目のスタックブロックの[プロセッサを取得]アクティビティの後になるように、[Queue2からアイテムをロード]アクティビティをドラッグします。
- 2つ目のスタックブロックをドラッグして、1つ目のスタックブロックの最後にスナップします。
モデルをリセットして実行します。
このシミュレーションの実行を見ながら、アイテムが処理されている間、リソース処理フローモデルのオペレーターはキューに戻るのではなくプロセッサで待機します。これは、[Queue2からアイテムをロード]アクティビティを開始する前に、[プロセッサを取得]アクティビティが完了している必要があることから、オペレーターがすぐに移動を開始しないためです([プロセッサを取得]アクティビティの前に[移動]アクティビティを配置した場合は、これを変更できます)。 処理フロー内のアクティビティの順序を単純に変更するだけで、オペレーターの動作が完全に変わることに注意してください。
お気づきかもしれませんが、現時点でも2つのシミュレーションモデルは完全に同一ではありません。標準ロジックモデルのオペレーターは、リソース処理フローモデルのオペレーターよりも効率的にタスクを完了できるようになりました。この違いは、標準ロジックとリソース処理フローの間のわずかな違いに起因しています。バックグラウンドでは、標準的な3Dロジックがロードタスクとアンロードタスクの間に[移動]タスクを明示的に追加しており、目的地に近づくにつれてオペレーターが歩く速度を変えています。[ロード]アクティビティと[アンロード]アクティビティの前に2つの移動タスクを追加すると、2つのモデルは同じになります。
このステップで覚えておくべきいくつかの重要な注意点があります。
- 処理フローでアクティビティを追加する順序によって、3Dモデルの動作に小さな、しかし重要な変更が加えられることがあります。
- イベントのタイミングによっても、モデルには小さいながらも重要な変更が加わります。
- これらの違いは大きいように見えないかもしれませんが、時間が経つにつれてモデルから得られる統計データに影響を与えます。
ステップ8 カスタムタスクを追加する
ここまでで、処理フロー内のリソースを使用して標準ロジックを単に複製する方法を学びました。このステップでは、処理フロー方法には標準ロジックよりも大きな利点があることがわかります。処理フロー方法は、カスタマイズをはるかに上手く処理できます。モデル化しようとしているビジネスシステムをよりよく表現するカスタムタスクを簡単に作成できます。
このステップでは、中間タスクを追加してタスクシーケンスをカスタマイズします。3Dモデルに形状(一種のビジュアルオブジェクト)を追加して、ステーションを表現します。ステーションでは、プロセッサでフローアイテムをアンロードする前に、オペレーターはフローアイテムをスキャンする必要があります。
次に、処理フローにスキャンタスクをシミュレーションする2つのアクティビティを追加して名前を変更します。作業が終了すると、処理フローは次の画像のようになります。
新しい2つのアクティビティが機能する方法の概要を次に示します。
アクティビティ | 説明 |
---|---|
ScanStation2に移動する | このアクティビティは、ScanStation2オブジェクトに移動するようオペレーターに指示します。 |
遅延:スキャンアイテム | このアクティビティは、コンピュータでフローアイテムをスキャンするのにかかる時間をシミュレーションします。遅延を1秒に設定します。 |
シミュレーションモデルにこれらの変更を適用するには:
- 3Dモデルをアクティブにして、[形状]([ビジュアル]の下)をドラッグして、[Processor2A]と[Processor2B]の近くに配置します。
- [形状]をダブルクリックして、[プロパティ]ウィンドウを開きます。
- ウィンドウの上部にある名前ボックスで、形状の名前を「ScanStation2」に変更します。
- [フラグ]グループの[一般]タブで[名前を表示]チェックボックスをオンにします。
- [OK]を押して変更を保存し、ウィンドウを閉じます。
- 処理フローのリソースを使用したタスク形状で、アクティビティのスタックブロックをクリックして選択します。
- [アイテムをQueue2からロードする]アクティビティの前後にある[リンク解除]ボタン をクリックして、スタックブロックからアイテムを分離します。
- 1つ目のスタックブロックの[プロセッサを取得]アクティビティの前になるように、[Queue2からアイテムをロード]アクティビティをドラッグします。
- ライブラリから[移動]アクティビティ([タスクシーケンス]の下)をドラッグし、[アイテムをQueue2からロード]アクティビティの後に挿入します。
- [遅延]アクティビティ([ベーシック]の下)をドラッグし、[移動]アクティビティの後に挿入します。
- 2つの新しいアクティビティの名前を変更します。
- [ScanStation2に移動]アクティビティをクリックして選択します。[クイックプロパティ]で[実行者/タスクシーケンス]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル]をポイントし、[Operator]を選択します。
- [目的地]ボックスの横にある[サンプラー]ボタン をクリックしてサンプリングモードに入ります。
- 3Dモデルでは、[ScanStation2]をクリックしてメニューを開きます。[ResourceLogic/ScanStation2]を選択します。
- [遅延]アクティビティをクリックして選択します。[遅延時間]ボックスの[クイックプロパティ]で、現在のテキストを削除し、「
1.00
」と入力します。
アクティビティ | 新しい名前 |
---|---|
移動 | ScanStation2に移動する |
遅延 | 遅延:スキャンアイテム |
モデルをリセットして実行します。
見ていると、オペレーターはフローアイテムをスキャナに持ち込み、プロセッサにロードする前に短時間だけ遅延させることがわかります。単純な中間タスクをこの処理フローに挿入するのは比較的簡単だったことがわかります。残念ながら、Flexscriptでカスタムコードを記述せずに、これを標準ロジックで簡単に作成する方法はありません。
ステップ9 標準ロジックでリソースを使用する
標準3Dオブジェクトロジックと組み合わせてリソースロジックを使用するとどうなるでしょうか?このステップでは、タスクを作成する2つの方法を組み合わせるとどうなるかを調べます。標準ロジックを使用してProcessor1Bの処理時間を助けるOperator2Aを割り当て、それがタスクロジックにどのように影響するかを確認します。
これらの変更を行うには:
- 3Dモデルで、[Processor1B]から[Operator2A]へのセンターポート接続(S接続)を作成します。
- [Processor1B]をダブルクリックして、[プロパティ]ウィンドウを開きます。
- [プロセッサ]タブで[処理にオペレーターを使用]チェックボックスをオンにします。
- [オペレーターを選択]ボックスに「
current.centerObjects [2]
」と入力します。 - [優先度]ボックスが「
0.00
」に設定されていることを確認します。
モデルをリセットして実行します。
Processor1Bを5秒間実行するために、フローアイテムの輸送とスキャンの途中でOperator2Aが中断し続けることを確認してください。Operator2Aは、輸送またはスキャンの途中にあるフローアイテムを保持したまま、Processor1Bを実行するために何度も移動します。
これらの中断は、Operator2AがFIFO(先入れ先出し)ロジックを使用してタスクを実行するために発生します。つまり、オペレーターは割り当てられたタスクを受け取った順に実行します。処理フローまたはProcessor1Bから与えられたタスクを区別しません。いったんリソースが取得されると、輸送タスクが終了するまで、他のタスクでの作業ができないことが予想されるため、このような動作は望ましくありません。
この中断の問題は、リソース共有アセットを使用してタスクを作成することの欠点の1つです。両方の要素を組み合わせる場合、標準3Dオブジェクトロジックではリソースがうまく機能しません。
結論
これで、処理フローでリソースを使用して輸送タスクを構築しました。これには次のような利点があります。
- 使いやすさ - 標準ロジックと同様に、リソースを使用する処理フローを設定することはあまり難しくありません。ただ、いくつかステップが増えます。また、手順はかなり直感的です。
- ロジックがより見やすい - 処理フローでロジックを構築すると、オペレーターがどのようにタスクを実行するかを正確に把握するのに便利です。処理フローツールのフローチャートに似たビジュアルはより直感的で、これにより、カスタムタスクのトラブルシューティングと設計を簡単に行うことができます。
- カスタマイズ可能 - 標準ロジックとは異なり、リソースを使用する処理フローでカスタムタスクを作成するのは比較的簡単です。このチュートリアルでは、輸送タスク間に中間タスクを挿入するのは比較的簡単であることがわかります。標準の3Dロジックだけを使用して中間のカスタムタスクを追加することはもちろん可能ですが、そのためにはFlexScriptコードの記述方法を学ぶ必要があります。
- 複数のリソースを追加可能 - リソースをオブジェクトグループにリンクすることによって、オペレーターやプロセッサなどの複数のリソースを追加できます。追加のオペレーターとプロセッサを加えるこの方法は、ディスパッチャーを使用するよりも直感的で効率的です。
ただし、リソースを使用したタスクロジックの構築には、いくつかの欠点があります。
- 標準ロジックとの併用が困難 - このチュートリアルで見たように、処理フローロジックと標準ロジックを組み合わせることには問題があります。たとえば、中断してはいけないタスクの途中でタスク実行者を中断してしまうことがあります。
- モデルの拡張性 - 処理フローでリソースを使用すると、モデルをうまく拡張させるのが困難になるいくつかの問題が発生します。たとえば、大きなチームのオペレーターで作業している場合、リソース割り当て方法(つまり、特定のタスクにどのタスク実行者を割り当てるかや、どの順番でタスクを割り当てるか)を開発するのが難しくなります。また、処理フローを別の処理フロータイプ(タスク実行者、サブフローなど)のいずれかで構築すると、リソースのアクセスをローカルまたはグローバルにするかという管理に問題が生じる可能性があります。
- 優先度とプリエンプション - 標準ロジックでは、タスクに異なる優先度を割り当てたり、作業中のタスクを中断させてタスク実行者により重要なタスクを作業させたりするのは、比較的簡単です。処理フロータスクのほとんどのプロパティを見ると、優先度またはプリエンプションをタスクに割り当てるためのプロパティが含まれていないことがわかります。これは可能ですが、簡単ではありません(このため、このチュートリアルには、ステップの1つとして含まれていません)。優先度とプリエンプションについては、今後のチュートリアルのタスクで説明します。
ここまでで、処理フローでリソースを使用してタスクを構築することの利点と欠点について、十分理解いただけたと思います。次のチュートリアルでは、リストを使用してタスクロジックを構築する方法について説明します。「チュートリアルタスク1.3 - リストを使用したタスク」に進みます。