(57)【特許請求の範囲】
【請求項１】
オートメーション環境においてプログラマブルロジックコントローラに対してフェイルオーバーを実行し、物理システムを制御する方法であって、前記方法は、
第１のインプット／アウトプットモジュールによって、１つまたは複数のフィールドデバイスからセンサインプットを受け取ること、
前記第１のインプット／アウトプットモジュールによって、第１のＰＬＣバンクのプログラマブルロジックコントローラー（ＰＬＣ）の第１のグループに対する前記センサインプットのコピーを作成すること、
前記第１のインプット／アウトプットモジュールによって、ＰＬＣの前記第１のグループの各ＰＬＣに前記センサインプットの前記コピーを転送すること、
前記第１のインプット／アウトプットモジュールによって、前記センサインプットの前記コピーの転送に応じて、ＰＬＣの前記第１のグループの各ＰＬＣから処理結果を受け取り、処理すること、
前記第１のインプット／アウトプットモジュールによって、ＰＬＣの前記第１のグループの各ＰＬＣから受け取った前記処理結果の間になんらかの不一致があるか否かを判断すること、
ＰＬＣの前記第１のグループの各ＰＬＣから受け取った前記処理結果の間になんらかの不一致がある場合、フェイルオーバー制御メッセージを第２のインプット／アウトプットモジュールに送信することによって、フェイルオーバー制御プロセスを開始すること
を含み、
前記フェイルオーバー制御プロセスはさらに、
前記第１のインプット／アウトプットモジュールによって、前記第１のＰＬＣバンクのＰＬＣの前記第１のグループを非アクティブ化し、
前記第１のインプット／アウトプットモジュールによって、前記物理システムの制御に関連付けられた前記第１のＰＬＣバンクのＰＬＣの前記第１のグループの１つまたは複数のアウトプットポートを無効にすること
を含み、
前記フェイルオーバー制御プロセスはさらに、
前記第２のインプット／アウトプットモジュールに制御を再開し、所定のサイクル数の間、アウトプットを中断するように指示するフェイルオーバーメッセージを前記第１のインプット／アウトプットモジュールによって前記第２のインプット／アウトプットモジュールに送信すること
を含む、
方法。
【請求項２】
前記所定のサイクル数は、前記フェイルオーバーメッセージにおいて整数値として指定されている、請求項１記載の方法。
【請求項３】
前記第２のインプット／アウトプットモジュールによって前記フェイルオーバーメッセージを受信すること、
前記所定のサイクル数の後、前記物理システムの制御に関連する第２のＰＬＣバンクのＰＬＣの第２のグループの１つまたは複数のアウトプットポートを前記第２のインプット／アウトプットモジュールによって有効にすること
をさらに含んでいる、請求項１または２記載の方法。
【請求項４】
前記フェイルオーバー制御プロセスはさらに、
ＰＬＣの前記第１のグループがリセットされるように指示する再生命令を前記第１のＰＬＣバンクのＰＬＣの前記第１のグループに送信することを含んでいる、請求項１から３までのいずれか１項記載の方法。
【請求項５】
前記再生命令の受信に応じて、前記第１のＰＬＣバンクのＰＬＣによって、前記ＰＬＣに格納されているアプリケーションバイナリファイルのグループから新たな制御アプリケーションバイナリファイルを選択すること、
前記ＰＬＣによって、前記新たな制御アプリケーションバイナリファイルを実行可能なファイルにコンパイルすること、
再生完了メッセージを前記第１のインプット／アウトプットモジュールに送信すること、および
前記ＰＬＣによって、前記実行可能なファイルを実行すること
をさらに含んでいる、請求項４記載の方法。
【請求項６】
アプリケーションバイナリファイルの前記グループの各アプリケーションバイナリファイルは、前記グループの他のアプリケーションバイナリファイルとは異なっており、かつ機能的に同等である、請求項５記載の方法。
【請求項７】
前記新たな制御アプリケーションバイナリファイルの少なくとも一部は、コンパイル中にランダム化される、請求項５または６記載の方法。
【請求項８】
前記第２のインプット／アウトプットモジュールによって、新たなフェイルオーバー制御メッセージを前記第１のインプット／アウトプットモジュールに送信すること、
前記第１のインプット／アウトプットモジュールによって、ＰＬＣの前記第１のグループの各ＰＬＣから再生完了メッセージを受信すること、
前記新たなフェイルオーバー制御メッセージと前記再生完了メッセージの受信に応じて、前記第１のインプット／アウトプットモジュールによって、前記物理システムに関連付けられた前記第１のＰＬＣバンクのＰＬＣの前記第１のグループの前記１つまたは複数のアウトプットポートを有効にすること
をさらに含んでいる、請求項４から７までのいずれか１項記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は概して、プログラマブルロジックコントローラの、回復力を有しているフェイルオーバーに関する。開示されている技術は例えば、プログラマブルロジックコントローラー（ＰＬＣ）や分散制御システム（ＤＣＳ）等の産業用コントローラが使用される種々の自動化された生産環境に適用されてよい。
【０００２】
背景
プログラマブルロジックコントローラー（ＰＬＣ）は、インプットデバイスの状態に関するデータを収集してアウトプットデバイスの状態を制御するソフトウェアを実行するように構成されている特殊なコンピューター制御システムである。通常、ＰＬＣには３つの主要な要素が含まれている。これらは、プロセッサー（これは揮発性メモリを含んでいてよい）、アプリケーションプログラムを含んでいる揮発性メモリおよびオートメーションシステム内の他のデバイスに接続するための１つまたは複数のインプット／アウトプット（Ｉ／Ｏ）ポートである。プロセス制御の一部として、ＰＬＣは、制御されたプロセスで発生するイベントおよび状態を報告する種々のインプットポイント（インプットセンサ）からのインプット信号を監視するために使用される。例えば、ＰＬＣは、モーター速度、温度、圧力、体積流量等のインプット状態を監視することができる。制御プログラムは、ＰＬＣ内のメモリに格納され、特定のインプット信号または状態が発生すると行動を実行するようにＰＬＣに指示する。インプットセンサによって提供されたこれらのインプット信号に応じて、ＰＬＣはアウトプット信号を引き出し、生成する。アウトプット信号は、ＰＬＣアウトプットポイントを介してアクチュエータやリレー等の種々のアウトプットデバイスに送信され、プロセスを制御する。例えば、ＰＬＣは、コンベアの速度を上げるまたは下げる、ロボットのアームを回転させる、リレーを開閉させる、温度を上げるまたは下げる、ならびに列挙しきれない多くの他の可能な制御ファンクションのためにアウトプット信号を出す。
【０００３】
上述したインプットポイントおよびアウトプットポイントは通常、それぞれインプットモジュールとアウトプットモジュールに関連付けられている。本明細書では、インプットモジュールとアウトプットモジュールをまとめてＩ／Ｏモジュールと呼ぶ。択一的に、当業者は、このようなＩ／Ｏモジュールを、Ｉ／ＯカードまたはＩ／Ｏボードと呼ぶ。これらのＩ／Ｏモジュールは、場合によっては、ＰＬＣが高級言語を使用してプログラムされる方法と同様の方法でプログラム可能である。
【０００４】
ＰＬＣは、障害や故障に対して回復力を有している必要がある。これらの故障は、ハードウェア、ソフトウェアおよびインプットによって引き起こされ得る。回復力を有している従来のＰＬＣアーキテクチャは、あるＰＬＣが故障した場合に他のＰＬＣが実行を引き継ぎ、システムおよび制御の継続性を保証する冗長的なハードウェアに依存している。また、ＰＬＣサイバーセキュリティへの関心も高まっている。ここではサイバー攻撃によってＰＬＣが作動しなくなることがあり、回復メカニズムをトリガさせることができる。故障の発生方法に関係なく、回復力を有している現在のＰＬＣは同一のバイナリを使用する。故障によって第１のＰＬＣがクラッシュした場合、バックアップＰＬＣもクラッシュする可能性がある。現在、これらのいわゆる「相関」故障に対する保護メカニズムは存在していない。
【０００５】
要約
本発明の実施形態は、プログラマブルロジックコントローラ用の回復力を有しているフェイルオーバー技術に関連する方法、システムおよび装置を提供することによって、上述した短所および欠点の１つまたは複数に対処し、これを克服する。より具体的には、本明細書において説明する技術は、プログラマブルロジックコントローラー（ＰＬＣ）の１つのバンクからＰＬＣの第２のバンクへのフェイルオーバーを可能にする、ＰＬＣの複数のバンクまたはグループを利用するフェイルオーバーアーキテクチャについて説明する。付加的に、いくつかの実施形態では、ＰＬＣソフトウェアのバイナリは、冗長的なＰＬＣアーキテクチャのインスタンスのそれぞれにおいてランダム化される。複数のＰＬＣインスタンスは異なるバイナリを実行しているので、このシステム全体は、サイバー攻撃に関して、従来のシステムよりも回復力を有している。
【０００６】
いくつかの実施形態では、オートメーション環境においてＰＬＣに対してフェイルオーバーを実行し、物理システムを制御する方法は、フィールドデバイスからセンサインプットを受け取り、第１のＰＬＣバンクのＰＬＣの第１グループに対するセンサインプットのコピーを作成するＩ／Ｏモジュールを含んでいる。このＩ／Ｏモジュールは、ＰＬＣの第１のグループの各ＰＬＣにセンサインプットのコピーを転送し、センサインプットのコピーの転送に応じて、ＰＬＣの第１のグループの各ＰＬＣから処理結果を受け取る。Ｉ／Ｏモジュールは、ＰＬＣの第１のグループの各ＰＬＣから受け取った処理結果の間になんらかの不一致があるか否かを判断する。ＰＬＣの第１のグループの各ＰＬＣから受け取った処理結果の間になんらかの不一致がある場合、フェイルオーバー制御メッセージを第２のＩ／Ｏモジュールに送信することによってフェイルオーバー制御プロセスが開始される。
【０００７】
いくつかの実施形態では、フェイルオーバー制御プロセスはさらに、物理システムの制御に関連して、第１のＰＬＣバンクのＰＬＣの第１のグループを非アクティブ化し、第１のＰＬＣバンクのＰＬＣの第１のグループのアウトプットポートを無効にする第１のＩ／Ｏモジュールを含んでいる。付加的に、フェイルオーバー制御プロセス中に、第１のＩ／Ｏモジュールは、第２のＩ／Ｏモジュールに制御を再開し、所定のサイクル数の間、アウトプットを中断するように指示するフェイルオーバーメッセージを第２のＩ／Ｏモジュールに送信してよい。このサイクル数は、例えば、フェイルオーバーメッセージにおいて整数値として指定されていてよい。所定のサイクル数の後、第２のＩ／Ｏモジュールは、第２のＰＬＣバンクのＰＬＣの第２のグループのアウトプットポートを有効にする。
【０００８】
いくつかの実施形態では、上述したフェイルオーバー制御プロセスはさらに、ＰＬＣの第１のグループがリセットされるように指示する再生命令を第１のＰＬＣバンクのＰＬＣの第１のグループに送信することを含んでいる。再生命令の受信に応じて、第１のバンクのＰＬＣは、ＰＬＣに格納されているアプリケーションバイナリファイルのグループから新たな制御アプリケーションバイナリファイルを選択する。この新たな制御アプリケーションバイナリファイルは、実行される、実行可能なファイルにコンパイルされる。付加的に、再生完了メッセージが第１のＩ／Ｏモジュールに送信される。いくつかの実施形態では、アプリケーションバイナリファイルのグループの各アプリケーションバイナリファイルは、このグループの他のアプリケーションバイナリファイルとは異なっており、かつ機能的に同等である。これは、例えば、コンパイル中に新たな制御アプリケーションバイナリファイルの一部をランダム化することによって実現されてよい。
【０００９】
いくつかの実施形態では、第２のＩ／Ｏモジュールは、新たなフェイルオーバー制御メッセージを第１のＩ／Ｏモジュールに送信する。第１のＩ／Ｏモジュールは、ＰＬＣの第１のグループの各ＰＬＣから再生完了メッセージを受信する。次に、新たなフェイルオーバー制御メッセージと再生完了メッセージの受信に応じて、第１のＩ／Ｏモジュールは第１のＰＬＣバンクのＰＬＣの第１のグループのアウトプットポートを有効にする。
【００１０】
本発明の他の実施形態では、オートメーション環境においてプログラマブルロジックコントローラに対してフェイルオーバーを実行し、物理システムを制御するシステムは、２つのＩ／Ｏモジュールを含んでいる。第１のＩ／Ｏモジュールは、センサインプットポート、複製インプットプログラミングコンポーネント、ＰＬＣインプットポート、および比較および中断プログラミングコンポーネントを含んでいる。センサインプットポートは、１つまたは複数のフィールドデバイスからセンサインプットを受け取るように構成されている。複製インプットプログラミングコンポーネントは、第１のＰＬＣバンクのＰＬＣの第１のグループに対するセンサインプットのコピーを作成し、ＰＬＣの第１のグループの各ＰＬＣにセンサインプットのコピーを転送する。ＰＬＣインプットポートは、センサインプットのコピーの転送に応じて、ＰＬＣの第１のグループの各ＰＬＣから処理結果を受け取る。比較および中断プログラミングコンポーネントは、ＰＬＣの第１のグループの各ＰＬＣから受け取った処理結果の間になんらかの不一致があるか否かを判断するように構成されている。ＰＬＣの第１のグループの各ＰＬＣから受け取った処理結果の間になんらかの不一致がある場合、比較および中断プログラミングコンポーネントは、フェイルオーバー制御メッセージを第２のＩ／Ｏモジュールに送信することによって、フェイルオーバー制御プロセスを開始する。
【００１１】
本発明の他の実施形態では、ＰＬＣは、アプリケーションバイナリファイルのグループを格納する不揮発性メモリを含んでいる。各アプリケーションバイナリファイルは、グループの他のアプリケーションバイナリファイルとは異なっており、かつ機能的に同等である。ＰＬＣはさらに、Ｉ／Ｏモジュールからの再生命令の受信に応じて、アプリケーションバイナリファイルのグループから新たな制御アプリケーションバイナリファイルを選択するように構成されている再生プログラミングコンポーネントを含んでいる。再生プログラミングコンポーネントはさらに、新たな制御アプリケーションバイナリファイルを実行可能なファイルにコンパイルし、再生完了メッセージをＩ／Ｏモジュールに送信し、実行可能なファイルを実行するように構成されている。
【００１２】
本発明の付加的な特徴および利点は、添付の図面を参照して進める例示的な実施形態の以下の詳細な説明から明らかになるであろう。
【００１３】
本発明の前述の態様および他の態様は、添付の図面と関連して読まれるとき、以下の詳細な説明から最もよく理解される。本発明を説明する目的で、現在有利な実施形態が図面に示されているが、本発明は開示された特定の手段に限定されない、ということを理解されたい。図面には以下の図が含まれる。
【図面の簡単な説明】
【００１４】
【図１】いくつかの実施形態に従って、ＰＬＣ、Ｉ／ＯモジュールおよびＰＬＣバンクを使用する冗長的なクアッドアーキテクチャにおける例示的なフェイルオーバーアーキテクチャを示す。
【図２】いくつかの実施形態に従って、同じサイクル内で１つのＰＬＣバンクから別のＰＬＣバンクへのフェイルオーバーがマルチプレクサによってどのように実現され得るかの例を示す。
【図３】いくつかの実施形態に従って、フェイルオーバー制御アルゴリズムがＩ／Ｏモジュールにどのように実装され得るかの例を示す。
【図４】いくつかの実施形態に従って、ＳＤカードにおける、複数のバックアップを使用したＰＬＣランダム化バイナリ再生を示す。
【図５】システムが産業用イーサネットおよびＴＣＰを介して、ユーザー定義のプロトコルを実装できるようにするＴＳＥＮＤブロックの例を提供する。
【図６】いくつかの実施形態に従って、ＡＰＩを介して実施されるＰＬＣプログラムのランダム化の図を提供する。
【図７】いくつかの実施形態において利用され得る、データブロック（ＤＢ）変数のアドレスおよびオフセットを変更するデータブロックランダム化を示す。
【図８】いくつかの実施形態に従って、ＤＢブロック最適化がメモリパディングを排除し、メモリレイアウトを再配置する方法を示す。
【図９】いくつかの実施形態に従って、ファンクションブロックパラメータ再配列がＰＬＣプログラムのバイナリ表現を変更する方法の図を提供する。
【図１０】いくつかの実施形態に従って、周期的な変数再配列がＰＬＣバイナリプログラムにバイナリ変更を導入する図を提供する。
【図１１Ａ】いくつかの実施形態に従って、制御フロー変換によるランダム化を示す。
【図１１Ｂ】いくつかの実施形態に従って、データフロー変換によるランダム化を示す。
【図１２】いくつかの実施形態に従って、オペレーションブロックのランダム化がＯＢのタイミングおよび優先度において変動性を導入する図を提供する。
【図１３】いくつかの実施形態において実装され得る、ＰＬＣプログラム内で付加的なコードを実行し、その実行を変更し、ＰＬＣのタイミングに影響を与える、コードレベルのランダム化の例を提供する。
【図１４】いくつかの実施形態において実施され得る、サイクル内で付加的なコードの異なるフラグメントを実行し、ＰＬＣのタイミングに影響を及ぼすサイクル間ランダム化の例を提供する。
【００１５】
詳細な説明
本明細書では概して、プログラマブルロジックコントローラの、回復力を有しているフェイルオーバーに関するシステム、方法および装置について説明する。より具体的には、本明細書において説明する技術は、プログラマブルロジックコントローラー（ＰＬＣ）の複数のバンクを利用し、ＰＬＣのあるバンクからＰＬＣの第２のバンクへのフェイルオーバーを可能にするフェイルオーバーアーキテクチャを記述する。ＰＬＣの第２のバンクで処理が行われている間、第１のバンクのＰＬＣはリセットされ、新たな制御アプリケーションバイナリがリロードされる。回復力の付加的な措置として、ＰＬＣは回復力を有しているＰＬＣにおいて機能的に同等であるランダム化されたバイナリを使用してよい。機能的同等性によって、同じインプットに対して、ランダム化されたＰＬＣプログラムがランダム化されていないＰＬＣプログラムと同じアウトプットを生成することが保証される。相関故障の場合、一度にクラッシュするＰＬＣは１つだけである。さらに、ランダム化により、他のＰＬＣが同じ相関イベント（例えば、インプット、メモリアクセス違反等のソフトウェアエラー等）に対してクラッシュしないことが保証される。以下に説明するシステムは、その関連する方法および装置とともに、少なくとも以下の特徴に関して、回復力を有している。第一に、セキュリティ故障の単一ポイントはない。ＰＬＣまたはＩ／Ｏモジュールに故障が発生した場合、システムは適切に機能し、自動的に回復することができる。第二に、本明細書において説明するシステムは、故障後に自動的に回復することができる。バイナリが異なっていても、他のＰＬＣが実行を引き継いで、同じアウトプットを生成することができ、同時に相関故障のリスクが排除される。第三に、システムはゼロデイサイバー攻撃に対する回復力を提供し、それに伴って、サイバー攻撃に対処するためにソフトウェアパッチを開発しながら、有意義な保護が提供される。
【００１６】
図１は、いくつかの実施形態において実装され得る、冗長的なクアッドアーキテクチャ１００におけるフェイルオーバーアーキテクチャを示している。アーキテクチャ１００は、２つのＰＬＣバンク（ＰＬＣバンク１０５およびＰＬＣバンク１１０）を含んでいる。各ＰＬＣバンクには、２つのＰＬＣと１つのＩ／Ｏモジュールが含まれている。したがって、ＰＬＣバンク１０５にはＰＬＣ１、ＰＬＣ２およびＩ／Ｏ１が含まれており、ＰＬＣバンク１１０にはＰＬＣ３、ＰＬＣ４およびＩ／Ｏ２が含まれている。フェイルオーバーメカニズムを、Ｉ／Ｏモジュールに直接的に実装することができる。この目的に使用できるＩ／Ｏモジュールの一例は、ＳｉｅｍｅｎｓＴＭＥＴ２００ＳＰＩ／Ｏモジュールである。ある場合には、Ｉ／Ｏモジュールは、ＰＬＣが高級言語を使用してプログラムされる方法と同様の方法でプログラムされてよい。各ＰＬＣバンクは、１つのＩ／Ｏモジュールと２つのＰＬＣを含んでいる。２つのＰＬＣバンクは、Ｉ／Ｏモジュール（例えば、Ｉ／Ｏ１およびＩ／Ｏ２等）によって管理されるフェイルオーバーの場合に、（例えばＰＲＯＦＩＮＥＴ通信を通じて）互いに通信する。Ｉ／Ｏモジュールは、システムのセンサおよびアクチュエータに冗長的に接続されている。
【００１７】
同じサイクル内の、あるＰＬＣバンクから別のＰＬＣバンクへのフェイルオーバーは、図２に示されているように、マルチプレクサによって実現されてよい。このマルチプレクサは、バンク１および２のアウトプットとフェイルオーバー信号をインプットとして受け取る。どのバンクがアクティブであるのかに応じて、フェイルオーバー信号は、どのアウトプット信号がマルチプレクサのアウトプットとなるのかを選択する。フェイルオーバー信号は、バンクのＩ／Ｏによって設定される。１つのバンクのＩ／Ｏは、２つのＰＬＣのアウトプットが異なることがわかると、他のバンクへのフェイルオーバーを決定する。次に、Ｉ／Ｏはマルチプレクサに、第２のバンクからのアウトプットを渡すように命令する。あるバンクから別のバンクへのフェイルオーバーは、同じサイクルにおいて実行可能である。なぜならマルチプレクサはロジックのない単純なデバイスであり、アウトプットの選択にはマルチプレクサの状態の設定しか含まれないからである。
【００１８】
図３は、いくつかの実施形態に従って、フェイルオーバー制御技術がＩ／Ｏモジュールにどのように実装され得るかの例を提供している。図３に示されているように、各Ｉ／Ｏモジュールは、複製インプットプログラミングコンポーネントと、比較および中断プログラミングコンポーネントとを含んでいる。複製インプットプログラミングコンポーネントは、センサインプットポート（図３には示されていない）を介してセンサーデータを取得する。このインプットポートは本質的にＩ／Ｏモジュールを出入りする経路であり、当技術分野で知られている任意の技術を使用して実装されてよい。Ｉ／Ｏモジュールの複製インプットプログラミングコンポーネントは、センサーデータを各バンクのＰＬＣ対に複製する。比較および中断プログラミングコンポーネントはそれぞれ、ＰＬＣ処理の不一致を検出し、制御を再開し、Ｄサイクルのアウトプットを中断するために、他のＰＬＣバンクにフェイルオーバーメッセージを送信する。サイクルＮでは、Ｉ／Ｏ１モジュールが制御され、インプットをＰＬＣ１とＰＬＣ２に複製し、ＰＬＣ１とＰＬＣ２がこのサイクルに対するその結果を確定した後、比較および中断プログラミングコンポーネントが計算の不一致を検証する。この場合、比較および中断プログラミングコンポーネントはデバイス（ＰＬＣ１およびＰＬＣ２）を非アクティブ化し、アクチュエーターポートを無効にし、新たな多様化されたバイナリを使用して復元されるべきＰＬＣイメージに対する再生命令を送信する。いくつかの実施形態では、再生命令は、再生の必要性を示す単純なメッセージであってよく、これはその後、再生の命令を生成するために処理されてよい。他の実施形態では、再生命令は、実行時に再生を開始させる１つまたは複数のコンピューター実行可能な命令である。
【００１９】
回復方法は２つのステップで実行される。第１のステップの間、Ｉ／Ｏ１が回復プロセスを開始させる。これは、例えばＩ／Ｏ１におけるＳＦＣ１２システム関数コールによって実行可能である。デバイスが非アクティブ化され、アクチュエータが無効にされた後、フェイルオーバー制御メッセージが第２のＰＬＣバンクのＩ／Ｏ２モジュールに送信される。このメッセージには、第２のＰＬＣバンクが書き込む前に、このプロセスに対するアウトプットを中断するために、サイクルＤの数を指定する整数値が含まれている。この遅延メッセージはＩ／Ｏ２によって処理され、どのデバイスをいつアクティブにするかを決定するために使用される。
【００２０】
Ｉ／Ｏ２モジュールも残りのＰＬＣと同期して動作するので、遅延Ｄは正確であることが保証される。第２のステップの間、Ｄサイクル後、Ｉ／Ｏ２によってアクチュエーターポートが有効になり、物理システムの制御を再開するために、制御信号をアクチュエータに書き込むことができる。Ｉ／Ｏ２モジュールが、フェイルオーバー制御信号を介してＩ／Ｏ１モジュールに、後ろ向きに接続されていることに注意されたい。しかし、この接続は、ＰＬＣバンク１においてＰＬＣイメージの準備ができるまで有効にならない。これは、再生完了メッセージを通じて伝達される。いくつかの実施形態では、再生命令は、すべてのＰＬＣが準備完了であることを示す単純なメッセージであってよい（例えば、準備完了を示す１を伴うバイナリ値）。他方で、他の実施形態では、再生完了メッセージは、バンク内のＰＬＣの状態に関する付加的な情報を含んでいてよい。
【００２１】
サイバー攻撃が発生したときにランダム化されたプログラムを備えた２つのＰＬＣが異なるアウトプットを生成する理由は、ＰＬＣが汎用コンピューターとは異なる呼出規約を使用するためである。例えば、戻りアドレスはスタックではなく、保護されたメモリ領域のヒープに構造化されたランタイムデータに関連付けられたレジスタに格納される。これは、ＰＬＣオペレーティングシステムによって、ユーザー空間ではなく、カーネル空間で管理される。
【００２２】
ＰＬＣ内の再生プロセスは、図４に示されているように完了される。このプロセスは、例えば、オペレーティングシステムまたはＰＬＣのファームウェアにおいて実行される特殊な再生プログラミングコンポーネントを使用して実装されてよい。この例では、ＰＬＣはＳＤカード４０５を使用してプログラム構成（「Ｂａｋ＿ｌ．ｄｍｐ」、「Ｂａｋ＿２．ｄｍｐ」等とラベル付けされている）を格納する。図に示されているようないくつかの実施形態では、ＳＤカード４０５は暗号化されていてよい。フェイルオーバーシステム４１０によって生成されたこれらのランダム化されたプログラム構成は、ダウンロードパッケージ４１５を介してＰＬＣにランダムにダウンロードされる。この例においてフェイルオーバーシステム４１０は、ＰＬＣ構造を解析し、変換を適用し、新たなＰＬＣ構造をパッケージするソフトウェアコンポーネントを含んでいる。ランダム化されたＰＬＣバイナリの選択をランダム化することは、以前の障害を引き起こしたサイバー攻撃を複製する可能性を減らすために重要である。これらのランダム化された構成は、例えばＰＬＣの「ノウハウ保護」特徴を使用して、ＳＤカード４０５において暗号化もされている。ステップ４２０でのＰＬＣ開始後、ステップ４２５で、ＳＤカード４０５上の構成が読み取られ、ＰＬＣメモリにインスタンス化される。この構成は、その後、ステップ４３５で周期的に実行される前に、ステップ４３０でオンボードコンパイラによってコンパイルされる。故障の場合、故障処理メカニズムがトリガされ、ステップ４４０でローカルなフェイルオーバーが実行される。また、ＰＬＣはそのイメージを再生する必要があり、これはステップ４４５で異なる構成をランダムに選択することによって実行される。当技術分野において一般的に知られている任意の技術が、構成のランダムな選択を実行するために使用されてよい。例えば、いくつかの実施形態では、ＳＤカード４０５上のランダム化されたプログラム構成が連続的に番号付けされる。その後、数の範囲内で乱数が選択される。選択されると、構成の識別子（例えば、ファイル名）が、４２５でＳＤカードの読み取りを実行するプログラミングコンポーネントに配信される。択一的に、構成を迅速にロードするためにステップ４２５が実行されてよい。最後に、ステップ４５０で、ＰＬＣのＣＰＵが、ステップ４２０でのプロセスの繰り返しで再び開始される。
【００２３】
図４に示されているこのプロセスは、最新のＰＬＣによって完全にサポートされていてよく、付加的なコードは必要ない。ＰＬＣによってサポートされる付加的なセキュリティレイヤーは、ＳＤカードのシリアル番号をユーザープログラムに結び付けて、同じＰＬＣバイナリイメージを異なるＰＬＣに複製できないようにする。
【００２４】
いくつかの実施形態では、命令とその状態を含んでいるメッセージを交換するために、すべてのコンポーネントに対してユーザー定義の通信プロトコルが使用される。コンポーネントには、ＰＬＣ、ファイアウォール、エンジニアリングシステム、ＰＬＣインプットフィルター、Ｉ／Ｏモジュールおよびフェイルオーバーアルゴリズムが含まれている。シーメンス社のオートメーションコンポーネントでは、産業用イーサネットＴＣＰプロトコルを介した「オープンユーザーコミュニケーション」を使用して、ユーザー定義の通信プロトコルを作成することができる。例えば、シーメンス社のＴＩＡポータルエンジニアリングシステムは、標準ライブラリにいわゆる「Ｔブロック」を提供して、ユーザー定義の通信を可能にする。例えば、ＦＢ６５「ＴＣＯＮ」は接続の確立に使用され、ＦＢ６６「ＴＤＩＳＣＯＮ」は接続の終了に使用され、ＦＢ６３「ＴＳＥＮＤ」はデータの送信に使用され、ＦＢ６４「ＴＲＥＣＶ」はデータの受信に使用される。図５は、ＦＢ６３「ＴＳＥＮＤ」ブロックの例を示している。ユーザー定義のメッセージがインプットパラメーターＤＡＴＡに送信され、メッセージ長はインプットパラメーターＬＥＮに送信される。この例では、メッセージはＤＢ１００データブロックに格納され、長さは１００バイトである。送信要求は、インプットパラメーター「ＲＥＱ」でのポジティブエッジによってトリガされる。送信要求が実行されている場合、「ＳＥＮＤ＿ＢＵＳＹ」変数が設定される。ＦＢ６３の実行を評価するために、アウトプットパラメーター「ＤＯＮＥ」、「ＥＲＲＯＲ」および「ＳＴＡＴＵＳ」が要求される。
【００２５】
図６は、いくつかの実施形態に従って、ＰＬＣプログラムのランダム化がどのように実施され得るかに関する付加的な詳細を提供するシステム図である。当技術分野において理解されているように、ＰＬＣはオペレーティングシステムとユーザープログラムを含んでいる。オペレーティングシステムは、固有のＰＬＣ機能性（再開始とエラーの処理、メモリ管理、ユーザープログラムの呼び出し等）を提供する。図６に示されているように、ユーザープログラムは、オートメーションタスクを実行するすべての「ブロック」を含んでいる。ユーザープログラムは、ファンクションブロック（ＦＢ）およびファンクション（ＦＣ）を含んでいるプログラムブロックでプログラムされる。ＦＢとＦＣは、データブロック（ＤＢ）で編成されたローカル変数とグローバル変数を参照する。ＰＬＣでは、ユーザープログラムは通常、オーガニゼーションブロック（ＯＢ）において周期的に実行される（非周期的なプログラムも可能である）。メインサイクルＯＢは常に存在しており、ＰＬＣプログラムが無限ループで初期化され、実行されると利用可能になる。
【００２６】
図６に示されているＰＬＣプログラム構造は固定されており、異なるブロックタイプで明確な構造を提供する。この例は、フェイルオーバーシステム６１５をエンジニアリングシステム６０５に接続する方法を示している。この例において、フェイルオーバーシステム６１５は、ＰＬＣ構造を解析し、変換を適用し、新たなＰＬＣ構造をパッケージするソフトウェアコンポーネントを含んでいる。より具体的には、アプリケーションプログラミングインターフェース（ＡＰＩ）６１０を使用して、フェイルオーバーシステム６１５は、ダウンロードされる前にＰＬＣプログラムにアクセスし、ランダム化する。バイナリ表現へのブロック（ＯＢ、ＦＢ、ＦＣ、ＤＢ）のマッピングが変化するので、ＰＬＣプログラムのブロック構造の変更は、生成されるコードに甚大な影響を与える。したがって、ＰＬＣプログラム構造に対する変更によって、フェイルオーバーシステムが求めるバイナリの多様化が実現される。図６に示されている一般的なアーキテクチャを使用する場合、ＰＬＣプログラム構造内のすべてのブロックタイプのランダム化が実現され得る。
【００２７】
図７は、いくつかの実施形態に従って、ブロックランダム化がＤＢ変数のアドレスおよびオフセットを変更する方法を示している。ＤＢは、変数、センサおよびアクチュエータにアクセスするためにプログラムによって使用されるアドレス可能なブロックにメモリを編成する。ＤＢは、タグと呼ばれる名前付き変数の集合である。タグは、ＰＬＣにおける値のために予約されたメモリ領域である。タグには、データ型（例えばＢｏｏｌ、Ｉｎｔｅｇｅｒ等）、値（例えば「１５」）およびＤＢ内の物理アドレスが含まれている。図７に示されているように、ＰＬＣ１における「Ｍｏｔｏｒ＿１」タグはＢｏｏｌ型とアドレス「％Ｉ０．０」を有している。データブロックランダム化コンポーネントによる処理の後、ＰＬＣ２における同じ変数のアドレスを「％Ｉ２．０」に変更することができる。同様に、Ｂｏｏｌ型のＰＬＣ１における静的変数「ｔａｇ」におけるオフセットを、ＰＬＣ２のシンボルテーブルにおいて「ｔａｇ」の前に「ｎｅｗ＿ｔａｇ」を導入することによって、「０．０」から「０．１」に変更することができる。これらの変更によって、ＰＬＣのメモリレイアウトが多様化され、同じサイバーエクスプロイトが異なるメモリレイアウトを有する２つのＰＬＣにおいて有効になる可能性が低くなる。
【００２８】
ランダム化の付加的なレイヤーは、すべてのタグがそのデータ型によって分類されるＤＢブロック最適化を有効にする。このような分類は、タグ間のデータギャップ（パディング）を最小化し、図８に示されているように、ターゲットＰＬＣプロセッサーに対するメモリアクセスを最適化する。この例では、標準的なＤＢ  ８０５は、最適化されたＤＢ  ８１０において排除されている変数間のデータギャップを有している。組み合わせでは、提示された２つのＤＢランダム化技術によって、フェイルオーバーシステムは、ＰＬＣ多様化プログラムに対して、数百の同等のメモリレイアウトを生成することができる。
【００２９】
いくつかの実施形態では、ファンクションブロックおよびファンクションランダム化を使用して、コードとメモリスタックの両方の構造が変えられる。ＦＢとＦＣの違いは、周期的なデータ記憶装置にある。ＦＣは、データ記憶装置のないブロックである。これは、値ＦＣがステートレスであり、ブロック変数が複数のサイクルにわたって持続可能でないことを意味している。他方でＦＢは、周期的なデータ記憶装置を備えたブロックである。これは、ＦＢがステートフルであり、ブロック変数値が複数のサイクルにわたって持続されることを意味している。ＦＢとＦＣはどちらも、図式言語やテキスト形式言語を含んでいる種々の高級言語を使用してプログラムされている。標準的なＰＬＣプログラミング言語の１つは、ＰＡＳＣＡＬに基づくストラクチャードコントロール言語（ＳＣＬ）である。ＳＣＬは、ＩＥＣ  ６１１３１−３規格によって規格化されたＰＬＣプログラミングに対するストラクチャードテキスト（ＳＴ）仕様にも基づいている。以降で説明するＦＢおよびＦＣランダム化技術は、説明のためにＳＣＬに基づいているが、これらの技術が一般化され、同様の機能性を提供する任意のＰＬＣプログラミング言語に適用されてよい、ということを理解されたい。
【００３０】
ファンクションブロックおよびファンクションは、インプット、アウトプット、インプット−アウトプットパラメーターおよびファンクションの本体で構成されている宣言を有している。この宣言は、ＳＣＬを含んでいるすべての言語に共通である。図９は、インプットパラメーター「ＦＩＮＡＬＶＡＬ」、インプット−アウトプットパラメーター「ＩＱ１」およびアウトプットパラメーター「ＣＯＮＴＲＯＬ」を含んでいる「ＴＥＳＴ」プログラムに対する例示的なファンクションブロック宣言を示している。ランダム化を導入する１つの技術は、右側の２つの例によって示されているように、ファンクションブロックを呼び出すときにパラメーターを再配列することである。パラメーターには名前が付けられているので、パラメーターがリストにされる順序はプログラムの意味を変更しない。しかし、これによって、２つのプログラムに対して異なるメモリレイアウトが作成される。実際のＰＬＣプログラムでは、パラメーターの数が非常に大きくなる傾向があり（時にはパラメーターが数百になるときもある）、したがって、この技術は、多数の、異なるが同等のＳＣＬプログラムを作成するのに極めて効果的である。
【００３１】
同様の技術を、サイクル全体にわたって持続されるＦＢの周期的な変数に適用可能である。図１０は、いくつかの実施形態に従って、周期的な変数の再配列がＰＬＣバイナリプログラムにバイナリ変化を導入する方法を示している。図１０に示されているように、変数ＰＩＤ＿ＣＯＮＴＲＯＬＬＥＲ＿１およびＰＩＤ＿ＣＯＮＴＲＯＬＬＥＲ＿２の順序を、周期的な変数が異なるＰＬＣインスタンスの異なるメモリ位置を占めるように再配置することができる。
【００３２】
ＳＣＬコード自体は、制御フローレベルとデータフローレベルの両方でランダム化可能である。例えば、制御フローの場合、ＳＣＬ文を含んでいる拡張可能なマークアップ言語（ＸＭＬ）ファイルが解析され、条件文が同等の制御フロー構造に変換される制御フローグラフが再構築されてよい。
【００３３】
図１１Ａおよび１１Ｂは、いくつかの実施形態に従って、制御フロー変換およびデータフロー変換が、それぞれ、ＳＣＬコードレベルでのバイナリ多様化を導入する方法を示している。例えば、図１１Ａでは、ｉｆ−ｅｌｓｅ文の構造が「ＮＯＴ」命令で反転されているため、ＰＬＣ１における「ｉｆ」文の本体が、ＰＬＣ２におけるｅｌｓｅ文の本体になり、その逆も同様である。図１１Ｂでは、データフローに対して、ＳＣＬ文を含んでいるＸＭＬファイルが解析されてよく、データフローグラフが再構築されてよく、ここで表現が同等のデータフロー表現に変換される。例えば、図１１Ｂは、ＰＬＣ１における表現「ＩＱｌ：＝ＩＱ１＊２」がＰＬＣ２における「ＩＱｌ：＝ＩＱ１＋ＩＱ１」に変換されることを示している。付加的に、「Ｎ：＝０」や「ＳＵＭ：＝０」等の付加的な表現が挿入されてよく、これは、コンパイル時に、制御プログラムに寄与しないが、コードレベルでバイナリ多様性を生成する。これは、ＮＯＯＰ（ノーオペレーション）ランダム化技術に似ている。一部のＰＬＣにはＮＯＯＰオペランドが存在しないが、プログラムに機能的に寄与しないオペレーションを挿入することは機能的に同等である、ということに留意することが重要である。
【００３４】
いくつかの実施形態では、メモリ内のその配置に影響を与えるＦＢおよびＦＣに対する順序付けランダム化技術が適用される。すべてのＦＢおよびＦＣは、３つの要素＜ｎａｍｅ、ｔｙｐｅ、ｎｕｍｂｅｒ＞を有している。ｎａｍｅは、ＰＬＣプログラムにおいてユーザーによって提供される任意の名前であり、ｔｙｐｅは、ブロックタイプに応じた列挙であり（例えばＦＢ、ＦＣ、ＯＢ、ＤＢ）、ｎｕｍｂｅｒはブロックに関連付けられた一意の識別子である。重要な観察は、ＰＬＣメモリにおけるブロックの位置は、最初に分類されてから、実行のためにＰＬＣにダウンロードされるときに、それらの番号に対応する、ということである。したがって、実行中にその順序を変更するために３つの要素における数をランダム化するために、順序付けランダム化技術が適用されてよい。付加的に（または択一的に）、メモリ空間を占有し、有用な作業を提供する他のＦＢおよびＦＣを任意に動かすために、ダミーのＦＣおよびＦＢが挿入されてよい。この変換は、オープンインターフェイスを介しても可能であり、ＤＢに拡張も可能である。
【００３５】
ＯＢは、オペレーティングシステムとユーザープログラムの間のインターフェースである。ユーザープログラムはＯＢによってのみ呼び出すことができるため、ＰＬＣプログラム構造の重要な部分である。ＯＢは、オペレーティングシステムによって周期的に、または特定のイベントが発生したときに呼び出される。多くのＰＬＣには、ユーザーが目的の機能性に応じて、自身のプログラムのために選択できるいくつかのタイプのＯＢ（または他のベンダにおける同様の概念）がある。例えば、スタートアップＯＢ、周期的なプログラム実行ＯＢ、割り込み（時刻、サイクル、時間遅延、ハードウェア）ＯＢ、およびエラー（非同期および同期）ＯＢがある。ＯＢは番号によって識別され、番号が異なると優先順位も異なる。例えば、「ＯＢ１」は最高の優先順位を有する周期的なプログラムＯＢであり、ＯＢ１０は低い優先順位を有する時刻割り込みＯＢである。例えば、いくつかのＰＬＣは、同じタイプの複数の割り込みを提供する。例えば、シーメンス社のＰＬＣＳでは、ＯＢ３２、ＯＢ３３、ＯＢ３４およびＯＢ３５は、ユーザーがそのプログラムを整理するために自由に使用できる周期的な割り込みＯＢである。
【００３６】
オーガニゼーションブロックランダム化コンポーネントは、異なるＰＬＣプログラムが（同じ優先順位とリアルタイム保証を伴う）異なるＯＢを使用するようにＯＢを再配列する。例えば、図１２は、２つのＯＢ（ＯＢ１およびＯＢ３２）を有するＰＬＣプログラム構造を、３つのＯＢ（ＯＢ１、ＯＢ３２およびＯＢ３５）を有するプログラム構造に変換する方法を示している。この例では、コントローラーコードは２つに分割され、最初の半分はＯＢ３２に割り当てられ、次の半分はＯＢ３５に割り当てられている。これによって、ＯＢ３５とＯＢ３２の間に依存関係が作成される、ということに注意されたい。しかし、ＯＢの間の同期性は、ＰＬＣにおいてサポートされている。
【００３７】
いくつかの実施形態では、オンボードＰＬＣのランダム化は、ＰＬＣプログラムがランダム化され、実行のためにＰＬＣに展開された後、アプリケーションバイナリ隠蔽を実現する。従来のエンジニアリングシステムは、ソースコードを見るために、ＰＬＣプログラムを取り出してきて、「逆コンパイル」することができるので、攻撃者は、すべてのランダム化されたプログラムを読み取り、都合のよいときにそれらを操作し、再配備するためにこれを使用することができる。この懸念に対処するために、付加的なランダム化レイヤーがＰＬＣプログラムにおいて直接的にＰＬＣ上に実装されてよく、したがって、「オンボード」共通因子である。このレイヤーは、同一のＰＬＣプログラムが複数のＰＬＣに展開される場合でも、各個々のインスタンスの実行が異なっていることを保証するだろう。上述したオンボードＰＬＣランダム化とＰＬＣプログラムランダム化は直交しており、個別に、または組み合わせて使用可能である。主な利点は、エンジニアリングシステムが見るものがＰＬＣにおいて実行されるものではない、ということである。
【００３８】
以降の段落では、Ｓ７−１５００  Ｏｐｅｎ  Ｄｅｖｅｌｏｐｅｒ  Ｋｉｔ（ＯＤＫ）として知られているＣ／Ｃ＋＋言語インターフェースを介してファームウェアを変更できる市販のインターフェースを使用した、ＰＬＣにおけるオンボードＰＬＣランダム化を説明する。ＯＤＫは、ソフトウェア開発者に、ＰＬＣオペレーティングシステムならびに外部ハードウェアとソフトウェアコンポーネントのファンクションとリソースへのアクセスを提供する。ＯＤＫを使用して開発されたソフトウェアアプリケーションは、本明細書では「ＯＤＫアプリケーション」と呼ばれる。ＯＤＫアプリケーションは、ＰＬＣプログラムにおける通常のシステムファンクションとちょうど同じように使用され得る。
【００３９】
ＯＤＫアプリケーションはサンドボックスにおいて実行され、ＰＬＣオペレーティングシステムによってサンドボックスからの脱出が防止される。ＯＤＫプログラムへの唯一の許可されたインターフェースは、インプットとアウトプットである。例示のためにＯＤＫを例として使用しているが、以下で説明する一般的な技術は、当技術分野において一般的に知られている同様の言語インターフェースを使用して実装できるということに留意されたい。
【００４０】
図１３は、いくつかの実施形態に従って、ＰＬＣプログラム内で付加的なコードを実行し、その実行を変更し、ＰＬＣのタイミングに影響を及ぼすコードレベルランダム化を示している。図１３の左側に示されているように、ＯＢ１において周期的に動作する３つのＦＢ（ＦＢ１、ＦＢ２、ＦＢ３）を含んでいるＰＬＣ  Ａ  １３０５を考察する。（図１３の右側に示されている）ＰＬＣ  Ｂ  １３１０に対するコードレベルランダム化によって、ＦＢ１の後に挿入されたＯＤＫアプリケーションを介した付加的なＣ／Ｃ＋＋コード（Ｃ＋＋１）およびＦＢ２の後に挿入されたＯＤＫアプリケーションを介した異なるＣ／Ｃ＋＋コード（Ｃ＋＋２）の実行およびＯＢ１におけるその後のＦＢ３の呼び出しが可能になる。これは、ＯＢ内でＦＢとＦＣの間で呼び出されるべきＣ／Ｃ＋＋コードの番号と内容を変えることによって、２つの異なるＰＬＣにおいて同じＰＬＣプログラムをランダム化する方法を示している。明らかに、付加的なコードは、ＯＢに対する付加的な計算要求を導入する。例えば、ＰＬＣ  Ａ  １３０５においてＯＢ１は１０ミリ秒で実行されるが、ＰＬＣ  Ｂにおけるランダム化されたＯＢ１は６０ミリ秒で実行される。コードレベルのランダム化によって挿入された付加的なコードがサイクル時間を超えない限り、被ランダム化は機能的であり、かつリアルタイム適合であるだろう。これは、制御アプリケーションのリアルタイム保証に影響を与えることなく、ＯＢ実行がサイクル内でアイドルタイムをとることができるという事実のために可能である。付加的なコードを導入するために、この観察が活用されてよい。
【００４１】
ＯＤＫコールの場所と番号の両方が異なるように、サイクルの間に、サイクル間ランダム化を導入することができる。したがって、実行は、同じＰＬＣ内でサイクルＮから次のサイクルＮ＋１に変化する。例えば、図１４は、サイクルＮにおいて、実行が６０ミリ秒で、ＯＢ１においてＦＢ１、Ｃ＋＋１、ＦＢ２、Ｃ＋＋２およびＦＢ３を含んでいることを示している。次のサイクルＮ＋１においては、実行は７５ミリ秒で、ＯＢ１におけるＦＢ１、ＦＢ２、Ｃ＋＋１、Ｃ＋＋２、ＦＢ３およびＣ＋＋３を含んでいる。コードレベルのランダム化と同様に、ＯＤＫコールはアイドルタイムと交換にＯＢ実行を手放し、実行がサイクル時間内である限り、サイクル間ランダム化は機能保証およびリアルタイム保証を保証するだろう。
【００４２】
本明細書において制御レイヤーデバイスによって使用されると説明されたプロセッサーは、１つまたは複数の中央処理装置（ＣＰＵ）、グラフィック処理装置（ＧＰＵ）または当技術分野で知られている任意の他のプロセッサーを含んでいてよい。より一般的には、本明細書において使用されるプロセッサーは、コンピューター可読媒体に格納されている機械可読命令を実行し、タスクを実行するためのデバイスであり、ハードウェアおよびファームウェアのいずれかまたは組み合わせを含んでいてよい。プロセッサーは、タスクを実行するために実行可能な機械可読命令を格納するメモリも含んでいてよい。プロセッサーは、実行可能なプロシージャまたは情報デバイスが使用する情報を操作、分析、変更、変換または送信することによって、および／またはこの情報をアウトプットデバイスにルーティングすることによって、情報に基づいて動作する。プロセッサーは、例えばコンピューター、コントローラまたはマイクロプロセッサの機能を使用してよく、または含んでいてよく、実行可能な命令を使用して、汎用コンピューターでは実行されない特殊な目的ファンクションを実行するために調整されてよい。プロセッサーは、それらの間の相互作用および／または通信を可能にし得る任意の他のプロセッサーと（電気的に、かつ／または実行可能なコンポーネントを含んでいるものとして）結合されてよい。ユーザインターフェースプロセッサまたはジェネレータは、表示画像または表示画像の一部を生成するための電子回路またはソフトウェアまたは両方の組み合わせを含んでいる既知の要素である。ユーザーインターフェースは、プロセッサーまたは他のデバイスとのユーザー相互作用を可能にする１つまたは複数の表示画像を含んでいる。
【００４３】
本明細書で使用される「プログラミングコンポーネント」という用語は、指定された機能性を提供するようにプログラムされたまたは別の方法で構成されているソフトウェア、ファームウェアおよびハードウェアの任意の組み合わせを指す。例えば、いくつかの実施形態では、各プログラミングコンポーネントはソフトウェアライブラリまたはライブラリのグループを含んでいる。場合によっては、プログラミングコンポーネントは、より大きな全体的なプログラミング構造に含まれている。例えば、プログラミングコンポーネントの機能性は、１つまたは複数のファンクション、モジュール、サブルーチンまたはオブジェクト指向クラスに含まれていてよい。これらは、今度は、より大きなソフトウェアプログラムの一部である。他の実施形態では、プログラミングコンポーネントは本質的にアトミックであり、コンピューティングシステムプロセッサによって必要とされる場合に、ロードおよび実行が可能である。本開示の任意の所与のプログラミングコンポーネントの機能性が、例えば、有線または無線インターフェースを介して接続されている複数のプログラミングコンポーネント間で分散されてよい。
【００４４】
本明細書に記載された種々のデバイスは、制御レイヤーデバイスおよび関連するコンピューティングインフラストラクチャを含んでいるがこれらに限定されず、本発明の実施形態に従ってプログラムされた命令を保持し、データ構造、テーブル、記録またはその他の本明細書に記載されたデータを含むために、少なくとも１つのコンピューター可読媒体またはメモリを含んでいてよい。本明細書で使用される用語「コンピューター可読媒体」は、実行のために１つまたは複数のプロセッサーに命令を提供することに関与する任意の媒体を指す。コンピューター可読媒体は、非一過性の、不揮発性媒体、揮発性媒体および伝送媒体を含むがこれらに限定されない多くの形態を取り得る。不揮発性媒体の非限定的な例には、光ディスク、ソリッドステートドライブ、磁気ディスクおよび光磁気ディスクが含まれる。揮発性媒体の非限定的な例には、ダイナミックメモリが含まれる。伝送媒体の非限定的な例には、同軸ケーブル、銅線および光ファイバーが含まれ、システムバスを構成するワイヤを含んでいる。伝送媒体は、例えば電波および赤外線データ通信中に生成される、音響波または光波の形態も取り得る。
【００４５】
本明細書で使用される実行可能なアプリケーションは、例えばユーザー命令またはインプットに応じて、オペレーティングシステム、コンテキストデータ取得システムまたは他の情報処理システム等の所定のファンクションを実行するようにプロセッサーを調整するコードまたは機械可読命令を含んでいる。実行可能なプロシージャは、１つまたは複数の特定のプロセスを実行するためのコードまたは機械可読命令のセグメント、サブルーチンまたはコードまたは実行可能なアプリケーションの部分の他の別個のセクションである。これらのプロセスには、インプットデータおよび／またはパラメーターの受信、受信したインプットデータに対するオペレーションの実行および／または受信したインプットパラメーターに応じたファンクションの実行および結果として生じたアウトプットデータおよび／またはパラメーターの提供が含まれていてよい。
【００４６】
本明細書のファンクションおよびプロセスステップは、ユーザー命令に応じて、自動的に、全体的にまたは部分的に実行されてよい。自動的に実行されるアクティビティ（ステップを含む）は、ユーザーがアクティビティを直接開始することなく、１つまたは複数の実行可能な命令またはデバイスオペレーションに応じて実行される。
【００４７】
図のシステムおよびプロセスは排他的ではない。同じ目的を達成するために、本発明の原理に従って他のシステム、プロセスおよびメニューが導き出されてよい。本発明を特定の実施形態を参照して説明したが、本明細書に示され、説明された実施形態および変形例は単に例示目的である、ということを理解されたい。当業者は、本発明の範囲から逸脱することなく、現在の設計に対する修正を実施することができる。本明細書において上述したように、様々なシステム、サブシステム、エージェント、マネージャおよびプロセスが、ハードウェアコンポーネント、ソフトウェアコンポーネントおよび／またはそれらの組み合わせを使用して実装可能である。本明細書の特許請求の範囲の要素は、これらの要素が「ｍｅａｎｓ  ｆｏｒ」という語句を使用して明示的に列挙されていない限り、米国特許法（３５  Ｕ．Ｓ．Ｃ）第１１２条第６項の規定に基づいて解釈されるものではない。
【図１】
0006945646.tif 000002
【図２】
0006945646.tif 000003
【図３】
0006945646.tif 000004
【図４】
0006945646.tif 000005
【図５】
0006945646.tif 000006
【図６】
0006945646.tif 000007
【図７】
0006945646.tif 000008
【図８】
0006945646.tif 000009
【図９】
0006945646.tif 000010
【図１０】
0006945646.tif 000011
【図１１Ａ】
0006945646.tif 000012
【図１１Ｂ】
0006945646.tif 000013
【図１２】
0006945646.tif 000014
【図１３】
0006945646.tif 000015
【図１４】
0006945646.tif 000016