特許第6945646号(P6945646)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ シーメンス アクチエンゲゼルシヤフトの特許一覧

特許6945646産業用プログラマブルロジックコントローラの、回復力を有しているフェイルオーバー
<>
  • 特許6945646-産業用プログラマブルロジックコントローラの、回復力を有しているフェイルオーバー 図000002
  • 特許6945646-産業用プログラマブルロジックコントローラの、回復力を有しているフェイルオーバー 図000003
  • 特許6945646-産業用プログラマブルロジックコントローラの、回復力を有しているフェイルオーバー 図000004
  • 特許6945646-産業用プログラマブルロジックコントローラの、回復力を有しているフェイルオーバー 図000005
  • 特許6945646-産業用プログラマブルロジックコントローラの、回復力を有しているフェイルオーバー 図000006
  • 特許6945646-産業用プログラマブルロジックコントローラの、回復力を有しているフェイルオーバー 図000007
  • 特許6945646-産業用プログラマブルロジックコントローラの、回復力を有しているフェイルオーバー 図000008
  • 特許6945646-産業用プログラマブルロジックコントローラの、回復力を有しているフェイルオーバー 図000009
  • 特許6945646-産業用プログラマブルロジックコントローラの、回復力を有しているフェイルオーバー 図000010
  • 特許6945646-産業用プログラマブルロジックコントローラの、回復力を有しているフェイルオーバー 図000011
  • 特許6945646-産業用プログラマブルロジックコントローラの、回復力を有しているフェイルオーバー 図000012
  • 特許6945646-産業用プログラマブルロジックコントローラの、回復力を有しているフェイルオーバー 図000013
  • 特許6945646-産業用プログラマブルロジックコントローラの、回復力を有しているフェイルオーバー 図000014
  • 特許6945646-産業用プログラマブルロジックコントローラの、回復力を有しているフェイルオーバー 図000015
  • 特許6945646-産業用プログラマブルロジックコントローラの、回復力を有しているフェイルオーバー 図000016
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6945646
(24)【登録日】2021年9月16日
(45)【発行日】2021年10月6日
(54)【発明の名称】産業用プログラマブルロジックコントローラの、回復力を有しているフェイルオーバー
(51)【国際特許分類】
   G05B 19/05 20060101AFI20210927BHJP
【FI】
   G05B19/05 F
   G05B19/05 N
【請求項の数】8
【全頁数】19
(21)【出願番号】特願2019-552521(P2019-552521)
(86)(22)【出願日】2017年3月24日
(65)【公表番号】特表2020-510268(P2020-510268A)
(43)【公表日】2020年4月2日
(86)【国際出願番号】US2017023984
(87)【国際公開番号】WO2018174896
(87)【国際公開日】20180927
【審査請求日】2019年11月19日
(73)【特許権者】
【識別番号】517291346
【氏名又は名称】シーメンス アクチエンゲゼルシヤフト
【氏名又は名称原語表記】Siemens Aktiengesellschaft
(74)【代理人】
【識別番号】100114890
【弁理士】
【氏名又は名称】アインゼル・フェリックス=ラインハルト
(74)【代理人】
【識別番号】100098501
【弁理士】
【氏名又は名称】森田 拓
(74)【代理人】
【識別番号】100116403
【弁理士】
【氏名又は名称】前川 純一
(74)【代理人】
【識別番号】100135633
【弁理士】
【氏名又は名称】二宮 浩康
(74)【代理人】
【識別番号】100162880
【弁理士】
【氏名又は名称】上島 類
(72)【発明者】
【氏名】アルキメデス マルティネス カネド
(72)【発明者】
【氏名】チェン ソン
(72)【発明者】
【氏名】マイク ヴェルディンク
【審査官】 堀内 亮吾
(56)【参考文献】
【文献】 米国特許出願公開第2017/0078455(US,A1)
【文献】 米国特許出願公開第2010/0275065(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G05B 19/04− 19/05
(57)【特許請求の範囲】
【請求項1】
オートメーション環境においてプログラマブルロジックコントローラに対してフェイルオーバーを実行し、物理システムを制御する方法であって、前記方法は、
第1のインプット/アウトプットモジュールによって、1つまたは複数のフィールドデバイスからセンサインプットを受け取ること、
前記第1のインプット/アウトプットモジュールによって、第1のPLCバンクのプログラマブルロジックコントローラー(PLC)の第1のグループに対する前記センサインプットのコピーを作成すること、
前記第1のインプット/アウトプットモジュールによって、PLCの前記第1のグループの各PLCに前記センサインプットの前記コピーを転送すること、
前記第1のインプット/アウトプットモジュールによって、前記センサインプットの前記コピーの転送に応じて、PLCの前記第1のグループの各PLCから処理結果を受け取り、処理すること、
前記第1のインプット/アウトプットモジュールによって、PLCの前記第1のグループの各PLCから受け取った前記処理結果の間になんらかの不一致があるか否かを判断すること、
PLCの前記第1のグループの各PLCから受け取った前記処理結果の間になんらかの不一致がある場合、フェイルオーバー制御メッセージを第2のインプット/アウトプットモジュールに送信することによって、フェイルオーバー制御プロセスを開始すること
を含
前記フェイルオーバー制御プロセスはさらに、
前記第1のインプット/アウトプットモジュールによって、前記第1のPLCバンクのPLCの前記第1のグループを非アクティブ化し、
前記第1のインプット/アウトプットモジュールによって、前記物理システムの制御に関連付けられた前記第1のPLCバンクのPLCの前記第1のグループの1つまたは複数のアウトプットポートを無効にすること
を含み、
前記フェイルオーバー制御プロセスはさらに、
前記第2のインプット/アウトプットモジュールに制御を再開し、所定のサイクル数の間、アウトプットを中断するように指示するフェイルオーバーメッセージを前記第1のインプット/アウトプットモジュールによって前記第2のインプット/アウトプットモジュールに送信すること
を含む、
方法。
【請求項2】
前記所定のサイクル数は、前記フェイルオーバーメッセージにおいて整数値として指定されている、請求項記載の方法。
【請求項3】
前記第2のインプット/アウトプットモジュールによって前記フェイルオーバーメッセージを受信すること、
前記所定のサイクル数の後、前記物理システムの制御に関連する第2のPLCバンクのPLCの第2のグループの1つまたは複数のアウトプットポートを前記第2のインプット/アウトプットモジュールによって有効にすること
をさらに含んでいる、請求項1または2記載の方法。
【請求項4】
前記フェイルオーバー制御プロセスはさらに、
PLCの前記第1のグループがリセットされるように指示する再生命令を前記第1のPLCバンクのPLCの前記第1のグループに送信することを含んでいる、請求項1から3までのいずれか1項記載の方法。
【請求項5】
前記再生命令の受信に応じて、前記第1のPLCバンクのPLCによって、前記PLCに格納されているアプリケーションバイナリファイルのグループから新たな制御アプリケーションバイナリファイルを選択すること、
前記PLCによって、前記新たな制御アプリケーションバイナリファイルを実行可能なファイルにコンパイルすること、
再生完了メッセージを前記第1のインプット/アウトプットモジュールに送信すること、および
前記PLCによって、前記実行可能なファイルを実行すること
をさらに含んでいる、請求項記載の方法。
【請求項6】
アプリケーションバイナリファイルの前記グループの各アプリケーションバイナリファイルは、前記グループの他のアプリケーションバイナリファイルとは異なっており、かつ機能的に同等である、請求項記載の方法。
【請求項7】
前記新たな制御アプリケーションバイナリファイルの少なくとも一部は、コンパイル中にランダム化される、請求項5または6記載の方法。
【請求項8】
前記第2のインプット/アウトプットモジュールによって、新たなフェイルオーバー制御メッセージを前記第1のインプット/アウトプットモジュールに送信すること、
前記第1のインプット/アウトプットモジュールによって、PLCの前記第1のグループの各PLCから再生完了メッセージを受信すること、
前記新たなフェイルオーバー制御メッセージと前記再生完了メッセージの受信に応じて、前記第1のインプット/アウトプットモジュールによって、前記物理システムに関連付けられた前記第1のPLCバンクのPLCの前記第1のグループの前記1つまたは複数のアウトプットポートを有効にすること
をさらに含んでいる、請求項4から7までのいずれか1項記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は概して、プログラマブルロジックコントローラの、回復力を有しているフェイルオーバーに関する。開示されている技術は例えば、プログラマブルロジックコントローラー(PLC)や分散制御システム(DCS)等の産業用コントローラが使用される種々の自動化された生産環境に適用されてよい。
【0002】
背景
プログラマブルロジックコントローラー(PLC)は、インプットデバイスの状態に関するデータを収集してアウトプットデバイスの状態を制御するソフトウェアを実行するように構成されている特殊なコンピューター制御システムである。通常、PLCには3つの主要な要素が含まれている。これらは、プロセッサー(これは揮発性メモリを含んでいてよい)、アプリケーションプログラムを含んでいる揮発性メモリおよびオートメーションシステム内の他のデバイスに接続するための1つまたは複数のインプット/アウトプット(I/O)ポートである。プロセス制御の一部として、PLCは、制御されたプロセスで発生するイベントおよび状態を報告する種々のインプットポイント(インプットセンサ)からのインプット信号を監視するために使用される。例えば、PLCは、モーター速度、温度、圧力、体積流量等のインプット状態を監視することができる。制御プログラムは、PLC内のメモリに格納され、特定のインプット信号または状態が発生すると行動を実行するようにPLCに指示する。インプットセンサによって提供されたこれらのインプット信号に応じて、PLCはアウトプット信号を引き出し、生成する。アウトプット信号は、PLCアウトプットポイントを介してアクチュエータやリレー等の種々のアウトプットデバイスに送信され、プロセスを制御する。例えば、PLCは、コンベアの速度を上げるまたは下げる、ロボットのアームを回転させる、リレーを開閉させる、温度を上げるまたは下げる、ならびに列挙しきれない多くの他の可能な制御ファンクションのためにアウトプット信号を出す。
【0003】
上述したインプットポイントおよびアウトプットポイントは通常、それぞれインプットモジュールとアウトプットモジュールに関連付けられている。本明細書では、インプットモジュールとアウトプットモジュールをまとめてI/Oモジュールと呼ぶ。択一的に、当業者は、このようなI/Oモジュールを、I/OカードまたはI/Oボードと呼ぶ。これらのI/Oモジュールは、場合によっては、PLCが高級言語を使用してプログラムされる方法と同様の方法でプログラム可能である。
【0004】
PLCは、障害や故障に対して回復力を有している必要がある。これらの故障は、ハードウェア、ソフトウェアおよびインプットによって引き起こされ得る。回復力を有している従来のPLCアーキテクチャは、あるPLCが故障した場合に他のPLCが実行を引き継ぎ、システムおよび制御の継続性を保証する冗長的なハードウェアに依存している。また、PLCサイバーセキュリティへの関心も高まっている。ここではサイバー攻撃によってPLCが作動しなくなることがあり、回復メカニズムをトリガさせることができる。故障の発生方法に関係なく、回復力を有している現在のPLCは同一のバイナリを使用する。故障によって第1のPLCがクラッシュした場合、バックアップPLCもクラッシュする可能性がある。現在、これらのいわゆる「相関」故障に対する保護メカニズムは存在していない。
【0005】
要約
本発明の実施形態は、プログラマブルロジックコントローラ用の回復力を有しているフェイルオーバー技術に関連する方法、システムおよび装置を提供することによって、上述した短所および欠点の1つまたは複数に対処し、これを克服する。より具体的には、本明細書において説明する技術は、プログラマブルロジックコントローラー(PLC)の1つのバンクからPLCの第2のバンクへのフェイルオーバーを可能にする、PLCの複数のバンクまたはグループを利用するフェイルオーバーアーキテクチャについて説明する。付加的に、いくつかの実施形態では、PLCソフトウェアのバイナリは、冗長的なPLCアーキテクチャのインスタンスのそれぞれにおいてランダム化される。複数のPLCインスタンスは異なるバイナリを実行しているので、このシステム全体は、サイバー攻撃に関して、従来のシステムよりも回復力を有している。
【0006】
いくつかの実施形態では、オートメーション環境においてPLCに対してフェイルオーバーを実行し、物理システムを制御する方法は、フィールドデバイスからセンサインプットを受け取り、第1のPLCバンクのPLCの第1グループに対するセンサインプットのコピーを作成するI/Oモジュールを含んでいる。このI/Oモジュールは、PLCの第1のグループの各PLCにセンサインプットのコピーを転送し、センサインプットのコピーの転送に応じて、PLCの第1のグループの各PLCから処理結果を受け取る。I/Oモジュールは、PLCの第1のグループの各PLCから受け取った処理結果の間になんらかの不一致があるか否かを判断する。PLCの第1のグループの各PLCから受け取った処理結果の間になんらかの不一致がある場合、フェイルオーバー制御メッセージを第2のI/Oモジュールに送信することによってフェイルオーバー制御プロセスが開始される。
【0007】
いくつかの実施形態では、フェイルオーバー制御プロセスはさらに、物理システムの制御に関連して、第1のPLCバンクのPLCの第1のグループを非アクティブ化し、第1のPLCバンクのPLCの第1のグループのアウトプットポートを無効にする第1のI/Oモジュールを含んでいる。付加的に、フェイルオーバー制御プロセス中に、第1のI/Oモジュールは、第2のI/Oモジュールに制御を再開し、所定のサイクル数の間、アウトプットを中断するように指示するフェイルオーバーメッセージを第2のI/Oモジュールに送信してよい。このサイクル数は、例えば、フェイルオーバーメッセージにおいて整数値として指定されていてよい。所定のサイクル数の後、第2のI/Oモジュールは、第2のPLCバンクのPLCの第2のグループのアウトプットポートを有効にする。
【0008】
いくつかの実施形態では、上述したフェイルオーバー制御プロセスはさらに、PLCの第1のグループがリセットされるように指示する再生命令を第1のPLCバンクのPLCの第1のグループに送信することを含んでいる。再生命令の受信に応じて、第1のバンクのPLCは、PLCに格納されているアプリケーションバイナリファイルのグループから新たな制御アプリケーションバイナリファイルを選択する。この新たな制御アプリケーションバイナリファイルは、実行される、実行可能なファイルにコンパイルされる。付加的に、再生完了メッセージが第1のI/Oモジュールに送信される。いくつかの実施形態では、アプリケーションバイナリファイルのグループの各アプリケーションバイナリファイルは、このグループの他のアプリケーションバイナリファイルとは異なっており、かつ機能的に同等である。これは、例えば、コンパイル中に新たな制御アプリケーションバイナリファイルの一部をランダム化することによって実現されてよい。
【0009】
いくつかの実施形態では、第2のI/Oモジュールは、新たなフェイルオーバー制御メッセージを第1のI/Oモジュールに送信する。第1のI/Oモジュールは、PLCの第1のグループの各PLCから再生完了メッセージを受信する。次に、新たなフェイルオーバー制御メッセージと再生完了メッセージの受信に応じて、第1のI/Oモジュールは第1のPLCバンクのPLCの第1のグループのアウトプットポートを有効にする。
【0010】
本発明の他の実施形態では、オートメーション環境においてプログラマブルロジックコントローラに対してフェイルオーバーを実行し、物理システムを制御するシステムは、2つのI/Oモジュールを含んでいる。第1のI/Oモジュールは、センサインプットポート、複製インプットプログラミングコンポーネント、PLCインプットポート、および比較および中断プログラミングコンポーネントを含んでいる。センサインプットポートは、1つまたは複数のフィールドデバイスからセンサインプットを受け取るように構成されている。複製インプットプログラミングコンポーネントは、第1のPLCバンクのPLCの第1のグループに対するセンサインプットのコピーを作成し、PLCの第1のグループの各PLCにセンサインプットのコピーを転送する。PLCインプットポートは、センサインプットのコピーの転送に応じて、PLCの第1のグループの各PLCから処理結果を受け取る。比較および中断プログラミングコンポーネントは、PLCの第1のグループの各PLCから受け取った処理結果の間になんらかの不一致があるか否かを判断するように構成されている。PLCの第1のグループの各PLCから受け取った処理結果の間になんらかの不一致がある場合、比較および中断プログラミングコンポーネントは、フェイルオーバー制御メッセージを第2のI/Oモジュールに送信することによって、フェイルオーバー制御プロセスを開始する。
【0011】
本発明の他の実施形態では、PLCは、アプリケーションバイナリファイルのグループを格納する不揮発性メモリを含んでいる。各アプリケーションバイナリファイルは、グループの他のアプリケーションバイナリファイルとは異なっており、かつ機能的に同等である。PLCはさらに、I/Oモジュールからの再生命令の受信に応じて、アプリケーションバイナリファイルのグループから新たな制御アプリケーションバイナリファイルを選択するように構成されている再生プログラミングコンポーネントを含んでいる。再生プログラミングコンポーネントはさらに、新たな制御アプリケーションバイナリファイルを実行可能なファイルにコンパイルし、再生完了メッセージをI/Oモジュールに送信し、実行可能なファイルを実行するように構成されている。
【0012】
本発明の付加的な特徴および利点は、添付の図面を参照して進める例示的な実施形態の以下の詳細な説明から明らかになるであろう。
【0013】
本発明の前述の態様および他の態様は、添付の図面と関連して読まれるとき、以下の詳細な説明から最もよく理解される。本発明を説明する目的で、現在有利な実施形態が図面に示されているが、本発明は開示された特定の手段に限定されない、ということを理解されたい。図面には以下の図が含まれる。
【図面の簡単な説明】
【0014】
図1】いくつかの実施形態に従って、PLC、I/OモジュールおよびPLCバンクを使用する冗長的なクアッドアーキテクチャにおける例示的なフェイルオーバーアーキテクチャを示す。
図2】いくつかの実施形態に従って、同じサイクル内で1つのPLCバンクから別のPLCバンクへのフェイルオーバーがマルチプレクサによってどのように実現され得るかの例を示す。
図3】いくつかの実施形態に従って、フェイルオーバー制御アルゴリズムがI/Oモジュールにどのように実装され得るかの例を示す。
図4】いくつかの実施形態に従って、SDカードにおける、複数のバックアップを使用したPLCランダム化バイナリ再生を示す。
図5】システムが産業用イーサネットおよびTCPを介して、ユーザー定義のプロトコルを実装できるようにするTSENDブロックの例を提供する。
図6】いくつかの実施形態に従って、APIを介して実施されるPLCプログラムのランダム化の図を提供する。
図7】いくつかの実施形態において利用され得る、データブロック(DB)変数のアドレスおよびオフセットを変更するデータブロックランダム化を示す。
図8】いくつかの実施形態に従って、DBブロック最適化がメモリパディングを排除し、メモリレイアウトを再配置する方法を示す。
図9】いくつかの実施形態に従って、ファンクションブロックパラメータ再配列がPLCプログラムのバイナリ表現を変更する方法の図を提供する。
図10】いくつかの実施形態に従って、周期的な変数再配列がPLCバイナリプログラムにバイナリ変更を導入する図を提供する。
図11A】いくつかの実施形態に従って、制御フロー変換によるランダム化を示す。
図11B】いくつかの実施形態に従って、データフロー変換によるランダム化を示す。
図12】いくつかの実施形態に従って、オペレーションブロックのランダム化がOBのタイミングおよび優先度において変動性を導入する図を提供する。
図13】いくつかの実施形態において実装され得る、PLCプログラム内で付加的なコードを実行し、その実行を変更し、PLCのタイミングに影響を与える、コードレベルのランダム化の例を提供する。
図14】いくつかの実施形態において実施され得る、サイクル内で付加的なコードの異なるフラグメントを実行し、PLCのタイミングに影響を及ぼすサイクル間ランダム化の例を提供する。
【0015】
詳細な説明
本明細書では概して、プログラマブルロジックコントローラの、回復力を有しているフェイルオーバーに関するシステム、方法および装置について説明する。より具体的には、本明細書において説明する技術は、プログラマブルロジックコントローラー(PLC)の複数のバンクを利用し、PLCのあるバンクからPLCの第2のバンクへのフェイルオーバーを可能にするフェイルオーバーアーキテクチャを記述する。PLCの第2のバンクで処理が行われている間、第1のバンクのPLCはリセットされ、新たな制御アプリケーションバイナリがリロードされる。回復力の付加的な措置として、PLCは回復力を有しているPLCにおいて機能的に同等であるランダム化されたバイナリを使用してよい。機能的同等性によって、同じインプットに対して、ランダム化されたPLCプログラムがランダム化されていないPLCプログラムと同じアウトプットを生成することが保証される。相関故障の場合、一度にクラッシュするPLCは1つだけである。さらに、ランダム化により、他のPLCが同じ相関イベント(例えば、インプット、メモリアクセス違反等のソフトウェアエラー等)に対してクラッシュしないことが保証される。以下に説明するシステムは、その関連する方法および装置とともに、少なくとも以下の特徴に関して、回復力を有している。第一に、セキュリティ故障の単一ポイントはない。PLCまたはI/Oモジュールに故障が発生した場合、システムは適切に機能し、自動的に回復することができる。第二に、本明細書において説明するシステムは、故障後に自動的に回復することができる。バイナリが異なっていても、他のPLCが実行を引き継いで、同じアウトプットを生成することができ、同時に相関故障のリスクが排除される。第三に、システムはゼロデイサイバー攻撃に対する回復力を提供し、それに伴って、サイバー攻撃に対処するためにソフトウェアパッチを開発しながら、有意義な保護が提供される。
【0016】
図1は、いくつかの実施形態において実装され得る、冗長的なクアッドアーキテクチャ100におけるフェイルオーバーアーキテクチャを示している。アーキテクチャ100は、2つのPLCバンク(PLCバンク105およびPLCバンク110)を含んでいる。各PLCバンクには、2つのPLCと1つのI/Oモジュールが含まれている。したがって、PLCバンク105にはPLC1、PLC2およびI/O1が含まれており、PLCバンク110にはPLC3、PLC4およびI/O2が含まれている。フェイルオーバーメカニズムを、I/Oモジュールに直接的に実装することができる。この目的に使用できるI/Oモジュールの一例は、SiemensTMET200SPI/Oモジュールである。ある場合には、I/Oモジュールは、PLCが高級言語を使用してプログラムされる方法と同様の方法でプログラムされてよい。各PLCバンクは、1つのI/Oモジュールと2つのPLCを含んでいる。2つのPLCバンクは、I/Oモジュール(例えば、I/O1およびI/O2等)によって管理されるフェイルオーバーの場合に、(例えばPROFINET通信を通じて)互いに通信する。I/Oモジュールは、システムのセンサおよびアクチュエータに冗長的に接続されている。
【0017】
同じサイクル内の、あるPLCバンクから別のPLCバンクへのフェイルオーバーは、図2に示されているように、マルチプレクサによって実現されてよい。このマルチプレクサは、バンク1および2のアウトプットとフェイルオーバー信号をインプットとして受け取る。どのバンクがアクティブであるのかに応じて、フェイルオーバー信号は、どのアウトプット信号がマルチプレクサのアウトプットとなるのかを選択する。フェイルオーバー信号は、バンクのI/Oによって設定される。1つのバンクのI/Oは、2つのPLCのアウトプットが異なることがわかると、他のバンクへのフェイルオーバーを決定する。次に、I/Oはマルチプレクサに、第2のバンクからのアウトプットを渡すように命令する。あるバンクから別のバンクへのフェイルオーバーは、同じサイクルにおいて実行可能である。なぜならマルチプレクサはロジックのない単純なデバイスであり、アウトプットの選択にはマルチプレクサの状態の設定しか含まれないからである。
【0018】
図3は、いくつかの実施形態に従って、フェイルオーバー制御技術がI/Oモジュールにどのように実装され得るかの例を提供している。図3に示されているように、各I/Oモジュールは、複製インプットプログラミングコンポーネントと、比較および中断プログラミングコンポーネントとを含んでいる。複製インプットプログラミングコンポーネントは、センサインプットポート(図3には示されていない)を介してセンサーデータを取得する。このインプットポートは本質的にI/Oモジュールを出入りする経路であり、当技術分野で知られている任意の技術を使用して実装されてよい。I/Oモジュールの複製インプットプログラミングコンポーネントは、センサーデータを各バンクのPLC対に複製する。比較および中断プログラミングコンポーネントはそれぞれ、PLC処理の不一致を検出し、制御を再開し、Dサイクルのアウトプットを中断するために、他のPLCバンクにフェイルオーバーメッセージを送信する。サイクルNでは、I/O1モジュールが制御され、インプットをPLC1とPLC2に複製し、PLC1とPLC2がこのサイクルに対するその結果を確定した後、比較および中断プログラミングコンポーネントが計算の不一致を検証する。この場合、比較および中断プログラミングコンポーネントはデバイス(PLC1およびPLC2)を非アクティブ化し、アクチュエーターポートを無効にし、新たな多様化されたバイナリを使用して復元されるべきPLCイメージに対する再生命令を送信する。いくつかの実施形態では、再生命令は、再生の必要性を示す単純なメッセージであってよく、これはその後、再生の命令を生成するために処理されてよい。他の実施形態では、再生命令は、実行時に再生を開始させる1つまたは複数のコンピューター実行可能な命令である。
【0019】
回復方法は2つのステップで実行される。第1のステップの間、I/O1が回復プロセスを開始させる。これは、例えばI/O1におけるSFC12システム関数コールによって実行可能である。デバイスが非アクティブ化され、アクチュエータが無効にされた後、フェイルオーバー制御メッセージが第2のPLCバンクのI/O2モジュールに送信される。このメッセージには、第2のPLCバンクが書き込む前に、このプロセスに対するアウトプットを中断するために、サイクルDの数を指定する整数値が含まれている。この遅延メッセージはI/O2によって処理され、どのデバイスをいつアクティブにするかを決定するために使用される。
【0020】
I/O2モジュールも残りのPLCと同期して動作するので、遅延Dは正確であることが保証される。第2のステップの間、Dサイクル後、I/O2によってアクチュエーターポートが有効になり、物理システムの制御を再開するために、制御信号をアクチュエータに書き込むことができる。I/O2モジュールが、フェイルオーバー制御信号を介してI/O1モジュールに、後ろ向きに接続されていることに注意されたい。しかし、この接続は、PLCバンク1においてPLCイメージの準備ができるまで有効にならない。これは、再生完了メッセージを通じて伝達される。いくつかの実施形態では、再生命令は、すべてのPLCが準備完了であることを示す単純なメッセージであってよい(例えば、準備完了を示す1を伴うバイナリ値)。他方で、他の実施形態では、再生完了メッセージは、バンク内のPLCの状態に関する付加的な情報を含んでいてよい。
【0021】
サイバー攻撃が発生したときにランダム化されたプログラムを備えた2つのPLCが異なるアウトプットを生成する理由は、PLCが汎用コンピューターとは異なる呼出規約を使用するためである。例えば、戻りアドレスはスタックではなく、保護されたメモリ領域のヒープに構造化されたランタイムデータに関連付けられたレジスタに格納される。これは、PLCオペレーティングシステムによって、ユーザー空間ではなく、カーネル空間で管理される。
【0022】
PLC内の再生プロセスは、図4に示されているように完了される。このプロセスは、例えば、オペレーティングシステムまたはPLCのファームウェアにおいて実行される特殊な再生プログラミングコンポーネントを使用して実装されてよい。この例では、PLCはSDカード405を使用してプログラム構成(「Bak_l.dmp」、「Bak_2.dmp」等とラベル付けされている)を格納する。図に示されているようないくつかの実施形態では、SDカード405は暗号化されていてよい。フェイルオーバーシステム410によって生成されたこれらのランダム化されたプログラム構成は、ダウンロードパッケージ415を介してPLCにランダムにダウンロードされる。この例においてフェイルオーバーシステム410は、PLC構造を解析し、変換を適用し、新たなPLC構造をパッケージするソフトウェアコンポーネントを含んでいる。ランダム化されたPLCバイナリの選択をランダム化することは、以前の障害を引き起こしたサイバー攻撃を複製する可能性を減らすために重要である。これらのランダム化された構成は、例えばPLCの「ノウハウ保護」特徴を使用して、SDカード405において暗号化もされている。ステップ420でのPLC開始後、ステップ425で、SDカード405上の構成が読み取られ、PLCメモリにインスタンス化される。この構成は、その後、ステップ435で周期的に実行される前に、ステップ430でオンボードコンパイラによってコンパイルされる。故障の場合、故障処理メカニズムがトリガされ、ステップ440でローカルなフェイルオーバーが実行される。また、PLCはそのイメージを再生する必要があり、これはステップ445で異なる構成をランダムに選択することによって実行される。当技術分野において一般的に知られている任意の技術が、構成のランダムな選択を実行するために使用されてよい。例えば、いくつかの実施形態では、SDカード405上のランダム化されたプログラム構成が連続的に番号付けされる。その後、数の範囲内で乱数が選択される。選択されると、構成の識別子(例えば、ファイル名)が、425でSDカードの読み取りを実行するプログラミングコンポーネントに配信される。択一的に、構成を迅速にロードするためにステップ425が実行されてよい。最後に、ステップ450で、PLCのCPUが、ステップ420でのプロセスの繰り返しで再び開始される。
【0023】
図4に示されているこのプロセスは、最新のPLCによって完全にサポートされていてよく、付加的なコードは必要ない。PLCによってサポートされる付加的なセキュリティレイヤーは、SDカードのシリアル番号をユーザープログラムに結び付けて、同じPLCバイナリイメージを異なるPLCに複製できないようにする。
【0024】
いくつかの実施形態では、命令とその状態を含んでいるメッセージを交換するために、すべてのコンポーネントに対してユーザー定義の通信プロトコルが使用される。コンポーネントには、PLC、ファイアウォール、エンジニアリングシステム、PLCインプットフィルター、I/Oモジュールおよびフェイルオーバーアルゴリズムが含まれている。シーメンス社のオートメーションコンポーネントでは、産業用イーサネットTCPプロトコルを介した「オープンユーザーコミュニケーション」を使用して、ユーザー定義の通信プロトコルを作成することができる。例えば、シーメンス社のTIAポータルエンジニアリングシステムは、標準ライブラリにいわゆる「Tブロック」を提供して、ユーザー定義の通信を可能にする。例えば、FB65「TCON」は接続の確立に使用され、FB66「TDISCON」は接続の終了に使用され、FB63「TSEND」はデータの送信に使用され、FB64「TRECV」はデータの受信に使用される。図5は、FB63「TSEND」ブロックの例を示している。ユーザー定義のメッセージがインプットパラメーターDATAに送信され、メッセージ長はインプットパラメーターLENに送信される。この例では、メッセージはDB100データブロックに格納され、長さは100バイトである。送信要求は、インプットパラメーター「REQ」でのポジティブエッジによってトリガされる。送信要求が実行されている場合、「SEND_BUSY」変数が設定される。FB63の実行を評価するために、アウトプットパラメーター「DONE」、「ERROR」および「STATUS」が要求される。
【0025】
図6は、いくつかの実施形態に従って、PLCプログラムのランダム化がどのように実施され得るかに関する付加的な詳細を提供するシステム図である。当技術分野において理解されているように、PLCはオペレーティングシステムとユーザープログラムを含んでいる。オペレーティングシステムは、固有のPLC機能性(再開始とエラーの処理、メモリ管理、ユーザープログラムの呼び出し等)を提供する。図6に示されているように、ユーザープログラムは、オートメーションタスクを実行するすべての「ブロック」を含んでいる。ユーザープログラムは、ファンクションブロック(FB)およびファンクション(FC)を含んでいるプログラムブロックでプログラムされる。FBとFCは、データブロック(DB)で編成されたローカル変数とグローバル変数を参照する。PLCでは、ユーザープログラムは通常、オーガニゼーションブロック(OB)において周期的に実行される(非周期的なプログラムも可能である)。メインサイクルOBは常に存在しており、PLCプログラムが無限ループで初期化され、実行されると利用可能になる。
【0026】
図6に示されているPLCプログラム構造は固定されており、異なるブロックタイプで明確な構造を提供する。この例は、フェイルオーバーシステム615をエンジニアリングシステム605に接続する方法を示している。この例において、フェイルオーバーシステム615は、PLC構造を解析し、変換を適用し、新たなPLC構造をパッケージするソフトウェアコンポーネントを含んでいる。より具体的には、アプリケーションプログラミングインターフェース(API)610を使用して、フェイルオーバーシステム615は、ダウンロードされる前にPLCプログラムにアクセスし、ランダム化する。バイナリ表現へのブロック(OB、FB、FC、DB)のマッピングが変化するので、PLCプログラムのブロック構造の変更は、生成されるコードに甚大な影響を与える。したがって、PLCプログラム構造に対する変更によって、フェイルオーバーシステムが求めるバイナリの多様化が実現される。図6に示されている一般的なアーキテクチャを使用する場合、PLCプログラム構造内のすべてのブロックタイプのランダム化が実現され得る。
【0027】
図7は、いくつかの実施形態に従って、ブロックランダム化がDB変数のアドレスおよびオフセットを変更する方法を示している。DBは、変数、センサおよびアクチュエータにアクセスするためにプログラムによって使用されるアドレス可能なブロックにメモリを編成する。DBは、タグと呼ばれる名前付き変数の集合である。タグは、PLCにおける値のために予約されたメモリ領域である。タグには、データ型(例えばBool、Integer等)、値(例えば「15」)およびDB内の物理アドレスが含まれている。図7に示されているように、PLC1における「Motor_1」タグはBool型とアドレス「%I0.0」を有している。データブロックランダム化コンポーネントによる処理の後、PLC2における同じ変数のアドレスを「%I2.0」に変更することができる。同様に、Bool型のPLC1における静的変数「tag」におけるオフセットを、PLC2のシンボルテーブルにおいて「tag」の前に「new_tag」を導入することによって、「0.0」から「0.1」に変更することができる。これらの変更によって、PLCのメモリレイアウトが多様化され、同じサイバーエクスプロイトが異なるメモリレイアウトを有する2つのPLCにおいて有効になる可能性が低くなる。
【0028】
ランダム化の付加的なレイヤーは、すべてのタグがそのデータ型によって分類されるDBブロック最適化を有効にする。このような分類は、タグ間のデータギャップ(パディング)を最小化し、図8に示されているように、ターゲットPLCプロセッサーに対するメモリアクセスを最適化する。この例では、標準的なDB 805は、最適化されたDB 810において排除されている変数間のデータギャップを有している。組み合わせでは、提示された2つのDBランダム化技術によって、フェイルオーバーシステムは、PLC多様化プログラムに対して、数百の同等のメモリレイアウトを生成することができる。
【0029】
いくつかの実施形態では、ファンクションブロックおよびファンクションランダム化を使用して、コードとメモリスタックの両方の構造が変えられる。FBとFCの違いは、周期的なデータ記憶装置にある。FCは、データ記憶装置のないブロックである。これは、値FCがステートレスであり、ブロック変数が複数のサイクルにわたって持続可能でないことを意味している。他方でFBは、周期的なデータ記憶装置を備えたブロックである。これは、FBがステートフルであり、ブロック変数値が複数のサイクルにわたって持続されることを意味している。FBとFCはどちらも、図式言語やテキスト形式言語を含んでいる種々の高級言語を使用してプログラムされている。標準的なPLCプログラミング言語の1つは、PASCALに基づくストラクチャードコントロール言語(SCL)である。SCLは、IEC 61131−3規格によって規格化されたPLCプログラミングに対するストラクチャードテキスト(ST)仕様にも基づいている。以降で説明するFBおよびFCランダム化技術は、説明のためにSCLに基づいているが、これらの技術が一般化され、同様の機能性を提供する任意のPLCプログラミング言語に適用されてよい、ということを理解されたい。
【0030】
ファンクションブロックおよびファンクションは、インプット、アウトプット、インプット−アウトプットパラメーターおよびファンクションの本体で構成されている宣言を有している。この宣言は、SCLを含んでいるすべての言語に共通である。図9は、インプットパラメーター「FINALVAL」、インプット−アウトプットパラメーター「IQ1」およびアウトプットパラメーター「CONTROL」を含んでいる「TEST」プログラムに対する例示的なファンクションブロック宣言を示している。ランダム化を導入する1つの技術は、右側の2つの例によって示されているように、ファンクションブロックを呼び出すときにパラメーターを再配列することである。パラメーターには名前が付けられているので、パラメーターがリストにされる順序はプログラムの意味を変更しない。しかし、これによって、2つのプログラムに対して異なるメモリレイアウトが作成される。実際のPLCプログラムでは、パラメーターの数が非常に大きくなる傾向があり(時にはパラメーターが数百になるときもある)、したがって、この技術は、多数の、異なるが同等のSCLプログラムを作成するのに極めて効果的である。
【0031】
同様の技術を、サイクル全体にわたって持続されるFBの周期的な変数に適用可能である。図10は、いくつかの実施形態に従って、周期的な変数の再配列がPLCバイナリプログラムにバイナリ変化を導入する方法を示している。図10に示されているように、変数PID_CONTROLLER_1およびPID_CONTROLLER_2の順序を、周期的な変数が異なるPLCインスタンスの異なるメモリ位置を占めるように再配置することができる。
【0032】
SCLコード自体は、制御フローレベルとデータフローレベルの両方でランダム化可能である。例えば、制御フローの場合、SCL文を含んでいる拡張可能なマークアップ言語(XML)ファイルが解析され、条件文が同等の制御フロー構造に変換される制御フローグラフが再構築されてよい。
【0033】
図11Aおよび11Bは、いくつかの実施形態に従って、制御フロー変換およびデータフロー変換が、それぞれ、SCLコードレベルでのバイナリ多様化を導入する方法を示している。例えば、図11Aでは、if−else文の構造が「NOT」命令で反転されているため、PLC1における「if」文の本体が、PLC2におけるelse文の本体になり、その逆も同様である。図11Bでは、データフローに対して、SCL文を含んでいるXMLファイルが解析されてよく、データフローグラフが再構築されてよく、ここで表現が同等のデータフロー表現に変換される。例えば、図11Bは、PLC1における表現「IQl:=IQ12」がPLC2における「IQl:=IQ1+IQ1」に変換されることを示している。付加的に、「N:=0」や「SUM:=0」等の付加的な表現が挿入されてよく、これは、コンパイル時に、制御プログラムに寄与しないが、コードレベルでバイナリ多様性を生成する。これは、NOOP(ノーオペレーション)ランダム化技術に似ている。一部のPLCにはNOOPオペランドが存在しないが、プログラムに機能的に寄与しないオペレーションを挿入することは機能的に同等である、ということに留意することが重要である。
【0034】
いくつかの実施形態では、メモリ内のその配置に影響を与えるFBおよびFCに対する順序付けランダム化技術が適用される。すべてのFBおよびFCは、3つの要素<name、type、number>を有している。nameは、PLCプログラムにおいてユーザーによって提供される任意の名前であり、typeは、ブロックタイプに応じた列挙であり(例えばFB、FC、OB、DB)、numberはブロックに関連付けられた一意の識別子である。重要な観察は、PLCメモリにおけるブロックの位置は、最初に分類されてから、実行のためにPLCにダウンロードされるときに、それらの番号に対応する、ということである。したがって、実行中にその順序を変更するために3つの要素における数をランダム化するために、順序付けランダム化技術が適用されてよい。付加的に(または択一的に)、メモリ空間を占有し、有用な作業を提供する他のFBおよびFCを任意に動かすために、ダミーのFCおよびFBが挿入されてよい。この変換は、オープンインターフェイスを介しても可能であり、DBに拡張も可能である。
【0035】
OBは、オペレーティングシステムとユーザープログラムの間のインターフェースである。ユーザープログラムはOBによってのみ呼び出すことができるため、PLCプログラム構造の重要な部分である。OBは、オペレーティングシステムによって周期的に、または特定のイベントが発生したときに呼び出される。多くのPLCには、ユーザーが目的の機能性に応じて、自身のプログラムのために選択できるいくつかのタイプのOB(または他のベンダにおける同様の概念)がある。例えば、スタートアップOB、周期的なプログラム実行OB、割り込み(時刻、サイクル、時間遅延、ハードウェア)OB、およびエラー(非同期および同期)OBがある。OBは番号によって識別され、番号が異なると優先順位も異なる。例えば、「OB1」は最高の優先順位を有する周期的なプログラムOBであり、OB10は低い優先順位を有する時刻割り込みOBである。例えば、いくつかのPLCは、同じタイプの複数の割り込みを提供する。例えば、シーメンス社のPLCSでは、OB32、OB33、OB34およびOB35は、ユーザーがそのプログラムを整理するために自由に使用できる周期的な割り込みOBである。
【0036】
オーガニゼーションブロックランダム化コンポーネントは、異なるPLCプログラムが(同じ優先順位とリアルタイム保証を伴う)異なるOBを使用するようにOBを再配列する。例えば、図12は、2つのOB(OB1およびOB32)を有するPLCプログラム構造を、3つのOB(OB1、OB32およびOB35)を有するプログラム構造に変換する方法を示している。この例では、コントローラーコードは2つに分割され、最初の半分はOB32に割り当てられ、次の半分はOB35に割り当てられている。これによって、OB35とOB32の間に依存関係が作成される、ということに注意されたい。しかし、OBの間の同期性は、PLCにおいてサポートされている。
【0037】
いくつかの実施形態では、オンボードPLCのランダム化は、PLCプログラムがランダム化され、実行のためにPLCに展開された後、アプリケーションバイナリ隠蔽を実現する。従来のエンジニアリングシステムは、ソースコードを見るために、PLCプログラムを取り出してきて、「逆コンパイル」することができるので、攻撃者は、すべてのランダム化されたプログラムを読み取り、都合のよいときにそれらを操作し、再配備するためにこれを使用することができる。この懸念に対処するために、付加的なランダム化レイヤーがPLCプログラムにおいて直接的にPLC上に実装されてよく、したがって、「オンボード」共通因子である。このレイヤーは、同一のPLCプログラムが複数のPLCに展開される場合でも、各個々のインスタンスの実行が異なっていることを保証するだろう。上述したオンボードPLCランダム化とPLCプログラムランダム化は直交しており、個別に、または組み合わせて使用可能である。主な利点は、エンジニアリングシステムが見るものがPLCにおいて実行されるものではない、ということである。
【0038】
以降の段落では、S7−1500 Open Developer Kit(ODK)として知られているC/C++言語インターフェースを介してファームウェアを変更できる市販のインターフェースを使用した、PLCにおけるオンボードPLCランダム化を説明する。ODKは、ソフトウェア開発者に、PLCオペレーティングシステムならびに外部ハードウェアとソフトウェアコンポーネントのファンクションとリソースへのアクセスを提供する。ODKを使用して開発されたソフトウェアアプリケーションは、本明細書では「ODKアプリケーション」と呼ばれる。ODKアプリケーションは、PLCプログラムにおける通常のシステムファンクションとちょうど同じように使用され得る。
【0039】
ODKアプリケーションはサンドボックスにおいて実行され、PLCオペレーティングシステムによってサンドボックスからの脱出が防止される。ODKプログラムへの唯一の許可されたインターフェースは、インプットとアウトプットである。例示のためにODKを例として使用しているが、以下で説明する一般的な技術は、当技術分野において一般的に知られている同様の言語インターフェースを使用して実装できるということに留意されたい。
【0040】
図13は、いくつかの実施形態に従って、PLCプログラム内で付加的なコードを実行し、その実行を変更し、PLCのタイミングに影響を及ぼすコードレベルランダム化を示している。図13の左側に示されているように、OB1において周期的に動作する3つのFB(FB1、FB2、FB3)を含んでいるPLC A 1305を考察する。(図13の右側に示されている)PLC B 1310に対するコードレベルランダム化によって、FB1の後に挿入されたODKアプリケーションを介した付加的なC/C++コード(C++1)およびFB2の後に挿入されたODKアプリケーションを介した異なるC/C++コード(C++2)の実行およびOB1におけるその後のFB3の呼び出しが可能になる。これは、OB内でFBとFCの間で呼び出されるべきC/C++コードの番号と内容を変えることによって、2つの異なるPLCにおいて同じPLCプログラムをランダム化する方法を示している。明らかに、付加的なコードは、OBに対する付加的な計算要求を導入する。例えば、PLC A 1305においてOB1は10ミリ秒で実行されるが、PLC Bにおけるランダム化されたOB1は60ミリ秒で実行される。コードレベルのランダム化によって挿入された付加的なコードがサイクル時間を超えない限り、被ランダム化は機能的であり、かつリアルタイム適合であるだろう。これは、制御アプリケーションのリアルタイム保証に影響を与えることなく、OB実行がサイクル内でアイドルタイムをとることができるという事実のために可能である。付加的なコードを導入するために、この観察が活用されてよい。
【0041】
ODKコールの場所と番号の両方が異なるように、サイクルの間に、サイクル間ランダム化を導入することができる。したがって、実行は、同じPLC内でサイクルNから次のサイクルN+1に変化する。例えば、図14は、サイクルNにおいて、実行が60ミリ秒で、OB1においてFB1、C++1、FB2、C++2およびFB3を含んでいることを示している。次のサイクルN+1においては、実行は75ミリ秒で、OB1におけるFB1、FB2、C++1、C++2、FB3およびC++3を含んでいる。コードレベルのランダム化と同様に、ODKコールはアイドルタイムと交換にOB実行を手放し、実行がサイクル時間内である限り、サイクル間ランダム化は機能保証およびリアルタイム保証を保証するだろう。
【0042】
本明細書において制御レイヤーデバイスによって使用されると説明されたプロセッサーは、1つまたは複数の中央処理装置(CPU)、グラフィック処理装置(GPU)または当技術分野で知られている任意の他のプロセッサーを含んでいてよい。より一般的には、本明細書において使用されるプロセッサーは、コンピューター可読媒体に格納されている機械可読命令を実行し、タスクを実行するためのデバイスであり、ハードウェアおよびファームウェアのいずれかまたは組み合わせを含んでいてよい。プロセッサーは、タスクを実行するために実行可能な機械可読命令を格納するメモリも含んでいてよい。プロセッサーは、実行可能なプロシージャまたは情報デバイスが使用する情報を操作、分析、変更、変換または送信することによって、および/またはこの情報をアウトプットデバイスにルーティングすることによって、情報に基づいて動作する。プロセッサーは、例えばコンピューター、コントローラまたはマイクロプロセッサの機能を使用してよく、または含んでいてよく、実行可能な命令を使用して、汎用コンピューターでは実行されない特殊な目的ファンクションを実行するために調整されてよい。プロセッサーは、それらの間の相互作用および/または通信を可能にし得る任意の他のプロセッサーと(電気的に、かつ/または実行可能なコンポーネントを含んでいるものとして)結合されてよい。ユーザインターフェースプロセッサまたはジェネレータは、表示画像または表示画像の一部を生成するための電子回路またはソフトウェアまたは両方の組み合わせを含んでいる既知の要素である。ユーザーインターフェースは、プロセッサーまたは他のデバイスとのユーザー相互作用を可能にする1つまたは複数の表示画像を含んでいる。
【0043】
本明細書で使用される「プログラミングコンポーネント」という用語は、指定された機能性を提供するようにプログラムされたまたは別の方法で構成されているソフトウェア、ファームウェアおよびハードウェアの任意の組み合わせを指す。例えば、いくつかの実施形態では、各プログラミングコンポーネントはソフトウェアライブラリまたはライブラリのグループを含んでいる。場合によっては、プログラミングコンポーネントは、より大きな全体的なプログラミング構造に含まれている。例えば、プログラミングコンポーネントの機能性は、1つまたは複数のファンクション、モジュール、サブルーチンまたはオブジェクト指向クラスに含まれていてよい。これらは、今度は、より大きなソフトウェアプログラムの一部である。他の実施形態では、プログラミングコンポーネントは本質的にアトミックであり、コンピューティングシステムプロセッサによって必要とされる場合に、ロードおよび実行が可能である。本開示の任意の所与のプログラミングコンポーネントの機能性が、例えば、有線または無線インターフェースを介して接続されている複数のプログラミングコンポーネント間で分散されてよい。
【0044】
本明細書に記載された種々のデバイスは、制御レイヤーデバイスおよび関連するコンピューティングインフラストラクチャを含んでいるがこれらに限定されず、本発明の実施形態に従ってプログラムされた命令を保持し、データ構造、テーブル、記録またはその他の本明細書に記載されたデータを含むために、少なくとも1つのコンピューター可読媒体またはメモリを含んでいてよい。本明細書で使用される用語「コンピューター可読媒体」は、実行のために1つまたは複数のプロセッサーに命令を提供することに関与する任意の媒体を指す。コンピューター可読媒体は、非一過性の、不揮発性媒体、揮発性媒体および伝送媒体を含むがこれらに限定されない多くの形態を取り得る。不揮発性媒体の非限定的な例には、光ディスク、ソリッドステートドライブ、磁気ディスクおよび光磁気ディスクが含まれる。揮発性媒体の非限定的な例には、ダイナミックメモリが含まれる。伝送媒体の非限定的な例には、同軸ケーブル、銅線および光ファイバーが含まれ、システムバスを構成するワイヤを含んでいる。伝送媒体は、例えば電波および赤外線データ通信中に生成される、音響波または光波の形態も取り得る。
【0045】
本明細書で使用される実行可能なアプリケーションは、例えばユーザー命令またはインプットに応じて、オペレーティングシステム、コンテキストデータ取得システムまたは他の情報処理システム等の所定のファンクションを実行するようにプロセッサーを調整するコードまたは機械可読命令を含んでいる。実行可能なプロシージャは、1つまたは複数の特定のプロセスを実行するためのコードまたは機械可読命令のセグメント、サブルーチンまたはコードまたは実行可能なアプリケーションの部分の他の別個のセクションである。これらのプロセスには、インプットデータおよび/またはパラメーターの受信、受信したインプットデータに対するオペレーションの実行および/または受信したインプットパラメーターに応じたファンクションの実行および結果として生じたアウトプットデータおよび/またはパラメーターの提供が含まれていてよい。
【0046】
本明細書のファンクションおよびプロセスステップは、ユーザー命令に応じて、自動的に、全体的にまたは部分的に実行されてよい。自動的に実行されるアクティビティ(ステップを含む)は、ユーザーがアクティビティを直接開始することなく、1つまたは複数の実行可能な命令またはデバイスオペレーションに応じて実行される。
【0047】
図のシステムおよびプロセスは排他的ではない。同じ目的を達成するために、本発明の原理に従って他のシステム、プロセスおよびメニューが導き出されてよい。本発明を特定の実施形態を参照して説明したが、本明細書に示され、説明された実施形態および変形例は単に例示目的である、ということを理解されたい。当業者は、本発明の範囲から逸脱することなく、現在の設計に対する修正を実施することができる。本明細書において上述したように、様々なシステム、サブシステム、エージェント、マネージャおよびプロセスが、ハードウェアコンポーネント、ソフトウェアコンポーネントおよび/またはそれらの組み合わせを使用して実装可能である。本明細書の特許請求の範囲の要素は、これらの要素が「means for」という語句を使用して明示的に列挙されていない限り、米国特許法(35 U.S.C)第112条第6項の規定に基づいて解釈されるものではない。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11A
図11B
図12
図13
図14