イベントについての主要な概念

イベント、状態、トリガーの概要

シミュレーションモデルのロジックをコントロールするには、イベント、状態、トリガーをよく理解する必要があります。この3つは、ビジネスシステムのロジックをシミュレートするための基本的な概念です。

シミュレーションイベントとは

標準イベントとも呼ばれるシミュレーションイベントは、シミュレーション実行中に3Dオブジェクトがフローアイテムと相互作用している際に発生するイベントのことです。処理フローアクティビティがトークンと相互作用するときに発生するイベントを指すこともあります。

FlexSimは、離散イベントシミュレーションのソフトウェアプログラムです。つまり、ビジネスシステムが機能する仕組みを、時間の経過とともに発生する個別イベントの連続として表します。以下は、現実のビジネスシステムで発生するイベントの代表的な例です。

  • 顧客または新規注文の到着
  • 出荷された材料の到着
  • あるステーションから別のステーションへの製品の輸送または運搬
  • 機械またはステーションでの製品の処理
  • 機械の故障

FlexSimは、3Dオブジェクトのシミュレーションイベントを使用して、これら現実のイベントのロジックをシミュレートします。各シミュレーションイベントは、3Dオブジェクトにフローアイテムとの相互作用を指示する、あらかじめプログラムされたロジックのかたまりと考えることができます。これらのイベントが発生する際に、3Dオブジェクトのロジックと動作を修正することで、モデル化しているビジネスシステムに近づけることができます。

シミュレーションイベントは、3Dオブジェクトがフローアイテムと相互作用するたびに同じシーケンスで発生します。たとえば、プロセッサの3Dオブジェクトには3つの基本フェーズがあります。

プロセッサは、基本的にフローアイテムを取得し、アイテムを処理し、そのアイテムを次の下流オブジェクトに送ります。

これら3つのフェーズのそれぞれで、いくつかの異なるシミュレーションイベントが発生する可能性がありますが、そのうちの一部は、シミュレーション実行中に3Dモデルで表示されない場合があります。

これら各イベントのときに、プロセッサを設定し、シミュレーションしようとしているビジネスシステムの動作により近くなるロジックを使用するようにできます。たとえば、「3Dオブジェクトフローを接続する」の章で説明するように、「アイテムを取得」または「アイテムを送る」フェーズでポートロジックまたはリストロジックを実装できます。

また、プロセッサがアイテムを処理するフェーズでロジックを使用することもできます。たとえば、セットアップや処理に要する時間を決定するロジックが設定できます。セットアップ時間や処理時間を、設定された時間、統計分布に基づくランダムな時間に設定することも、または特定の動的条件(アイテムの製品タイプなど)に依存するようにもできます。

イベントの具体的なシーケンスは、オブジェクトのクラス(固定リソースかタスク実行者かなど)によっても異なります。その上、3Dオブジェクトの各タイプには、そのタイプ固有のイベントがさらにいくつかあります。各イベントの技術的な説明についての詳細については、「固定リソースの概念」と「タスク実行者の概念」を参照してください。各3Dオブジェクトに固有のイベントの説明は、個々の3Dオブジェクトのリファレンスページを参照してください。

状態とは

現実のビジネスシステムでイベントが発生すると、そのシステムで状態の変化が発生します。たとえば、ある機械があるアイテムを処理しているときは、処理中の状態にあります。アイテムを処理していないときは、アイドルの状態にあります。破損しているか、修理中は、ダウンの状態にもなります。

同様に、シミュレーションモデルのイベントにより、そのシステムの3Dオブジェクトの状態が変化することがあります。たとえば、オペレーターがあるオブジェクトから別のオブジェクトへ移動している間は、移動中の状態になります。また、稼働の状態にあるときは、特定のタスクに取り組んでいることを意味します。

状態は、通常、統計とデータ収集の用途において重要となります。たとえば、ビジネスシステムの効率性を判断するために、オペレーターが稼働状態にある時間、移動中の時間、アイドルの時間を比率分析する場合などです。ただし、オブジェクトが状態を変更したり、特定の状態に入ったりしたときに、特定のイベントを発生させることもできます。たとえば、プロセッサがダウンしているときに、修理タスクやイベントのシーケンスを開始するメッセージを送信できます。

シミュレーションモデルは、3Dオブジェクトでの状態変化やその他の統計的変化をリッスンできます。たとえば、キューが空のとき、最大コンテンツに達したとき、コンテンツが変化したときなどを、モデルで追跡できます。

トリガーとは

シミュレーションモデルのイベントと統計的変化の多くは、特定のトリガーと関連付けられています。トリガーとは、そのイベントがモデルで発生する際に実施されるロジックのことです。ユーザーはロジックをトリガーに割り当てることができます。これは、そのトリガーが起動すると、他の動作やイベントの連鎖反応が引き起こされることを意味します。

前述のプロセッサのイベントのフローチャートを参照してください。特定のイベントが特定のトリガーに関連付けられています。たとえば、プロセッサの「アイテムを取得」フェーズの最後に、OnEntryトリガーが起動します。

「アイテムを処理」フェーズでは、OnSetupFinishトリガーとOnProcessFinishトリガーの両方が、異なるポイントで起動します。

「アイテムを送る」フェーズの後、OnExitトリガーが起動します。

これらのトリガーのいずれにもロジックを追加できます。たとえば、プロセッサを通過した結果、フローアイテムに関連するものが変更されたことを示すため、OnProcessFinishトリガーが起動する際にフローアイテムの色や形状フレームを変更するロジックを追加できます。あるいは、OnExitトリガーが起動する際に、モデル内の別のオブジェクトにメッセージを送信するロジックを追加できます。あるいは、特定のイベントが起動したときに、処理フローでロジックの連鎖反応を引き起こすこともできます。

FlexSimには、これらのトリガーに追加でき、よく使用されるあらかじめプログラムされたロジックがいろいろ用意されています。この標準ロジックはピックリストとも呼ばれます。処理フローツールやFlexScriptを使用して、これらのトリガーについての独自のカスタムロジックを作成できます。

ツールとモデルのイベント

FlexSimのさまざまなモデリングツールで使用されるオブジェクトの一部には、それに関連するイベントがあります。シミュレーションモデル自体にも、関連するイベントがいくつかあります。

ツール イベント
処理フロー 処理フローアクティビティにはそれぞれ、トークンとどのような相互作用をするのかを処理フローアクティビティに指示する、独自のイベントセットがあります。次のような処理フローアクティビティで、特定のイベントや統計的な変更が発生した場合に起動するトリガーをリッスンできます。
  • OnEntry
  • OnExit
  • OnContentChange
タイムテーブル タイムテーブルを使用してオブジェクトのダウン時間のスケジュールをたてる場合、タイムテーブルの「ダウン時」イベントと「再開時」イベントをリッスンできます。
MTBF/MTTR [機能]ページにあるMTBF/MTTR機能のいずれかをリッスンします。
グローバルリスト グローバルリストには、さまざまな標準イベントと値変更イベントがあります。
ユーザーコマンド ユーザーコマンドは、ノードに保存されているコードを実行します。ユーザーコマンドのようにnodefunction()を使用して評価されるノードは、すべてリッスンできます。
モデルトリガー ユーザーコマンドと同様に、「モデルを開いたとき」のようなモデルトリガーもリッスンできます。

イベント、状態、トリガーへロジックを追加する

前述のように、FlexSimには3Dオブジェクトに追加できる標準ロジックが用意されています。このようなコンテンツは、3Dオブジェクトのプロパティを使用して、追加できます。たとえば、[入力]セクションまたは[出力]セクションで固定リソースのポートまたはリストロジックを設定します(詳細については、「3Dオブジェクトフローを接続する」を参照してください)。または、3Dオブジェクトのトリガータブでトリガーにロジックを追加します。プロセッサタブでプロセッサのセットアップと処理ロジックを設定します。

カスタムロジックを作成する場合は、シミュレーションモデル内の特定のイベントをリッスンする処理フローを作成することがよくあります。

FlexScriptに精通している場合は、オブジェクトのプロパティでトリガーまたはプロパティにカスタムコードロジックを追加することもできます。