(58)【調査した分野】(Int.Cl.,DB名)
前記動的環境の前記複数の条件のうちの監視される条件を表す少なくとも1つの入力信号を受信するために、前記少なくとも1つのスキャナに通信可能に結合された、少なくとも1つの入力インターフェースを更に備え、
前記少なくとも1つのスキャナの前記処理回路は、前記少なくとも1つの入力信号の値と、前記少なくとも1つのイベント・テーブルの前記少なくとも1つのメモリ位置の前記コンテンツの少なくとも第1の部分とを比較し、各メモリ位置の前記コンテンツの前記第1の部分は評価されることになる前記特定の条件を表し、
前記少なくとも1つの入力信号の前記値が、前記少なくとも1つのメモリ位置、及び評価されることになる前記特定の条件を表す、前記コンテンツの少なくとも前記第1の部分に合致する場合、前記少なくとも1つのスキャナの前記処理回路は、少なくともいくつかの前記制御情報を提供するように前記動的環境内で実行されることになる前記対応するアクションを表す、前記少なくとも1つのメモリ位置の前記コンテンツの第2の部分を処理する、
請求項2に記載のアクション・エンジン。
前記複数の連続する隣接メモリ位置の各メモリ位置の前記コンテンツは、条件/アクション・ペアを含み、前記条件/アクション・ペアは、前記第1の部分を構成し、評価されることになる前記複数の条件のうちの特定の条件を表すそれぞれの値を有する、第1のビット数と、前記第2の部分を構成し、前記特定の条件が満たされた場合に実行されることになる前記対応するアクションを表すそれぞれの値を有する、第2のビット数とを含み、
前記スキャナの前記処理回路は、
前記特定の条件を表す前記第1のビット数の前記それぞれの値、及び、前記複数の条件のうちの前記監視される条件を表す前記少なくとも1つの入力信号の前記値を比較するために、前記少なくとも1つのメモリ位置に結合された比較器であって、前記比較器は、前記特定の条件が前記監視される条件に合致する場合、合致信号を生成するように更に構成された、比較器、及び、
前記合致信号が前記比較器によってアサートされた場合、実行されることになる前記対応するアクションを表すそれぞれの値を有する前記第2のビット数を出力するために、前記少なくとも1つのメモリ位置に結合され、前記合致信号を受信するように前記比較器に結合された、ゲート、
を備える、請求項1又は7に記載のアクション・エンジン。
前記少なくとも1つの入力インターフェースは、前記少なくとも1つのスキャナの前記処理回路によって生成される前記通知信号を受信する外部デバイスから、前記イベント・テーブルの各メモリ位置の前記コンテンツを受信するように、更に構成された、請求項1又は7に記載のアクション・エンジン。
評価時に満たされた前記複数の条件のそれぞれの条件について前記通知信号を提供するため、及び、前記動的環境内で実行されることになる対応するアクションを表す前記少なくとも1つのメモリ位置の前記コンテンツの前記第2の部分に少なくとも部分的に基づいて、前記制御情報の前記少なくともいくつかを更に提供するために、前記少なくとも1つのスキャナに通信可能に結合された、少なくとも1つの出力インターフェース、
を更に備える、請求項1又は7に記載のアクション・エンジン。
前記複数の連続する隣接メモリ位置のうちの第1のメモリ位置の前記コンテンツの前記第1の部分は、前記第1のメモリ位置を前記複数の連続する隣接メモリ位置のうちの次のメモリ位置にリンクするための、チェーン・ビットを含み、前記第1のメモリ位置の前記コンテンツの前記第1の部分は、評価されることになる第1の条件を表し、
前記動的環境内で実行されることになる第1の対応するアクションを表す、前記第1のメモリ位置の前記コンテンツの前記第2の部分は、前記動的環境内で実行されることになるアクションがないことを示す第1のアクション・オペランドを含み、
前記次のメモリ位置の前記コンテンツの前記第1の部分は、評価されることになる第2の条件を表し、
前記次のメモリ位置の前記コンテンツの前記第2の部分は、前記第1の条件及び前記第2の条件の両方が満たされた場合、前記動的環境内で実行されることになる少なくとも1つのアクションを表す第2のアクション・オペランドを含む、
請求項1又は7に記載のアクション・エンジン。
前記動的環境内で実行されることになる対応するアクションを表す各メモリ位置の前記コンテンツの第2の部分は、前記第1のビット数よりも小さい第3のビット数を含み、前記第3のビット数の少なくともいくつかは、前記少なくとも1つのメモリ・レジスタ内の非隣接ビットである、
請求項33に記載の方法。
前記複数の連続する隣接メモリ位置のうちの第1のメモリ位置の前記コンテンツの前記第1の部分は、前記第1のメモリ位置を前記複数の連続する隣接メモリ位置のうちの次のメモリ位置にリンクするための、チェーン・ビットを含み、前記第1のメモリ位置の前記コンテンツの前記第1の部分は、評価されることになる第1の条件を表し、
前記動的環境内で実行されることになる第1の対応するアクションを表す、前記第1のメモリ位置の前記コンテンツの前記第2の部分は、前記動的環境内で実行されることになるアクションがないことを示す第1のアクション・オペランドを含み、
前記次のメモリ位置の前記コンテンツの前記第1の部分は、評価されることになる第2の条件を表し、
前記次のメモリ位置の前記コンテンツの前記第2の部分は、前記第1の条件及び前記第2の条件の両方が満たされた場合、前記動的環境内で実行されることになる少なくとも1つのアクションを表す第2のアクション・オペランドを含む、
請求項25又は27に記載の方法。
【背景技術】
【0001】
[0001] プログラム可能論理コントローラ(PLC)は、典型的には自動化工業電気機械プロセスにおいて機器、機械、及び/又は器具の制御に使用される、特殊な形のコンピュータベース・コントローラである。こうした自動化工業電気機械プロセスの一般的な例は、工場組み立てラインの作業によって与えられる。工場組み立てラインの動的な環境では、部品/コンポーネントの製造、組み立て、及び/又は梱包、並びに、製造、組み立て、及び/又は梱包の様々な段階における部品/コンポーネントの移送に関連付けられた、複数台の工業機器、機械、及び/又は器具(簡単にするために、まとめて「機器」と呼ぶ)が存在する場合がある。
【0002】
[0002]
図1は、工場組み立てラインの作業などの、自動化工業プロセス10に関連した従来のPLC50の典型的な役割の一般的な図を提供する。工場組み立てラインの動的環境は、複数台の機器20に加えて、通常、複数台の機器20を動作させるためのいくつかの制御デバイス30(例えばアクチュエータ)、並びに、部品/コンポーネントの製造、組み立て、梱包、及び/又は移送に関連付けられた、機器の状況及び/又は様々な条件の指示を提供するための複数の入力デバイス40(例えばセンサ)を含む。入力デバイス40によって提供されるこうした指示は、しばしば、動的環境の「状態」又は「条件」と呼ばれる。機器20を動作させるために使用される制御デバイス30のいくつかの例は、磁気リレー、ソレノイド、電気モーター、及び、空気圧又は油圧シリンダを含む。入力デバイス40のいくつかの例は、リミット・スイッチ、位置センサ、アナログ・センサ(例えば圧力又は温度センサ)、及びイメージング・デバイス(例えばカメラ)を含む。
【0003】
[0003] 一般的に言えば、PLC50は、入力デバイス40によって提供される入力信号66を監視するために使用される。これらの入力信号は、それぞれ、又は様々な組み合わせで、時間に応じた動的環境の異なる状態(条件)を表す。所与の時点で存在する入力信号に応答して、PLC50は、自動化プロセス10が効率的かつ予測通りに実施されることを保証するために、工業機器20を動作させるための制御デバイス30への出力信号68を生成する。そのため、PLC50は、一般に、プロセス10を実装する機器20によって実行されるアクションの所定のシーケンスを調整するために使用され、それぞれのアクションは、入力デバイス40によって(入力信号66を介して)提供される情報に左右される、ある一定の時間ウィンドウ内に発生することが必要な場合がある。
【0004】
[0004] 典型的なPLCは、プロセッサ実行可能命令を記憶するためのプログラム可能メモリを含み、論理、シーケンシング、タイミング、カウンティング、及び演算などの機能を実装するために、様々な他の電子コンポーネントを使用する。一般的なアーキテクチャ及び機能の様々な態様に関して、PLCは、多くの点で汎用コンピュータ(例えばデスクトップ又はラップトップのパーソナル・コンピュータ)に類似しているが、汎用コンピュータは典型的には計算及び表示タスクに対して最適化されているのに対して、PLCは一般に、自動化工業プロセスなどの動的環境におけるタスクの制御に対して最適化されている。したがってPLCは、一般に、被制御動的環境のための特定用途向け制御コンピュータであるとみなされる。PLCはしばしば、自動化工業プロセスの厳しい条件で使用されるため、パッケージ設計の観点からすると、従来のPLCはしばしば、PLCが、物理的な振動、過酷な温度及び湿度条件、ほこり又は潜在的に有害な材料、並びに電気的に雑音の多い環境のうちの、1つ又は複数にさらされる可能性がある、厳しい環境に耐えるように、堅固に設計される傾向がある。
【0005】
[0005]
図2は、
図1の従来のPLC50を構成する典型的な電気コンポーネント/回路(例えば「ハードウェア」)の汎用ブロック図を示す。
図2に示されるように、PLC50の基本機能コンポーネントは、プロセッサ・ユニット52、メモリ54、電源56、入力インターフェース58、出力インターフェース60、及び、1つ又は複数の通信インターフェース62を含み、すべてが互いに通信可能に及び/又は電気的に結合されている。
図2は、PLC50に通信可能に結合され、PLCをプログラミングするために使用される、プログラミング・デバイス64も示す。
【0006】
[0006]
図2において、プロセッサ・ユニット52は、入力インターフェース58によって受信される入力信号66を解釈し、次に、メモリ54内に記憶されたプログラム(例えば一連のプロセッサ実行可能命令)に従って制御アクションを実装するように、出力インターフェース60を介して出力信号68を提供するための、マイクロプロセッサを含む。特に、メモリ54は、マイクロプロセッサによって実装されることになる制御アクションを表す命令、並びに、入力信号、出力信号、及び、様々な命令を実行する際のマイクロプロセッサの動作に関する、様々なデータを含む、プログラムを記憶する。入力インターフェース58は、外部入力デバイス(例えばセンサ、スイッチ、メータ、カウンタなど)から受信される入力信号66を介して、プロセッサ・ユニット52に情報を提供する。次にプロセッサ・ユニット52は、出力信号68を介して外部出力デバイス(例えばバルブ、モータなど)に制御アクションを送信する。
【0007】
[0007]
図2において、それぞれの入力及び出力インターフェースを構成するコンポーネントの例は、被制御動的環境に関連付けられた様々な外部入力及び出力デバイスと適切にインターフェースするように、アナログ−デジタル変換器、オプトカプラ/オプトアイソレータ(optocoupler/optoisolator)、バッファ、ラッチ、及びドライバを含むことができる。
図2では、例示の目的で、4つの入力信号及び4つの出力信号が示されているが、異なるタイプの従来から使用可能なPLCが、異なる数の入力信号(ある数Nの入力信号)を受け入れ、異なる数の出力信号(ある数Xの出力信号)を提供するように構成可能であること、並びに、入力信号と出力信号の数が必ずしも同じである必要がないことを理解されたい。一般に、入力信号の数N及び出力信号の数Xは、
図1の自動化プロセス10を監視するために使用される入力デバイス40の数及び機器20を制御するために使用される制御デバイス30の数によって、少なくとも部分的に規定される。
【0008】
[0008]
図2に示されるPLC50において、通信インターフェース62は、様々なデータ(プロセッサ・ユニット52による実行のためのプログラム、入力信号、出力信号、プログラム実行の際にプロセッサ・ユニット52によって使用されることになる他のデータなどのうちの、1つ又は複数に関係する可能性がある)を、1つ又は複数の通信ネットワークを介して、1つ又は複数のネットワークベースの外部入力/出力デバイス及び/又は他のリモートPLCから、又はそれらへ、受信及び送信するために使用される。一般に、通信インターフェース62は、こうした機能をデバイス検証、データ獲得、ユーザ・アプリケーション間の同期化、及び接続管理として実装する。電源56は、AC電圧を、PLC内の様々な回路を動作させるために必要な低いDC電圧(例えば5ボルト)に変換する。最終的に、(いくつかの例において、通信インターフェース62を介してPLC50に結合可能な)プログラミング・デバイス64は、プロセッシング・ユニット52によって実行されることになるプログラムをメモリ54内に入力するために使用され、典型的には、このプログラムはプログラミング・デバイス64内で開発/作成された後、PLC50のメモリ54に転送される。
【0009】
[0009]
図3は、特に、プロセッサ・ユニット、様々なメモリ要素、入力/出力インターフェース、及び情報転送を容易にするためのバスに関連して、
図2に示されたPLC50の内部アーキテクチャの追加の細部を提供する。例えば
図3は、プロセッサ・ユニット52(
図2ではCPUとして示す)がクロック52Aに関連付けられ、その周波数がPLCの動作速度を決定し、PLC内の様々な要素に対してタイミング及び同期を提供することを示す。PLC内の情報は、プロセッサ・ユニット、様々なメモリ要素内で、並びに、複数のバスを介して入力/出力インターフェース58及び60との間で搬送され、特に、PLCは、PLCの構成要素との間でデータを移送するためのデータ・バス、記憶されたデータにアクセスするためにロケーションのアドレスを送信するためのアドレス・バス、及び、内部制御アクションに関する信号のための制御バスを、使用する。PLCアーキテクチャは、入力/出力インターフェース58及び60(それぞれ、ここからの入力信号66は外部入力デバイスから受信され、出力信号68は外部出力デバイスへ提供される)と、I/Oシステム・バスとPLCのデータ・バスとの間で入力/出力情報を転送するように構成された入力/出力ユニット55との間での、通信用のI/Oシステム・バスも含むことができる。
【0010】
[0010] 一般に、
図3に示されたアーキテクチャのプロセッサ・ユニット52(CPU)は、データの操作、並びに、算術演算(例えば加算、減算、乗算、除算)及びデジタル論理演算(例えばAND、OR、NOT、及びEXCLUSIVE−OR)の実行に対する責務を負う、算術論理演算ユニット(ALU)と、プログラム実行に関連する情報を記憶するために使用される内部メモリ・レジスタと、クロック52Aの出力を受信し、動作のタイミングを制御するための、内部制御ユニットとを、含む。メモリ54を構成する様々なメモリ要素は、オペレーティング・システム及びプロセッサ・ユニットによって使用される固定データ用の永続ストレージを提供するための読み取り専用メモリ(ROM)54Aと、PLCによって実行されることになるプログラム用に使用されるユーザ・プログラム・ランダム・アクセス・メモリ54B(ユーザ・プログラムRAM)と、データ(入力及び出力信号の状況、タイマ及びカウンタ並びに他の内部デバイスの値などに関する情報)に使用されるデータ・ランダム・アクセス・メモリ54C(データRAM)とを、含むことができる。PLCによって実行されることになるプログラムは、不揮発性メモリ内にも記憶可能である。
【0011】
[0011]
図3に示されるPLCアーキテクチャから、従来のPLCはしばしば、汎用コンピュータというよりも特定用途向けコンピュータであるとみなされるが、PLC及び汎用コンピュータはどちらも、「フォン・ノイマン」コンピュータ・アーキテクチャの多くの態様を共有することが理解されよう。フォン・ノイマン・コンピュータ・アーキテクチャにおいて、コンピュータ命令(ユーザ・プログラムRAM54A内に記憶された「ユーザ・プログラム」)並びにプログラム実行に必要な(例えばデータRAM54C内に記憶された)任意のデータには、共通バス・アーキテクチャを介して(すなわち、
図3に示されたアドレス、データ、及び制御のバスを介して)、様々なメモリ要素からアクセスされる。従来のPLCは、特定の自動化工業プロセスに対応する特定の機能を実装する特定用途向けコンピューティング・デバイスであることによって、コンピュータ性能を調整するように試行するにもかかわらず、従来のPLCのアーキテクチャは、命令を逐次実行し、並列実行用の容量を事実上有さないため、その性能を基本的に制限する。
【0012】
[0012] PLCのプログラミングは、主に、所与の時点で様々な機器によって実装されている自動化プロセスに関連付けられた、感知された条件(「状態」)を表す1つ又は複数の入力信号を処理する、デジタル論理機能を指定することに関係している。自動化プロセスの監視された条件で動作するデジタル論理機能は、監視された条件に応答して1つ又は複数の制御信号を生成する。前述のように、これらの制御信号は制御デバイスに適用され、次にこの制御デバイスが、自動化プロセスのさらなる実装に関与する何らかのアクションを実行するために、様々な機器を制御する。高水準のPLCプログラムは、一般に、時間に応じて監視された条件に応答して、1つ又は複数のアクションのシーケンスを実装する(例えば、A又はBが発生した場合にCを作動させる、A及びBが発生した場合にDを作動させる)。自動化プロセスは、アクチュエータがプロセスを新しい条件に向かわせるように機器を制御するのと共に経時的に進化していく。したがって前述のように、自動化プロセスは、条件の進化(evolution)がPLCによって監視される動的環境を構成し、ここでPLCは、監視されたそれぞれの条件に基づいて、アクチュエータが環境を新しい条件に向かわせるように、制御信号を決定及び更新する。
【0013】
[0013] 多くの従来のPLCは、監視される条件を表す入力信号を評価するために使用されるデジタル論理を成文化するために、「ラダー論理(ladder logic)」プログラミング言語を介してプログラミングされる。一般的なラダー論理プログラミング言語は、通常、ラダーの「横木」に似たグラフィック図を使用し、それぞれの横木は、制御システム・エンジニアによる直観的プログラミングを容易にするための、(旧式の論理制御システムで使用された)電気機械式リレーに関する回路図を表す。ラダー論理は、主にバイナリ変数が含まれる制御ソリューションを実装するのに最適である(例えば、動的環境において監視される条件はそれぞれ、TRUE、すなわち論理1、又はFALSE、すなわち論理0と、表すことができる)。
【0014】
[0014] しかしながら、様々な自動化プロセス環境において、センサの出力はアナログ信号の場合がある。したがっていくつかのインスタンスでは、所与の入力デバイス/センサの直接出力がバイナリ信号の形でない場合、入力デバイス/センサの出力は、いくつかの点で、バイナリ形式の入力信号66を提供するように事前に条件付けすることができる。例えば、入力信号66のうちの1つとして、監視された温度が特定の温度設定ポイントを上回るか又は下回るかのバイナリ指示を提供するように、温度感知デバイスのアナログ出力を、別の入力として、温度設定ポイント電圧を有する比較器回路に第1に適用することができる。別の方法として、アナログ値を、数学演算及び/又は意思決定を実行するためにシステムによって使用されるマルチビット・デジタル・ワードに符号化された量子化値に、変換することができる。同様に、入力デバイスとして働くカウンタのマルチビット出力を所定のカウントと比較し、入力信号66の1つとして、カウンタ出力が所定のカウントを上回るか又は下回るかのバイナリ指示を提供することができる(別の方法として、ある数Bのビットを有するカウンタの出力を、数Bの入力信号66として直接提供することができる)。更に他のタイプの入力デバイスは、高過渡性信号を生成することが可能であり、こうしたデバイスの場合、エッジ/過渡の発生を示すPLCに好適な持続起案の入力信号を提供するように、ラッチを使用して信号エッジ又は過渡の検出を容易にすることができる。他の例では、入力デバイスは様々なネットワーク化デバイスを含むことが可能であり、これに対して1つ又は複数の通信状況信号(例えば、データ・パケット送信済み/受信済み)は入力信号66の1つとして働くことができる。
【0015】
[0015] 従来のPLCをプログラミングするためのラダー論理及び他の言語は、一般に、規則ベース・プログラミング言語であるとみなされる。典型的なPLCプログラムは、一連の規則によって構成可能であり、各規則は、自動化プロセスの監視される条件を表す1つ又は複数のバイナリ入力信号(例えばA、B、C、D)、及び、入力信号を評価する特定のデジタル論理に応答して生成される対応する制御信号(例えばX)によって構成される。したがって、いくつかの態様において、PLCプログラム内の規則は、「IF/THEN」ステートメントと同様に見ることができる(例えば、IF(A AND NOT B)AND(C OR D),THEN X)。PLCプログラムは、使用可能な入力信号のセットを介して監視可能な、自動化プロセスのすべての異なる可能な条件を表す異なる組み合わせの入力信号に応答して必要なすべてのアクションを実装するために必要なすべての規則を含む。
【0016】
[0016] 再度
図2を参照すると、プログラミング・デバイス64(ハンドヘルド・プログラミング・デバイス、デスクトップ・コンソール、或いは、ラップトップ又はタブレット・コンピュータなどのパーソナル・コンピュータとすることができる)は、典型的には、規則のセットを含むPLC実行可能プログラムを作成、記憶、及びダウンロードするために使用することができる。プログラムがPLCによって実行される場合、通常、規則は最初から最後へと順次実行された後に繰り返され、規則のセットを順次通過する各パスは、しばしば「スキャン」又は「制御ループ」と呼ばれる。したがって、スキャン又は制御ループの連続する反復は、入力信号を読み取り、プログラム規則内に符号化された論理を使用して入力信号を検査した後、PLCによって出力される制御信号を適宜変更する、PLCの連続サイクルを表す。
【0017】
[0017] より具体的に言えば、様々なハウスキーピング(housekeeping)作業を含む一般的な動作及びスキャン又は制御ループを実行することに関して、従来のPLCは、通常、循環的に機能する。例えば、電力がPLCに最初に印加された場合、PLCは、様々なハードウエア・コンポーネントが適切に機能していることを保証するために、自己チェック又は診断ルーチンを実行することができる。
図2及び
図3を再度参照すると、障害又はエラー条件が検出されない場合、PLCは、入力信号66のそれぞれを順次読み取り、所与の入力信号の各読み取りインスタンスを専用のメモリ位置に記憶するように、入力インターフェース58及びメモリ54を制御する。次にPLCは、各規則を順次テストすること(すなわち、プログラム命令を順次フェッチ、復号、及び実行すること)、及び、規則内に符号化された論理を解決することによって、そのプログラムを実行する。
【0018】
[0018] 特に、各規則について、規則として指定されたある入力信号の記憶済みインスタンスがメモリから取り出され、取り出された入力信号に基づいて規則が評価され、規則を満たしている(すなわち、規則内に指定されたすべての必須条件を満たしている)場合、規則の履行に対応する制御信号が生成される。こうした制御信号が生成された場合、専用のメモリ位置に記憶される。所与の規則の評価は、規則内に成文化されたデジタル論理が解決された場合、異なるメモリ位置(例えばレジスタ)からの複数の読み取り動作、及びメモリ位置への書き込み動作を含むことができる。前述のように、それぞれの規則は、PLCがラダー論理プログラムを実行すると共に順次評価され、したがってPLCは、特定の規則を評価している間、プログラム内に成文化された他の規則には注意を払わない。
【0019】
[0019] PLCは、規則の評価に応答していずれかの制御信号を生成した場合、これらを更新済みの制御信号68のセットとして出力に提供することができる。次にこれらの制御信号は、自動化プロセスに関連して制御されるように、1つ又は複数のアクチュエータ又は他の機器に送信される。次にPLCは、自己チェックを実行し、それぞれの入力信号を読み取ってそれらをメモリに記憶し、制御ループを完了するためにプログラム規則を実行し、出力用の制御信号(あれば)を更新し、このサイクルを反復的に繰り返すことに戻る。
【0020】
[0020] PLCが前述のサイクルを完了させるために必要な期間は一般に、「サイクル時間」又は「スキャン時間」と呼ばれる。従来のPLCの典型的なサイクル時間は、およそ10ミリ秒から数100ミリ秒である。サイクル時間は一般に、プロセッサ・ユニットで使用される特定のCPU、スキャンされることになるプログラムのサイズ(例えば、読み取られることになる入力信号の数に少なくとも部分的に依存するプログラムを構成する規則の数、独立した評価が必要な入力信号の組み合わせの数、及び、生成されることになる制御信号の数)、及び、プログラムの実行に従って使用中のシステム機能によって決定される。したがって、プログラムが複雑であるほどサイクル時間は長くなる。
【0021】
[0021] 従来のPLCにおいて所与のサイクルで評価された場合、大多数の規則は満たされず(すなわち、規則の評価に従って生成される制御信号はない)、規則が満たされない場合、プログラムは単に評価のための次の規則に移動することを理解されたい。このように、従来のPLCでは一般にいずれの制御信号も生成することなく所与のサイクルのかなりの部分が連続する規則の評価に費やされることになる。
【0022】
[0022] 同様の機能を実装するためにプログラミングされた汎用コンピュータと比較すれば相対的に迅速であるが、PLCのサイクル時間は瞬間的ではない。結果として、PLCは、常にその入力信号を「注視」しているわけではないが、その代わりにPLCは、サイクル時間に応じて定期的に入力信号の状態をサンプリングする。更にサイクル時間は、サンプリングされた入力信号に応答してPLCによって出力される制御信号(満たされた規則に従って生成された場合)を更新する際に、最小遅延を構成する。このように、サイクル時間は、特定の監視される条件(すなわち、1つ又は複数の入力信号に関して特定の値によって表される)に対するPLCの最小応答時間(「反応時間」)として見ることも可能であり、しばしばPLCの「レイテンシー」とも呼ばれる。したがって、このレイテンシーにより、サイクル時間よりも短い期間持続する入力信号は、プログラムによって見逃される可能性がある(一般に、サイクル時間より長い入力信号が存在しなければならない)ことを理解されたい。いくつかのインスタンスでは、外部回路を使用して過渡信号をラッチすることが可能であるため、PLCによって完全に見逃されることはない。しかしながら、ラッチングによって特定の入力信号が「見逃されない」場合であっても、入力信号に応答して生成されることになる制御信号は、制御されている機器の正常動作に対して有効とするには遅すぎるように、PLCによって生成される可能性がある。
【0023】
[0023] 従来のPLCがプログラムを実行する循環的性質により、入力信号のすべての可能な組み合わせ(何らかのアクションが必要な、制御されている自動化プロセスのすべての可能な条件を表す)は、プログラムの単一制御ループ内で企図されなければならない。言い換えれば、前述のように、1つ又は複数の入力信号によって表される監視される条件が、自動化プロセスの持続期間中の何らかの時点で、(1つ又は複数の制御信号を介して)何らかのアクションを発生させることに何らかの形で関与している限り、特定の監視される条件を評価する1つ又は複数の規則が、プログラム内に存在する必要がある。前述のように、従来のPLCのレイテンシーはプログラムの複雑さに対応するため、アクションが必要なプロセスの可能な条件の数が増加するにつれて、プログラムは大きくなり、レイテンシーは長くなる。更に、多くの自動化プロセスでは、いくつかの条件が他の条件よりも頻繁に発生し、いくつかのインスタンスでは、稀に発生する可能性のある条件が、評価される必要のある複雑な論理を表す規則に関連付けられる場合がある(より多くの処理時間を必要とする)。
【発明を実施するための形態】
【0056】
[0064] 次に、動的環境を監視及び/又は制御するための本発明のシステム、方法、及び装置に関する、及びそれらの実施形態の、様々な概念をより詳細に説明する。上記で紹介され、以下でより詳細に考察される様々な概念は、開示された概念がいずれの特定の実装様式にも限定されないため、任意の多数の方法で実装可能であることを理解されたい。特定の実装及び適用範囲の例は、主に例示の目的で提供される。
【0057】
[0065]
図4は、本発明の一実施形態に従った、動的環境を監視及び制御するための制御システム100aを示すブロック図である。
図1を再度参照すると、従来のプログラム可能論理コントローラ(PLC)50が自動化プロセス10を監視及び制御しているように示されており、以下でより詳細に考察される例示の実装では、
図4の制御システムは
図1に示されたPLC50の代わりとして構成されている。しかしながら、
図4の制御システムはこの点で限定されておらず、本発明の実施形態に従った様々な制御システム並びにその構成要素は、特に低レイテンシー(すなわち著しく速い応答時間)及び/又は低変動性レイテンシーを必要とする、様々な動的環境を監視及び/又は制御するための広範な適用可能性を有することが可能であることを理解されたい。本発明に従った制御システムの例示の一適用例は、
図10に関連して以下でより詳細に考察される、機械視覚技法及び/又は機器が使用される動的環境によって与えられる。
【0058】
[0066]
図4に示されるように、本実施形態の制御システム100aは、アクション・エンジン110aに通信可能に結合されたマスタ・プロセッサ190(「ハウスキーピングCPU」とも呼ばれる)を含む。アクション・エンジン110aは、1つ又は複数の応答コプロセッサ(
図4ではそれぞれ、コプロセッサ120a−1及び120a−2と示され、まとめてコプロセッサ120aと示される)を備えることができる。各コプロセッサ120aは、コプロセッサ論理(それぞれコントローラ130a−1及び130a−2、まとめてコントローラ130aと示される)に結合された入力インターフェース158a及び出力インターフェース160aを含む。例示の入力インターフェース158a出力インターフェース160aは、RS232インターフェース、イーサネット・インターフェース、ユニバーサル・シリアル・バス(USB)、及び/又は任意の他の適切な並列又は直列通信インターフェースを含むことができるが、それらに限定されない。各コプロセッサ・コントローラ130aは、1つ又は複数の条件(それぞれ条件142a−1及び142a−2、まとめて条件142aと示される)、及び、同じメモリ140aに記憶された条件142aに対応する少なくとも1つの所定のアクション(それぞれアクション144a−1及び144a−2、まとめてアクション144aと示される)を記憶する、専用メモリ(それぞれメモリ140a−1及び140a−2、まとめてメモリ140aと示される)に通信可能に結合される。
図4に示されたアクション・エンジン110aは2つのコプロセッサ120aのみを含むが、他の実施形態に従ったアクション・エンジンは、この点で限定されておらず、1つのコプロセッサのみ又は2つより多くのコプロセッサを含むことができることを理解されたい。
【0059】
[0067]
図4に示された制御システム100aの一態様において、制御システム100aは、相対的に高速な時間スケールで発生する条件を評価するためにアクション・エンジン110aを使用すること、及び、相対的に低速な時間スケールで発生する条件を評価するためにハウスキーピングCPU190を使用することによって、動的環境を監視、制御、及び/又は同期化する。より一般的に言えば、前述のようにいくつかの実施形態では、ハウスキーピングCPU190は、本質的に、ハウスキーピングCPU190それ自体が事実上そのように実行できない期間中に、動的環境のある条件を監視するように「留意する」タスクをアクション・エンジンに課す。一態様において、アクション・エンジン110aが特にある条件を監視する(及び必要であれば同じ条件に応答してアクションを実行する)タスクを課される期間は、ハウスキーピングCPU190の「応答時間」(「レイテンシー」とも呼ばれる)に少なくとも部分的に基づく(この応答時間は、ハウスキーピングCPU自体が対処する必要のある異なるタスク又はプロセスの数が、与えられた情報を処理するハウスキーピングCPUの機能を制限する結果として生じる)。以下で考察されるいくつかの例では、ハウスキーピングCPUがある監視及び制御タスクをアクション・エンジンに委任する期間は、制御されている特定の動的環境との関連において予測可能な、ハウスキーピングCPUの最長又は最悪の応答時間に基づく。
【0060】
[0068] 上記に鑑み、
図4に示された制御システムの例示の一実装では、アクション・エンジン110aは、動的環境を表す入力信号66を評価することによって、高速発生イベントに関して、反射的応答、すなわちハウスキーピングCPU190のレイテンシーよりも高速に実行される応答から恩恵を受ける条件142aに対してスクリーニングする。例示の入力信号66は、デジタル値(ビット)、アナログ値、又はアナログ入力のデジタル表現などの、離散入力と、離散入力のリアルタイム・バージョンと、離散入力のラッチ・バージョンと、直角位相(quadrature)でクロック制御されたカウンタ・ペアから導出されるカウンタ値などの離散入力の導出バージョンと、1つ又は複数の通信ポートから受信したメッセージ(例えばパケット)の復号されたコンテンツと、を含むが、これらに限定されない。入力信号66は、動的環境の条件を構成する単一パラメータ(例えば、温度、圧力、ポジション)、又は、動的環境の条件を構成するこうしたパラメータの集合を表すことができる。
【0061】
[0069] この反射的挙動を達成するために、アクション・エンジン110a内の各コプロセッサ120aのコントローラ130aは、入力信号110aを特定の条件142a(又は条件142aのセット)と比較する。汎用プロセッサとは異なり、各コプロセッサ120aは、そのメモリ内に記憶された特定の条件142aのみを評価するため、コプロセッサ120aを低(及び予測可能)レイテンシーで動作させることができる。コントローラ130aが、入力信号66が特定の条件142aに合致することを決定した場合、コントローラ130aは、対応するアクション144aを実行する。例えば対応するアクション144aの実行は、1つ又は複数の出力信号68を他のデバイス及び/又はシステムに伝送することを含むことができる。別の方法として、アクション144aは、応答を実装するためにハウスキーピングCPU190に割り込みを転送することを含むことができる。
【0062】
[0070] 同時に、ハウスキーピングCPU190は、入力信号66及び出力信号68の分析を介して、動的環境の進化を監視する。ある状況(例えば動的環境の進化が遅い場合)では、ハウスキーピングCPU190は、それ自体の出力信号を伝送することによって特定の入力信号66に直接応答することができる。他の状況では、ハウスキーピングCPU190は、コプロセッサ120aに再タスクを課すことによって、例えば、メモリ140aに記憶された条件142a及び/又は(所定の)アクション144aのうちのいくつか又はすべてを更新及び/又は置換することによって、動的環境の評価に間接的に応答する。動的環境が組み立てラインである場合、例えばハウスキーピングCPU190は、第1の部品が組み立てラインを離れると、最初は第1の部品を追跡するのに専用であったコプロセッサ120aに、第2の部品を追跡する再タスクを課すことができる。
【0063】
[0071] ハウスキーピングCPU190とアクション・エンジン110aとの間で責任を分割することによって、ハウスキーピングCPU190は、条件142aによって表されるイベントのサブセット(例えば、動的環境の所与の特定の進化を生じさせる可能性の高い高速発生イベント)に対する処理負担を、アクション・エンジン110aに課すことができる。同時に、ハウスキーピングCPU190は、動的環境のより低速な進化に関連付けられた条件の処理を続行することができる。この分割統治法は、入力信号66によって表されるイベントへのシステムの応答のレイテンシー及び/又はジッタ(jitter)(レイテンシー変動)全体を低減させることができる。いくつかのケースでは、高速発生イベントに関する処理負担の移行は、制御システム100a全体のレイテンシーを、実質的にコプロセッサ・レイテンシーの関数とすることも可能である。
【0064】
[0072] 比較器論理を用いるアクション・エンジン
【0065】
[0073]
図5は、動的環境の少なくとも1つの態様を監視、同期化、及び/又は制御するための、他の例示のアクション・エンジン110bを示す。
図5に示されたシステム及び特にアクション・エンジン110bが共に使用可能なこうした環境の例は、組み立てライン、検査ライン、自律又は半自律走行車(又は車列)、電力管理システム(例えばスマート・グリッド)、倉庫、産業空間、駐車施設、飛行場、積み出し港、サーベイランス・システム、娯楽用乗り物、及び/又は通信ネットワークを含むが、これらに限定されない。例えばアクション・エンジン110bは、機械制御及び/又はイメージのトリガに使用可能である。
【0066】
[0074] アクション・エンジン110bは、複数のコプロセッサ(それぞれ
図5ではコプロセッサ120b−1から120b−nで示され、まとめてコプロセッサ120bと示される)を含む。各コプロセッサ120bは、高速で、すなわち、汎用コンピュータ又はCPU、例えばハウスキーピングCPU190で同じ動作を実行して達成できるよりも速い速度で、限定数の動作を実行する、特定用途向けコンピュータ・プロセッサである。例示のコプロセッサ120bは、FPGA、ASIC、及び/又は、当分野で知られる任意の他の適切な実装において、実装可能である。
【0067】
[0075] アクション・エンジン110b内の各コプロセッサ120bは、センサ、アクチュエータ、受信キュー(例えばイーサネット受信キュー)、及び他の動的環境に関する情報ソースから、データを受信するように動作可能に結合される、入力バス102に結合された、それぞれの入力ポート(それぞれ
図5では入力ポート158b−1から158b−nと示され、まとめて入力ポート158と示される)を含む。
図5はn個のエントリを示すが、当業者であれば、例示のアクション・エンジンは任意数のコプロセッサ120b、例えば1、2、4、8、16、32、64、128、256、512、又は1024個のコプロセッサ120bを有し得ることが容易に理解されよう。
【0068】
[0076] 各コプロセッサ120bは、1つ又は複数の状態或いは条件の表現(それぞれ条件142b−1から142b−n、まとめて条件142b)、及び、以下で説明されるようにコプロセッサ120bによって実行されることになる1つ又は複数のアクションの表現(それぞれアクション144b−1から144b−n、まとめて条件144b)を記憶する、それぞれのレジスタ(それぞれ
図5ではレジスタ140b−1から140b−nで示され、まとめてレジスタ140bと示される)も含む。各条件142bは、アクション・エンジン・レジスタ140b内の他の条件142bとは独立(及び場合によっては重複)であってよい。条件142bは、アクション・エンジン110b内の1つ又は複数の他の条件142bを満たすことを条件とすることも可能であり、例えば以下でより詳細に説明されるように、まとめてスーパーセット内に論理的に「AND」することができる。
【0069】
[0077] レジスタ140bは、揮発性又は不揮発性のコンピュータ・メモリなどのコンピュータ読み取り可能記憶媒体、フラッシュ・メモリ、コンパクト・ディスク、光ディスク、磁気テープ、1つ又は複数のフロッピィ・ディスク、FGPA又は他の半導体デバイス内の回路構成、或いは、他の持続性媒体又は有形コンピュータ記憶媒体を含むが、それらに限定されない、任意の適切なタイプのメモリ内に実装可能である。各レジスタ140bはそのそれぞれのコプロセッサ120bに専用であり、すなわちコプロセッサ120bはメモリを共有しない。レジスタ140bをそれぞれのコプロセッサに専用とすることは、競合の問題を低減又は除去するのに役立つ。
【0070】
[0078] 各コプロセッサ120bは、入力バス102及び入力ポート158を介して受信された入力信号66と条件142bとを比較する、比較器(それぞれ比較器130b−1から130b−n、まとめて比較器130b)又は他の論理要素も含む。すべてのコプロセッサ120bはそれら自体のコンパレータ130bを有し、入力バス101を介して入力101を同時に受信するため、コプロセッサ120bは、入力101をそれらそれぞれの条件142bと同時に比較することができる。結果として、アクション・エンジン110b内のコプロセッサ120bの数は、比較が実行される速度に影響しない。
【0071】
[0079] 入力信号66が条件142bと合致する場合、比較器130bは、合致を示す出力(それぞれ出力132−1から132−n、まとめて出力132)を発信する。1つ、複数、又はゼロのコプロセッサ120bにとって、入力信号66に合致する条件142bを含むことが可能である。各コプロセッサ120bは、その出力132を、出力ポート(それぞれ出力ポート160b−1から160b−n、まとめて出力ポート160b)を介して出力バス103に結合することができる。
【0072】
[0080] 各コプロセッサ120bは、そのそれぞれの条件142bに合致する入力101を検出すると、そのそれぞれのレジスタ140b内に記憶されたアクション144bも実行する。アクション144bは、比較器130bの出力132によって制御される論理要素(それぞれ論理要素134−1から134−n、まとめて論理要素134)に結合される。論理要素134が、入力101と条件142bとの間の合致を示す出力132を受信すると、論理要素134は、アクション144bによって表されるアクションを実行する。いくつかのケースでは、論理要素134は、ここでは出力信号68として示される追加の情報又は命令を、センサ、アクチュエータ、及び動的環境に関連付けられた他のデバイスなどの他のデバイスに、出力ポート160b及び出力バス104を介して伝送することができる。例示の出力信号68は、デジタル値、アナログ値、及び/又はアナログ値のデジタル表現などの、離散出力、離散出力のラッチ・バージョン、並びに/或いは、1つ又は複数の通信ポート(例えば出力ポート160b)を介して送信されるメッセージ・パッケージ内に符号化される出力データ及び機械動作コマンドを含むが、これらに限定されない。他のケースでは、アクション144bは、コプロセッサ120bがいかなるアクションも実行しない「ノーオペレション(no-op)」命令とすることができる。
【0073】
[0081] アクション・エンジン110bは、入力バス102、出力バス104、及びレジスタ140bへの追加の接続を介して、ハウスキーピングCPU190にも結合される。(他の実施形態では、アクション・エンジン110b内の1つ又は複数のレジスタ140bは、入力ポート158及び入力バス102を介してハウスキーピングCPU190に動作可能に結合することができる。)ハウスキーピングCPU190は、汎用ハウスキーピング・タスクを実行し、コプロセッサ・レジスタ140b内の条件142b及び/又はアクション144bをロード及び維持する。例えばハウスキーピングCPU190は、アクション・エンジンの動的環境の特定状態の識別、オペレーション・コードが期限切れである旨の指示、アクション・エンジンからの命令、ユーザ及び/又は他のデバイスからの命令などに応答して、1つ又は複数のコプロセッサ120b内の条件/アクション・ペアを置換又は更新することができる。アクション・エンジン110bは、ハウスキーピングCPU190からのリソースを必ずしも必要とせずに、動的環境からの入力に「直接」応答することができるため、ハウスキーピングCPU190は、連続する入力状態への応答に関連したいずれの処理負担も事実上免除されたままであり(すなわちハウスキーピングCPU190は事実上「ロードされない」ままであり)、したがって、アクション・エンジン110bそれ自体が実行することが不可能又は実際的でない可能性があるテスト及びアクションを実行する必要がある場合に、ハウスキーピングCPU190が使用可能である。加えて、ハウスキーピングCPU190は、動的環境の進化に応答するためのクリティカル・パス内にないため、アクション・エンジンの応答を遅延させない。
【0074】
[0082] イベント・テーブル及びスキャナを用いるアクション・エンジン
【0075】
[0083]
図6は、動的環境の少なくとも1つの態様を監視、同期化、及び/又は制御するための例示のアクション・エンジン110cを含む、様々なコンポーネントのシステム構成を示す。
図6に示されたシステム、及び特にアクション・エンジン110cが共に使用可能なこうした環境の例は、組み立てライン、検査ライン、自律又は半自律走行車(又は車列)、電力管理システム(例えばスマート・グリッド)、倉庫、産業空間、駐車施設、飛行場、積み出し港、サーベイランス・システム、娯楽用乗り物、及び/又は通信ネットワークを含むが、これらに限定されない。例えばアクション・エンジン110bは、機械制御及び/又はイメージのトリガに使用可能である。
【0076】
[0084] アクション・エンジン110cはイベント・テーブル112を含み、これがイベント・テーブル・レジスタ(まとめてイベント・テーブル・レジスタ140c、それぞれはレジスタ140c−1から140c−5)を含み、そのそれぞれが1つ又は複数の条件の表現(
図6ではまとめて条件142cと示され、
図8ではそれぞれ条件142c−1から142c−5と示される)を記憶する。各イベント・テーブル・レジスタ140cは、レジスタ140c内に記憶された条件に対応する1つ又は複数のアクションの表現(
図6ではまとめて命令144cと示され、
図8ではそれぞれ命令144c−1から144c−5として示されるも記憶する。)イベント・テーブル112及びイベント・テーブル・レジスタ140cは、揮発性又は不揮発性のコンピュータ・メモリなどのコンピュータ読み取り可能記憶媒体、フラッシュ・メモリ、コンパクト・ディスク、光ディスク、磁気テープ、1つ又は複数のフロッピィ・ディスク、フィールド・プログラマブル・ゲート・アレイ又は他の半導体デバイス内の回路構成、或いは、他の持続性媒体又は有形コンピュータ記憶媒体を含むが、それらに限定されない、任意の適切なタイプのメモリ内に実装可能である。
【0077】
[0085] 各イベント・テーブル・レジスタ140cは、独立条件142cを記憶する。総合すれば、イベント・テーブル・レジスタ140cは、入力バス110に結合された1つ又は複数のセンサ40によって測定可能な動的環境のあらゆる可能な状態を表す条件142cを記憶することができる。しかしながら多くのケースでは、イベント・テーブル・レジスタ140cは、条件142cの再プログラム可能サブセット、例えば、ハウスキーピングCPU190のレイテンシーよりも即時に実行されるアクション144cから恩恵を受ける条件142cのみを、保持することが可能である。いくつかのケースでは、条件142cは重複可能であり、例えば、条件142c−1は温度及び圧力しきい値を含むことが可能であり、条件142c−2は温度及びポジションしきい値を含むことが可能である。
図6は例示の目的で5つのイベント・テーブル・レジスタ140cのみを示しているが、他の実施形態では、イベント・テーブル112はより多いか又は少ないレジスタ140c、例えば数十、数百、又は数千のエントリを有することができることを理解されたい。一般に、いずれの応答/反応が必要であり得るかに従って、仮想上は特定の環境に密接に関係する任意数の条件142cを、イベント・テーブル・レジスタ140cとしてイベント・テーブル112内に表すことができる。
【0078】
[0086] 条件142cの表現に加えて、各イベント・テーブル・レジスタ140cは、状態入力が条件144c合致した場合に実行されることになる、1つ又は複数のアクション144cの表現も含む。したがって、アクション・エンジン110cのスキャナ130cが、入力信号66がイベント・テーブル・レジスタ140cに記憶された所与の条件142cに合致する旨を決定した場合、スキャナ130cは、イベント・テーブル・レジスタ140cに記憶された対応するアクション144cにアクセスし、動的環境のうちの1つ又は複数の態様を制御するように、アクション144cを実行する。このため、アクション・エンジン110cは、イベント・テーブル内でアクセスされた命令を1つ又は複数の外部デバイスに送信するため、並びに、状態入力及び動的環境に関連する他の情報を、こうした情報の1つ又は複数のソースから受信するための、入力ポート158c、出力ポート160c、及び/又は1つ又は複数の他の通信インターフェース(例えば入力/出力バス、イーサネット・ポート)も含む。
【0079】
[0087]
図6に示されるように、アクション・エンジン110cは、スキャナ130cを更に備える。入力ポート158cは、イベント・テーブル112及びスキャナ130cから入力バス102への接続を提供する。
図6は、アクション・エンジン110cの入力バス102が、CPU190、並びに、セマフォ・レジスタ150、カウンタ42、1つ又は複数のセンサ40、及び受信キュー44(例えばイーサネット受信キュー)の形の通信インターフェースを含む(がこれらに限定されない)、様々な外部デバイスに結合されることも示している。入力バス102にも接続されるスキャナ130cは、各イベント・テーブル・レジスタ140c内の条件142cのセットを、ハウスキーピングCPU190、カウンタ42、センサ40、受信キュー44、及び/又は任意の他の適切なデータ・ソースからの入力バス102に結合された入力信号66と比較する、デジタル論理(
図6では図示せず)を含む。いくつかのケースでは、入力信号66は、カメラからのイメージ・データ、ロボット・コントローラからのポジション情報、及び/又は、連続プロセス化学反応器内のミキサ又はフロー制御システムからのフロー情報を評価する、プロセッサなどの、1つ又は複数の埋め込みアプリケーション・システムによって動的環境から導出された、データを含むことができる。いくつかの実装では、生データを事前条件付け又は事前処理することで、データを表すことが必要なビット数を削減することが可能であり、これによってレジスタ140cのサイズを縮小させることができる。
【0080】
[0088]
図7は、スキャナ130cの可能な一実施形態をより詳細に示すブロック図である。スキャナ130cは、アクション論理132、シーケンシング論理133、及び1つ又は複数のフラグ・レジスタ135に結合された、比較器論理131を含む。カウンタ42値、状態変化入力、及びフラグ状態を含むがこれらに限定されない、入力信号66は、条件142cに合致しているかどうかを判別するために、イベント・テーブル112からの条件142cを表すデータに関連して、比較器論理131によって評価される。この「条件合致」状況が、アクション論理132に渡される。
【0081】
[0089]
図7を再度参照すると、スキャナ130cは、比較器論理131からの「条件合致」状況並びにイベント・テーブル112からの命令144cを表すデータを受信する、アクション論理132も含む。アクション論理132は、1つ又は複数のフラグ・レジスタ135、セマフォ・レジスタ150(
図6)、出力レジスタ136、通信論理(図示せず)、カウンタ、及びデータ入力回路にも結合される。「条件合致」状況の状態及び命令144cを表すデータに依存して、アクション論理132は、以下でより詳細に記述されるように、フラグ・レジスタ135、セマフォ・レジスタ150、出力ポート160bに結合された出力レジスタ136、通信論理34、カウンタ、及びデータ入力回路の状態に影響を与える、動作を実行することができる。加えて、アクション論理132は、例えばアクションが実行され、条件/アクション・ペアの更なる評価が抑止されることになる場合、イベント・テーブル112内の条件142c及び/又は命令144cの変更を容易にする、イベント・テーブル書き込み調停論理134に結合される。
【0082】
[0090] スキャナ130c内のシーケンシング論理133(
図7)は、比較器論理131、アクション論理132、及びイベント・テーブル112(
図6)のアクティビティを同期化する。これによって、イベント・テーブル112内のいずれのレジスタ140cが評価されることになるかを決定する読み取りアドレスが、イベント・テーブル112に提供される。シーケンシング論理133は、アクション・エンジン110cが、イベント・テーブル112内の条件142c及び/又は命令144cが修正されることになるものと決定した場合、イベント・テーブル書き込み調停論理134に書き込みアドレスも提供する。イベント・テーブル書き込み調停論理134は、イベント・テーブル112への書き込みアクティビティを管理するために、ハウスキーピングCPU190から並びにスキャナ130c内の他の論理から、入力を受信する。CPU190からの書き込み動作とスキャナ130c内の他の論理からの書き込み動作との間に競合が生じた場合、スキャナ動作が割り込まれずに続行できるように、スキャナ130c内の論理に優先権を与えることができる。この競合ケースでは、イベント・テーブル書き込み調停論理134が、CPU190からの書き込みデータを受け入れるためにイベント・テーブル112が使用可能であることを決定するまで、CPU書き込み動作が中断されるように、ハウスキーピングCPU190に待機信号がアサートされる。スキャナ130cの一実施形態において、シーケンシング論理133は、マスタ・クロック(図示せず)のあらゆるサイクルで新しい条件/アクション・ペアが評価されるようにする。
【0083】
[0091] 様々な態様において、スキャナ130c及びイベント・テーブル112は、単一のコプロセッサ内、例えばFPGA内に、実用ハードウェア記述言語(HDL)コードを使用して実装可能である。スキャナ130cは、イベント・テーブルが記憶されている1つ又は複数の記憶媒体に結合されたユニタリ(unitary)・デジタル論理構造として実装することもできる。別の方法として、スキャナ130cは、イベント・テーブルに通信可能に結合された複数の分散論理コンポーネントとして実装可能である。例えば、一実施形態において、入力信号と所与のイベント・テーブル・レジスタ内の1つ又は複数の条件とを比較し、必要に応じて1つ又は複数の対応する命令にアクセスするために、イベント・テーブル・エントリと専用のデジタル論理との間に1対1の対応が存在するように、それぞれが1つのイベント・テーブル・レジスタ140cに専用の複数のデジタル論理コンポーネントとして、スキャナ130cを実装することが可能である。更に他の実施形態において、スキャナの一部を構成するデジタル論理コンポーネントを、複数のイベント・テーブル・レジスタの特定のグループに専用とするか、又は割り当てることができる。したがって、アクション・エンジンのスキャナ、及びスキャナを構成するデジタル論理回路は、本発明の様々な実施形態に従った多くの方法のいずれかで実装可能であることを理解されたい。
【0084】
[0092] 例示の一実施形態において、アクション・エンジンのスキャナは、状態に応答/反応するための適切な命令にかなり高速でアクセス(及び、その後1つ又は複数の外部デバイスに送信)できるように、状態入力とイベント・テーブル内の状況の複数のセットとをほぼ同時に(例えば並列に)比較する。その結果、アクション・エンジンは、動的環境のそれぞれの状態に関する情報を処理すること、及びそれに応答してアクションを実行することに関して、著しく低いレイテンシーを示す。
【0085】
[0093] 例えばスキャナ130cは、単一のレジスタ140cを2クロック・サイクルごとに処理する状態機械として実装可能である。第1のクロック・サイクル中に、スキャナ130cは条件142cを読み取る。条件142cに合致した場合、スキャナ130cは、第2のクロック・サイクル中に対応するアクション144cを実行する。第2のクロック・サイクルは、次のスキャンに対して適切な動作が完了したことを示すためのイベント・テーブル112内のアクション144cへの書き戻しを含むことができる。特に複雑な条件及び/又は多数の入力状態を含む実装は、単一のレジスタを処理するために2つよりも多くのクロック・サイクルを使用することができる。多重サイクル実行を使用するスキャナ130cでは、同時読み取り及び書き込みサイクルを有するデュアル・ポート・メモリが実装可能であり、ここで書き込みサイクルは、前の読み取りサイクル中に処理されたレジスタ140cを書き戻す。デュアル・ポート・メモリの同時読み取り及び書き込みサイクルに関連して、状態機械パイプライン・レジスタ(以下で説明)は、新しいレジスタがあらゆるサイクルで処理されるようにすることが可能であり、レイテンシーを著しく低くする。
【0086】
[0094]
図6を再度参照すると、アクション・エンジン110cの入力バス102上に提供される1つ又は複数の入力信号66のセットは、入力バス102に結合された様々なソース(例えば、ハウスキーピングCPU190、カウンタ42、センサ40など)から取得可能であり、所与の時点で単一ソースによって、又は所与の時点で複数ソースによって、提供可能であることを理解されたい。こうした1つ又は複数の入力信号66のセットは、所与の時点で少なくとも部分的に動的環境を表すことが可能であり、これらの入力信号66は、それぞれのイベント・テーブル・レジスタ140cに記憶された条件セット142cのそれぞれと(例えばスキャナ130c)によって比較可能である。
【0087】
[0095] 入力信号66は、状態の変化(立ち上がり又は立ち下がりエッジ)を検出するために常時評価される。イベント・テーブル112の各スキャンの開始時に、前のスキャン中に発見された任意の入力状態変化は、ラッチ入力(図示せず)としてスキャナ論理に提示される。これは、入力フィルタを通過するいずれの信号も、その持続時間がいかに短いかにかかわらず検出されることを意味する。したがって、たとえ状態変化の持続時間がスキャンの持続時間よりも短い場合であっても、いずれの入力信号に関するいずれの状態変化も、スキャナ論理に提示されることが可能である。
【0088】
[0096]
図6に示されたアクション・エンジン110cの例示の一実施形態において、入力バス102上に提供された入力信号66のセットが特定のイベント・テーブル・レジスタ140cに関する条件142cに合致する場合、スキャナ130cは、そのイベント・テーブル・レジスタ140cからの対応するアクション144cを実行する。いくつかのケースでは、これらのアクション144cは、セマフォを獲得又は解除すること、或いはスキャナ130cに結合されたフラグを設定又はクリアすることを含むことが可能であり、以下でより詳細に説明されるように、セマフォ又はフラグを使用して条件142cを評価する。次にスキャナ130cは、合致した条件セットに対応する出力信号68を、出力バス104を介して動的環境、ハウスキーピングCPU190、及び送信キュー34(例えばイーサネット送信キュー)に送信する。
【0089】
[0097] 別の方法として、又は加えて、スキャナ130cを様々な周辺装置に動作可能に結合することができる。例えばスキャナ130cは、カウンタをリセット又はラッチすること、入力レジスタをラッチすること、出力レジスタを設定又はクリアすること、或いはエントリを送信キュー34内にロードすることが可能である。複数スキャナの場合、競合を処理する様々な方法が使用可能である。例えばORゲートによって、入力競合のリセット/ラッチ/設定/クリアが処理可能である。送信キュー34はスキャナ130cに専用とすることが可能であり、データを管理するためのそれ独自の回路プロセスを有することが可能である。スキャナ130cは、別の方法として、送信キュー34を(場合によっては他のスキャナ130cと)共有することが可能であり、回路プロセスはキュー34の所有を管理することが可能である。
【0090】
[0098] いくつかのケースでは、アクション144cは、アクション・エンジン110cの外部にある1つ又は複数のデバイスに対して、(TCP/IPパケットなどの様々なパケット・モード・コンピュータ・ネットワーク内で使用されるような)データ・パケットとして(例えばアクション・エンジンの1つ又は複数の通信インターフェースを介して)実行される。アクション144cに関する命令を送信するためにデータ・パケットが使用される実装では、いくつかの実施形態において、こうしたパケットのコンテンツは、命令自体のみならず、ある程度命令に関連する追加のデータ(例えばメタデータ)、命令に対応する条件のセット、及び/又は、動的環境の1つ又は複数の他の態様も含むことができる。追加のデータは、イベント・テーブル・レジスタ140cに記憶されたインデックスによって参照される場所で、ハウスキーピングCPU190によって入力可能な、アドレス情報(例えばイーサネット媒体アクセス制御(MAC)アドレス・ヘッダ)及び/又はペイロード・バッファを含むことができるが、これらに限定されない。
【0091】
[0099] いくつかの実装において、アクション・エンジン110cは、パケット・ペイロードに含めるために(入力バス102に結合された様々な情報ソースの監視に基づいて、及び/又は、イベント・テーブル112に加えてメモリ内に記憶可能な様々な情報に基づいて)こうしたデータを選択又は生成する。例えば、所与の条件142cが満たされた場合、スキャナ130cは、対応するレジスタ140cに記憶されたインデックスに基づいて、対応するペイロード・バッファを選択した後、対応するペイロード・バッファを送信キュー34にコピーすることができる。他のケースでは、データは、組み立て又は検査ラインを通じて追跡されている部品の番号を含むことができる。別の方法として、データは、1つ又は複数のデータ・ソースに関する情報(例えば、センサ40として働き、評価にイメージ情報を提供する、カメラの位置及び/又は向き)を含むことが可能であり、かつ/又は、データは、(イベント・テーブルに記憶された条件のセットと比較される)状態入力自体のいくつかの態様に関連付けられること及び/又はそれらを表すことが可能である。
【0092】
[0100] マスタ・プロセッサ(「ハウスキーピングCPU」)−プログラミング及び動作
【0093】
[0101]
図6に示されるような、アクション・エンジン110c及び様々な他のコンポーネントを使用するシステム構成の実施形態では、ハウスキーピングCPU190は、イベント・テーブル112内に条件142c及び命令144cをロード及び維持する。いくつかのケースでは、ハウスキーピングCPU190は、動的環境の進化(すなわち経時的な条件の変化)に応答して、イベント・テーブル112内の条件142c及び命令144cのいくつか又はすべてを置換することができる。アクション・エンジン110cは、(例えば、アクション・エンジンが特定の条件の評価を委託されている期間中)必ずしもハウスキーピングCPU190からのリソースを必要とせずに、動的環境の条件を表す入力信号に「直接」(例えば、CPU190の介入なしに、自律的に)応答することができるため、ハウスキーピングCPU190は、これらの特定の条件を評価することに関するいずれの処理負担も事実上免除されたままであり、したがって他のプロセスに対処する(例えば、アクション・エンジン110cにとって、それ自体が実行することが不可能又は実際的でない可能性があるテスト及びアクションを実行する)ためにハウスキーピングCPU190が使用可能である。
【0094】
[0102] 所与の期間中に、特定の条件を評価することをアクション・エンジン110cに委託すること(又はより一般的には、1つ又は複数の条件を評価するタスクを1つ又は複数のコプロセッサに課すこと)に関して、一実施形態では、ハウスキーピングCPU190は、時間の経過(例えば、既知の期間、又は、今後の外部入力の集合又は監視される条件の特定のシーケンスを条件としている場合に生じる可能性のある未知の期間の、いずれか)を条件としていることによって区別される、別個の(例えば直交)手続きステップに、特定用途向け機械調整アルゴリズムを分離することによって、タスクをコプロセッサに割り振るように構成される。このため、
図6を再度参照すると、ハウスキーピングCPU又はマスタ・プロセッサ190は、動的環境の条件を表す入力信号66を受信するための、1つ又は複数の通信インターフェース192及び/又は1つ又は複数の入力/出力(I/O)ポート、並びに、処理ユニット194がアクション・エンジン(又はより一般的には、様々な実施形態に従った1つ又は複数のコプロセッサ)を制御するための直交手続きステップを実装するために、プロセッサ実行可能命令、及び必要に応じて様々なプログラム・データを記憶するための、1つ又は複数の処理ユニット194及びメモリ196を、含む。
【0095】
[0103] 本明細書で開示される手続きステップは、(例えばマスタ・プロセッサ190の処理ユニット194によって)互いに独立して完全に並列に、及び、それらの条件に合致するような(例えば、所与の手続きステップを開始するために、マスタ・プロセッサ190又はアクション・エンジン110cのいずれかによって特定の条件が評価される)任意の順序で、実行可能である。各手続きステップは、以下のうちの1つ又は複数を含むことができる。1)1つ又は複数のプロセス、或いは1つ又は複数のプロセスのインスタンスの開始、2)1つ又は複数のプロセス、或いは1つ又は複数のプロセスのインスタンスの停止、3)1つ又は複数の数学的変換の実行、4)1つ又は複数の出力の提示、5)例えば、ハウスキーピング・プロセッサ190と1つ又は複数のアクション・エンジン110cとの間、アクション・エンジン110c間、動的環境内のデバイスへ、及び任意の他の指定された宛先への、1つ又は複数のメッセージの伝送、6)複数のプロセスがプログラム・コードの所望のセクションからの相互排除を保証できるようにするためのバイナリ・セマフォの獲得又は解除、7)入力及びカウンタ等の周辺装置の状態のラッチ、及び、8)プロセス間の同期及び通信に対する「フラグ」変数の設定又はクリア。(フラグ変数は、マスタ・プロセッサのメモリに記憶された変数とは対照的に、イベント・テーブル・スキャナがアクセスできるレジスタ周辺装置によって実装されるブール変数とすることができる。)
【0096】
[0104] 本発明の一実施形態において、
マスタ・プロセッサ190によるアクセスが可能な不揮発性、持続性コンピュータ読み取り可能媒体上に符号化された、コンピュータ実装可能命令(例えばSCORE(商標)プログラミング言語で作成)は、各実世界アプリケーションに特有の機械調整タスク(例えば、動的環境における様々な機器を最終的に制御するための、1つ又は複数のコプロセッサ/アクション・エンジンからの出力信号の生成)を記述する。これらの命令が、場合によっては1つ又は複数のアクション・エンジン110c及び/又は1つ又は複数のコプロセッサを使用して、マスタ・プロセッサ190に、1つ又は複数のプロセス、又は状態機械を実装させる。各プロセスは、同じシステムによって、並列に、順番に、又はその両方で、複数回実装されることも可能である。所与のプロセスの同時に実行されるコピーは、プロセスの「インスタンス」と呼ばれ、各インスタンスは、アクション・エンジン110c又は異なるコプロセッサ内の異なるスロット140又はスロットのセットによって実行される。
【0097】
[0105] 各プロセスは状態機械とみなすことが可能であり、状態機械内の各状態は動的環境の特定条件に対応する。プロセス(状態機械)は、1回実行されるワンショット・プロセス、及び、割り込みなしに(例えば反復的に)実行される連続プロセスを含む。ワンショット・プロセス及び連続プロセスはどちらも、例えば、マスタ・プロセッサ190又は他のソースからのコマンドに応答して、或いはコンピュータ実装可能命令のシーケンス内の所定の地点に到達すると、完了前に停止又は終了することができる。
【0098】
[0106] 各状態機械は1つ又は複数の状態を含み、そのそれぞれがアクション・エンジン/コプロセッサによって実行される「待機」ステートメントとして実装可能であり、その間、アクション・エンジン/コプロセッサは、特定の条件の発生について動的環境を監視する。重要な一態様では、コンピュータ実装可能命令は、満たされた場合、1つ又は複数のアクションの実行と、条件に合致した旨のマスタ・プロセッサへの通知とをトリガする引数としての動的環境の1つ又は複数の条件を有する、「待機」ステートメントの特定の定義を含む。「待機」ステートメントは、本質的には、1つ又は複数の実世界条件に合致した場合に1つ又は複数のアクションが実行されることを指定する。ハウスキーピング・プロセッサ190は、アクション・エンジンに対するアクション・エンジンの動作に適合する、待機ステートメント条件及び関連付けられたアクションをオフロードすることができる。処理ユニット194及びマスタ・プロセッサ190によって実行されるようにコンパイルされたプログラミング言語に従い、待機ステートメント間の命令ブロックは、次の待機ステートメントまで、アクション・エンジン/コプロセッサ及び/又はマスタ・プロセッサ190によって実行される。例えばアクション・エンジンは、それらのアクションがコプロセッサのアクション命令コード(opcode)に適合するという条件で、待機ステートメントに直接従う1つ又は複数のアクションを実行することができる。
【0099】
[0107] 少なくとも1つの実装において、待機ステートメントは、条件節が満たされるまでプロセスの進行を休止させる。これによってマスタ・プロセッサ190は、各プロセスの現在の待機ステートメント条件を照会すること、及びその条件が満たされた場合にプロセスを続行することによって、プロセスをスケジューリングすることができる。待機ステートメントは「wait for <Boolean-expression>」の形式を有することが可能であり、ここで<Boolean-expression>は動的環境の条件を表す。サブルーチン呼び出しは、ステートメントの条件を評価するために望ましいように作成可能である。例えば、条件はブール・カウンタ条件の評価を含むことができる。カウンタ変数には名前によってアクセス可能であり、オプションでカウンタ名は先行するキーワード・カウンタを伴う。カウンタ比較は、部品検出信号が生成された時のベルト・ポジションなどの、初期値から実行可能である。自動的に宣言されるカウンタ時間を使用して、持続時間を精密に(例えばマイクロ秒の精度で)比較することも可能である。いくつかの例は以下を含む(ハッシュ記号「#」はコメントを示す)。
【数1】
「from」キーワードは、カウンタ・リセットが望ましくない場合に、開発者がアプリケーションに関するカウンタのロールオーバを気にする必要性を除去する。
【0100】
[0108] 「wait for <duration-expression>」のように引数<duration-expression>を使用することで、特定の期間が経過するまで待機するために待機ステートメントを使用することも可能である。この期間は、ミリ秒単位の時間、他のプロセスが必要とする期間などの相対期間、又は変数として表される時間などの、絶対値として表すことが可能である。式がサブルーチンの呼び出し又は変数値の評価を含む場合、それらの変数値は、待機ステートメントが最初に処理された場合のみ評価される。いくつかの例は以下を含む。
【数2】
【0101】
[0109] 待機ステートメントは、「wait for <edge> of input <input>」のように、特定の入力の立ち上がりエッジ又は立ち下がりエッジを待機するためにも使用可能である。与えられる入力は、以前に宣言された入力インデックス又は名前付き入力のいずれかとすることができる。複数の入力は、それらのいずれか1つが条件を満たすと、エッジと共に与えることができる。名前付き及びインデックス付き入力は、入力のORリスト内で混合可能である。複数の入力は、ORキーワード又はコンマのいずれかによって分離可能である。入力インデックスは0から始まる。いくつかの例は以下を含む。
【数3】
【0102】
[0110] 待機ステートメントは、「wait for <state> input(s) <input-list>」のように、1つ又は複数の入力が所望の状態(例えば設定状態又はクリア状態)に変更するのを待機するためにも使用可能である。「AND」キーワードは、条件を満たすためには、すべての入力が所望の状態であることが必要なことを示すために使用可能である。同様に、「OR」キーワードは、入力のうちのいずれかが所望の状態に達した場合に条件が満たされることを示すことができる。いくつかの例は以下を含む。
【数4】
【0103】
[0111] 待機ステートメントは、「wait for <state> flag(s) <flag-list>」のように、1つ又は複数のフラグが設定又はクリアされるのを待機するために使用可能である。これは、上記のように1つ又は複数の入力が設定又はクリアされるのを待機することに類似している。複数のフラグを与えることが可能であり、「flag」キーワードは、読みやすくするために複数形で使用可能である。フラグは宣言されたフラグ変数で示される。いくつかの例は以下を含む。
【数5】
【0104】
[0112] 待機ステートメントは、「wait for trigger ladder <integer-expression>」のように、1つ又は複数のトリガ・ラダー(trigger ladder)が発動(fire)するのを待機するために使用可能である。トリガ・ラダーは、そのインデックスで指定可能であり、トリガ・ラダー・インデックスは0で始まる。例は以下を含む。
【数6】
【0105】
[0113] 他のタイプの待機ステートメントは以下を含むが、これらに限定されない。
・「wait for decreasing counter <counter>」のように直角位相符号器カウンタが減少するのを待機する。これは、部品検出入力の立ち上がりエッジなどの他の条件と共に使用可能である。
・「wait for increasing counter <counter>」のように直角位相符号器カウンタが増加するのを待機する。これも、部品検出入力の立ち上がりエッジなどの他の条件と共に使用可能である。
・「wait for send (sender) to finish」のように、同じプロセス内の前の送信ステートメントが伝送を完了するのを待機する。例えば、進行中の伝送についてペイロードの破損を避けるために、プロセスがペイロードを修正する前にイーサネットSureSync(商標)イベント伝送が終了するのを待機するために使用可能である。
・「wait for message」のように、コプロセッサ又はアクション・エンジン内のイベント・パケット受信器ポートにメッセージが到達するのを待機する。送信側デバイスのデバイスIDは、構成の電力内に記憶するか、又はホスト・コンピュータによってランタイム時に構成することが可能である。イベント送信者が関係する場合、待機ステートメントの後にメッセージ・ポート値をオンに切り換える「if-else if」ステートメントが続くことが可能である。ある実施形態では、メッセージを待機するプロセスは何も待機しない。これにより、プロセスを連続して実行させるか、又はメッセージを待機させることが可能であり、次にスケジューラは、受信したメッセージをプロセスに与えることが可能である。スケジューラが受信器周辺装置からメッセージを読み取ったが、メッセージを待機しているプロセスがない場合、メッセージは破棄することができる。
【0106】
[0114] 複数の条件を組み合わせて、待機ステートメントが完了するまでにすべてが同時に満たされなければならないようにすることができる。これは、待機ステートメント内の「for」節と「AND」キーワードとを組み合わせることによって実行可能である。例は以下を含む。
【数7】
いくつかのインスタンスにおいて、アクション・エンジン/コプロセッサは、すべての未処理のメッセージ送信が完了するまで、待機ステートメントを実行しない場合がある。メッセージの肯定応答/肯定応答ハンドシェイクなし(no acknowledgement handshake)を実行する際に高レイテンシーを有する可能性のある、1×1デバイスでの通信の場合、この結果、ミリ秒を超える遅延を生じさせる可能性がある。これが望ましくない場合、別々のワンショット・プロセスを使用してメッセージを送信し、主プロセスからこのレイテンシーを除去することができる。
【0107】
[0115] 一般に、マスタ・プロセッサ190は、可能な限り多くの条件をアクション・エンジン110c及び/又はコプロセッサに委任する。典型的には、マスタ・プロセッサ190は、アクション・エンジン110cのイベント・テーブル112内の各スロット140に、及び/又は各コプロセッサに、1つの条件を割り当てる。命令の初期コンパイル、所望のレイテンシー、アクション・エンジン110c及びコプロセッサの機能、条件自体、及び/又はそれ自体の機能に基づいて、それぞれのスロット140及び/又はコプロセッサに条件を割り当てることができる。例えばマスタ・プロセッサ190は、動的環境内で複数の条件のうちの第1のサブセットが発生することが予測される期間、動的環境内で複数の条件が発生することが予測される特定のシーケンス、動的環境内で実行された少なくとも1つの以前のアクション、動的環境の現在の状態、マスタ・プロセッサの応答時間、及び、少なくとも1つのコプロセッサの少なくとも1つの属性(例えば、機能状況、処理速度、メモリ・サイズ、入力信号数、入力信号タイプ、出力信号数、及び出力信号タイプ)のうちの、少なくとも1つに基づいて、特定のコプロセッサによる評価に関する条件の第1のサブセットを決定することができる。いくつかの例では、コプロセッサは、条件の何らかの固定最大数よりも少ない条件数を評価するように構成され、これは、動的環境内で必要な応答時間によって定義された最大許容レイテンシーに少なくとも部分的に基づくことが可能である。
【0108】
[0116] マスタ・プロセッサは、例えば動的環境の進化、新しい命令、及び/又は以前記憶された命令に応答して、条件を動的に再割り当てすることもできる。アクション・エンジン110c及び/又はコプロセッサに条件を委任することによって、マスタ・プロセッサ190は、連続して条件を監視する代わりに、他の処理タスクを実行することができる。例えばマスタ・プロセッサは、初回に、条件の第1のサブセットのみを評価するように、及び、条件の第1のサブセットが満たされた場合、複数のアクションのうちの第1のアクションを表す制御情報を提供するように、所与のコプロセッサを構成することができる。その後マスタ・プロセッサは、2回目に、条件の第2のサブセットのみを評価するように、及び、条件の第2のサブセットが満たされた場合、他のアクションを表す追加の制御情報を提供するように、コプロセッサを再構成する。いくつかのケースでは、マスタ・プロセッサは、条件の第1のサブセットが満たされたか否かに少なくとも部分的に基づいて、条件の第2のサブセットを決定することができる。これらのケースの少なくとも1つにおいて、マスタ・プロセッサは、動的環境内で条件の第2のサブセットが発生することが予測される期間、動的環境内で条件が発生することが予測される特定のシーケンス、動的環境の現在の状態、動的環境内で実行された少なくとも1つの以前のアクション、及び、マスタ・プロセッサの応答時間のうちの、少なくとも1つに基づいて、条件の第2のサブセットを決定する。マスタ・プロセッサは、コプロセッサの機能状況(例えばアイドル、アクティブなど)、コプロセッサによって処理された入力信号の第1の数、コプロセッサによって処理された入力信号の第1のタイプ、コプロセッサによって処理された出力信号の第2の数、及び、コプロセッサによって処理された出力信号の第2のタイプを含むが、これらに限定されない、コプロセッサの属性のうちの少なくとも1つに基づいて、条件の第2のサブセットを決定することができる。
【0109】
[0117] 一態様では、マスタ・プロセッサ190は、最適化コンパイラ(図示せず)からのコンパイル済みコンピュータ実装可能命令に従って、条件を(及び場合によってはアクションも)どのように委任するかを決定する。当業者であれば理解されるように、コンパイラは、(例えば、SCORE(商標)プログラミング言語での)ユーザ作成ソース・コードを、マスタ・プロセッサ、アクション・エンジン、及び/又はコプロセッサによって実行可能な、オブジェクト・コードなどのターゲット言語に変換する。この変換を実行する場合、コンパイラは、ソース・コード内に提示された順序でソース・コードをコンパイルし、同様又はほぼ類似の順序でオブジェクト・コードを生成することができる。
【0110】
[0118] コンパイラは、ソース・コードをコンパイルすることによって、例えば状態(待機ステートメント/条件)を接続するエッジ(アクション)に沿って状態から状態へと進むことによって生成される、状態機械を分析することも可能である。一例では、ユーザは、例えばコマンドライン引数をコンパイラに提供することによって、使用可能なアクション・エンジン及び/又はコプロセッサのプロファイルをコンパイラに供給する。コンパイラはこのプロファイルを使用して、コンパイル済みオブジェクト・コード内のある条件及びあるアクションを、使用可能なアクション・エンジン及び/又はコプロセッサの機能内として指定する。マスタ・プロセッサは、これらの条件を(及び場合によってはアクションも)、コンパイル済みオブジェクト・コード内に指定されたアクション・エンジン又はコプロセッサに割り当てることができる。いくつかの実施形態において、コンパイラは、指定された条件(及びアクション)へのアクション・エンジン/コプロセッサのリソースのこれらの割り振りをコンパイル時に決定し、これらの割り振りは変更されないままである。
【0111】
[0119] 他の実施形態では、マスタ・プロセッサは、例えば動的環境の進化或いはシステム又はコンポーネント状況における変化に応答して、アクション・エンジン/コプロセッサのリソースを指定された条件(及びアクション)に動的に割り振ることができる。こうした動的環境において、マスタ・プロセッサは、使用可能なアクション・エンジン/コプロセッサのリソースのプロファイルを、作成及び/又は維持することができる。例えばマスタ・プロセッサは、動作可能に結合されたアクション・エンジン/コプロセッサのデバイスをポーリングすること、動作可能に結合されたデバイスから状況更新を受信すること、及び/又は、コマンドライン引数又は任意の他の適切なインターフェースを介してユーザからプロファイルを受信することによって、使用可能なアクション・エンジン/コプロセッサのリソースに関する情報を取得することができる。
【0112】
[0120] マスタ・プロセッサ190は、アクション・エンジン110cに全体又は一部が委任された状況、及び、それ自体について予約している状況を含む、プロセス(状態機械)のリストを、作成及び維持することも可能である。動作時に、マスタ・プロセッサ190は、このリストを使用して、システムによって実装された状態機械のそれぞれを進行させる。例えば所与のコプロセッサに、特定の条件(例えば、組み立てライン内の指定されたポイントへの部品の到着)に関して動的環境を監視するタスクを課すことができる。次にプロセスは、条件に関して動的環境を監視する「待機」状態に入る。コプロセッサが条件に合致した(例えば部品が指定されたポイントに到着した)ものと決定すると、プロセスは待機状態を出て、所定のアクション(例えばカメラにその部品の写真を撮るように命令する)を実行する。コプロセッサは、通知信号(略して「通知」)をマスタ・プロセッサ190に送信することによっても、その条件に合致したことをマスタ・プロセッサ190に通知する。例えばコプロセッサは、動的環境の特定の条件がコプロセッサによって監視された条件と合致した場合に合致信号を生成し、この合致信号を通知信号としてマスタ・プロセッサに提供することができる。
【0113】
[0121] 条件に合致した旨の通知信号(合致信号)をコプロセッサから受信すると、マスタ・プロセッサ190は、コプロセッサによって実装されたものを含む、状態機械のそのリストに関する通知を待機しているそれらの状態機械を進行させる。状態機械に依存して、マスタ・プロセッサ190は条件に合致したことに気付き、コプロセッサにプロセスの実装を続行させることが可能であるか、又は、コプロセッサによって実装された状態機械(プロセス)を休止して、コプロセッサに他の状態機械を実装させることができる。通知を使用して、システムによって実装された他の状態機械を開始、休止、又は信号させることも可能である。
【0114】
[0122] 要約すると、いくつかの実装において、単一のプロセッサについてコプロセッサによって評価された待機ステートメント条件は、ブール論理と組み合わされたいくつかの下位条件(sub-condition)を有することが可能であり、その後に、全体としての条件及び/又は下位条件を満たすと実行されることになる、1つ又は複数の手続きステップが続き、これは、コプロセッサが所与の時点で単一のプロセス・インスタンスに対して実行するように委託されるものである。条件が満たされアクションが完了すると、コプロセッサはマスタ・プロセッサに通知し、プロセス内の次の待機ステートメントについてコプロセッサに再委託することができる。
【0115】
[0123] 各状態(条件)は、少なくとも1つの特定のアクションに関連付けることができる。可能であればマスタ・プロセッサ190は同様に、特定の条件を監視するために割り当てられた同じスロット140又はコプロセッサに特定の条件に関連付けられたアクションを委任する。いくつかの実施形態では、マスタ・プロセッサ190は、入力及び出力に関するアクションをアクション・エンジン110c及び/又はコプロセッサに委任する。これらのアクションは、パケットの送信、出力の設定、出力のクリア、出力の追加、カウンタのラッチ、フラグの設定、フラグのクリア、セマフォの獲得、セマフォの解除、及びノー・オペレーション(no-op)を含むことができるが、これらに限定されない。いくつかのケースでは、マスタ・プロセッサ190は、関連付けられた条件をかん逸するために割り当てられたスロット140又はコプロセッサの機能に基づいて、アクションを委任する。関連付けアクションを実行するために、関連付けられたアクション及びスロット140又はコプロセッサの機能に基づいて、スロット140又はコプロセッサに条件を割り当てることも可能である。
【0116】
[0124] マスタ・プロセッサ190は、それ自体に対して関連付けられたアクションの実行を予約しながら、スロット140又はコプロセッサに条件を委任することも可能である。例えばマスタ・プロセッサ190は、メモリ内への情報の記憶、メモリからの情報の取り出し、メモリ内の変数の増分、及びメモリ内に記憶された数に関する算術を含むが、これらに限定されない、メモリ内の情報へのアクセスに関するすべてのアクションを実行することができる。マスタ・プロセッサ190は、必要に応じて、又は所望に応じて、他のタイプのアクションも同様に実行することが可能である。
【0117】
[0125] 以下に、
図6に示されたシステムを含む、本明細書で開示されたシステム及びデバイスを使用する実装に適したプロセス(状態機械)及びサブプロセスのいくつかの擬似コード例を示す。ハッシュ記号(#)は、各例におけるコメントを示す。
【0118】
[0126] 例1:連続する1状態プロセス
【数8】
【0119】
[0127] 例1は、「send_on_edge」と呼ばれる連続プロセスであり、コプロセッサには、入力iの立ち上がりエッジ(条件)を待機すること、及び条件が満たされた場合に他のデバイスにパケット(アクション)を送信することの、タスクが課せられる。コプロセッサは、立ち上がりエッジの検出時に、その条件に合致したことをマスタ・プロセッサに更に通知する。この例では、コプロセッサがパケットを送信すると、マスタ・プロセッサは同じ条件及びアクションの命令コード・ペアをコプロセッサのメモリ内に再ロードする。コプロセッサは、コプロセッサが例えばマスタ・プロセッサ190によって休止又は割り込みされるまで、入力iの立ち上がりエッジの監視を続行する。このプロセスは、8回(i=0...7)実装され、各インスタンスは、アクション・エンジン内の別々のスロット上、又は対応するコプロセッサ上で、実行している。
【0120】
[0128] 例2:連続する2状態プロセス
【数9】
【0121】
[0129] 例2は、「send_on_pulse」と呼ばれる連続プロセスであり、コプロセッサは、動的環境の進化に応じて2つの状態を繰り返す。第1の状態では、コプロセッサは、例1のように出力iで現れるために立ち上がりエッジを待機する(これはこのプロセスの第1の条件)。コプロセッサは入力を検出すると、他のデバイスにパケットを送信し、上記のように第1の条件に合致した旨をマスタ・プロセッサに通知する。その第2の状態(「wait for 100ms」)に進む前に他のアクションも実行し、出力i+8を設定する。この第2の状態において、コプロセッサは第2の条件、100msの経過の発生を待機する。この条件に合致する(すなわち100msが経過する)と、コプロセッサはその第2のアクション、出力i+8のクリアを実行し、第2の条件に合致した旨をマスタ・プロセッサに通知する。その後第1の状態に戻り、第1の条件が再度発生するのを待機する。例1のプロセスと同様に、例2のプロセスは、例えばマスタ・プロセッサ190によって休止又は割り込みされるまで続行する。これも8回(i=0...7)実装され、各インスタンスは、アクション・エンジン内の別々のスロット・ペア上、又は対応するコプロセッサ上で、実行している。
【0122】
[0130] 例2は、1つの条件に関連付けられた2つのアクションを含むことから、アクション・エンジン内の少なくとも2つのスロットで実行され、「send sender i」(アクション番号1a)及び「set output i+8」(アクション番号1b)の両方が、「rising edge of input i」(条件番号1)を満たすことによってトリガされる。条件番号1及びアクション番号1は第1のスロット内にロードされ、アクション番号1bは、第1のスロットに連結された第2のスロットにロードされる。第2のスロットには「counter[0]>=0」として実装される「do always」条件もロードされ、これによって条件番号1に合致した場合は必ず実行することになる(スロットの「連結」についての以下のより詳細な考察を参照されたい)。
【0123】
[0131] 例3:マスタ・プロセッサ・アクションを用いる連続プロセス
【数10】
【0124】
[0132] 例3は、「send_sequence」と題する他の連続プロセスであり、コプロセッサは条件を監視し、コプロセッサ及びマスタ・プロセッサはそれぞれが条件の検出に応答してアクションを実行する。このケースでは、プロセスは、「sequence」と命名された静的変数(「static unsigned integer sequence」)の宣言及びあらゆるイベント・パケットと共に出される16バイトのペイロードpで開始する。これらが初期化されると、マスタ・プロセッサは、ペイロード内のワード(「p.dword」)を「sequence」変数の値に設定する。次にコプロセッサは、入力iの立ち上がりエッジに関して動的環境を監視する待機状態に入る。立ち上がりエッジを検出した場合、その条件に合致したことをマスタ・プロセッサに通知し、ペイロードを送信して、ペイロードを受け取るカメラ又は他のデバイスをトリガすることができる。
【0125】
[0133] 条件に合致した旨の通知を受信すると、マスタ・プロセッサは変数「sequence」を増分する。マスタ・プロセッサは、変数の増分がメモリ内の情報へのアクセスを含むためにこのアクションを実行し、これはアクション・エンジン又はコプロセッサの機能をしばしば超える。更にマスタ・プロセッサは、状態機械をその次の状態に進行させ、ここでコプロセッサは送信側がそのアクションを完了するのを待機する。コプロセッサはこの条件の満足を検出した場合、対応するアクションを実行する。このケースでは、対応するアクションは「ノー・オペレーション」又は「no-op」であるため、コードは特定のコマンドを含まない。コプロセッサは、条件に合致したこともマスタ・プロセッサに通知し、マスタ・プロセッサは、この通知に応答して状態機械をその次の状態に進行させる(ここでは「wait for rising edge of input i」状態に戻る)。例1及び2のプロセスと同様に、例3のプロセスは、休止又は割り込みされ、8つの別々のインスタンスで実装されるまで、実行する。
【0126】
[0134] 例3では、条件番号2(「wait for sender to finish」)は、送信が完了されるまで、手続きステートメントがペイロード・バッファ(例3のp)を上書きするのを防ぐことが意図され、これは通信プロトコル・レイテンシーにおけるネットワーク競合及び分散(variance)によって、非決定性期間内に発生する。これは、送信アクションが使用される場合、コプロセッサが所望の物理ネットワーク・リソースにアクセスできない場合があるからである。(a)処理前の記憶用にペイロード及びポート数を記憶するためにキューを追加すること、(b)送信が完了するまでマスタ・プロセッサへの通知を保持すること、及び、(c)送信が完了した旨のマスタ・プロセッサへの他の通知を追加し、条件を満たしていること及びアクションの完了をマスタ・プロセッサに即時に通知することを含むが、これらに限定されない、アクセス問題に対処するためのいくつかの可能な方法が存在する。オプション(a)は、FPGAのリソース制約により、フィールド・プログラマブル・ゲート・アレイ(FPGA)の実装において最適でない場合がある。オプション(b)は、
非リアルタイム・ピア(例えば、MS Windows(登録商標)を実行するホスト・コンピュータ)を用いるイベント・メッセージ・プロトコルでのハンドシェイキング速度が遅いことによって、送信完了に最高1msを要する可能性があるため、余分な遅延を導入する場合がある。オプション(c)は、待機ステートメント直後にマスタ・プロセッサがコプロセッサ非対応アクションを実行できるようにするが、送信が完了するまでマスタ・プロセッサがイベント・テーブル・スロットを修正するのを防ぐ。いくつかの実装において、待機ステートメント前にすべての送信ステートメントが完了するまで、スロットを上書きすることができないため、各待機ステートメントは暗黙の「wait for send to finish」を有する。
【0127】
[0135] 以下の例4に示されるケースを含む、いくつかのケースでは、マスタ・プロセッサは、状態機械をどのように進行させるかを決定するために、「if」ステートメントなどの「フロー制御ステートメント」を評価する。例えば、評価は、マスタ・プロセッサに1つ又は複数の状態マシンを特定の第1の状態に進行させる第1の結果、又は、マスタ・プロセッサに1つ又は複数の状態マシンを特定の第2の状態に進行させる第2の結果を、生み出すことができる。フロー制御ステートメントを使用して、進行中のプロセスを割り込み、休止、又は停止すること、及び他のプロセスを開始することを、決定することも可能である。
【0128】
[0136] 例4:フロー制御ステートメント
【数11】
【0129】
[0137] 例4は、フロー制御ステートメントを含むサブプロセスである。例4のサブプロセスは、4つの状態を含み、それぞれが、「待機」ステートメント及び実世界環境の特定の条件によって示され、例えば、部品の現在のポジションからの所定の値より大きいか又は等しい部品ポジション・カウンタである(「counter partPosition >= rejectDistance from position」)。例1〜3のように、アクション・エンジン又はコプロセッサは各条件を評価し、条件に合致した場合、マスタ・プロセッサに通知し、no-op、出力のクリア、又は出力の設定などの、適切なアクションを実行する。マスタ・プロセッサは状態機械を進行させ、オプションで、通知に応答して動作する。
【0130】
[0138] 例4では、マスタ・プロセッサは、2つの異なる検査ステーションで部品が検査に合格したか否かに関するフロー・ステートメントを評価することによって、状態機械のフローを制御する。(上記にリストされていない)プロセス全体の他の部分において、検査ステーションは部品の品質に関して「投票」し、マスタ・プロセッサは、検査ステーションの出力に応答して変数「votes」を増分する。同時に、コプロセッサは部品のポジションを監視する。コプロセッサは部品が特定のポジションに達したことを感知すると、マスタ・プロセッサに通知し、これが通知に応答してフロー制御ステートメントを評価する。マスタ・プロセッサが、部品が検査に不合格であった(例えば「votes」変数が2未満であるか、又は「DoReject」入力が設定されているため)と決定すると、マスタ・プロセッサは障害カウント(「failure_count」)を増分し、「reject」出力を設定することによって、コプロセッサに部品を除去させるか又は除去できるようにする。その後状態機械は、カウンタ時間が指定の期間(「rejectDuration」)に等しいか又はこれを超えるのをコプロセッサが待機する状態に進行する。部品が検査に不合格であった場合、マスタ・プロセッサは、部品ポジションが他の変数(「acceptDistance」)に等しいか又はこれを超えるのをコプロセッサが待機する状態に、状態機械を進行させる。
【0131】
[0139] 例3及び4は、変数を設定し、周辺装置、例えばカメラなどを構成するための、宣言ステートメントの使用も示している。宣言は、例3の「sequence」変数、又は例4の(暗黙的に)宣言された「rejectDistance」及び「position」変数のように、マスタ・プロセッサのメモリ内に記憶される変数を設定するために使用可能である。入力0及び1での直角位相カウンタ「partPosition」であるように宣言された、例4の「partPosition」カウンタのようなカウンタ値も設定可能である。入力2の立ち上がりエッジでのパルス・カウンタ「partPosition」であるようにも宣言可能である。
【0132】
[0140] 他の宣言は、入力及び出力変数を含む周辺変数を設定することができる。入力はパルス・フィルタを有するように宣言可能である。出力は、パルス幅及び転極(polarity inversion)を有するように宣言可能である。カウンタ及び他の周辺変数の宣言は、マスタ・プロセッサによって実行される命令にコンパイルされ、マスタ・プロセッサは周辺装置の構成レジスタをロードする。プログラム内でカウンタが使用される場合、イベント・テーブルの条件及びアクションは、コンパイラによって割り振られるカウンタにアクセスする。
【0133】
[0141] 例5:セットアップ・プロセス
【数12】
【0134】
[0142] 例5は、マスタ・プロセッサが特定のプロセスの異なるインスタンスを用いてアクション・エンジン/コプロセッサにタスクを課すために使用する、セットアップ・プロセスである。例1〜4のプロセスとは異なり、例5のプロセスはいずれの条件も含まない。その代わりに、他のプロセス(ここでは例3からの「send_on_sequence」プロセス)の8つのインスタンスを作成する、単純なワンショット・プロセスである。これらのインスタンスはそれぞれ、アクション・エンジン内の対応するスロット上、又は別々のコプロセッサ上で実行する。
【0135】
[0143] 様々な実施形態において、任意の言語ステートメント(コンピュータ実装可能命令)がハウスキーピングCPU190上で実行可能であるが、言語ステートメントのより大きいか又は小さいセットも、本明細書で説明される1つ又は複数のアクション・エンジンによって実行可能である。本発明の特定の実施形態のアクション・エンジン上で実行できない任意のステートメントは、ハウスキーピングCPU190上で実行される可能性がある。一般に、特定の実施形態のアクション・エンジン上で実行可能な任意のステートメントは、ハウスキーピングCPU190によってアクション・エンジンに割り振られることになる。ステートメント又はステートメントのグループは、それらの実行に先立った任意の時点でキャンセル可能である。
【0136】
[0144] 一実施形態において、コンピュータ実装可能命令は、適切なコンピュータ言語(例えばSCORE(商標))で記述された任意のプロセスが同時に実行され得ること、及び、所与のプロセスの複数のインスタンスも同時に実行できることを許可する。一態様では、言語は上記でより詳細に説明されたように、条件/アクション・ペアにコンパイルされ、例示の実装では、こうした条件/アクション・ペアは、(例えば、
図6のイベント・テーブル112及びアクション・エンジン110cに関連して上記で考察したように)高レート及び固定レートでスキャン可能なイベント・テーブルにアセンブルされる。条件/アクション・ペアは、以下でより詳細に説明されるように連結も可能である。
【0137】
[0145]
図6を参照すると、一実施形態において、ハウスキーピングCPU190は、アクション・エンジン110cの動作に影響又は割り込みすることなく、アクション・エンジン110cのイベント・テーブル112にエントリを追加及び除去することができる。必要であれば、ハウスキーピングCPUのワード・サイズ(例えば32ビットとすることができる)がイベント・テーブル・レジスタ140cの幅(例えば64ビットとすることができる)よりも小さいことにより、所与のレジスタ140cは、第1に入力条件をゼロに書き込み、次にアクションを書き込むことによって、部分的に作成可能である。現在使用されていないレジスタ140cは、決して満たすことができない「未使用」条件付き演算を示す第1ゼロ・ワード(zero first word)を有することができる。スキャナ130cは、「未使用」条件を有するいずれのイベント・テーブル条件142cもそのスキャン時に考慮しないため、部分的に書き込まれたイベント・テーブル・レジスタ140c内の命令144cは、ハウスキーピングCPU190が部分的に書き込まれたイベント・テーブル・レジスタ140cの書き込みを完了する前に実行されることはない。
【0138】
[0146] 他の態様では、ハウスキーピングCPU190がアクション・エンジン110cに割り振ることが可能な任意のステートメント又はレジスタ140cの連結グループは、完全にそれらの中で実行するか、又はまったく実行しない。特に、連結グループを隣接するイベント・テーブル・レジスタ140c内に(スキャン方向に関して)最初から最後へとゼロを書き込み、その後、(再度スキャン方向に関して)最後から最初へと新しい条件142c及びアクション144cを書き込むことによって、ハウスキーピングCPU190が連結グループに書き込む間に、たとえスキャナ130cが、メモリの対応するセクションのアドレスを複数回通過する場合であっても、いかなる条件/アクション・ペアも(例えばアクション・エンジン110cのスキャナ130cによって)処理されることはなく、スキャナの規則は、例えばイベント・テーブル・レジスタの独自の入力条件に合致する場合であっても、そのチェーン・ビットが設定されていない次前のイベント・テーブル・レジスタ140cまで、及びこれを含む、すべての先行するイベント・テーブル・レジスタ140cのすべての入力条件も合致しない限り、連結グループ内のイベント・テーブル・レジスタ140cのアクションを実行することはない、というものである。各新しいイベント・テーブル・レジスタ140cは、ゼロに設定されたイベント・テーブル・レジスタ140cのセクション内に書き込まれているため、前のイベント・テーブル・レジスタ140cは有効な入力条件を有さず、このレジスタ140cも書き込まれたばかりのイベント・テーブル・レジスタ140cも実行されることはない。
【0139】
[0147] 同様に、連結されたイベント・テーブル・レジスタ140cのセットを最初から最後へと(例えばレジスタ140cにすべて0又はすべて1で記入することによって)クリアすることによって、及び、各イベント・テーブル・レジスタ140cに関する入力条件を第1にクリアすることによって始まる各イベント・テーブル・レジスタ140cの場合、スキャナ130cがイベント・テーブル・レジスタ140cに対処しているレートに等しいか又は遅いレートで、ハウスキーピングCPU190は、連結レジスタ140cのセット全体が実行されるか又は全く実行されないように、特定のコプロセッサ/アクション・エンジンに割り振られた手続きステップに関して、イベント・テーブル・レジスタ140cのチェーンでさえも置換又はクリアすることができる
【0140】
[0148] マスタ・プロセッサ190をプログラミングし、(例えば、処理ユニット194及びマスタ・プロセッサ190に対して)実行可能コードを提供するためにプログラム言語を効率的にコンパイルするための前述の技法、及び、アクション・エンジン110cのイベント・テーブル112を更新する(又はより一般的には、特定の条件を評価するために1つ又は複数のコプロセッサを「プログラミングする」)ためにマスタ・プロセッサ190によって実装される、結果として生じる手続きは、いくつかの固有の利点を生み出す。この方法は、(1つ又は複数のアクション・エンジン又は他のコプロセッサを備えるか又は備えない)任意の汎用プロセッサ上で非常に高速に実行可能な、極度にコンパクトなコード・セットを生成する。しかしながら、
図6に示されたアクション・エンジン110cに関連して、特にスキャナ130cと共に使用される場合、たとえ動的環境内での条件の進化が、分岐のためのコード実行、並びに/或いは、従来のシステムに対して実行及び/又はキャンセルされることになる機能呼び出しを必要とする場合であっても、これらの技法は、完全に決定性の動作を生み出す。前述の本発明の技法は、複数のサブルーチン(例えばイベント・テーブル・レジスタ140cのチェーン)が(マスタ・プロセッサ190内の)呼び出しプロセスに信号を戻さずに完了することを実行可能にするものであるため、実際にはこれらの遷移は、アクション・エンジン110c内のメモリ・ポインタを再配置することなく実行可能である。いずれのループ又はジャンプも有さない命令セットの単純性によって、コプロセッサ/アクション・エンジンのプログラム・スペースのランタイムの決定性が維持される。
【0141】
[0149] ハウスキーピングCPU190は、アクション・エンジンのハウスキーピング専用である必要がないことにも留意されたい。ハウスキーピングは、Linux又はWindowsなどの汎用オペレーティング・システム上のプロセス及び/又はデバイス・ドライバによって実行可能である。アクション・エンジンは、カウンタ、デジタル及び/又はアナログのI/Oインターフェースなどと共に周辺カード(PCIなど)上に存在可能であり、汎用コンピュータはイベント処理において、本明細書で説明されるアクション・エンジンと協力して作業する場合の特定用途向け埋め込み型コンピュータと同じ精度を達成することができる。アクション・エンジン及び/又は別々のコプロセッサは、1つ又は複数のフィールド・プログラマブル・ゲート・アレイ(FPGA)内で、又は他の適切なプロセッサの集合として、実装することも可能である。
【0142】
[0150] パイプライン化、レイテンシー、及びジッタ
【0143】
[0151]
図6に示されたアクション・エンジン110cの例示の一実装において、スキャナ130cは、入力信号66と条件142cとを比較するための「パイプライン化」技法を実装するように構成される。当業者であれば理解されるように、「パイプライン化」は、計算「パイプ」を形成するために接続された一連のステージに計算を分割することによって、スループットを向上させる計算技法である。パイプの各ステージは、組み立てライン上の作業者に酷似しており、計算のその部分(入力信号66と条件142cのセットとの比較)を他のステージと並列に実行する。パイプライン化は、入力信号66と所与の条件142cとの比較にどれだけの時間を要するかにかかわらず、各レジスタ140c上で費やされる時間が1クロック・サイクルに制限されるように、スキャナ130cのアクションを加速させる。
【0144】
[0152] アクション・エンジンの「レイテンシー」、すなわち、所与の時点での動的安協の特定の入力状態とイベント・テーブルに含まれる条件の複数のセットとを比較し、入力状態に応答して1つ又は複数の命令を伝送するために必要な期間の、計算に関して、いくつかの例示の実施形態において、こうしたレイテンシーは、アクション・エンジン110cによって実装されるパイプライン化技法を考慮して導出することができる。例えば、アクション・エンジン110cが、入力信号66及び/又は発見された状態変化(上記の段落89を参照)と条件142cの特定セットとを比較し、これに応答して1つ又は複数の命令を伝送するのに要する時間は、スキャナが、対応するイベント・テーブル・レジスタ140cに到達するのに要する時間に、パイプライン内のステージ数に依存する、パイプラインを通過する伝搬時間を加えた時間に等しい。128のレジスタ140cを備えるイベント・テーブル112及び、3ステージのパイプラインを備え、100MHzでクロック制御されるスキャナ130cの場合、イベント・テーブル112を通じたスキャンの最初に発生するが、イベント・テーブル112を通じたスキャンの最後まで使用されない、条件142cに対応する、入力から出力までの可能な最長時間は、1.31μsに、パイプラインを通過する0.03μsの伝搬時間(すなわち3クロック・サイクル)を加えた時間である。入力から出力までの可能な最短時間は0.030μsである。したがってアクション・エンジン110cは、入力信号66及び/又は発見された状態変化と、イベント・テーブル112内のレジスタ140cの数、パイプライン内のステージの数、及びクロック周波数によって境界が確定される、レイテンシー又は時間遅延を伴う条件142cのセットとを、比較する。
【0145】
[0153] 少数の条件142cを非常に迅速に評価するためにイベント・テーブル・レジスタ140cを使用することの追加の利点は、レイテンシーの変動が非常に低いことである。ジッタは、最長レイテンシーと最短レイテンシーとの差異として定義可能である。単一の条件142cを評価するイベント・テーブル・レジスタ140cの場合、レイテンシーの変動は最小であり、着信データ及び発信データがどのように伝送されるかに依存して、ゼロに近似する可能性さえある。上記の例において、可能な最長レイテンシーは1.31μsであり、可能な最短レイテンシーは約0.03μsであり、これは、1.28μsのジッタ、又は1スキャン時間に対応する。(入力フィルタの適用、入力状態変化の発見、又は、イーサネット・パケットを介したデータの送受信が、アクション・エンジン110cとは無関係の可変遅延を招く可能性がある。)
【0146】
[0154] 低ジッタは、長い応答遅延は、遅延がかなり反復可能である限り完全に受け入れ可能であり、著しく短い最大レイテンシーは、個々のレイテンシーが著しく変動する場合に受け入れ不可能な、例えばイメージのトリガなどの適用例において特に有用である。機械視覚アプリケーションでは、例えば、ジッタを削減することによって、センサの視野を縮小することが可能であり、更にこれによって、該当するシーンのイメージ解像度をより高くすることができる。高速移動部品をイメージングするための時間ウィンドウが約10μsであるが、ジッタはPLCの場合よりもかなり大きい100μsである状況を考えてみる。部品のイメージをキャプチャリングするには、部品自体のサイズの11倍を超えるように視野を増大することによって、実質上110μsを超えるまで時間ウィンドウを拡張する必要があり、これによって部品のイメージング専用のセンサのピクセル数が11分の1を超えて減少する。これに対して、約2.5μsのジッタを伴うアクション・エンジン110cを使用して、部品自体のイメージング専用のセンサのアクティブ領域の約80%で、同じ部品のイメージを獲得することができる。
【0147】
[0155] 条件/アクション・ペアのメモリ構造及び実行
【0148】
[0156] 本発明の実施形態は、1つ又は複数の「条件/アクション・ペア」を記憶するための特別なメモリ構造を含むことができる。
図6に示されたアクション・エンジン110cでは、例えば、イベント・テーブル112は複数のレジスタ140cの形の専用メモリを提供し、そのそれぞれが条件/アクション・ペアを、特定のビットシーケンス(
図6では一般に、条件142c及びアクション又は「命令」144cとして表される)として記憶する。別の方法として、1つ又は複数のレジスタ140cは、評価されることになる条件を表す第1のビット数、及び、条件に合致した場合に実行されることになるアクションを表す第2のビット数として配置構成される、複数の隣接するメモリ・レジスタを含むことができる。一般的に言えば、
図5及び
図6に示されるような様々な実施形態は、所与のレジスタ内でそれぞれの条件/アクション・ペアを何らかのビット配置構成として保持する、1つ又は複数のレジスタ(例えば、
図5のレジスタ140b、
図6のレジスタ140c)の形のメモリ構造を含むことができる。
【0149】
[0157] いくつかのインスタンスでは、満たされた特定の条件に対応する所与のアクションは、動的環境内の1つ又は複数のデバイスの制御に関して一切のアクションを実行しない可能性があることを理解されたい。言い換えれば、所与の条件/アクション・ペアに関する可能な1つのアクションは、動的環境内で一切の肯定的アクションを実行しないことになり、本明細書では「no-op」とも呼ばれる。no-opのいくつかのインスタンスでは、以下でより詳細に考察されるように、それにもかかわらずアクション・エンジンは、評価されている特定の条件が満たされているかどうかをマスタ・プロセッサに通知すること、及び/又は、イベント・テーブルの後続のレジスタ内で指定されているように、1つ又は複数の他の条件の評価に移ることが、可能である。
【0150】
[0158] 「条件/アクション・ペア」の概念は、本明細書で開示される様々な実施形態に従った多様な方法で実装可能であることも理解されたい。例えばいくつかの実装において、特定の条件/アクション・ペアの条件部分を表すメモリのコンテンツは、所与のレジスタ内にある数の隣接ビットを含むこと、及び/又は、条件部分に必ずしも関係しないレジスタ・コンテンツが介在する所与のレジスタ内に分散されたある数のビットを含むことが可能である。同様に、特定の条件/アクション・ペアのアクション部分を表すメモリのコンテンツは、所与のレジスタ内にある数の隣接ビットを含むこと、及び/又は、アクション部分に必ずしも関係しないレジスタ・コンテンツが介在する所与のレジスタ内に分散されたある数のビットを含むことが可能である。したがって、本明細書で開示される本発明の概念に従い、所与の条件/アクション・ペアを表す所与のメモリ位置/レジスタ内に、多様なコンテンツ編成が企図される。
【0151】
[0159] 以下で詳細に考察される一例では、条件/アクション・ペアを含めるためのメモリ構造は、(例えば、単一クロック・サイクルでアクセス及び読み取り可能な)64ビット・ワード・サイズのレジスタを含むことが可能であり、そのうちのある数のビットは評価されることになる条件142cを表すか又はこれに関し、そのうちの他の数のビットは、条件が満たされた場合に実行されることになるアクション144cを表すか又はこれに関する。非限定的な一例では、64ビット・レジスタは3つの部分に分離され、条件142c及びアクション144cはそれぞれ、これら3つの異なる部分に、1)16ビット符号なし整数によって表される「命令コード」、2)16ビットの「アクション・パラメータ」、及び3)32ビットの「条件オペランド」、として符号化され、アクション・パラメータ及び条件オペランドに含まれる情報は、命令コードに含まれる動作の実装を容易にすることができる。以下の表1は、こうした64ビット・レジスタの一般的な形式を示し、命令コード部分はビット48〜63に表され、アクション・パラメータはビット32〜47に表され、条件オペランドはビット0〜31に表される。
【表1】
【0152】
[0160] 表1に示された64ビット・レジスタの命令コード部分に関して、以下の表2は、16ビット命令コードの異なるフィールドに対して例示のフォーマットを提供する。
【表2】
上記の例で、命令コードの4つの最上位ビット(表2でそれぞれ「F」、「E」、「D」、及び「C」としてラベル付けされた、ビット15〜12)は、評価されることになる条件142cに関する(「OP」とラベル付けされた)条件タイプ・コードを指定する。次の4つの最上位ビット(表2でそれぞれ「B」、「A」、「9」、及び「8」としてラベル付けされた、ビット11〜8)は、アクション144cに関する(「ACT」とラベル付けされた)アクション・オペランドを表す。命令コードの残りのビットは、チェーン・ビットC、XORビットX、通知ビットN、満足ビットS、最終条件ビットL、及び1つ又は複数のカウンタ値CTRを含み、それぞれについて以下でより詳細に説明する。
【0153】
[0161] この例では、表1を再度参照すると、64ビット・レジスタのビット0〜31の32ビット「条件オペランド」と、命令コードのOPフィールド内に指定された条件タイプ・コードとを共に使用して、特定の条件が満たされているかどうかを決定することができる。更に、64ビット・レジスタのビット32〜47の16ビット「アクション・パラメータ」と、命令コードのACTフィールド内に指定されたアクション・オペランドとを共に使用して、特定の条件が満たされた場合に実行されることになる対応するアクションを指定することができる。更に、命令コード・フィールドC(チェーン)、X(XOR)、及びCTR(カウンタ)は特定条件の評価に使用可能であり、命令コード・フィールドN(通知)、S(満足)、及びL(最終条件)は対応するアクションを指定するために使用可能である。したがって、以下でより詳細に考察するように、表1に示された64ビット・レジスタのビット/フィールドの第1のセット、すなわちOP、C、X、CTR、及び「条件オペランド」は、まとめて、64ビット・レジスタに表された条件/アクション・ペアの条件142cを定義することが可能であり、同様に、64ビット・レジスタのビット/フィールドの第2のセット、すなわちACT、N、S、L、及び「アクション・パラメータ」は、まとめて、64ビット・レジスタに表された条件/アクション・ペアのアクション144cを定義することが可能である。
【0154】
[0162] より具体的に言えば、表2に示された命令コードの条件タイプ・コードOPは、監視されることになる条件のタイプ、監視されることになる1つ又は複数の入力信号、及び/又は、条件を満たす任意の監視される入力信号の状態を指定する。いくつかの条件タイプ・コードOPの場合、条件を満たすことは、64ビット・レジスタのビット0〜31に表される32ビット「条件オペランド」の1つ又は複数の値に、少なくとも部分的に依存する(上記の表1を参照)。命令コードのOPフィールドに提示することが可能な例示の条件タイプ・コードは、以下を含むが、これらに限定されない。
0−レジスタは未使用
1−カウンタ#CTRがオペランドより少ないか又は等しい場合、作動する
2−カウンタ#CTRがオペランドより多いか又は等しい場合、作動する
3−オペランド[0..15]内に設定された任意の入力上で立ち上がりエッジが検出された場合、作動する
4−オペランド[0..15]内に設定された任意の入力上で立ち下がりエッジが検出された場合、作動する
5−オペランド[0..3]内に設定された任意のラダー上でトリガ・ラダーが発動した場合、作動する
6−オペランド[0..15]内に設定された任意の入力上に高信号が存在する場合、作動する
7−オペランド[0..15]内に設定された任意の入力上に低信号が存在する場合、作動する
8−オペランド[0..15]内に設定されたすべての入力上に高信号が存在する場合、作動する
9−オペランド[0..15]内に設定されたすべての入力上に低信号が存在する場合、作動する
10−オペランド[0..31]内に設定された任意のフラグ上に設定状態が存在する場合、作動する
11−オペランド[0..31]内に設定された任意のフラグ上にクリア状態が存在する場合、作動する
12−オペランド[0..31]内に設定されたすべてのフラグ上に設定状態が存在する場合、作動する
13−オペランド[0..31]内に設定されたすべてのフラグ上にクリア状態が存在する場合、作動する
14−カウンタ#CTR指示の場合、作動する(条件[ビット0]:1−>増分、0−>減分)
15−未定義
【0155】
[0163] 命令コードのOPフィールドに指定された追加の条件タイプ・コードはXビットを使用して定義可能であり、以下で考察される(例えば、上記の条件タイプ・コード3〜15は、Xビットを使用して再定義可能である)。この非限定的な例では、CTRビットは条件タイプ・コード1、2、及び14に使用され、他の例では、CTRビットは、非ゼロの場合に他の条件タイプ・コードを再定義するために使用可能である。
【0156】
[0164] 上記表2に示された命令コードのアクション・オペランドACTは、条件タイプ・コード及び条件オペランド(及びいくつかのケースでは、64ビット・レジスタの他のフィールド)によって指定された条件が満たされた場合、実行されることになる対応するアクションを指定する。いくつかのアクション・オペランドACTの場合、実行されることになるアクションは、64ビット・レジスタのビット32〜47に表された16ビット「アクション・パラメータ」の1つ又は複数の値に、少なくとも部分的に依存する(上記の表1を参照)。命令コードのACTフィールドに存在可能な例示のアクション・オペランド・コードは、以下を含むが、これらに限定されない。
0−ノー・オペレーション――何も実行しない(例えばNが設定された場合、割り込み完了を起こす)
1−メッセージ送信のキュー
アクション・パラメータは、ビット0〜3に記述子#、ビット5にメッセージ肯定応答フラグのハウスキーピングCPU通知、ビット6にメッセージ障害フラグのハウスキーピングCPU通知、ビット12〜6にペイロード・インデックスを含むものと解釈される。
2−出力の設定:アクション・パラメータ内のビット・セットは、設定される出力を示す。
3−出力のクリア:アクション・パラメータ内のビット・セットは、クリアされる出力を示す。
4−データ入力のラッチ。(アクション・パラメータなし)
5−カウンタ値のラッチ:アクション・パラメータ内のビット・セットは、ラッチされるカウンタを示す。
6−ゼロ・カウンタ:アクション・パラメータ内のビット・セットは、ゼロに設定されるカウンタを示す。
7−フラグMSWの設定:アクション・パラメータ内のビット・セットは、設定されるフラグを示す。
8−フラグLSWの設定:アクション・パラメータ内のビット・セットは、設定されるフラグを示す。
9−フラグMSWのクリア:アクション・パラメータ内のビット・セットは、クリアされるフラグを示す。
10−フラグLSWのクリア:アクション・パラメータ内のビット・セットは、クリアされるフラグを示す。
11−セマフォの取得:セマフォ・インデックスがアクション・パラメータ内に与えられる。
12−セマフォの解除:セマフォ・インデックスがアクション・パラメータ内に与えられる。
13〜15−予約済み
アクション15は、アクション・オペランドを示すための減じられたビット数を伴うアクションを示すために使用される、アクション・パラメータのある数のビットを伴う拡張アクションとすることができる。
【0157】
[0165] 上記で指定されたいくつかのアクション・オペランドと共に使用される16ビット・アクション・パラメータは、記述子#(例えばビット0〜3)、ack通知(例えばビット4)、exh通知(例えばビット5)、ペイロード#(例えばビット6〜12)、又はビット・フィールド(例えばビット13〜15)を含むことが可能であるが、これらに限定されない。
【0158】
[0166] 前述のように、条件/アクション・ペアを表す64ビット・レジスタのビット48〜63に含まれる16ビット命令コードの他のビットは、前のレジスタからのチェーン・ビットCを含むことができる。チェーン・ビットCが設定された場合、先行するイベント・テーブル・レジスタ140c内の条件142cは、このイベント・テーブル・レジスタ140c内の条件142cが考慮できるまで、trueでなければならない。比較がオーバーフロー又はアンダーフローに対処する必要がないようにシャドー・レジスタを実装するXORビットX、1に設定された場合、入力条件を満たすと完了メッセージをハウスキーピングCPUに転送させる通知ビットN、及び、条件142cが満たされた場合に設定される満足ビットSも、含むことができる。
【0159】
[0167] 他のビットは、条件142cが満たされた場合、スキャナに条件オペランドOPをゼロにリセットさせるために使用される、最終条件ビットLも含むことができる。言い換えれば、最終条件ビットLは、次のスキャンが、イベント・テーブル112が条件を再度満たすことを防止する。アクション144cが実行されるまでに複数の条件142cが(例えば以下で説明するようにチェーン・ビットCを使用して)満たされる場合、動作が再評価できるように先行レジスタはLビットを設定しないことになる。常時実行条件とまとめて連結されたイベント・テーブル・レジスタは、アクションの繰り返しを避けるために最終ビットを設定することができる。
【0160】
[0168] アクション・エンジン110cは、SCORE(商標)プログラミング言語を使用してプログラミング可能である。特に、前述のように、ハウスキーピングCPU(マスタ・プロセッサ)190は、コンパイルされた場合、マスタ・プロセッサが条件/アクション・ペアの形でアクション・エンジンにタスクを課すように命令を提供可能にする、本発明の一実施形態に従って、本発明のプログラミング言語を介してプログラミング可能である。SCORE(商標)ステートメント及び結果として生じるイベント・テーブルの設定値の例が、以下に示される。SCORE(商標)ステートメントは、SCORE(商標)コードの各行が単一の条件/アクション・ペアと一致するようにフォーマット化されている。
【数13】
OP、C、X、CTR、及びOPERANDは条件を定義する。
ACT、N、S、L、及びAPはアクションを定義する。
【0161】
[0169] より複雑な条件を監視するためのチェーン・ビット
【0162】
[0170] いくつかのケースでは、
図6に示されたイベント・テーブル112のレジスタ140cは、より複雑な条件/アクション・ペアを記述するのに十分な幅がない場合がある。こうしたケースでは、アクション・エンジン110c、イベント・テーブル112、及びスキャナ130cを、チェーン・ビット(
図6では「C」で示される)を使用して、入力条件のより複雑なセット(例えば、満たされると1つ又は複数のアクションが予測される、複数の条件)を評価するように構成することができる。各チェーン・ビットは、前のイベント・テーブル・レジスタ140c内に表される特定の条件142cを満たすことを含むという点で、論理的には条件142cの対応するセットの一部である。実際には、チェーン・ビットは、そのすべてが、実行されることになるイベント・テーブル・エントリの連結されたグループ内に記述されたアクションについて満たされなければならない、入力条件のグループを定義する目的で、単一の「スーパー・レジスタ」を形成するために、連続するイベント・テーブル・レジスタ140cのグループをリンクすることによって、単一のイベント・テーブル・レジスタ140cの有効(及び有限)サイズを増加させるために使用可能である。イベント・テーブル・レジスタ140cの連続するブロックをまとめて連結することで、論理的には、連結されたレジスタ140cをまとめて「AND」し、すなわち、特定セットの命令を(場合によっては所定の順序で)発行することによって、入力信号66の特定の組み合わせに反応させる。
【0163】
[0171]
図8は、連結されたイベント・テーブル・レジスタ140cがまとめて連結された条件142cのグループを識別し、これに反応する方法を示す。(単純にするために、
図8は、各レジスタ140cに対する条件142c及び出力144cのセットのみを示している。)各イベント・テーブル・レジスタ140cは、センサ入力A−C及び現在のカウンタ値CTR(
図8には図示せず)、並びにフラグ・レジスタ値の異なる組み合わせと、連結されたイベント・テーブル・レジスタのセット内の以前のセマフォ要求が成功したかどうかに、反応する。慣例により、連結グループ140c−1内の第1のイベント・テーブル・エントリはそのチェーン・ビット・セットを有さないことになる。この例では、イベント・テーブル・レジスタ140c−2から140c−4はすべて、1に設定されたチェーン・ビットCを有する。イベント・テーブル・レジスタ140c−5は低チェーン・ビットCを有するため、イベント・テーブル・レジスタ140c−1から140c−4とは独立に動作する。
【0164】
[0172] 連結されたレジスタ140c−1及び140c−2はそれぞれ、それぞれの条件142c−1及び142c−2、並びに実行なし(no−op)アクション144c−1及び144c−2と、それに続く「クリティカル・レジスタ」−ここでは、no−opではなく「有用」条件142c−3及びアクション144c−3の両方を備える単一レジスタ140c−3とを、含む。こうした「クリティカル・レジスタ」の後には、連結されたグループの入力条件に合致した場合にも実行されるべきである、追加のアクションを伴う他のレジスタ140c−4が続く可能性があり、このケースでは続く。クリティカル・エントリのそれが実行された場合、有用条件144c−4も即時に実行されることを保証するために、入力条件142c−4は、同語反復的に(tautologically)trueである条件に設定され、すなわちcounter[0] >= 0(XORなし)である。これによって、イベント・テーブル・エントリの結合グループの一部として、この結合グループ内の先行入力条件のすべても満たされなければならないため、このイベント・テーブル・エントリ内のアクションが早期に実行されることはない。最終条件ビットLがレジスタ140c−2内に設定され、これは、クリティカル・レジスタ140c−3上に満足ビットSが設定される前に、レジスタ140c−1及び140c−2が満たされなければならないことを意味する。クリティカル・レジスタ140c−3上に満足ビットSが設定されると、クリティカル・レジスタ140c−4内のアクション144c−4はあらゆるスキャン時に再試行されることになるので(これがセマフォ又は送信アクションであったと想定すると、すべての他のアクションは第1の試行時に完了するため)、先行レジスタ140c−1及び140c−2の状態は問題にならない。クリティカル・レジスタ144c−3後のチェーン内のレジスタ140c−4は最終条件ビットLを設定することになり、スキャナ130cによって満足ビットSが設定可能であることを示す。
【0165】
[0173] 動的環境の進化を追跡するためのセマフォ
【0166】
[0174]
図6に示されたアクション・エンジン110cは、実世界システムの進化に応答して一連の命令を発行することも可能である。最高CPU応答時間(例えば10から1000μs)よりも低速で発生する進化の場合、スキャナ130cはハウスキーピングCPU190に合致(満足条件)を報告することが可能であり、これは命令を発行すること、及び/又は、前述のようにイベント・テーブル・レジスタ140cのうちの1つ又は複数を更新することによって応答する。より高速の進化(すなわち、最高CPU応答時間よりも即時に発生する可能性がある進化)の場合、アクション・エンジン110cは、1つ又は複数のセマフォを使用して、条件142cが互いに左右されるものとすること、及び/又は、そのそれぞれの条件142cがハウスキーピングCPU190による介入なしに同じ入力信号66によって少なくとも部分的に満たされる、異なるレジスタ140c間での競合(衝突)を回避することが、可能である。一般的に言えば、セマフォはリソース競合の管理を容易にし、1つ又は複数の条件の評価が依拠する1つ又は複数のリソースの可用性を保証するためにアクション・エンジンによる獲得及び解除が可能である。
【0167】
[0175] いくつかのインスタンスでは、イベント・テーブル・レジスタ140cの結合グループ内のイベント・テーブル・レジスタ140c−1は、スキャナによって管理されるが、典型的には、後のイベント・テーブル・エントリ内でのセマフォ解除アクションに応答してスキャナによって解除されることになるか、又は、ハウスキーピングCPU190によって一方的に解除される可能性がある、セマフォの集合のうちの1つを獲得するように試行することができる。それらの他の入力条件と共に、セマフォの正常な獲得は、自動的に、こうしたイベント・テーブル・レジスタの結合集合内に存在する任意の後続の応答アクション実行のための必要条件となる。
【0168】
[0176] 例示の実施形態において、セマフォ処理はテスト・アンド・セット(test-and-set)動作に基づく。セマフォは、R/Sフリップフロップであるとみなすことができる。セット動作は、R/SフリップフロップのS入力のクロッキングと同時にフロップの出力Qを読み取ることを含む。セマフォが以前にセット解除(unset)された(R/Sフリップフロップの出力の同時読み取りの結果が論理低であった)場合、セット・アクションは完了するものとみなされる。セマフォが以前にセットされた場合、セット・アクションは正常であるとみなされ、正常なセマフォ・セットに依存するアクションは実行されないことになる。他のアクションとは異なり、セマフォ取得アクションは、セマフォ取得が(将来のスキャン時に)成功するまでこのチェーン内のいずれの後続レジスタ140cも無視されるようにする。セマフォの解除は、フロップへのR入力のクロッキングによって達成される。これらのセマフォの調停済みバージョンを使用して、複数のイベント・テーブル・スキャナ130cの動作を(例えば
図9に関して説明するように)調整することができる。例えば複数のスキャナ130cを備えるアクション・エンジンは、単純なラウンド・ロビン調停方式を使用することができる。
【0169】
[0177] イベント・テーブル112がどのようにセマフォを使用するかを知るために、クロック制御出力(出力0のクロック、出力1〜7のデータ)の設定に含まれる、(a)トリガ・イベントの待機、セマフォの獲得、クロック出力低の設定、出力値1〜7の設定、並びに第2及び第3のプロセスの実行可能化に関する責務を負う第1のプロセス、(b)セットアップ時間の待機、クロック出力高の設定、及び第3のプロセスの実行可能化を含む、第2のプロセス、並びに、(c)組み合わせられたセットアップ及び保持時間の待機、セマフォの解除、及びハウスキーピングCPU190の通知を含む、第3のプロセス、という、3つの同時プロセスを考えてみる。3つのプロセスはそれぞれ、イベント・テーブル112内の連結レジスタ140cのグループによって表される。(セマフォは、出力0〜7、counter[1]、及びflag[0]の操作を希望し、イベント・テーブル112上のこれらのプロセスの複数セットが互いに干渉することなくクロック制御出力を送信できるようにする、任意のプロセスによって使用可能である。)マイクロ秒チック(tick)をカウントするためにカウンタcounter[1]がセットアップされており、出力信号のタイミングを取るために使用されるものと想定する。この例では、セットアップ及び保持時間はどちらも出力信号上で1msである。
【0170】
[0178] 初めに、第1のプロセスはセマフォを獲得する。セマフォを獲得すると、出力0及び2〜7をクリアし、出力1を設定し、タイムベース・パルス、このケースでは1MHzのタイムベースをカウントするように構成されたカウンタ(counter[1])をリセットし、まとめて連結された一連の5つのレジスタを使用してフラグ(flag[0])を設定する。第1のプロセスは、以下のSCORE(商標)ステートメント(コメント付き)及び(上記のように、及び16進形式で符号化された)条件/アクション・ペアを使用して表すことができる。
【数14】
【0171】
[0179] 第2のプロセスは、フラグが設定されると開始する。その後、所与のカウンタ値で出力を設定する。第2のプロセスに関する、対応するSCORE(商標)ステートメント(コメント付き)及び(上記のように、及び16進形式で符号化された)条件/アクション・ペアは、以下の通りである。
【数15】
【0172】
[0180] 第3のプロセスは、フラグが設定されると開始する。所与のカウンタが第2の値に達すると、第1のフラグをクリアしてセマフォを解除する。第3のプロセスに関する、対応するSCORE(商標)ステートメント(コメント付き)及び(上記のように、及び16進形式で符号化された)条件/アクション・ペアは、以下の通りである。
【数16】
【0173】
[0181] 第3のプロセス(c)は、組み合わせられたセットアップ及び保持時間がカウンタ上で経過するのを待機しているため、第2及び第3のプロセス(b)及び(c)を実行可能にするために1つのフラグのみが使用されることに留意されたい。プロセスのすべてのグループが同じカウンタ及びフラグを使用できるように、セマフォはカウンタ及びフラグの使用を保護する。
【0174】
[0182] 別の方法として、セットアップ及び保持時間のタイミング要件が1msであり、これはハウスキーピングCPU190が作動するのに十分な時間を超えているため、これら3つの別々の同時に実行するプロセスは単一のSCORE(商標)ステートメントとして作成可能である
【数17】
【0175】
[0183] ハウスキーピングCPU190は、完了時に、第1の4レジスタ・チェーンを単一レジスタ・チェーンに置き換えることができる。その第2のチェーンの完了時に、第3の待機及びセマフォ解除を実行するために、他の単一チェーン・エントリが作成されることになる。
【0176】
[0184] 複数のイベント・テーブル/スキャナ・コプロセッサを用いるアクション・エンジン
【0177】
[0185]
図9は、それぞれの入力ポート(それぞれ入力ポート158c−1から158c−n、まとめて入力ポート158c)を介して入力バス102に結合された、複数の並列コプロセッサ(それぞれコプロセッサ120c−1から120c−n、まとめてコプロセッサ120c)を含む、アクション・エンジン110cを示す。各コプロセッサ120cは、それぞれのスキャナ(それぞれスキャナ130c−1から130c−n、まとめてスキャナ130c)に結合されたそれぞれのイベント・テーブル(それぞれイベント・テーブル110c−1から110c−n、まとめてイベント・テーブル110c)を含む。前述のように、各イベント・テーブル112は複数のエントリを含み、そのそれぞれが、独立した条件の1つ又は複数のセット及び対応するアクションを表す。
【0178】
[0186] コプロセッサ120cは、非常に低いレイテンシー、例えば約1.6μs以下のレイテンシーでイベント・テーブル110c内に記憶された条件/アクション・ペアを実行するために、並列に動作する。並列実行中、各スキャナ130cは、イベント・テーブル112内の条件と、入力バス102及び入力ポート158cを介して受信される入力信号66とを比較し、
図6〜
図8に関して説明されるように合致が発生した場合、命令を実行する。適切であれば、スキャナ130cは、それぞれの出力ポート(それぞれ出力ポート160c−1から160c−n、まとめて出力ポート160c)を介して出力バス102に出力信号68を送信する。アクション・エンジン110cは、
図6に関して上記で説明したようなカウンタ、フラグ・レジスタ、及び/又はセマフォ・レジスタも含むことができる。
【0179】
[0187] 前述のアクション・エンジンの例は、144c命令コード又は条件/アクション・ペアを保持するのに十分な大きさのメモリを備えた単一のFPGA上の、単一のイベント・テーブル・スキャナとして(例えばHDLコードを使用して)実装可能である。スキャナは、条件を順次評価することによってイベント・テーブルを実行する。スキャナは満たされた条件のチェーンを見つけた場合、アクションを実行し、同じFPGA上に実装可能なマスタCPUに、満たされた条件に対してイベント・テーブル内のいずれのレジスタが使用されているかに関して通知する。マスタCPUは、プロセスが実世界条件の進化に追従する際に、問題のレジスタに新しい命令コードを再ロードする。別の方法として、アクション・エンジンは、周辺構成要素インターフェース(PCI)カード内に埋め込まれ、汎用コンピュータ内で使用される、イベント・テーブル・メモリ及びスキャナを含む専用チップと、コプロセッサ・メモリ内にネイティブ命令コードを配置する代わりに、イベント・テーブルを復号してネイティブ命令を実行するための、埋め込み型プロセッサと、非常に低いレイテンシーで条件を評価するための別々のFPGAプログラムをそれぞれが有する、複数のFPGAとして、実装可能である。
【0180】
[0188] 機械視覚技法/機器を使用する動的環境
【0181】
[0189] 前述のように、本発明の様々な実施形態に従った、特に低いレイテンシー(すなわち著しく高速の応答時間)及び/又は低い変動性レイテンシーを必要とする、制御システム並びにその構成要素は、様々な動的環境を監視及び/又は制御するための幅広い適用可能性を有することができる。本発明に従った制御システムの一適用例は、機械視覚技法及び/又は機器が使用される動的環境によって与えられる。
【0182】
[0190]
図10は、動的環境を監視及び制御するための本発明の実施形態に従った制御システムと共に機械視覚技法及び機器が使用される、動的環境のブロック図である。
図10に示された動的環境は、一般に、自動化プロセス10の実装を容易にするために様々なロボット機器22及び機械視覚機器(まとめて機器20)が使用可能な自動化プロセス10に関し、機械視覚機器は、1つ又は複数のイメージ獲得デバイス42及び照明機器44を含むことができる。本明細書で考察される制御概念が適用可能な自動化プロセス10の例は、(例えば、自動車、消費財製造、及び/又は農業に適用するための)組み立てライン上の部品のカウント、追跡、分類、及び/又は処理、製造プロセスに関連した品質制御機能(例えば不良品の自動検査)、ロボット機器による操作のための部品の位置及び/又は向きの測定、並びに、バルク材料(例えば食料品、農産物など)からの望ましくないアーティファクトの除去を含むが、これらに限定されない。
【0183】
[0191]
図10において、動的環境は、ロボット機器22、照明機器24、及び/又はイメージ獲得デバイス42を制御するための、(
図1に示されたものと同様の)様々なアクチュエータ又は制御デバイス30も含む。環境は、自動化プロセス10を監視し、所与の時点での環境の監視された条件を表す情報(例えば1つ又は複数の入力信号66)を提供するための、様々なセンサ又は入力デバイス40も含む。
図10に示されるように、センサは、自動化プロセスに関するイメージを獲得するための1つ又は複数のイメージ獲得デバイス42、並びに、監視される条件を表す入力信号を提供するための1つ又は複数のセンサ44(例えば、温度、湿度、圧力、光、及び/又は他の環境センサ、カウンタ、情報パケットのいくつかは1つ又は複数のイメージ獲得デバイス又は他のデバイスによって提供可能な情報パケット用の受信キュー、など)を、含むことができる。
【0184】
[0192]
図10は、1つ又は複数の出力信号68を(ロボット機器、照明機器、及びイメージ獲得デバイスのうちの、1つ又は複数を制御する)制御デバイス30に提供するように、時間に応じて監視される条件を表す1つ又は複数の入力信号66を受信及び処理するための、様々な実施形態に関連して上記で説明された、マスタ・プロセッサ190及びアクション・エンジン110を含む、制御システム100も示す。加えて、
図10に示された動的環境は、1つ又は複数のイメージ獲得デバイスによって獲得されたイメージ情報を処理するため、及び照明機器を制御するために、制御システム100に通信可能に結合された、イメージ処理コンピュータ200も含むことができる。イメージ処理コンピュータ200を含む実施形態において、動的環境の監視される条件を表す1つ又は複数の入力信号66によって他の方法で提供される情報の少なくとも一部は、特に、1つ又は複数のイメージ獲得デバイスによって獲得されるイメージから導出される情報に関連して、イメージ処理コンピュータ200によって制御システム100に提供可能である。
【0185】
[0193]
図10に示される動的環境において、イメージ獲得デバイス42及び照明機器24は、自動化プロセス10の監視及び制御に関連して機械視覚技法を実装するために、特に使用可能である。「機械視覚」という用語は、非常に一般的に、プロセスを制御する目的でデータを抽出するためのイメージの分析を指す。機械視覚技法は、典型的には、様々なイメージ獲得デバイス(例えばデジタル・スチル又はビデオ・カメラ)、及びいくつかのケースでは(いくつかのインスタンスにおいて、後続のイメージ処理を容易にするために、一般的な環境からのある物体の様々な弁別を提供するように特に設計及び構成することが可能な)レンズ及び様々な照明機器のうちの、いずれかを使用したイメージの獲得を含む、一連の動作を含む。1つ又は複数のイメージ獲得デバイスによって提供されるイメージ・データは、様々な形式(例えば、ビデオ・シーケンス、複数カメラからのビュー、又は、医療用スキャナからなどの多次元データ)とすることができる。獲得されたイメージは、その後、イメージから様々な情報を抽出するように(例えば、機械視覚機器20及び制御システム100に動作可能に結合されたイメージング処理コンピュータ200、及び/又は、1つ又は複数の他の独立/外部コンピューティング・デバイスによる、様々なイメージ処理ソフトウェアの実行を介して)処理され、抽出された情報は自動化プロセスの制御に関連した決定のために使用される。
【0186】
[0194] 機械視覚のために使用可能な様々な照明機器及び技法に関して、(単色又はカラー光源を使用する)2次元可視光イメージング技法が恐らく最も一般的に採用される。しかしながら、他の適切なイメージング技法は、赤外線照明機器(例えば光源及び/又はフィルタ)が使用可能な選択的赤外線イメージング、ライン・スキャン・イメージング、3次元表面イメージング、及びX線イメージングを含むが、これらに限定されない。イメージ獲得デバイスに関して、こうしたデバイスでは、いくつかのフォーム・ファクタ、機能性、及び通信プロトコルが使用可能であり、例えば、いくつかのインスタンスでは、イメージ獲得デバイスはいずれの特定のイメージ処理機能も有さない可能性があるが、他のインスタンスでは、イメージ獲得デバイスはある程度のイメージ処理機能(例えば、「スマート」カメラ又はセンサ)と共に実装可能である。様々な市販のイメージ獲得デバイスが、イーサネット、USB、又はFireWire接続などの、様々なインターフェースのうちのいずれかを介してデータを通信するように構成可能である。
【0187】
[0195] 制御システム100、イメージ処理コンピュータ200、及び/又は、1つ又は複数の他のコンピューティング/処理デバイスの、マスタ・プロセッサ190によって実装可能な例示のイメージ処理技法に関して、典型的な技法の例は、しきい値処理(グレースケール・イメージの白黒への変換、又はグレースケール値に基づく分離の使用)、セグメント化、ブロブ抽出、パターン認識、バーコード及びデータ行列コード読み取り、光学文字認識、計測(オブジェクト寸法の測定)、位置決め、エッジ検出、カラー分析、フィルタリング(例えば形態学的フィルタリング)、及びテンプレート照合(特定パターンの発見、照合、及び/又はカウント)を含むが、これらに限定されない。
【0188】
[0196]
図10では、前述のイメージ処理技法のうちのいずれか1つ又は複数の使用の結果として獲得されたイメージから抽出される、様々なイメージ情報を、制御システム100によって1つ又は複数のセンサ/入力デバイスから受信される、かつ/又は、イメージ処理コンピュータ200によって制御システム100に提供される、1つ又は複数の入力信号66によって表される情報全体の一部として含めることができる。例えば抽出されたこうしたイメージ情報は、特定のオブジェクト(例えば組み立てライン上の部品)が特定の時点で獲得された1つ又は複数のイメージ内に存在したこと、オブジェクトの特定の位置及び/又は向きが1つ又は複数のイメージ内で検出されたこと、特定の欠陥が1つ又は複数のイメージ内に存在するオブジェクト内で観察されたことなどを、示すことができる。イメージから抽出されたこうした情報は、所与の時点での自動化プロセスの監視される条件を表すために、単独で、或いは1つ又は複数のセンサからの他の情報と組み合わせて、使用可能であり、これに基づいて制御システムは、自動化プロセス10に関連して実行されることになる1つ又は複数の特定の対応するアクションを規定するように、構成可能である。
【0190】
[0198] 本明細書では、様々な本発明の実施形態について説明及び例示してきたが、当業者であれば、機能を実行するため、かつ/又は、本発明で説明された結果及び/又は利点のうちの1つ又は複数を取得するための、様々な他の手段及び/又は構造が容易に想像され、こうした変形及び/又は修正はそれぞれ、本明細書で説明される本発明の実施形態の範囲内にあるものと考えられる。より一般的に言えば、当業者であれば、本明細書で説明されるすべてのパラメータ、寸法、材料、及び構成が例示的であるものと意図されること、並びに、実際のパラメータ、寸法、材料、及び/又は構成が、本発明の教示が使用される特定の適用例に依存するであろうということを、容易に理解されよう。当業者であれば、単なる日常の実験を使用して、本明細書で説明される特定の本発明の実施形態の多くの等価物を理解又は把握されるであろう。したがって、前述の実施形態が単なる例として提示されたものであること、及び、本発明の実施形態は、添付の特許請求の範囲及びその等価物の範囲内で具体的に説明及び請求された以外の方法で実施可能であることを、理解されよう。本開示の本発明の実施形態は、本明細書で説明される各別個の機能、システム、製品、材料、キット、及び/又は方法を対象とする。更に、こうした機能、システム、製品、材料、キット、及び/又は方法の任意の組み合わせは、こうした機能、システム、製品、材料、キット、及び/又は方法が相互に矛盾しない場合、本開示の本発明の範囲内に含まれる。
【0191】
[0199] 前述の実施形態は、多数の方法のうちのいずれかで実装可能である。例えば実施形態は、ハードウェア、ソフトウェア、又はそれらの組み合わせを使用して実装することができる。ソフトウェア内に実装される場合、単一のコンピュータ内に提供されるか又は複数のコンピュータ間で分散されるかにかかわらず、任意の適切なプロセッサ又はプロセッサの集合上でソフトウェア・コードを実行することが可能である。
【0192】
[0200] 更にコンピュータは、ラックマウント式コンピュータ、デスクトップ・コンピュータ、ラップトップ・コンピュータ、又はタブレット・コンピュータなどの、いくつかの形式のうちのいずれかで具体化可能であることを理解されたい。加えてコンピュータは、携帯情報端末(PDA)、スマートフォン、又は他の適切な携帯型又は据え付け型の電子デバイスを含む、一般にはコンピュータとみなされないが適切な処理機能を備えたデバイス内に、組み込むことが可能である。
【0193】
[0201] またコンピュータは、1つ又は複数の入力及び出力デバイスを有することができる。これらのデバイスは、とりわけ、ユーザ・インターフェースを提示するために使用可能である。ユーザ・インターフェースを提供するために使用可能な出力デバイスの例は、出力の視覚的提示のためのプリンタ又はディスプレイ・スクリーンと、出力の聴覚的提示のためのスピーカ又は他の音声生成デバイスとを含む。ユーザ・インターフェース用に使用可能な入力デバイスの例は、キーボードと、マウス、タッチ・パッド、及び離散化タブレットなどのポインティング・デバイスとを含む。他の例として、コンピュータは、音声認識を介して又は他の可聴形式で、入力情報を受信することができる。
【0194】
[0202] こうしたコンピュータは、エンタープライズ・ネットワークなどのローカル・エリア・ネットワーク又はワイド・エリア・ネットワーク、及びインテリジェント・ネットワーク(IN)又はインターネットを含む、任意の適切な形式の1つ又は複数のネットワークによって、相互接続することができる。こうしたネットワークは、任意の適切な技術に基づくものとすることが可能であり、任意の適切なプロトコルに従って動作可能であり、無線ネットワーク、有線ネットワーク、又は光ファイバ・ネットワークを含むことが可能である。
【0195】
[0203] 本明細書で概説される様々な方法又はプロセスは、様々なオペレーティング・システム又はプラットフォームのうちのいずれか1つを使用する1つ又は複数のプロセッサ上で実行可能な、ソフトウェアとして符号化することができる。加えてこうしたソフトウェアは、いくつかの適切なプログラミング言語及び/又はプログラミング又はスクリプティング・ツールのいずれかを使用して作成可能であり、フレームワーク又は仮想機械上で実行される実行可能機械言語コード又は中間コードとしてコンパイルすることもできる。
【0196】
[0204] この点で、様々な本発明の概念は、1つ又は複数のコンピュータ或いは他のプロセッサ上で実行された場合、前述の本発明の様々な実施形態を実装する方法を実行する、1つ又は複数のプログラムを用いて符号化された、コンピュータ読み取り可能記憶媒体(又は複数のコンピュータ読み取り可能記憶媒体)(例えば、コンピュータ・メモリ、1つ又は複数のフロッピィ・ディスク、コンパクト・ディスク、光ディスク、磁気テープ、フラッシュ・メモリ、フィールド・プログラマブル・ゲート・アレイ又は他の半導体デバイス内の回路構成、或いは、他の持続性媒体又は有形コンピュータ記憶媒体)として具体化可能である。コンピュータ読み取り可能媒体は、前述の本発明の様々な態様を実装するためにその上に記憶されたプログラムが1つ又は複数の異なるコンピュータ或いは他のプロセッサ上にロード可能なように、トランスポート可能とすることができる。
【0197】
[0205] 「プログラム」又は「ソフトウェア」という用語は、本明細書では、前述の実施形態の様々な態様を実装するためにコンピュータ又は他のプロセッサをプログラミングするように使用可能な、任意のタイプのコンピュータ・コード又はコンピュータ実行可能命令のセットを言い表すために、総称的な意味で使用される。加えて、一態様によれば、実行された場合、本発明の方法を実行する1つ又は複数のコンピュータ・プログラムは、必ずしも単一のコンピュータ又はプロセッサ上に常駐しないが、本発明の様々な態様を実装するためのいくつかの異なるコンピュータ又はプロセッサ間にモジュール方式で分散可能であることを理解されたい。
【0198】
[0206] コンピュータ実行可能命令は、1つ又は複数のコンピュータ或いは他のデバイスによって実行されるプログラム・モジュールなどの、多くの形とすることができる。一般に、プログラム・モジュールは、特定のタスクを実行するか、又は特定の抽象データ型を実装する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。典型的には、プログラム・モジュールの機能は、様々な実施形態において組み合わせるか又は望ましいように分散させることができる。
【0199】
[0207] また、データ構造は、コンピュータ読み取り可能媒体内に任意の適切な形で記憶することができる。図をわかりやすくするために、データ構造は、データ構造内の位置を介して関係しているフィールドを有するように示されている場合がある。こうした関係は、フィールド間の関係を伝えるコンピュータ読み取り可能媒体内の位置をフィールド用の記憶に割り当てることによって、同様に達成することができる。しかしながら、ポインタ、タグ、又はデータ要素間の関係を確立する他の機構の使用を含み、任意の適切な機構を使用して、データ構造のフィールド内に情報間の関係を確立することができる。
【0200】
[0208] また様々な本発明の概念は、その例がこれまでに提供された1つ又は複数の方法として、具体化することができる。方法の一部として実行される動作は、任意の適切な方法で順序付けすることができる。したがって、動作が例示とは異なる順序で実行され、いくつかの動作を、たとえ例示の実施形態では順次動作として示されていても同時に実行することを含むことができる、実施形態が構成可能である。
【0201】
[0209] 本明細書で定義及び使用されるすべての定義は、辞書定義、参照により組み込まれた文書内の定義、及び/又は、定義された用語の通常の意味を介して、制御するものと理解されたい。
【0202】
[0210] 本明細書及び特許請求の範囲で使用される不定冠詞「a」及び「an」は、明確に示されていない限り、「少なくとも1つ」を意味するものと理解されたい。
【0203】
[0211] 本明細書及び特許請求の範囲で使用される「及び/又は」という句は、そのように結合された要素のうちの「いずれか又は両方」、すなわち、あるケースでは結合的に存在し、他のケースでは離接的に存在する要素を意味するものと理解されたい。「及び/又は」と共に列挙される複数の要素は、同様に、すなわち要素のうちの「1つ又は複数」がそのように結合されるものと解釈されたい。「及び/又は」節によって具体的に識別された要素以外の他の要素は、具体的に識別された要素に関係するか又は関係しないかにかかわらず、オプションで提示可能である。したがって、非限定的な例として、「A及び/又はB」という言い回しは、「含む」などのオープンエンド言語と共に使用される場合、一実施形態ではAのみ(オプションでB以外の要素を含む)を指し、他の実施形態ではBのみ(オプションでA以外の要素を含む)を指し、更に他の実施形態ではA及びB(オプションで他の要素を含む)を指す、などとすることができる。
【0204】
[0212] 本明細書及び特許請求の範囲で使用される場合、「又は」は、上記で定義された「及び/又は」と同じ意味を有するものと理解されたい。例えば、リスト内のアイテムが分離している場合、「又は」又は「及び/又は」は包括的である、すなわち、要素のいくつか又はリストのうちの、少なくとも1つを含むことであるが、複数も含み、オプションでリストに列挙されていない追加のアイテムも含むと解釈されるものとする。「のうちの1つのみ」又は「のうちの正確に1つ」、或いは特許請求の範囲で使用される場合は「からなる」などの、明確に示された用語でない限り、要素のいくつか又はリストのうちの正確に1つの要素の包含を指すことになる。一般に、本明細書で使用される「又は」という用語は、「いずれか」、「のうちの1つ」、「のうちの1つのみ」、又は「のうちの正確に1つ」などの排他性の用語が先行している場合、排他的代替(すなわち、「一方又は他方、但し両方ではない」)を示すとしてのみ解釈されるものとする。特許請求の範囲で使用される場合、「から本質的になる」は、特許法の分野で使用される通常の意味を有するものとする。
【0205】
[0213] 本明細書及び特許請求の範囲で使用される場合、1つ又は複数の要素のリストに関連して「少なくとも1つ」という句は、要素のリスト内にある要素のうちの任意の1つ又は複数から選択された少なくとも1つの要素を意味するが、要素のリスト内に具体的に列挙されたそれぞれ及びあらゆる要素のうちの少なくとも1つを必ずしも含まず、要素のリスト内にある要素のいずれの組み合わせも除外されないものと理解されたい。この定義は、具体的に識別された要素に関係するか又は関係しないかにかかわらず、「少なくとも1つ」の句が指す要素のリスト内に具体的に識別された要素以外の要素がオプションで提示され得ることも可能にする。したがって、非限定的な例として、「A及びBのうちの少なくとも1つ」(又は等価的に「A又はBのうちの少なくとも1つ」、又は等価的に「A及び/又はBのうちの少なくとも1つ」)は、一実施形態では、オプションで複数のAを含む少なくとも1つのAを指し、Bは存在しない(及びオプションでB以外の要素を含む)、他の実施形態では、オプションで複数のBを含む少なくとも1つのBを指し、Aは存在しない(及びオプションでA以外の要素を含む)、更に他の実施形態では、オプションで複数のAを含む少なくとも1つのA、並びに、オプションで複数のBを含む少なくとも1つのB(及びオプションで他の要素を含む)を指す、などとすることができる。
【0206】
[0214] 特許請求の範囲、並びに上記明細書において、「備える」、「含む」、「担持する」、「有する」、「含有する」、「関与する」、「保持する」、「から構成される」などの、すべての移行句は、オープンエンドである、すなわち、含むが限定されないことを意味するものと理解されたい。米国特許局特許審査手続き基準、2111.03項に記載のように、「からなる」及び「から本質的になる」という移行句のみが、それぞれクローズ又は半クローズの移行句であるものとする。