処理フローをトラブルシューティングする

処理フローのトラブルシューティングの概要

処理フローツールを使用する主な利点の1つは、処理フローでシミュレーションモデルのロジックを視覚的に見られることです。コードと比較してデバッグとトラブルシューティングがはるかに簡単になります。このトピックでは、処理フローのトラブルシューティングに使用できるさまざまなツールと方法について説明します。

ステップボタンを使用する

処理フローのトラブルシューティングを行うには、まず処理フローの各ステップを検証することをお勧めします。シミュレーションコントロールバーの[ステップ]ボタンを使用して、通常のシミュレーションモデルで行うのと同様に処理フローの各ステップを検証できます。

[実行]ボタンをクリックする代わりに[ステップ]ボタンをクリックすると、処理フローモデルで発生する次のイベントにシミュレーションを進めることができます。これにより、エラーメッセージの原因となったトークンや、期待どおりの動作をしなかったトークンを確認できます。

特定のトークンをクリックして、そのプロパティに関する詳細情報を確認することもできます。トークンのプロパティを表示する方法の詳細については、「トークンのプロパティ」を参照してください。

処理フローに多数の異なるトークンがある場合は、処理フローの各ステップを通して特定のトークンを追跡するのが難しい場合があります。この問題は、1つのトークンを追跡することで解決できます。詳細については、「トークンを視覚的に追跡する」および「追跡履歴を使用してトークンを追跡する」を参照してください。

トークンを視覚的に追跡する

必要に応じて、処理フロー内を移動するトークンを視覚的に追跡できます。トークンが視覚的に追跡されている場合、そのトークンのコピーが処理フローの外側に表示され、特定のトークンが処理フロー内を移動するのを簡単に追跡できます。

処理フローから視覚的追跡を直接有効にするには:

  1. 追跡するトークンをクリックして選択します。
  2. クイックプロパティ]で、[トークンを視覚的に追跡]チェックボックスをオンにします。詳細については、「トークンのプロパティ」を参照してください。

すべての現在のトークンの概要を表示し、追跡するトークンを選択するには:

  1. 処理フローの空白スペースをクリックして、何も選択されていないことを確認します。
  2. クイックプロパティ]で[トークンを表示]ボタンをクリックして、[トークン]ウィンドウを開きます。
  3. 現在の処理フローにあるすべてのトークンの名前またはIDを表示するには、[トークン]リストを参照します。任意のトークンをクリックすると、その詳細情報が表示されます。どのトークンを視覚的に追跡するかを決めたら、[トークン]リストでそれが引き続き選択されていることを確認します。
  4. ウィンドウの下部にある[トークンを視覚的に追跡]チェックボックスをオンにします。詳細については、「トークンウィンドウ」を参照してください。

追跡履歴を使用してトークンを追跡する

処理フロー内を移動するトークンの履歴をきめ細かく表示させることができます。追跡履歴を表示する機能を設定するには、まず履歴を追跡する機能を有効にする必要があります。その後、さまざまな方法で追跡履歴を表示できます。

追跡履歴機能をオンにする

追跡履歴を有効にするには、まず、処理フロー内のどのアクティビティで追跡履歴を開始し、どのアクティビティで終了するのかを決める必要があります。たとえば、処理フロー全体を追跡する場合は、処理フローの開始時に[ソース]アクティビティの追跡を開始し、トークンが[シンク]または[終了]に送信されると追跡が自動で終了します。どのアクティビティでも追跡のオンとオフを切り替えることができます。

追跡履歴を設定するには:

  1. 処理フローの空白スペースをクリックして、何も選択されていないことを確認します。
  2. クイックプロパティ]で、[アクティビティを表示]ボタンをクリックして[アクティビティ]ウィンドウを開きます。
  3. 現在の処理フローにあるすべてのアクティビティの名前を表示するには、[アクティビティ]リストを参照します。追跡履歴の開始となるアクティビティを決定したら、それが[アクティビティ]リストで引き続き選択されていることを確認します。
  4. トレース履歴]グループで[トレースオプション]メニューをクリックし、[トレースを開始]を選択します。注:特定の条件セットを使用して追跡されるトークンを制限する場合は、[要件]ボックスを使用して条件を決定できます。
  5. アクティビティ]リストで追跡履歴の終了となるアクティビティを選択します。
  6. トレース履歴]グループで、[トレースオプション]メニューをクリックし[トレースを終了]を選択します。詳細については、「アクティビティウィンドウ」を参照してください。

あるいは、処理フロー内の任意のアクティビティを右クリックしてメニューを開くこともできます。[トレース履歴]をポイントし、[トレースを開始]または[トレースを終了]を選択して追跡をオンまたはオフにします。

追跡履歴を表示する

追跡履歴を表示するには:

  1. 処理フローの空白スペースをクリックして、何も選択されていないことを確認します。
  2. クイックプロパティ]で[トークンを表示]ボタンをクリックして、[トークン]ウィンドウを開きます。
  3. 現在の処理フローにあるすべてのトークンの名前またはIDを表示するには、[トークン]リストを参照します。任意のトークンをクリックすると、その詳細情報が表示されます。追跡履歴表示の対象となるトークンを決定したら、それが[トークン]リストで引き続き選択されていることを確認します。
  4. ウィンドウの下部にある[追跡履歴を表示]ボタンをクリックすると、[トレース履歴]ウィンドウが表示されます。次の画像にその例を示します。

トークンのリストの下にある[追跡履歴を表示]ボタンをクリックして[トレース履歴]ウィンドウを開き、ドロップダウンから目的のトークンを選択することもできます。

また、処理フロービューでトークンをクリックし、クイックプロパティの[トレース履歴]ボタンをクリックして、トークンの追跡履歴を表示することもできます。

[トレース履歴]ウィンドウが開いている場合、処理フロービューでは、id.indexの形式で入力した各アクティビティの左側に、そのトークンの履歴が表示されます。idはトークンID番号で、インデックスは追跡履歴データのインデックスに対応します。

[トレース履歴]ウィンドウには、アクティビティ履歴とアクティビティプロファイルという2組の情報が表示されます。

  • アクティビティ履歴 - トークンが処理フロー内を移動した順序、各アクティビティに出入りした時間を表示します。
  • アクティビティプロファイル - トークンが各アクティビティ内で費やした合計時間を表示します。処理フローに何らかのループが含まれている場合、またはトークンが同じアクティビティのみを複数回通過する場合、トークンがこれらの各アクティビティで費やした時間の長さがこのデータに表示されます。

0秒遅れを使用する

モデル内の一部の問題は、そのモデル内のイベントによってアクティビティの同期実行がトリガーされることにより発生する場合があります。たとえば、コンベヤなどの固定リソースに複数のフローアイテムがあるとします。処理フローで[イベントトリガーソース]や[イベントを待つ]などのイベントリスニングのアクティビティを使用してフローアイテムをリリースするタイミングを判断すると、コンベヤ上のすべてのアイテムが誤ってリリースされる可能性があります。

この問題は、FlexSimがイベントリスニングのアクティビティのロジスティクスを処理する方法に起因して生じるものです(詳細については、「イベントリスニングについての主要な概念」を参照してください)。これは[イベントを待つ]または[イベントトリガーソース]が特定のイベントをリッスンしているときに多く発生します。その後、そのイベントが発生すると、本来トリガーされるイベントとそれに続いてイベントをトリガーするロジックとの間に遅延を生じることなく、モデル内のイベントを不用意に起動させる可能性のある1つ以上の他のアクティビティがイベントの後に続くことがあります。ロジックが短期間に発生するため、元のイベントが「ブレス」をして処理中の作業を終了する時間が与えられません。これらの問題の影響を受ける可能性があるイベントの種類は次のとおりです。

  • 入力ポートまたは出力ポートを開く
  • アイテムを受け取る、またはリリースする
  • オブジェクトを移動する
  • オブジェクトを破棄する、など

このような場合、イベントリスニングのアクティビティの後に[遅延]アクティビティを追加し、遅延時間を0秒に設定することで問題を解決できます。このアクティビティを追加すると、本来トリガーされるイベントが、トークンが移動する前に行っていた処理を完了させることができます(このアクティビティの詳細については、「遅延」を参照してください)。

0秒遅れを使用するもう1つの利点は、これを行うことで、[ステップ]ボタンを使用してデバッグしやすくなることです(詳細については、「ステップボタンを使用する」を参照してください)。アクティビティが外部イベントによってトリガーされる場合、実際には何か他の処理が行われる直前に計算を行ったり戻り値を定義したりする必要があれば、処理フローはすべてのアクティビティを強制的に同期して実行させる必要があります。したがって、遅延時間0の[遅延]アクティビティを追加して明示的に指示しない限り、イベントによってトリガーされるアクティビティは同期して実行されます。この遅延により、イベントをトリガーしたオブジェクトがそのイベントロジックを終了できます。

トークンのプロパティ

トークンのプロパティは、トークンに関する詳細情報を提供するため、特定のトークンに何が起こっているのかを正確に理解するのに特に役立ちます。シミュレーションの実行中に[停止]ボタンを押すとシミュレーションが中断されます。次に、特定のトークンをクリックすると、次の画像に示すように、[クイックプロパティ]ペインに[トークンのプロパティ]が表示されます。

このペインには次の設定があります。

  • 名前 - トークンの名前(トークンに名前が割り当てられている場合)とID番号を表示します。
  • インスタンス - 処理フロー内でこのトークンが存在する特定のインスタンスを表示します。インスタンスの詳細については、「処理フローインスタンス」を参照してください。
  • アクティビティ - トークンが存在する現在のアクティビティを表示します。
  • 開始時刻 - トークンが現在のアクティビティに入ったときのシミュレーションクロックの時間を表示します。
  • 終了時刻 - 該当する場合は、シミュレーションクロックにトークンが現在のアクティビティを終了する予定時刻を表示します。適用されるアクティビティには、遅延タスクシーケンス遅延アニメーションを実行などがあります。
  • 視覚的に追跡 - このチェックボックスをオンにすると、トークンが処理フロー内を移動するのに合わせて、現在のアクティビティの左側にトークンが描画されます。詳細については、「トークンを視覚的に追跡する」を参照してください。
  • トレース履歴 - このトークンの追跡履歴を表示します。詳細については、「追跡履歴を使用してトークンを追跡する」を参照してください。
  • ラベル - トークンのすべてのラベルとその現在の値をテーブル形式で表示します。
    • - このフィールドでは、ラベル名でラベルのリストをフィルタリングできます。
    • - トークンのラベルテーブル内で選択されたラベルがオブジェクトまたは別のトークンである場合、そのオブジェクトまたはトークンがそのビューの中央に配置されます。
    • - トークンのラベルテーブル内で選択されたラベルがオブジェクトまたは別のトークンである場合、そのオブジェクトまたはトークンが選択されます。
  • 配列を展開 - ラベルがテーブルに表示される方法に影響します。このチェックボックスをオンにすると、配列データを含むラベルは配列内の各エントリを別々の行として表示します。
  • 親ラベルを表示 - ラベルがテーブルに表示される方法に影響します。このチェックボックスをオンにすると、親の祖先トークンが所有するラベルがテーブルに表示されます。

トークンの関係

選択したトークンが子である場合、または子を持つ場合、[関係]ペインも表示されます。

ペインには次の設定があります。

  • - トークンに親がある場合、親トークンの名前とID番号がここに表示されます。
    • - 親トークンが処理フロービューの中央に配置されます。
    • - トークンが選択され、親トークンのプロパティを表示するようクイックプロパティが変更されます。
  • - トークンに子がある場合は、このテーブルに表示されます。名前とID番号が最初の列に表示され、子トークンの現在のアクティビティが[アクティビティ]列に表示されます。
  • ビューで子をセンターに配置 - 選択した子トークンが処理フロービューの中央に表示されます。
  • 子を選択 - 子トークンが選択され、子トークンのプロパティを表示するようクイックプロパティが変更されます。

トークン共有アセット

選択したトークンに共有アセットが割り当てられている場合(リソースを取得、リストからプッシュ/プルされた、またはゾーンに入った場合)、[共有アセット]ペインも表示されます。

ペインには次の設定があります。

  • 割り当てリスト - 割り当てられたすべての共有アセットのリストがここに名前別に表示されます。
  • ビューの中心 - 選択した共有アセットを処理フロービューの中央に表示します。
  • ステータス - 割り当てのステータスを表示します。ステータスには次のものがあります。
    • リクエスト済み - トークンは共有アセットを割り当てようとしましたが、現在利用可能ではありません。トークンは、共有アセットが利用可能になるのを待機しています。
    • 割り当て済み - トークンが共有アセットを正常に割り当てました。
  • リクエスト時間 - トークンが共有アセットを割り当てようとしたシミュレーション時間。
  • 開始時刻 - トークンが共有アセットを割り当てたシミュレーション時間。
  • 数量 - リソースでのみ使用されます。これは、リクエストまたは割り当てされたリソースの数です。
  • 割り当て先 - リソースでのみ使用されます。リソースが割り当てられたラベルです。

トークンのプロパティウィンドウ

上のプロパティはすべて、トークンの[プロパティ]ウィンドウで開くこともできます。トークンのプロパティウィンドウは、クイックプロパティの[トークンプロパティ]ペインで[ポップアウト]ボタンを使用するか、処理フロービューでトークンをダブルクリックすることで利用できます。

トークンウィンドウ

[トークン]ウィンドウでは、現在処理フローにあるすべてのトークンを表示、編集、管理できます。このウィンドウは、処理フロー内の空白をクリックして開くことができます(他に何も選択されていないことを確認してください)。[クイックプロパティ]で、[トークンを表示]ボタンをクリックしてこのウィンドウを開きます。

アクティビティウィンドウ

[アクティビティ]ウィンドウでは、現在処理フローにあるすべてのアクティビティを表示、編集、管理できます。このウィンドウは、処理フロー内の空白をクリックして開くことができます(他に何も選択されていないことを確認してください)。[クイックプロパティ]で、[アクティビティを表示]ボタンをクリックしてこのウィンドウを開きます。

リスト

処理フローにリストとのやり取りが含まれている場合は、リストのエントリの確認が必要となる可能性があります。これらのエントリおよびバックオーダーは、[リストのプロパティ]の[エントリを表示]ボタンまたは[バックオーダーを表示]ボタンをクリックすると表示できます。