タスク4.4 - インスタンスを同時に変更する
タスクの概要
このタスクでは、元のオブジェクトの処理フローを改善して、RollOperatorによって輸送されてロードされているステッカーロールのアニメーションを追加します。ステッカーマシンがロールを使用するため、ロールのサイズが小さくなります。
また、固定リソース処理フローを大幅に変更して、すべての接続インスタンスを同時に更新する作業が簡単に実行できることを確認します。このチュートリアルの最後で分かるように、処理フローインスタンスを使用すると、大規模で複雑なモデルへの大幅な変更がかなり簡単になります。
ステップ1 ステッカーロールのフローアイテムを作成する
最初のステップは、3Dモデルでステッカーロールのフローアイテムを作成することです。ステッカーロールを作成してRoll Storageキュー内に配置する2番目のソースオブジェクトを追加します。次に、[フローアイテムビン]内のフローアイテムを変更して、ロールのステッカーのように見せます。
ステッカーロールを3Dモデルに追加するには:
- 3Dモデルで、[ライブラリ]から[ソース]をドラッグして、モデルの中心にあるRollStorageキューの上に置きます。
- [プロパティ]で、[ソース]の名前を「RollSource」に変更します。
- RollSourceとRollStorageの間にポート接続(A接続)を作成します。
- [RollSource]をクリックして、右側でそのプロパティを開きます。
- [ソース]セクションで次の操作を実行します。
- [FlowItemクラス]メニューをクリックし、[円柱]を選択します。
- [時刻0に到達]ボックスをオンにします。
- [到着時間間隔]ボックスに「
35
」と入力します。
- [ツールボックス]で、[Flowitem Bin]の横にある[展開]ボタンをクリックします。
- [円柱]をダブルクリックして[フローアイテムビン]で開きます。
- ビューアで、[円柱]をクリックして選択します。次に、青色の円錐を使用して円柱のサイズを変更し、ステッカーのロールのように見えるようにします。
- [プロパティ]で、円柱のXサイズとYサイズを「1」に変更します。
- フローアイテムビンを閉じます。
シミュレーションモデルを保存することをおすすめします。
ステップ2 グローバルリストを作成する
このステップでは、ストレージにあるすべてのステッカーロールを含むグローバルリストを作成します。グローバルリストを作成するには:
- RollStorageキューをクリックして、右側でそのプロパティを表示します。
- [トリガー]セクションで、[追加]ボタンをクリックして、メニューを開きます。[エントリ時]を選択します。
- [OnEntry]トリガーボックスの横にある[追加]ボタン をクリックして、メニューを開きます。[リスト]をポイントし、[リストにプッシュ]を選択してピックリストのプロパティを開きます。
- [リスト]ボックスの横にある矢印をクリックして、メニューを開きます。[新しいリストを追加]を選択して、新しいリストを作成します。
- [リストのプロパティ]ダイアログボックスの上部のボックスで、新しいリストの名前を「ストレージ内のロール」に変更します。
- [OK]ボタンを押して変更を保存し、新しいリストを閉じます。
- RollStorageキューのプロパティの[トリガー]セクションに戻り、[OnEntry]トリガーボックスの横にある[プロパティを編集]ボタンをクリックします。
- [リスト]ボックスの横にある矢印をクリックして、メニューを開きます。[ストレージ内のロール]をクリックして新しいリストを選択します。
シミュレーションモデルを保存することをおすすめします。
ステップ3 ロール再充填処理フローにアクティビティを追加する
このステップでは、ステッカーロール再充填処理フローに新しいアクティビティを追加して、ステッカーロールのアニメーションを作成します。すべてのアクティビティを形状に合わせるには、[ロール再充填]形状のサイズを調整する必要があるかもしれないことに注意してください。
ここでは、アクティビティの追加、名前の変更、それらのアクティビティ間の接続の作成のみを行います。アクティビティのプロパティ設定の変更は後で行います。
作業が完了すると、処理フローは次のようになります。
この処理フローを作成するには:
- ステッカーロールロジック固定処理フローが開いていて、アクティブであることを確認します。
- [ステッカーロール再充填]形状のアクティビティ間の接続をすべて削除します。アクティビティは後のステップで再接続します。
- [オブジェクトを作成]アクティビティ([オブジェクト]の下)を[ソース:2つのロールを開始]の後に追加して、スタックブロックを作成します。
- [ラベルを割り当て]アクティビティ([ベーシック]の下)を最初のスタックブロックと[リストにプッシュ:ステッカーロール]アクティビティの間に、アクティビティを結合せずに追加します。
- [ラベルを割り当て]アクティビティの最後に2つの[ビジュアルを変更]アクティビティ([ビジュアル]の下)を追加して、2つ目のスタックブロックを作成します。
- [リストにプッシュ:ステッカーロール]を2つ目のスタックブロックの最後にドラッグします。
- アクティビティを結合せずに、[オブジェクトを破棄]アクティビティ([オブジェクト]の下)を2つ目のスタックブロックの後に追加します。
- [移動:ロールを選択]アクティビティを削除します。
- [リストからプル]アクティビティ([共有アセット]の下)を[オブジェクトを破棄]アクティビティの最後に追加して、3つ目のスタックブロックを作成します。
- [タスク]アクティビティのブロックをクリックし、[はさみ]アイコンを使用してすべてのアクティビティを分割し、アクティビティが接続されていないようにします。
- [タスクシーケンスを作成]アクティビティを3つ目のスタックブロックの最後までドラッグします。
- [ロード]アクティビティ([タスクシーケンス]の下)を3つ目のスタックブロックの最後に追加します。
- [移動]アクティビティを3つ目のスタックブロックの最後までドラッグします。
- [遅延]アクティビティ([タスクシーケンス]の下)を3つ目のスタックブロックの最後に追加します。
- 1つの[オブジェクトを移動]([オブジェクト]の下)を追加します。
- 1つの[タスクシーケンスを終了]([タスクシーケンス]の下)を3つ目のブロックの最後に追加します。
- 1つの[リスト]アセット([共有アセット]の下)を任意のアクティビティに結合せずにすべてのアクティビティの右側に追加します。
- 分かりやすくするために、次のオブジェクトの名前を変更します。
- 次の接続を作成します。
- 最初のスタックブロックから2つ目のブロックへ
- 2つ目のスタックブロックから3つ目のブロックへ
- 3つ目のスタックブロックから1つ目のブロックにループバック
オブジェクト | 新しい名前 |
---|---|
オブジェクトを作成 | オブジェクトを作成:ステッカーロール |
ラベルを割り当て | ラベルを割り当て:rollQuantity |
ビジュアルを変更(1回目) | ビジュアルを変更:場所を設定 |
ビジュアルを変更(2回目) | ビジュアルを変更:回転を設定 |
リストにプッシュ:ステッカーロール | リストにプッシュ:使用中のステッカーロール |
オブジェクトを破棄 | オブジェクトを破棄:空のロール |
リストからプル | リストからプル:ストレージ内のロール |
ロード | ロード:新しいロールを選択 |
遅延 | 遅延:インストール時間 |
オブジェクトを移動 | オブジェクトを移動:モデルに |
TSを終了 | タスクシーケンスを終了 |
リスト | リスト:ストレージ内のロール |
処理フローがこのステップの冒頭に表示した画像のようになることを確認します。
ステップ4 ロール再充填ロジックを変更する
このステップでは、[ステッカーロール使用]処理フローのアクティビティのプロパティを編集します。この処理フローのアクティビティが機能する方法の概要を次に示します。
アクティビティ | 説明 |
---|---|
ソース:2つのロールを開始 | rollQuantityラベルを「rollNumber」という新しいラベルに置き換えます。この処理フローには、処理フローを継続的にループするトークンが2つしかないことに注意してください。トークンインデックスに基づいて、rollNumberラベルでは最初のトークンに値「1」を割り当て、2つ目のトークンに「2」を割り当てます。処理フローではこのラベルを使用して、2つのロールが3Dビューで重ならないようにモデル内の正しい位置に配置します。 |
オブジェクトを作成:ステッカーロール | このアクティビティでは、円柱のフローアイテムオブジェクト(ステッカーロール)を作成し、モデル内に配置します。また、3Dモデルで作成された特定のロールへの参照を保持する「rollObject」という新しいラベルを追加します。 |
ラベルを割り当て:rollQuantity | 処理フローを正しく機能させるためには、rollQuantityラベルが必要なので、このアクティビティでトークンにそのラベルを追加します。rollQuantityラベルは、各ロールにあるステッカーの数を設定します。初期値は「20」に設定します。 |
ビジュアルを変更:場所を設定 | このアクティビティでは、3Dモデルのステッカーマシンにロードされたステッカーロールの位置を設定し、ステッカーマシンの横に表示されるようにします。このアクティビティでは、数種のラベルとコマンドを使用して、この効果を作成します。
|
ビジュアルを変更:回転を設定 | このアクティビティでは、最初の2つのステッカーロールの回転を設定し、ステッカーマシンの横に直立するようにします。 |
リストにプッシュ:使用中のステッカーロール | このアクティビティを変更する必要はありません。新しいロールがステッカーマシンにインストールされると、そのロールが[リスト:使用中のステッカーロール]に追加されます。ロールが空の場合(rollQuantityが0になったため)、トークンは次のアクティビティに移動します。 |
オブジェクトを破棄:空のロール | このアクティビティでは、空になったロールを破壊します。rollObjectラベルを使用して、破棄するべきステッカーロールを特定します。 |
リストからプル:ストレージ内のロール | このアクティビティでは、グローバル[ストレージロール]リストからロールをプルし、それをトークンのrollObjectラベルに割り当てます。 |
TSを作成:新しいロールを取得 | タスク実行者を3Dモデル名のRollOperatorに向けます。このアクティビティでは、新しいタスクシーケンスを作成します。これはRollOperatorに割り当てられる一連のタスクです。タスクシーケンスはgetRollと呼ばれます。ステッカーのロールが空になるたびに新しいタスクシーケンスを作成することによって、新しいステッカーロールを選択してインストールしているときに、RollOperatorが中断されたり、他のタスクで動作したりするのを防ぐことができます。 |
ロード:新しいロールを選択 | RollOperatorは新しいステッカーロールをピックアップします。アクティビティでは、RollOperatorに、トークンのrollObjectラベルで参照されている3Dオブジェクトをピックアップするように指示します。 |
移動:新しいロールをインストール | このアクティビティを変更する必要はありません。このアクティビティでは、RollOperatorが新しいロールを持ってステッカーマシンに戻るように指示します。 |
遅延:インストール時間 | このアクティビティでは、RollOperatorがステッカーロールをステッカーマシンにインストールするためにかかる時間をシミュレーションします。この時間を取得するには、指数分布を使用します。 |
オブジェクトを移動:モデルに | RollOperatorがステッカーマシンに戻ると、新しいロールがモデルに移動します。モデル内のその場所は、処理フローの前の[オブジェクトを作成]アクティビティの設定に基づいています。 |
この機能を作成するには:
- [ステッカーロール再充填]形状の最初のスタックブロックをクリックして選択します。
- [プロパティ]の[ソース:2つのロールを開始]で次の操作を実行します。
- [作成されたトークンにラベルを割り当て]グループを見つけます。[名前]ボックスで、ラベルの名前を「rollNumber」に変更します。
- [値]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンインデックス]を選択します。
- [プロパティ]の[オブジェクトを作成:ステッカーロール]で次の操作を実行します。
- [オブジェクト]ボックスの横にある矢印をクリックして、メニューを開きます。[FlowItems]をポイントし、[円柱]を選択します。
- [作成場所]オプションをクリックして選択します。以下のボックスの横にある矢印をクリックしてメニューを開き、[current]を選択します。
- [割り当て先]オプションが選択されていることを確認します。すぐ下にあるボックスに「
token.rollObject
」と入力して、ラベル名を変更します。
- [ステッカーロール再充填]形状の2番目のスタックブロックをクリックして選択します。
- [プロパティ]の[ラベルを割り当て:rollQuantity]で次の操作を実行します。
- [追加]ボタン をクリックして、新しいラベルを追加します。
- [名前]ボックスに「rollQuantity」と入力します。
- [値]ボックスに「20」と入力します。
- [プロパティ]の[ビジュアルを変更:場所を設定]で次の操作を実行します。
- [ビジュアルを変更]ボックスの横にある[追加]ボタン をクリックして、メニューを開きます。[回転、サイズ、場所を設定]を選択して、ピックリストオプションを開きます。
- [オブジェクト]ボックスで、現在のテキストを削除し、「
token.rollObject
」と入力します。 - [Xの場所]ボックスに「
current.location.x + token.rollNumber
」と入力します。 - [Yの場所]ボックスに「
current.location.y - current.size.y
」と入力します。 - [Zの場所]ボックスに「
1
」と入力します。
- [プロパティ]の[ビジュアルを変更:回転を設定]で次の操作を実行します。
- [ビジュアルを変更]ボックスの横にある[追加]ボタン をクリックして、メニューを開きます。[回転、サイズ、場所を設定]を選択して、ピックリストオプションを開きます。
- [設定]メニューをクリックし、[回転]を選択します。
- [オブジェクト]ボックスで、現在のテキストを削除し、「
token.rollObject
」と入力します。 - [Xの回転]ボックスに「
90.0
」と入力します。 - [Yの回転]ボックスに「
90.0
」と入力します。 - [Zの回転]ボックスに「
0
」と入力します。
- [ステッカーロール再充填]形状の3つ目のスタックブロックをクリックして選択します。
- [プロパティ]の[オブジェクトを破棄:空のロール]で次の操作を実行します。
- [オブジェクト]ボックスの横にある矢印をクリックして、メニューを開きます。
- [トークンラベル]をポイントし、次に[rollObject]を選択します。
- 処理フローで、[リンクなし]アイコン ([リストからプル:ストレージ内のロール]アクティビティの横)をクリックしてサンプリングを開始します。[リスト:ストレージ内のロール]アセットをクリックし、まとめてリンクします。
- 3つ目のスタックブロックが選択されていることを確認します。[クイックプロパティ]の[リストからプル:ストレージ内のロール]で、[割り当て先]オプションが選択されていることを確認します。このオプションのボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル]をポイントし、次に[rollObject]を選択します。
- [プロパティ]の[TSを作成:新しいロールを取得]で次の操作を実行します。
- [タスク実行者/ディスパッチャー]の横にあるサンプラーボタンをクリックして、3Dモデル内のRollOperatorを選択します。
- [プロパティ]の[ロード:新しいロールを選択]で次の操作を実行します。
- [アイテム]ボックスの横にある矢印をクリックして、メニューを開きます。[トークンラベル]をポイントし、次に[rollObject]を選択します。
- [プロパティ]の[遅延:インストール時間]で次の操作を実行します。
- [遅延時間]ボックスの横にある矢印をクリックして、メニューを開きます。[統計分布]をポイントし、[指数]を選択して分布セレクターを開きます。
- [場所]ボックスに「
5
」と入力します。その他の設定はすべて同じにしてください。
- [プロパティ]の[オブジェクトを移動:モデルに]で次の操作を実行します。
- [オブジェクト]の横にある矢印をクリックしてメニューを開きます。[トークンラベル]をポイントし、次に[rollObject]を選択します。
- [目的地]ボックスに、コマンド「
current.up
」を入力します。 - [グローバル位置を維持]チェックボックスをオフにします。
シミュレーションモデルを保存することをおすすめします。
ステップ5 両方のリストのプロパティを編集する
このステップでは、処理フローの2つのリストのプロパティを編集します。
まず、[リスト:使用中のステッカーロール]を動的リストにする必要があります。このリストが動的になると、リストとトークンの両方のrollQuantityラベルは同時に減少します。他のアクティビティとオブジェクトは、トークン上のrollQuantityラベルの値を取得して、ロールの残量を計算し、そのサイズを更新できます。
次に、新しい[リスト:ストレージ内のロール]共有アセットを更新して、ステップ2で作成したグローバル[ストレージロール]リストのエイリアスとして機能するようにします。
この機能を作成するには:
- [リスト:使用中のステッカーロール]アセットをクリックして選択します。
- [プロパティ]で、[詳細プロパティ]ボタンをクリックします。
- [フィールド]タブで、rollQuantityラベルフィールドの横にある[動的]ボックスをオンにします。
- [OK]ボタンを押して変更を保存します。
- 左ペインの[ツールボックス]タブをクリックしてツールボックスを開きます([グローバルリスト]をすぐにサンプリングできるように)。
- 処理フローに戻り、[リスト:ストレージ内のロール]([ステッカーロール再充填]形状内)をクリックして選択します。
- [プロパティ]の[リスト]ボックスの横にある[サンプラー]ボタンをクリックして、サンプリングモードに入ります。
- [ツールボックス]で、[グローバルリスト]の[ストレージ内のロール]をクリックして選択します。
シミュレーションモデルを保存することをおすすめします。
ステップ6 ロール使用処理フローにアクティビティを追加する
このステップでは、ステッカーロール使用処理フローに新しいアクティビティを追加して、ステッカーロールのアニメーションを作成します。ここでは、アクティビティの追加、名前の変更、それらのアクティビティ間の接続の作成のみを行います。アクティビティのプロパティ設定の変更は後で行います。
作業が完了すると、処理フローは次のようになります。
この処理フローを作成するには:
- [ステッカーロール使用]形状で、2つ目のスタックブロックから[シンク:フローアイテムの出口]までの接続を削除します。
- [シンク:フローアイテムの出口]アクティビティを少し下に移動させ、他のアクティビティのためのスペースを確保します。
- [ラベルを割り当て]アクティビティ([ベーシック]の下)を2つ目のスタックブロックと[シンク:フローアイテムの出口]アクティビティの間に、その他のアクティビティを結合せずに追加します。
- [ラベルを割り当て]アクティビティの後に[ビジュアルを変更]アクティビティ([オブジェクト]の下)を追加してスタックブロックを作成します。
- [シンク:フローアイテムの出口]アクティビティを3つ目のスタックブロックの上にドラッグし、最後に追加します。
- 2つ目のスタックブロックを3つ目のスタックブロックに再接続します。
- 分かりやすくするために、次のオブジェクトの名前を変更します。
オブジェクト | 新しい名前 |
---|---|
ラベルを割り当て | ラベルを割り当て:値を取得 |
ビジュアルを変更 | ビジュアルを変更:ロールのサイズを変更 |
処理フローが最初のステップのようになることを確認してください。
ステップ7 ロール使用ロジックを変更する
このステップでは、[ステッカーロール使用]処理フローのアクティビティのプロパティを編集します。この処理フローの2つの新しいアクティビティが機能する方法の概要を次に示します。
アクティビティ | 説明 |
---|---|
ラベルを割り当て:値を取得 | このアクティビティでは、新しいラベルを3つ作成します。
|
ビジュアルを変更:ロールのサイズを変更 | このアクティビティでは、3Dモデルのステッカーロールのサイズを変更します。このアクティビティでは、前のアクティビティで設定したrollSizeを使用して、ステッカーロールのXのサイズとYのサイズを決定します。Zのサイズは以前のものに設定されます(変更されません)。 |
getlabelコマンドは、この処理フローのロジックにとって重要になります。getlabelコマンドは、処理フローのトークンまたは3Dモデルのオブジェクトのラベルの値を取得します。さまざまなアクティビティやオブジェクトはそのデータを使用して、モデルの機能に影響を与えることができます。getlabelコマンドには2つのパラメータがあります。
- オブジェクト - このパラメータでは、関心のあるラベルがどのオブジェクトにあるかを示します。
- ラベル名 - このパラメータでは、関心のあるラベルの名前を示します。
FlexSimがgetlabelコマンドを実行するとき、そのラベルの値が返されます。たとえば、処理フローに値が「15」で「weight」というラベルが付いたトークンがあるとします。ラベルから情報を取得するgetlabelコマンドは、getlabel(token, "weight")
となり、値「15」を返します。
この機能を作成するには:
- [ステッカーロール使用]形状の2つ目のスタックブロックをクリックして選択します。
- [プロパティ]の[ラベルを割り当て:値を取得]で次の操作を実行します。
- [追加]ボタン を3回クリックして、新しいラベルを追加します。
- 3つのラベルの[名前]と[値]ボックスに次の値を入力します。
名前 値 rollObjectCopy token.pulled.rollObject
rollQuantityCopy token.pulled.rollQuantity
rollSize token.rollQuantityCopy / 20
- [プロパティ]の[ビジュアルを変更:ロールのサイズを変更]で次の操作を実行します。
- [追加]ボタン をクリックして、メニューを開きます。[回転、サイズ、場所を設定]を選択します。
- [設定]メニューをクリックし、[サイズ]を選択します。
- [オブジェクト]ボックスに「
token.rollObjectCopy
」と入力します。 - [Xのサイズ]と[Yのサイズ]ボックスの両方に「
token.rollSize
」と入力します。 - [Zのサイズ]ボックスに「
token.rollObjectCopy.as(Object).size.z
」と入力します。
シミュレーションモデルを保存することをおすすめします。
ステップ8 元のステッカーシステムを更新する
最初の2つのステッカーシステムと新しいステッカーシステムと比較する場合、このステップは任意ですが、最初の2つのステッカーシステムに同じ機能を持たせる場合は、最初の2つのステッカーシステムを固定リソース処理フローに添付し、[ツールボックス]で元のプロセスフローを削除できます。
ステップ9 シミュレーションモデルを実行してテストする
最後にモデルをテストします。
リセットしてモデルを実行し、実際の様子を見てみましょう。
ステッカーマシンシステムのそれぞれを見ると、各ステッカーマシンでは2つの最初のステッカーロールが表示されています。使用されているステッカーは、徐々に小さくなって消えます。次に、RollOperatorはストレージから新しいステッカーロールを取得し、ステッカーマシンで2つ目のステッカーロールが使用される間にステッカーマシンにインストールします。
必要に応じて、ステッカーロールリストのエントリや処理フローの個別のインスタンスを自由に表示できます。
結論
モデルが実行されるのを見ていると、いくつかのボトルネックと、ラベルが足りなくなってステッカーマシンが動作を停止する場所が確認できます。このようなモデルを作成した後、ボトルネックを調査したり、ステッカーを時間内にステッカーロールへインストールするために必要なオペレーターの数など、さまざまな変数を試したりできます。
以上で、処理フローインスタンスに関するチュートリアルは終了です。処理フローインスタンスを使用した処理フローロジックの構築についてのベストプラクティスをいくつか学べたことと思います。