(57)【要約】【課題】インデックス修飾後の領域逸脱検出処理をプログラマブルコントローラが実行するプログラム中で行う必要がなく、処理速度を低下させない。【解決手段】インデックス修飾に使用される値を保持しているインデックスレジスタ１３と、命令コードに含まれるアドレスとインデックスレジスタ１３に保持されている値によりインデックス修飾後の実際にアクセスするアドレスを算出するインデックス修飾部１４と、算出されたインデックス修飾後のアドレスが命令コードに含まれるアドレスに対応するメモリマップ上のデバイス領域を逸脱するか否かを判定する領域逸脱判定部１００とを備える。【選択図】図２
2008027236.tif 000002
【特許請求の範囲】
【請求項１】
インデックス修飾に使用される値を保持しているインデックスレジスタと、
命令コードに含まれるレジスタ番号に基づき上記インデックスレジスタに保持されている値を取得し、上記命令コードに含まれるアドレスと上記インデックスレジスタから取得した値に基づき、インデックス修飾後の実際にアクセスするアドレスを算出するインデックス修飾部と、
該インデックス修飾部により算出されたインデックス修飾後の実際にアクセスするアドレスが、上記命令コードに含まれるアドレスに対応するメモリマップ上のデバイス領域を逸脱するか否かを判定する領域逸脱判定部とを備えたプログラマブルコントローラ。
【請求項２】
領域逸脱判定部は、
メモリマップ上の複数のデバイス領域の下限値と上限値を格納しているデバイス領域設定レジスタと、
命令コードに含まれるアドレスが、上記デバイス領域設定レジスタにおけるどのデバイス領域の下限値と上限値の間のアドレスであるかをチェックして、メモリマップ上のどのデバイス領域にあるかを判定するデバイス領域判定部と、
上記デバイス領域設定レジスタを参照して、上記デバイス領域判定部により判定されたデバイス領域の下限値と上限値を選択する上下限値選択部と、
インデックス修飾部により算出された実際にアクセスするアドレスが、上記上下限値選択部により選択されたデバイス領域の下限値と上限値の範囲内であるか否かを判定する範囲内判定部とを備えたことを特徴とする請求項１記載のプログラマブルコントローラ。
【請求項３】
インデックス修飾部は、命令コードが要求するアクセス幅が単位アクセス幅を超える場合に、上記命令コードに含まれるアドレスとインデックスレジスタから取得した値に基づき、インデックス修飾後の実際にアクセスする開始アドレスを算出し、算出した開始アドレスと命令コードに含まれるアドレス幅を出力し、
領域逸脱判定部は、
上記インデックス修飾部により出力された実際に最初にアクセスする開始アドレスとアドレス幅に基づき、最後にアクセスする最終アドレスを算出する最終アドレス計算部と、
メモリマップ上の複数のデバイス領域の下限値と上限値を格納しているデバイス領域設定レジスタと、
命令コードに含まれるアドレスが、上記デバイス領域設定レジスタにおけるどのデバイス領域の下限値と上限値の間のアドレスであるかをチェックして、メモリマップ上のどのデバイス領域にあるかを判定するデバイス領域判定部と、
上記デバイス領域設定レジスタを参照して、上記デバイス領域判定部により判定されたデバイス領域の下限値と上限値を選択する上下限値選択部と、
上記インデックス修飾部により出力された開始アドレスと上記最終アドレス計算部により算出された最終アドレスが、上記上下限値選択部により選択されたデバイス領域の下限値と上限値の範囲内であるか否かを判定する範囲内判定部とを備えたことを特徴とする請求項１記載のプログラマブルコントローラ。
【請求項４】
インデックス修飾部は、命令コードが要求するアクセス幅が単位アクセス幅を超える場合に、上記命令コードに含まれるアドレスとインデックスレジスタから取得した値に基づき、インデックス修飾後の実際にアクセスする開始アドレスを算出し、算出した開始アドレスと命令コードに含まれるアドレス幅を出力し、
領域逸脱判定部は、
上記インデックス修飾部により出力された実際に最初にアクセスする開始アドレスとアドレス幅に基づき、最後にアクセスする最終アドレスを算出する最終アドレス計算部と、
メモリマップ上に連続して確保されている複数のデバイス領域の下限値又は上限値を境界アドレスとして、上記連続して確保されているデバイス領域の順番に格納しているデバイス領域設定レジスタと、
命令コードに含まれるアドレスが、上記デバイス領域設定レジスタにおける連続するどの境界アドレス間のアドレスであるかをチェックして、メモリマップ上のどのデバイス領域にあるかを判定するデバイス領域判定部と、
上記デバイス領域設定レジスタを参照して、上記デバイス領域判定部により判定されたデバイス領域の連続する境界アドレスを選択する上下限値選択部と、
上記インデックス修飾部により出力された開始アドレスと上記最終アドレス計算部により算出された最終アドレスが、上記上下限値選択部により選択された連続する境界アドレスの範囲内であるか否かを判定する範囲内判定部とを備えたことを特徴とする請求項１記載のプログラマブルコントローラ。
【請求項５】
領域逸脱判定部において、
デバイス領域設定レジスタは要求する処理内容を記述した各デバイス領域の属性情報を格納し、
上記デバイス領域設定レジスタを参照して、デバイス領域判定部により判定されたデバイス領域の属性情報を選択するデバイス領域属性選択部を備え、
範囲内判定部は、開始アドレスと最終アドレスが連続する境界アドレスの範囲内でないと判定した場合に、上記デバイス領域属性選択部により選択されたデバイス領域の属性情報に基づき要求する処理内容を出力することを特徴とする請求項４記載のプログラマブルコントローラ。
【請求項６】
命令コードを含むプログラムを格納していると共に、複数のデバイス領域の境界アドレスと各デバイス領域の属性情報を含む上記プログラム用のデバイス領域情報を格納しているプログラム格納部と、
指示されたプログラム用のデバイス領域情報を上記プログラム格納部から取得し、取得したデバイス領域情報に基づき、上記複数のデバイス領域の境界アドレスと各デバイス領域の属性情報をデバイス領域設定レジスタに設定するデバイス領域設定部とを備えたことを特徴とする請求項５記載のプログラマブルコントローラ。
【請求項７】
デバイス領域設定部は、プログラムに含まれているデバイス領域の変更命令に基づき、デバイス領域設定レジスタに設定されている複数のデバイス領域の境界アドレスと各デバイス領域の属性情報を変更することを特徴とする請求項６記載のプログラマブルコントローラ。
【請求項８】
領域逸脱判定部は、
メモリマップ上に連続して確保されている複数のデバイス領域の下限値又は上限値を境界アドレスとして順不同に格納しているデバイス領域設定レジスタと、
命令コードに含まれるアドレスと上記デバイス領域設定レジスタに格納されている全ての境界アドレスとの大小比較を行って比較結果を出力する第１のデバイス境界比較部と、
インデックス修飾部により算出された実際にアクセスするアドレスとデバイス領域設定レジスタに格納されている全ての境界アドレスとの大小比較を行って比較結果を出力する第２のデバイス境界比較部と、
上記第１のデバイス境界比較部により出力された比較結果と上記第２のデバイス境界比較部により出力された比較結果が一致するか否かを判定する比較結果判定部とを備えたことを特徴とする請求項１記載のプログラマブルコントローラ。
【請求項９】
インデックス修飾部は、命令コードが要求するアクセス幅が単位アクセス幅を超える場合に、上記命令コードに含まれるアドレスとインデックスレジスタから取得した値に基づき、インデックス修飾後の実際にアクセスする開始アドレスを算出し、算出した開始アドレスと命令コードに含まれるアドレス幅を出力し、
領域逸脱判定部において、
上記インデックス修飾部により出力された実際に最初にアクセスする開始アドレスとアドレス幅に基づき、最後にアクセスする最終アドレスを算出する最終アドレス計算部と、
該最終アドレス計算部により算出された実際に最後にアクセスする最終アドレスとデバイス領域設定レジスタに格納されている全ての境界アドレスとの大小比較を行って比較結果を出力する第３のデバイス境界比較部とを備え、
比較結果判定部が第１のデバイス境界比較部により出力された比較結果と第２のデバイス境界比較部により出力された比較結果と上記第３のデバイス境界比較部により出力された比較結果とが一致するか否かを判定することを特徴とする請求項８記載のプログラマブルコントローラ。
【請求項１０】
インデックス修飾部から出力された実際にアクセスするアドレスを用いてデバイス領域へのアクセスを行うアクセス実行部を備え、
該アクセス実行部がデバイス領域へのリードアクセス中に、領域逸脱判定部が領域逸脱判定を実施して、デバイス領域を逸脱している場合に、上記アクセス実行部にアクセス無効を出力してリードアクセスを停止させることを特徴とする請求項１記載のプログラマブルコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、メモリ空間上に複数のデバイス領域を割り当てて使用するプログラマブルコントローラに関するもので、特に、プログラム中のインデックス修飾によってユーザーが意図していない領域に対して行われるメモリアクセスを検出する機構を有するプログラマブルコントローラに関するものである。
【背景技術】
【０００２】
プログラマブルコントローラはユーザーが記述したプログラムに従って動作する。ユーザーが記述するプログラムでは、ユーザーはＸ１，Ｙ１０，Ｄ１００といったデバイス種別とデバイス番号を用いて処理を記述する。ここで、Ｘ，Ｙ，Ｄはデバイス種別であり、その後の数字はデバイス番号である。ユーザーが作成したプログラムはプログラマブルコントローラが実行可能な形式に変換され、プログラマブルコントローラのプログラム記憶領域に格納される。その際にデバイス種別やデバイス番号といった情報はプログラマブルコントローラからアクセスできるメモリ空間内の絶対アドレスに置き換えられる。その後、プログラマブルコントローラはプログラム記憶領域にあるプログラムを順に実行する。
【０００３】
ユーザープログラム中で異なるデバイス種別として記述されるＸ，Ｙ，Ｄは、上記絶対アドレスへの変換によって同じメモリ空間内の異なる領域に割り当てられる。そのため、ユーザープログラムによる誤ったインデックス修飾によって、本来はアクセスできない異なるデバイス種別の領域へアクセスをすることがある。例えば、インデックスレジスタＺ０を用いてＸ１０００Ｚ０と記載した場合、Ｚ０の値によってはＸデバイス領域を越え、Ｘ領域以外の領域に対してアクセスを行う可能性がある。この場合、Ｚ０の値はプログラム実行中に変化するため、プログラム記述時点ではわからないことが多い。このような現象が発生した場合に、プログラムミスにより意図しない同種デバイスのデータを壊すだけでなく、異なる種類のデバイスデータが壊れるというユーザーから考えると想像し難い現象が発生する。
【０００４】
アクセスできない領域に対してアクセスを防ぐために、一般的にメモリ保護といわれる機能がある。しかし、メモリ保護によって保護される領域はプロセスやスレッドと呼ばれる一連のプログラム毎に定められており、上記に示したようにインデックス修飾によってアクセスする領域が変化したことを検出する機能ではない。
【０００５】
このような課題への対策として、特許文献１の先行事例に示すように、インデックスレジスタに制限を設ける方法がある。この先行事例では、主な適用例として、配列変数へのアクセスにインデックスレジスタを用いた場合が取り上げられている。配列変数の先頭要素に対してインデックス修飾を行った結果得られるアドレスが、配列変数として確保した領域から逸脱したことを検出するために、インデックスレジスタの値に対して上下限値を事前に設定している。プログラム実行中には、インデックスレジスタへのライトを検出し、ライトデータが該上下限値から逸脱した場合に処理を停止している。
【０００６】
この先行事例では、予め確保した配列領域を逸脱しないようにインデックスレジスタの上下限値を設定することができるため、確保した配列領域に対して厳密な領域管理が可能であることが特徴である。ここで記載されている配列領域をデバイス領域と考えて、先行事例に記載された方法をプログラマブルコントローラのデバイス領域逸脱検出に適用することが可能である。
【０００７】
しかし、このようなプログラマブルコントローラでは通常インデックスレジスタの数が限られているため、プログラマブルコントローラが実行するプログラム中で同一のインデックスレジスタを異なる領域に対する修飾に用いる場合には、インデックスレジスタの上下限値設定を変更しなければならない。また、プログラマブルコントローラのデバイス領域は該領域中の任意のアドレスに対してインデックス修飾を行うことが可能であり、先行事例を適用する場合に、同一デバイス領域中であっても、Ｘ０Ｚ０とＸ１００Ｚ０のように、修飾されるアドレスが変わる度にインデックスレジスタが許される上下限値が変更になるため、上下限値を再設定する必要がある。これらの処理は一般的にプログラマブルコントローラが実行するプログラム中に記載されるため、プログラマブルコントローラとしての処理速度が低下する。
【０００８】
また、先行事例では、上下限値のチェックをインデックスレジスタへのライト時に行っているため、インデックスレジスタを単なるレジスタとして通常の演算に用いる場合には、上下限値設定を解除する必要がある。そのためインデックス修飾を行う命令の大部分に上下限値の設定や解除を行う処理が必要となり、上下限値設定のための命令を処理する時間が必要となるか、又は命令コードと併せて上下限値に関する情報を保持する領域が必要となる。これらの理由により、先行事例をデバイス領域の逸脱検出に適用する場合には、プログラム実行中に必要となる追加情報・追加処理が大きいため適していない。
【０００９】
【特許文献１】特開平５−２４１６５０号公報（段落０００４）
【発明の開示】
【発明が解決しようとする課題】
【００１０】
従来のプログラマブルコントローラは以上のように構成されているので、インデックス修飾後の領域逸脱検出処理をプログラマブルコントローラが実行するプログラム中で行うと、プログラムの実行に伴い、インデックス修飾されるアドレスが変化したときのインデックスレジスタの上下限値設定や解除等の処理が必要となり、プログラマブルコントローラとしての処理速度が低下するという課題があった。
【００１１】
この発明は上記のような課題を解決するためになされたもので、インデックス修飾後の領域逸脱検出処理をプログラマブルコントローラが実行するプログラム中で行う必要がなく、処理速度を低下させないプログラマブルコントローラを得ることを目的とする。
【課題を解決するための手段】
【００１２】
この発明に係るプログラマブルコントローラは、インデックス修飾に使用される値を保持しているインデックスレジスタと、命令コードに含まれるレジスタ番号に基づき上記インデックスレジスタに保持されている値を取得し、上記命令コードに含まれるアドレスと上記インデックスレジスタから取得した値に基づき、インデックス修飾後の実際にアクセスするアドレスを算出するインデックス修飾部と、該インデックス修飾部により算出されたインデックス修飾後の実際にアクセスするアドレスが、上記命令コードに含まれるアドレスに対応するメモリマップ上のデバイス領域を逸脱するか否かを判定する領域逸脱判定部とを備えたものである。
【発明の効果】
【００１３】
この発明によれば、インデックス修飾後の領域逸脱検出処理をプログラマブルコントローラが実行するプログラム中で行う必要がなく、プログラマブルコントローラとしての処理速度を低下させないという効果が得られる。
【発明を実施するための最良の形態】
【００１４】
実施の形態１．
図１はこの発明の実施の形態１で想定するメモリマップ１０とデバイス領域設定レジスタ１０１を示す図である。メモリマップ１０上に複数のデバイス領域が確保されており、それぞれのデバイス領域の下限値と上限値がデバイス領域下限レジスタ１０１ａとデバイス領域上限レジスタ１０１ｂに格納されており、これらをまとめてデバイス領域設定レジスタ１０１とする。図１の例では一つのメモリ空間上に４つのデバイス領域を割り当てており、デバイス領域設定レジスタ１０１にそれぞれのデバイス領域の上限値と下限値が格納されている。デバイス領域下限レジスタ１０１ａとデバイス領域上限レジスタ１０１ｂはプログラムとは別のパラメータとしてプログラムの実行前に設定される。図１ではメモリマップ１０上のデバイス領域の最大数を仮に４として記載しているが、デバイス領域数を変更することは可能である。
【００１５】
ユーザーによって記述されるプログラム中にはデバイス領域に対してアクセスを行う命令コードがある。この命令コードには、アクセスするデバイス領域のアドレスとインデックス修飾に用いるレジスタ番号が含まれており、命令コードに含まれるアドレスとインデックス修飾用に指定されたレジスタの値を加算して実際にアクセスするアドレスを算出する。このアドレス加算処理をインデックス修飾と呼び、この処理を行うため命令コードに含まれているアドレスと実際にアクセスを行うアドレスは異なる場合がある。
【００１６】
図２はこの発明の実施の形態１によるプログラマブルコントローラの構成を示すブロック図である。このプログラマブルコントローラは、プログラム格納部１１、命令コード取得部１２、インデックスレジスタ１３、インデックス修飾部１４、アクセス実行部１５及び領域逸脱判定部１００を備え、領域逸脱判定部１００は、デバイス領域設定レジスタ１０１、デバイス領域判定部１０２、上下限値選択部１０３及び範囲内判定部１０４を備えている。
【００１７】
図２において、プログラム格納部１１は命令コードを含むプログラムを格納し、命令コード取得部１２はプログラム格納部１１に格納されているプログラムの命令コードを取得する。インデックスレジスタ１３はインデックス修飾に使用される値を保持し、インデックス修飾部１４は、命令コード取得部１２により取得された命令コードに含まれるレジスタ番号に基づきインデックスレジスタ１３に保持されている値を取得し、命令コードに含まれるアドレスとインデックスレジスタ１３から取得した値を加算して、インデックス修飾後の実際にアクセスするアドレスを算出する。
【００１８】
領域逸脱判定部１００は、命令コード取得部１２により取得された命令コードに含まれるアドレスを入力し、インデックス修飾部１４により算出されたインデックス修飾後の実際にアクセスするアドレスが、命令コードに含まれるアドレスに対応するメモリマップ１０上のデバイス領域を逸脱するか否かを判定する。すなわち、領域逸脱判定部１００は、命令コード取得部１２により取得された命令コードに含まれるアドレスからメモリマップ１０上のデバイス領域を判定し、判定したデバイス領域の下限値と上限値を選択し、インデックス修飾部１４により算出された実際にアクセスするアドレスが選択した下限値と上限値の範囲内であるか否かを判定し、実際にアクセスするアドレスがデバイス領域の下限値と上限値の範囲内である場合にはアクセス許可を出力し、実際にアクセスするアドレスがデバイス領域の下限値と上限値の範囲内でない場合には停止要求を出力する。
【００１９】
アクセス実行部１５は、領域逸脱判定部１００から出力されたアクセス許可に基づき、インデックス修飾部１４から出力された実際にアクセスするアドレスを用いてデバイス領域へのアクセスを行う。
【００２０】
領域逸脱判定部１００において、デバイス領域設定レジスタ１０１は、メモリマップ１０上の複数のデバイス領域の下限値と上限値を、各デバイス領域下限レジスタ１０１ａとデバイス領域上限レジスタ１０１ｂに格納している。デバイス領域判定部１０２は、命令コード取得部１２により取得された命令コードに含まれるアドレスが、デバイス領域設定レジスタ１０１におけるどのデバイス領域下限レジスタ１０１ａとデバイス領域上限レジスタ１０１ｂの間のアドレスであるかをチェックして、メモリマップ１０上のどのデバイス領域にあるかを判定する。上下限値選択部１０３は、デバイス領域設定レジスタ１０１を参照して、デバイス領域判定部１０２により判定されたデバイス領域の下限値と上限値を選択する。
【００２１】
範囲内判定部１０４は、インデックス修飾部１４により算出された実際にアクセスするアドレスが、上下限値選択部１０３により選択されたデバイス領域の下限値と上限値の範囲内であるか否かを判定し、実際にアクセスするアドレスがデバイス領域の下限値と上限値の範囲内である場合には、すなわち、次の式（１）を満足していれば、インデックス修飾後のアドレスがデバイス領域を逸脱するものではないと判定して、アクセス実行部１５にアクセス許可を出力する。
下限値≦アドレス≦上限値                                              （１）
【００２２】
一方、範囲内判定部１０４は、実際にアクセスするアドレスがデバイス領域の下限値と上限値の範囲内でない場合には、すなわち、上記式（１）を満足していなければ、インデックス修飾後のアドレスがデバイス領域を逸脱するものであると判定して、プログラマブルコントローラ全体を制御する制御部（図示せず）にプログラマブルコントローラとしての処理の停止要求を出力すると共にユーザーに通知する。
【００２３】
このような構成により、命令コードに含まれるアドレスに対してインデックス修飾を行うと共に、命令コードに含まれるアドレスとインデックス修飾後のアドレスが同じデバイス領域に属することを判定した後に、デバイス領域のアクセスを行うことが可能となる。
【００２４】
以上のように、この実施の形態１によれば、領域逸脱判定部１００が命令コードに含まれるアドレスとインデックス修飾後のアドレスが同じデバイス領域に属するか否かを判定することにより、インデックス修飾後の領域逸脱検出処理をプログラマブルコントローラが実行するプログラム中で行う必要がなく、プログラマブルコントローラとしての処理速度を低下させないという効果が得られる。
【００２５】
実施の形態２．
図３はこの発明の実施の形態２によるプログラマブルコントローラの構成を示すブロック図である。このプログラマブルコントローラは、上記実施の形態１の図２に示すプログラマブルコントローラと同様に、プログラム格納部１１、命令コード取得部１２、インデックスレジスタ１３、インデックス修飾部１４、アクセス実行部１５及び領域逸脱判定部１００を備えているが、領域逸脱判定部１００の構成が図２と異なる。
【００２６】
図３において、領域逸脱判定部１００は、デバイス領域設定レジスタ１０１、デバイス領域判定部１０２、上下限値選択部１０３、範囲内判定部１０４及び最終アドレス計算部１０５を備え、範囲内判定部１０４は、下限値判定部１０４ａ、上限値判定部１０４ｂ及び結果判定部１０４ｃを備えている。
なお、この発明の実施の形態２で想定するメモリマップ１０とデバイス領域設定レジスタ１０１を示す図は、上記実施の形態１の図１と同じである。
【００２７】
上記実施の形態１では、命令コードが要求するアクセス幅が単位アクセス幅を超えない場合を想定しているが、この実施の形態２では、命令コードが要求するアクセス幅が、１６ビット（２バイト）アクセス、３２ビット（４バイト）アクセスのように、単位アクセス幅を超える場合について説明する。命令コードが要求するアクセス幅が、単位アクセス幅を超える場合には、インデックス修飾部１４により算出された実際にアクセスするアドレスは、最初にアクセスする開始アドレスを示し、最後にアクセスする最終アドレスは開始アドレスと異なったものとなる。すなわち、最初にアクセスする開始アドレスがデバイス領域を逸脱するものではなくても、最後にアクセスする最終アドレスがデバイス領域を逸脱する場合がある。
【００２８】
インデックス修飾部１４は、命令コード取得部１２により取得された命令コードに含まれるレジスタ番号に基づきインデックスレジスタ１３に保持されている値を取得し、命令コードに含まれるアドレスとインデックスレジスタ１３から取得した値を加算して、インデックス修飾後の実際にアクセスする開始アドレスを算出し、算出した開始アドレスと命令コードに含まれるアドレス幅を出力する。
【００２９】
最終アドレス計算部１０５は、インデックス修飾部１４により出力された実際に最初にアクセスする開始アドレスとアドレス幅に基づき、次の式（２）を用いて最後にアクセスする最終アドレスを算出する。
最終アドレス＝開始アドレス＋アクセス幅−１                            （２）
【００３０】
範囲内判定部１０４は、インデックス修飾部１４により出力された開始アドレスと最終アドレス計算部１０５により算出された最終アドレスが、上下限値選択部１０３により選択されたデバイス領域の下限値と上限値の範囲内であるかを判定する。
【００３１】
範囲内判定部１０４における下限値判定部１０４ａは、インデックス修飾部１４により算出された実際に最初にアクセスする開始アドレスが、上下限値選択部１０３により選択されたデバイス領域の下限値以上であるか否かを判定する。また、範囲内判定部１０４における上限値判定部１０４ｂは、最終アドレス計算部１０５により算出された実際に最後にアクセスする最終アドレスが、上下限値選択部１０３により選択されたデバイス領域の上限値以下であるか否かを判定する。
【００３２】
範囲内判定部１０４における結果判定部１０４ｃは、下限値判定部１０４ａにより実際に最初にアクセスする開始アドレスがデバイス領域の下限値以上であると判定され、かつ、上限値判定部１０４ｂにより実際に最後にアクセスする最終アドレスがデバイス領域の上限値以下であると判定された場合に、インデックス修飾後のアドレスがデバイス領域を逸脱するものではないと判定して、アクセス実行部１５にアクセス許可を出力し、それ以外の場合には、インデックス修飾後のアドレスがデバイス領域を逸脱するものであると判定して、プログラマブルコントローラ全体を制御する制御部（図示せず）にプログラマブルコントローラとしての処理の停止要求を出力すると共にユーザーに通知する。
【００３３】
アクセス実行部１５は、領域逸脱判定部１００から出力されたアクセス許可に基づき、インデックス修飾部１４から出力された実際にアクセスするアドレスとアドレス幅を用いてデバイス領域へのアクセスを行う。
【００３４】
その他のプログラム格納部１１、命令コード取得部１２、インデックスレジスタ１３、デバイス領域設定レジスタ１０１、デバイス領域判定部１０２及び上下限値選択部１０３の処理は、上記実施の形態１と同様である。
【００３５】
このような構成により、命令コードが要求するアクセス幅が単位アクセス幅を超える場合にも、命令コードに含まれるアドレスに対してインデックス修飾を行うと共に、命令コードに含まれるアドレスとインデックス修飾後のアドレスが同じデバイス領域に属することを判定した後に、デバイス領域のアクセスを行うことが可能となる。
【００３６】
以上のように、この実施の形態２によれば、命令コードが要求するアクセス幅が単位アクセス幅を超える場合にも、領域逸脱判定部１００が命令コードに含まれるアドレスとインデックス修飾後のアドレスが同じデバイス領域に属するか否かを判定することにより、インデックス修飾後の領域逸脱検出処理をプログラマブルコントローラが実行するプログラム中で行う必要がなく、プログラマブルコントローラとしての処理速度を低下させないという効果が得られる。
【００３７】
実施の形態３．
この発明の実施の形態３によるプログラマブルコントローラの構成を示すブロック図は、上記実施の形態２の図３と同じであり、上記実施の形態２と同様に、命令コードが要求するアクセス幅が単位アクセス幅を超える場合について説明する。
【００３８】
図４はこの発明の実施の形態３で想定するメモリマップ１０とデバイス領域設定レジスタ１０１を示す図である。図４に示すように、メモリマップ１０上に複数のデバイス領域０〜６が連続して確保されており、それぞれのデバイス領域０〜６の上限値又は下限値が境界レジスタとして、連続して確保されているデバイス領域０〜６の順番にデバイス境界レジスタ１０１ｃに格納されており、これらをまとめてデバイス領域設定レジスタ１０１とする。このように、メモリマップ１０上に複数のデバイス領域が連続して確保され、それぞれのデバイス領域の上限値又は下限値を境界アドレスとして、連続して確保されているデバイス領域０〜６の順番にデバイス領域設定レジスタ１０１に格納することにより、デバイス領域設定レジスタ１０１のレジスタ数を削減することができる。
【００３９】
メモリ空間中の連続した領域にデバイス領域を確保する場合、隣接するデバイス領域の上限値と下限値は連続する値となり、上限値に関するチェックは隣接する次のデバイス領域の下限値を用いて実現可能となる。すなわち、デバイス領域ｎ−１の上限値はデバイス領域ｎの下限値と連続しており、次の式（３）が成立する。
（デバイス領域ｎ−１の上限値）＋１＝（デバイス領域ｎの下限値）          （３）
【００４０】
そこで、デバイス領域設定レジスタ１０１のデバイス境界レジスタ１０１ｃにそれぞれのデバイス領域の下限値が格納されている場合には、デバイス領域判定部１０２は、命令コード取得部１２により取得された命令コードに含まれるアドレスが、デバイス領域設定レジスタ１０１におけるどの境界レジスタの間のアドレスであるかをチェックして、メモリマップ１０上のどのデバイス領域にあるかを判定する。上下限値選択部１０３は、デバイス領域設定レジスタ１０１を参照して、デバイス領域判定部１０２により判定されたデバイス領域の連続する境界アドレス（デバイス領域判定部１０２により判定されたデバイス領域の下限値とメモリマップ１０上に確保されている次のデバイス領域の下限値）を選択する。
【００４１】
範囲内判定部１０４は、インデックス修飾部１４により算出された最初にアクセスする開始アドレス及び最終アドレス計算部１０５により算出された最後にアクセスする最終アドレスが、上下限値選択部１０３により選択されたデバイス領域の連続する境界アドレス（上下限値選択部１０３により選択されたデバイス領域の下限値とメモリマップ１０上に確保されている次のデバイス領域の下限値）の範囲内であるか否かを判定する。すなわち、範囲内判定部１０４は、デバイス領域ｎについて領域逸脱の判定を行う場合には、次の式（４）により判定を行う。
（デバイス領域ｎの下限値）≦アドレス＜（デバイス領域ｎ＋１の下限値）    （４）
上記式（４）において、アドレスは開始アドレス及び最終アドレスを表している。
【００４２】
このとき、範囲内判定部１０４における上限値判定部１０４ｂは、最終アドレス計算部１０５により算出された実際に最後にアクセスする最終アドレスが、上下限値選択部１０３により選択されたデバイス領域ｎ＋１の下限値未満であるか否かを判定する。また、範囲内判定部１０４における下限値判定部１０４ａは、インデックス修飾部１４により算出された実際に最初にアクセスする開始アドレスが、上下限値選択部１０３により選択されたデバイス領域ｎの下限値以上であるか否かを判定する。
【００４３】
一方、デバイス領域設定レジスタ１０１のデバイス境界レジスタ１０１ｃにそれぞれのデバイス領域の上限値が格納されている場合には、デバイス領域判定部１０２は、命令コード取得部１２により取得された命令コードに含まれるアドレスが、デバイス領域設定レジスタ１０１におけるどの境界レジスタの間のアドレスであるかをチェックして、上下限値選択部１０３は、デバイス領域設定レジスタ１０１を参照して、デバイス領域判定部１０２により判定されたデバイス領域の連続する境界アドレス（デバイス領域判定部１０２により判定されたデバイス領域のメモリマップ１０上に確保されている前のデバイス領域の上限値とデバイス領域判定部１０２により判定されたデバイス領域の上限値）を選択する。
【００４４】
範囲内判定部１０４は、インデックス修飾部１４により算出された最初にアクセスする開始アドレス及び最終アドレス計算部１０５により算出された最後にアクセスする最終アドレスが、上下限値選択部１０３により選択されたデバイス領域の連続する境界アドレス（上下限値選択部１０３により選択されたデバイス領域のメモリマップ１０上に確保されている前のデバイス領域の上限値とデバイス領域判定部１０２により判定されたデバイス領域の上限値）の範囲内であるか否かを判定する。
すなわち、範囲内判定部１０４は、デバイス領域ｎについて領域逸脱の判定を行う場合には、次の式（５）により判定を行う。
（デバイス領域ｎ−１の上限値）＜アドレス≦（デバイス領域ｎの上限値）    （５）
上記式（５）において、アドレスは開始アドレス及び最終アドレスを表している。
【００４５】
このとき、範囲内判定部１０４における上限値判定部１０４ｂは、最終アドレス計算部１０５により算出された実際に最後にアクセスする最終アドレスが、上下限値選択部１０３により選択されたデバイス領域ｎの上限値以下であるか否かを判定する。また、範囲内判定部１０４における下限値判定部１０４ａは、インデックス修飾部１４により算出された実際に最初にアクセスする開始アドレスが、上下限値選択部１０３により選択されたデバイス領域ｎ−１の上限値を超えるか否かを判定する。
【００４６】
範囲内判定部１０４における結果判定部１０４ｃは、下限値判定部１０４ａ及び上限値判定部１０４ｂによる判定結果が上記式（４）又は式（５）を満足している場合には、インデックス修飾後のアドレスがデバイス領域を逸脱するものではないと判定して、アクセス実行部１５にアクセス許可を出力し、下限値判定部１０４ａ及び上限値判定部１０４ｂによる判定結果が上記式（４）又は式（５）を満足していない場合には、インデックス修飾後のアドレスがデバイス領域を逸脱するものであると判定して、プログラマブルコントローラ全体を制御する制御部（図示せず）にプログラマブルコントローラとしての処理の停止要求を出力すると共にユーザーに通知する。
【００４７】
その他のプログラム格納部１１、命令コード取得部１２、インデックスレジスタ１３、インデックス修飾部１４、アクセス実行部１５、デバイス領域設定レジスタ１０１及び最終アドレス計算部１０５の処理は、上記実施の形態２と同様である。
【００４８】
以上のように、この実施の形態３によれば、メモリマップ１０上に複数のデバイス領域を連続して確保し、それぞれのデバイス領域の上限値又は下限値を境界アドレスとしてデバイス領域設定レジスタ１０１に順番に格納し、領域逸脱判定部１００が命令コードに含まれるアドレスとインデックス修飾後のアドレスが同じデバイス領域に属するか否かを判定することにより、上記実施の形態２より少ないデバイス領域設定レジスタ１０１のレジスタ数で、上記実施の形態２と同じ効果が得られる。
【００４９】
実施の形態４．
図５はこの発明の実施の形態４で想定するメモリマップ１０とデバイス領域設定レジスタ１０１を示す図である。図５に示すメモリマップ１０には、上記実施の形態３の図４と同様に、複数のデバイス領域０〜６が連続して確保されているが、それぞれのデバイス領域の境界アドレスがデバイス境界レジスタ１０１ｃに順不同に格納されており、これらをまとめてデバイス領域設定レジスタ１０１としている点が図４と異なっている。このように、このデバイス境界レジスタ１０１ｃには境界アドレスを任意に設定することができる。なお、それぞれのデバイス領域の境界アドレスとしてはデバイス領域０〜６の上限値又は下限値が格納されているものとする。
【００５０】
図６はこの発明の実施の形態４によるプログラマブルコントローラの構成を示すブロック図である。このプログラマブルコントローラは、上記実施の形態１の図２に示すプログラマブルコントローラと同様に、プログラム格納部１１、命令コード取得部１２、インデックスレジスタ１３、インデックス修飾部１４、アクセス実行部１５及び領域逸脱判定部１００を備えているが、領域逸脱判定部１００の構成が図２と異なる。
図６において、領域逸脱判定部１００は、デバイス領域設定レジスタ１０１、デバイス境界比較部（第１のデバイス境界比較部）１０６、デバイス境界比較部（第２のデバイス境界比較部）１０７及び比較結果判定部１０９を備えている。
【００５１】
デバイス境界比較部１０６は命令コード取得部１２により取得された命令コードに含まれるアドレスとデバイス領域設定レジスタ１０１の全てのデバイス境界レジスタ１０１ｃに格納されている境界アドレスとの大小比較を行って比較結果を出力する。例えば、デバイス境界比較部１０６は、命令コードに含まれるアドレスがデバイス領域設定レジスタ１０１におけるデバイス境界レジスタ０の境界アドレスより大きいか否かをチェックして成立すれば「１」とし、次に命令コードに含まれるアドレスがデバイス領域設定レジスタ１０１におけるデバイス境界レジスタ１の境界アドレスより大きいか否かをチェックして成立すれば「１」とし、以下、順に、命令コードに含まれるアドレスとデバイス領域設定レジスタ１０１におけるデバイス境界レジスタ２〜７の境界アドレスとの比較を行い、８ビットの比較結果を得て出力する。
【００５２】
デバイス境界比較部１０７は、デバイス境界比較部１０６と同様にして、インデックス修飾部１４により算出された実際にアクセスするアドレスとデバイス領域設定レジスタ１０１の全てのデバイス境界レジスタ１０１ｃに格納されている境界アドレスとの大小比較を行って例えば８ビットの比較結果を出力する。
【００５３】
比較結果判定部１０９は、デバイス境界比較部１０６により出力された例えば８ビットの比較結果とデバイス境界比較部１０７により出力された例えば８ビットの比較結果が一致した場合には、命令コードに含まれるアドレスとインデックス修飾後のアドレスが同じデバイス領域に属するものと判定し、インデックス修飾後のアドレスがデバイス領域を逸脱するものではないと判定して、アクセス実行部１５にアクセス許可を出力する。
【００５４】
一方、比較結果判定部１０９は、デバイス境界比較部１０６により出力された例えば８ビットの比較結果とデバイス境界比較部１０７により出力された例えば８ビットの比較結果が一致しない場合には、命令コードに含まれるアドレスとインデックス修飾後のアドレスが異なるデバイス領域に属するものと判定し、インデックス修飾後のアドレスがデバイス領域を逸脱するものであると判定して、プログラマブルコントローラ全体を制御する制御部（図示せず）にプログラマブルコントローラとしての処理の停止要求を出力すると共にユーザーに通知する。
【００５５】
その他のプログラム格納部１１、命令コード取得部１２、インデックスレジスタ１３、インデックス修飾部１４及びアクセス実行部１５の処理は、上記実施の形態１と同様である。
【００５６】
以上のように、この実施の形態４によれば、メモリマップ１０上に複数のデバイス領域を連続して確保し、それぞれのデバイス領域の境界アドレスをデバイス領域設定レジスタ１０１に順不同に格納し、領域逸脱判定部１００が、命令コードに含まれるアドレスとデバイス領域設定レジスタ１０１に格納されている全ての境界アドレスを比較し、インデックス修飾後のアドレスとデバイス領域設定レジスタ１０１に格納されている全ての境界アドレスを比較して、命令コードに含まれるアドレスとインデックス修飾後のアドレスが同じデバイス領域に属するか否かを判定することにより、それぞれのデバイス領域の境界アドレスをデバイス領域設定レジスタ１０１に順不同に格納しても、上記実施の形態１より少ないデバイス領域設定レジスタ１０１のレジスタ数で、上記実施の形態１と同じ効果が得られる。
【００５７】
実施の形態５．
図７はこの発明の実施の形態５によるプログラマブルコントローラの構成を示すブロック図である。このプログラマブルコントローラは、上記実施の形態１の図２に示すプログラマブルコントローラと同様に、プログラム格納部１１、命令コード取得部１２、インデックスレジスタ１３、インデックス修飾部１４、アクセス実行部１５及び領域逸脱判定部１００を備えているが、領域逸脱判定部１００の構成が図２と異なる。
【００５８】
図７において、領域逸脱判定部１００は、デバイス領域設定レジスタ１０１、最終アドレス計算部１０５、デバイス境界比較部（第１のデバイス境界比較部）１０６、デバイス境界比較部（第２のデバイス境界比較部）１０７、デバイス境界比較部（第３のデバイス境界比較部）１０８及び比較結果判定部１０９を備えており、上記実施の形態４の図６に示す領域逸脱判定部１００に、最終アドレス計算部１０５及びデバイス境界比較部１０８を追加したものであり、この実施の形態５では、上記実施の形態２と同様に、命令コードが要求するアクセス幅が単位アクセス幅を超える場合について説明する。
なお、この発明の実施の形態５で想定するメモリマップ１０とデバイス領域設定レジスタ１０１を示す図は、上記実施の形態４の図５と同じである。
【００５９】
最終アドレス計算部１０５は、上記実施の形態２の最終アドレス計算部１０５と同様にして、インデックス修飾部１４により出力された実際に最初にアクセスする開始アドレスとアドレス幅に基づき、最後にアクセスする最終アドレスを算出する。
【００６０】
デバイス境界比較部１０８は、上記実施の形態４のデバイス境界比較部１０６と同様にして、最終アドレス計算部１０５により算出された実際に最後にアクセスする最終アドレスとデバイス領域設定レジスタ１０１の全てのデバイス境界レジスタ１０１ｃに格納されている境界アドレスとの大小比較を行って例えば８ビットの比較結果を出力する。
【００６１】
比較結果判定部１０９は、デバイス境界比較部１０６により出力された例えば８ビットの比較結果とデバイス境界比較部１０７により出力された例えば８ビットの比較結果とデバイス境界比較部１０８により出力された例えば８ビットの比較結果とが全て一致した場合には、命令コードに含まれるアドレスとインデックス修飾後のアドレスが同じデバイス領域に属するものと判定し、インデックス修飾後のアドレスがデバイス領域を逸脱するものではないと判定して、アクセス実行部１５にアクセス許可を出力する。
【００６２】
一方、比較結果判定部１０９は、デバイス境界比較部１０６により出力された例えば８ビットの比較結果とデバイス境界比較部１０７により出力された例えば８ビットの比較結果とデバイス境界比較部１０８により出力された例えば８ビットの比較結果とが一致しない場合には、命令コードに含まれるアドレスとインデックス修飾後のアドレスが異なるデバイス領域に属するものと判定し、インデックス修飾後のアドレスがデバイス領域を逸脱するものであると判定して、プログラマブルコントローラ全体を制御する制御部（図示せず）にプログラマブルコントローラとしての処理の停止要求を出力すると共にユーザーに通知する。
【００６３】
アクセス実行部１５は、上記実施の形態２と同様に、領域逸脱判定部１００から出力されたアクセス許可に基づき、インデックス修飾部１４から出力された実際にアクセスするアドレスとアドレス幅を用いてデバイス領域へのアクセスを行う。
【００６４】
その他のプログラム格納部１１、命令コード取得部１２、インデックスレジスタ１３、インデックス修飾部１４、デバイス領域設定レジスタ１０１、デバイス境界比較部１０６及びデバイス境界比較部１０７の処理は、上記実施の形態４と同様である。
【００６５】
以上のように、この実施の形態５によれば、メモリマップ１０上に複数のデバイス領域を連続して確保し、それぞれのデバイス領域の境界アドレスをデバイス領域設定レジスタ１０１に順不同に格納し、領域逸脱判定部１００が、命令コードに含まれるアドレスとデバイス領域設定レジスタ１０１に格納されている全ての境界アドレスを比較し、インデックス修飾後の最初のアクセスの開始アドレスとデバイス領域設定レジスタ１０１に格納されている全ての境界アドレスを比較し、インデックス修飾後の最後のアクセスの最終アドレスとデバイス領域設定レジスタ１０１に格納されている全ての境界アドレスを比較して、命令コードに含まれるアドレスとインデックス修飾後のアドレスが同じデバイス領域に属するか否かを判定することにより、それぞれのデバイス領域の境界アドレスをデバイス領域設定レジスタ１０１に順不同に格納しても、命令コードが要求するアクセス幅が単位アクセス幅を超える場合でも、上記実施の形態１より少ないデバイス領域設定レジスタ１０１のレジスタ数で、上記実施の形態１と同じ効果が得られる。
【００６６】
実施の形態６．
図８はこの発明の実施の形態６によるプログラマブルコントローラの構成を示すブロック図である。このプログマブルコントローラは、上記実施の形態１の図２に示すプログラマブルコントローラと同様に、プログラム格納部１１、命令コード取得部１２、インデックスレジスタ１３、インデックス修飾部１４、アクセス実行部１５及び領域逸脱判定部１００を備えているが、領域逸脱判定部１００の構成は、上記実施の形態１の図２、上記実施の形態２の図３、上記実施の形態４の図６、上記実施の形態５の図７のいずれの構成でも良い。
【００６７】
上記各実施の形態では、領域逸脱判定部１００が領域逸脱判定を実施してアクセス実行部１５にアクセス許可を出力後に、アクセス実行部１５がインデックス修飾部１４から出力されたインデックス修飾後の実際にアクセスするアドレスを用いてデバイス領域へのアクセスを行っている。この実施の形態６では、アクセス実行部１５がデバイス領域へのライトアクセスを行う場合には、上記各実施の形態と同様の処理を行うが、アクセス実行部１５がデバイス領域へのリードアクセスを行う場合には、領域逸脱判定部１００による領域逸脱判定の結果を待たずにデバイス領域へのリードアクセスを行い、デバイス領域へのリードアクセス中に、領域逸脱判定部１００が領域逸脱判定を実施して、デバイス領域を逸脱している場合に、アクセス実行部１５にアクセス無効を出力してリードアクセスを停止させ、プログラマブルコントローラ全体を制御する制御部（図示せず）にプログラマブルコントローラとしての処理の停止要求を出力すると共にユーザーに通知する。
【００６８】
デバイス領域へのリードアクセスの場合には、本来アクセスすべきデバイス領域を逸脱してリードアクセスを行っても、デバイス領域のデータ破壊等の実害がないため、リードアクセスの場合には、領域逸脱判定部１００による領域逸脱判定後にアクセス実行部１５によるデバイス領域へのリードアクセスという手順を踏まずに、アクセス実行部１５によるデバイス領域へのリードアクセス中に領域逸脱判定部１００による領域逸脱判定を実施する。この処理により、命令コードによるプログマブルコントローラとしての処理をライトアクセスの場合と比較して高速にすることができる。
【００６９】
以上のように、この実施の形態６によれば、上記実施の形態１から上記実施の形態５と同じ効果が得られると共に、デバイス領域へのリードアクセスの場合には、デバイス領域へのリードアクセス中に、領域逸脱判定部１００による領域逸脱判定を実施することにより、プログマブルコントローラとしての処理をライトアクセスの場合と比較して高速にすることができるという効果が得られる。
【００７０】
実施の形態７．
図９はこの発明の実施の形態７で想定するメモリマップ１０とデバイス領域設定レジスタ１０１を示す図である。図９では、メモリマップ１０上に複数のデバイス領域が連続して確保されており、それぞれのデバイス領域０〜６の上限値又は下限値が境界アドレスとしてデバイス領域設定レジスタ１０１のデバイス境界レジスタ１０１ｃに順番に格納されている点は、上記実施の形態３の図４と同じであるが、図９では、さらにデバイス領域属性レジスタ１０１ｄを追加し、デバイス境界レジスタ１０１ｃとデバイス領域属性レジスタ１０１ｄをまとめてデバイス領域設定レジスタ１０１としている。このデバイス境界レジスタ１０１ｃで区切られたデバイス領域に対して、デバイス領域属性レジスタ１０１ｄによって該デバイス領域の属性情報を設定することができる。
【００７１】
デバイス領域の属性情報としては、要求する処理内容を記述した属性情報である、例えばプログラム停止要求や、ユーザーへの不正通知要求や、デバイス領域のアクセス禁止要求や、不正通知の有無や、異常発生時のプログラム停止の有無等がある。
【００７２】
図１０はこの発明の実施の形態７によるプログラマブルコントローラの構成を示すブロック図である。このプログラマブルコントローラは、上記実施の形態２及び上記実施の形態３の図３に示すプログラマブルコントローラと同様に、プログラム格納部１１、命令コード取得部１２、インデックスレジスタ１３、インデックス修飾部１４、アクセス実行部１５及び領域逸脱判定部１００を備えているが、領域逸脱判定部１００の構成が図３と異なる。
【００７３】
図１０において、領域逸脱判定部１００は、デバイス領域設定レジスタ１０１、デバイス領域判定部１０２、上下限値選択部１０３、範囲内判定部１０４、最終アドレス計算部１０５及びデバイス領域属性選択部１１０を備え、デバイス領域設定レジスタ１０１はデバイス境界レジスタ１０１ｃ及びデバイス領域属性レジスタ１０１ｄを備え、範囲内判定部１０４は、下限値判定部１０４ａ、上限値判定部１０４ｂ及び結果判定部１０４ｃを備えており、図３の構成と比較して、デバイス領域属性レジスタ１０１ｄ及びデバイス領域属性選択部１１０が追加されている。
【００７４】
デバイス領域判定部１０２は、命令コード取得部１２により取得された命令コードに含まれるアドレスが、デバイス領域設定レジスタ１０１のデバイス境界レジスタにおけるどの境界レジスタ間のアドレスであるかをチェックして、メモリマップ１０上のどのデバイス領域にあるかを判定する。上下限値選択部１０３は、デバイス領域設定レジスタ１０１のデバイス境界レジスタ１０１ｃを参照して、デバイス領域判定部１０２により判定されたデバイス領域の連続する境界アドレス（下限値又は上限値）を選択する。
【００７５】
デバイス領域属性選択部１１０は、デバイス領域設定レジスタ１０１のデバイス属性レジスタ１０１ｄを参照して、デバイス領域判定部１０２により判定されたデバイス領域の属性情報を選択する。範囲内判定部１０４における結果判定部１０４ｃは、下限値判定部１０４ａ及び上限値判定部１０４ｂによりインデックス修飾後のアドレスがデバイス領域を逸脱するものであると判定した場合には、デバイス領域属性選択部１１０により選択されたデバイス領域の属性情報に基づいて要求する処理内容を出力する。
【００７６】
結果判定部１０４ｃは、選択されたデバイス領域の属性情報が異常発生時のプログラム停止要求であれば、プログラマブルコントローラ全体を制御する制御部（図示せず）にプログラマブルコントローラとしての処理の停止要求を出力し、属性情報がユーザーへの不正通知要求であれば、ユーザーへの不正通知要求を出力する。また、結果判定部１０４ｃは、属性情報がデバイス領域のアクセス禁止要求であれば、アクセス実行部１５に対してアクセス許可の出力を停止することによりアクセス禁止を実現する。このとき、結果判定部１０４ｃは、上記実施の形態５に示したように、リードアクセスは常に実施し、ライトアクセスのみを禁止することも可能である。
【００７７】
その他のプログラム格納部１１、命令コード取得部１２、インデックスレジスタ１３、インデックス修飾部１４、アクセス実行部１５、最終アドレス計算部１０５、下限値判定部１０４ａ及び上限値判定部１０４ｂの処理は、上記実施の形態３と同様である。
【００７８】
以上のように、この実施の形態７によれば、上記実施の形態３と同じ効果が得られると共に、設定された属性情報に基づき要求する処理を出力することができるという効果が得られる。
【００７９】
実施の形態８．
図１１はこの発明の実施の形態８で想定するメモリマップ１０を示す図である。プログラム格納部１１にプログラムと共にそのプログラム用のデバイス領域に関するデバイス領域情報を格納し、実行プログラムの切り替え時にデバイス領域設定レジスタ１０１を変更することにより、プログラム毎にメモリマップ１０を変更することが可能である。図１１ではプログラム格納部１１におけるプログラム１を格納する領域にプログラム１用のデバイス領域情報５１を格納し、プログラム２を格納する領域にプログラム２用のデバイス領域情報５２を格納している。例えば、デバイス領域情報５１にはデバイス境界レジスタ１０１ｃとデバイス領域属性レジスタ１０１ｄに設定すべき情報が含まれており、プログラム１の実行前に該情報をデバイス境界レジスタ１０１ｃとデバイス領域属性レジスタ１０１ｄに設定してからプログラム１を実行する。
【００８０】
図１２はこの発明の実施の形態８によるプログラマブルコントローラの構成を示すブロック図である。このプログラマブルコントローラは、上記実施の形態７の図１０に示すプログラマブルコントローラに、実行プログラム指示部１６及びデバイス領域設定部１７を追加したものであり、その他の構成は図１０と同じである。
【００８１】
図１２において、プログラム格納部１１はプログラムとそのプログラム用のデバイス領域に関するデバイス領域情報を格納している。実行プログラム指示部１６は、ユーザーからの指示又は割り込みによるイベント発生時の指示に基づき、命令コード取得部１２及びデバイス領域設定部１７に実行するプログラムを通知する。命令コード取得部１２は実行プログラム指示部１６より通知されたプログラムの命令コードをプログラム格納部１１から取得する。
【００８２】
デバイス領域設定部１７は、実行プログラム指示部１６より通知されたプログラムについて、そのプログラム用のデバイス領域情報をプログラム格納部１１から取得し、取得したデバイス領域情報に基づき、指示されたプログラムに対応するデバイス境界レジスタ１０１ｃ及びデバイス属性レジスタ１０１ｄを設定する。
その他のインデックスレジスタ１３、インデックス修飾部１４、アクセス実行部１５及び領域逸脱判定部１００の処理は、上記実施の形態７と同様である。
【００８３】
この実施の形態８では、領域逸脱判定部１００の構成を上記実施の形態７と同じ構成を使用しているが、上記実施の形態１から上記実施の形態５の領域逸脱判定部１００の構成を使用しても良い。
【００８４】
以上のように、この実施の形態８によれば、上記実施の形態７と同じ効果が得られると共に、デバイス領域設定部１７が、プログラム格納部１１から取得したデバイス領域情報に基づき、指示されたプログラムに対応してデバイス領域設定レジスタ１０１を設定することにより、プログラム毎にアクセス可能なローカルデバイス領域を実現することができるという効果が得られる。
【００８５】
この実施の形態８では、デバイス領域が連続して割り当てられているが、デバイス領域が連続して割り当てられていない場合には、アクセスできない領域に、属性情報としてアクセス禁止要求を割り当てることにより、この実施の形態８を実現することができる。
【００８６】
実施の形態９．
図１３はこの発明の実施の形態８で想定するメモリマップ１０を示す図である。この実施の形態９は、デバイス領域設定レジスタ１０１におけるデバイス境界レジスタ１０１ｃとデバイス領域属性レジスタ１０１ｄを、プログラムにより変更可能な機構を持ち、プログラムの実行状況に応じてこれらのデバイス領域設定レジスタ１０１を変更し、各時点で必要なチェックを実現することによって、仮想的にデバイス領域の数を増加させるものである。この方式では最低１組のデバイス領域設定レジスタ１０１が存在すれば実現可能であるが、ここでは複数のデバイス領域設定レジスタ１０１が存在することを利用して、できるだけ変更回数の少ない方法を採用することが可能である。
【００８７】
この発明の実施の形態９によるプログマブルコントローラの構成を示すブロック図は、上記実施の形態８の図１２と同じである。
図１２において、デバイス領域設定部１７は、上記実施の形態８と同様に、実行プログラム指示部１６より通知されたプログラム１について、そのプログラム１用のデバイス領域情報５１をプログラム格納部１１から取得し、取得したデバイス領域情報５１に基づき、指示されたプログラム１に対応するデバイス領域設定レジスタ１０１におけるデバイス境界レジスタ１０１ｃ及びデバイス属性レジスタ１０１ｄを設定する。
【００８８】
また、デバイス領域設定部１７は、プログラム１に含まれているデバイス領域の変更命令１−４，１−５に基づき、デバイス領域設定レジスタ１０１におけるデバイス境界レジスタ１０１ｃ及びデバイス属性レジスタ１０１ｄの設定を変更する。
【００８９】
すなわち、図１３では、仮想的にプログラム１を、プログラム１−１，１−２，１−３の３つに分割し、プログラム１−２とプログラム１−３の実行前にデバイス領域の変更命令１−４，１−５が設けられている。デバイス領域設定部１７は、例えばデバイス領域１，２のように全てのプログラムで使用する領域に関する設定は変更せず、デバイス領域３−１，３−２，３−３のようにプログラム中の一部分でしか使用しないデバイス領域に関する設定を途中で変更することにより、図１３に示す例では、５つのデバイス領域１，２，３−１，３−２，３−３を３組のデバイス領域設定レジスタ１０１で実現することが可能である。
【００９０】
なお、プログラム１中にデバイス領域の変更命令１−４，１−５を埋め込む方法としては、コンパイラや開発環境による自動挿入が可能であるが、ユーザーにデバイス領域変更命令を開示し、ユーザーがプログラム１中にデバイス領域変更命令１−４，１−５を記述することにより、デバイス領域内のユーザーが指定した任意の箇所について、デバイス領域からの逸脱検出が可能となる。
【００９１】
以上のように、この実施の形態９によれば、上記実施の形態８と同じ効果が得られると共に、プログラム１によりデバイス領域設定レジスタ１０１の設定を変更することができ、デバイス領域設定レジスタ１０１の数が少ない場合でも、多くのデバイス領域を動的に設定することができるという効果が得られる。
【図面の簡単な説明】
【００９２】
【図１】この発明の実施の形態１で想定するメモリマップとデバイス領域設定レジスタを示す図である。
【図２】この発明の実施の形態１によるプログラマブルコントローラの構成を示すブロック図である。
【図３】この発明の実施の形態２によるプログラマブルコントローラの構成を示すブロック図である。
【図４】この発明の実施の形態３で想定するメモリマップとデバイス領域設定レジスタを示す図である。
【図５】この発明の実施の形態４で想定するメモリマップとデバイス領域設定レジスタを示す図である。
【図６】この発明の実施の形態４によるプログラマブルコントローラの構成を示すブロック図である。
【図７】この発明の実施の形態５によるプログラマブルコントローラの構成を示すブロック図である。
【図８】この発明の実施の形態６によるプログラマブルコントローラの構成を示すブロック図である。
【図９】この発明の実施の形態７で想定するメモリマップとデバイス領域設定レジスタを示す図である。
【図１０】この発明の実施の形態７によるプログラマブルコントローラの構成を示すブロック図である。
【図１１】この発明の実施の形態８で想定するメモリマップを示す図である。
【図１２】この発明の実施の形態８によるプログラマブルコントローラの構成を示すブロック図である。
【図１３】この発明の実施の形態９で想定するメモリマップを示す図である。
【符号の説明】
【００９３】
１０  メモリマップ、１１  プログラム格納部、１２  命令コード取得部、１３  インデックスレジスタ、１４  インデックス修飾部、１５  アクセス実行部、１６  実行プログラム指示部、１７  デバイス領域設定部、５１  プログラム１用デバイス領域情報、５２  プログラム２用デバイス領域情報、１００  領域逸脱判定部、１０１  デバイス領域設定レジスタ、１０１ａ  デバイス領域下限レジスタ、１０１ｂ  デバイス領域上限レジスタ、１０１ｃ  デバイス境界レジスタ、１０１ｄ  デバイス領域属性レジスタ、１０２  デバイス領域判定部、１０３  上下限値選択部、１０４  範囲内判定部、１０４ａ  下限値判定部、１０４ｂ  上限値判定部、１０４ｃ  結果判定部、１０５  最終アドレス計算部、１０６  デバイス境界比較部、１０７  デバイス境界比較部、１０８  デバイス境界比較部、１０９  比較結果判定部、１１０  デバイス領域属性選択部。
【図１】
2008027236.tif 000003
【図２】
2008027236.tif 000004
【図３】
2008027236.tif 000005
【図４】
2008027236.tif 000006
【図５】
2008027236.tif 000007
【図６】
2008027236.tif 000008
【図７】
2008027236.tif 000009
【図８】
2008027236.tif 000010
【図９】
2008027236.tif 000011
【図１０】
2008027236.tif 000012
【図１１】
2008027236.tif 000013
【図１２】
2008027236.tif 000014
【図１３】
2008027236.tif 000015