(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0017】
以下に本発明を実施するための形態を図面を用いて説明する。
●[PLC1の外観(
図1)]
図1に示すように、PLC1は、制御ユニット10、入力ユニット20、出力ユニット30にて構成されている。また入力ユニット20及び出力ユニット30は、入出力の数に応じて適宜増設される。入力ユニット20内には制御ユニット10と接続するためのコネクタ22を備えた入力ボード21が収容されており、複数の入力機器(スイッチ、センサ等)からの配線が接続される入力端子25が設けられている。出力ユニット30内には制御ユニット10と接続するためのコネクタ33を備えた出力ボード31が収容されており、複数の出力機器(リレー、モータ等)への配線が接続される出力端子35が設けられている。制御ユニット10内には入力ユニット20と接続するためのコネクタ12、出力ユニット30と接続するためのコネクタ13、を備えた制御ボード11が収容されており、パソコン等の端末装置を接続可能なコネクタ15や、他のPLCと接続するためのコネクタ16等が設けられている。
【0018】
●[PLC1のブロック構成及び接続例(
図2)]
次に
図2を用いてPLC1のブロック構成及び接続の例について説明する。入力ユニット20の入力端子25には、複数の入力機器(スイッチ40a、センサ40b・・入力手段40n等)からの配線が接続され、複数の入力機器の導通状態に関する信号(ONまたはOFFの情報等)が入力される。入力された導通状態に関する信号は、インターフェース21a(以下、インターフェースをI/Fと記載する)及びコネクタ22を介して制御ユニット10に伝送される。
【0019】
制御ユニット10は、CPU11a(制御手段に相当)を中心に構成され、RAM11b、ROM11cが設けられている。ROM11cには、EEPROM、FlashROM等の書替え可能なROMが用いられ、任意の入力機器を直列または並列に組み合わせて構成したシーケンスプログラム等が記憶されている。ユーザは端末装置50を用いて、ラダー回路等を用いてシーケンスプログラムを作成可能であり、作成したシーケンスプログラムを制御ユニット10に記憶させる(書き込む)ことが可能である。このシーケンスプログラムには、後述するRAM検査方法を実現するRAM検査プログラムも実装されている。なお、ROM11cには、I/F11gを介して端末装置50、他のPLC60等と通信を行うプログラム等も格納されている。CPU11aは、ROM11cに記憶されているシーケンスプログラムと、コネクタ12及びI/F11dを介して入力ユニット20から入力される各入力機器からの導通状態に関する信号とに基づいた演算結果を、I/F11f及びコネクタ13を介して出力ユニット30に出力する。
【0020】
出力ユニット30の出力端子35には、複数の出力機器(モータ42a、リレー42b・・出力手段42n等)への配線が接続される。そして、シーケンスプログラムと各入力機器の導通状態に基づいて制御ユニット10にて求めた演算結果を、コネクタ33及びI/F31aを介して出力端子35に接続された出力機器に出力する。
【0021】
●[RAM検査プログラムの処理手順(
図3)]
次に
図3を用いて、
図2に示すPLC1の制御ユニット10のCPU11a(制御手段に相当)によるRAM11bの検査の処理手順について説明する。
図3に示す処理は、例えば、制御ユニット10が通常の制御(メイン処理あるいは通常処理と呼ばれる機械の制御処理)の実行中に、割り込み等にて起動される。また、起動のタイミングは特に限定しない。なお、本実施の形態にて説明するRAM検査方法の処理手順は、March Cという検査方法に基づいた処理手順としている。また、RAM検査領域は、スタック領域や通信用領域や周辺装置用領域等の特殊な使用領域を除いた残りの全ての領域としている。
【0022】
ステップS10にてCPU11aは、RAMの検査対象となる領域であるRAM検査領域と、RAM一時退避領域と、を確認し、ステップS15に進む。なお、RAM検査領域の先頭のRAMのアドレス及び最終のRAMのアドレスや、RAM一時退避領域の先頭のRAMのアドレス及び最終のRAMのアドレス等は、ROM11cのプログラム領域のいずれかの位置に予め記憶されている。例えば
図8に示す例では、RAM検査領域はアドレス0x00〜0xBFであり、RAM一時退避領域はアドレス0xC0〜0xFFである例を示している。これらのアドレスがROM11cに記憶されており、CPU11aは、これらのアドレスを読み出して、RAM検査領域、RAM一時退避領域を確認する。また、RAM検査領域の各RAMの値は、当該RAM検査プログラムを実行する前に記憶していた値を、RAM検査プログラムの実行後にも維持(保持)しておく必要があるものとする。なお、RAM一時退避領域は、例えばスタック領域である。また
図8の例ではRAM検査領域が連続したアドレスの領域である例を示しているが、、RAM検査領域は、連続したアドレスの領域に限定されず、複数の非連続の領域であってもよい。
【0023】
ステップS15にてCPU11aは、RAM検査領域を複数のブロックに分割してステップS20に進む。複数のブロックに分割する際、CPU11aは、各ブロック内のRAMの個数が、RAM一時退避領域のRAMの個数の1/2以下となるように分割する。例えば
図8の例の場合、RAM一時退避領域のRAMは0xC0〜0xFFの64個であるので、各ブロックのRAMの個数が64(個)*1/2=32(個)以下となるように分割する。なお、分割するブロックの数ができるだけ少ないほうが検査時間を短くすることができるので、
図8の例では、各ブロックのRAMの個数が32個となるように分割しており、RAM検査領域を第1ブロック〜第6ブロックに分割した例を示している。なお、予めRAM検査領域を複数のブロックに分割しておき、ステップS10とステップS15を省略するようにしてもよい。
【0024】
ステップS20にてCPU11aは、分割したブロックの中から抽出した2つのブロックを組合せた組合せブロック(例えば、第1ブロックと第2ブロックの組合せ、第3ブロックと第4ブロックの組合せ等)において、最初に検査するべき(m、n)の組合せブロックを抽出してステップS35に進む。例えば第1ブロックと第2ブロックの組合せを抽出した場合では(m、n)=(1、2)であり、第3ブロックと第4ブロックの組合せを抽出した場合では(m、n)=(3、4)であることを示している。例えばこの場合、最初に検査するべき組合せブロックは、(1、2)の組合せブロックである。以降の説明において、「(m、n)」は、第mブロックと第nブロックの組合せ(ただし、m<n)を示す。
【0025】
ステップS35にてCPU11aは、抽出した(m、n)の組合せブロック内の各RAMの値を、RAM一時退避領域の各RAMにコピー(退避)してステップS40に進む。例えば(m、n)=(1、2)の場合では、
図8に示す第1ブロックの各RAM(アドレス0x00〜0x1F)の値を、RAM一時退避領域の各RAM(アドレス0xC0〜0xDF)にコピーして、第2ブロックの各RAM(アドレス0x20〜0x3F)の値を、RAM一時退避領域の各RAM(アドレス0xE0〜0xFF)にコピーする。
【0026】
そしてステップS40にてCPU11aは、
図4〜
図7に示すサブルーチンSB100の処理を実行し、サブルーチンSB100からリターンするとステップS50へ進む。なお、サブルーチンSB100では、後述するように、抽出した(m、n)の組合せブロック内の各RAMに対して、所定値を書き込んだ後、当該RAMから読み出した値が、書き込んだ値と一致するか否かを順番に検査する。このサブルーチンSB100の処理は、書き込み読み出しステップに相当しており、詳細については後述する。
【0027】
ステップS50にてCPU11aは、サブルーチンSB100の処理の結果、RAMが正常であるか否かを判定し、RAMが正常の場合(Yes)はステップS60に進み、RAMが正常でない場合(No)はステップS80に進む。なおステップS80では、CPU11aは、RAMに異常が発見されたことを報知して(例えば異常ランプを点灯等して)動作を停止する。
【0028】
ステップS60に進んだ場合、CPU11aは、RAM一時退避領域の各RAMにコピーした値(ステップS35にてコピーした値)を、抽出した(m、n)の組合せブロック内の各RAMに書き戻してステップS65に進む。例えば(m、n)=(1、2)の場合では、
図8に示すRAM一時退避領域の各RAM(アドレス0xC0〜0xDF)にコピー(退避)しておいた値を、第1ブロックの各RAM(アドレス0x00〜0x1F)に書き戻し、RAM一時退避領域の各RAM(アドレス0xE0〜0xFF)にコピー(退避)しておいた値を、第2ブロックの各RAM(アドレス0x20〜0x3F)に書き戻す。これにより、RAM検査前に保持していた値を、RAM検査後でも維持(保持)させておくことができる。
【0029】
そしてステップS65にてCPU11aは、全ての(m、n)の組合せブロックの検査が終了したか否かを判定し、全ての組合せブロックの検査が終了した場合(Yes)は、本RAMの検査の処理を終了し、全ての組合せブロックの検査が終了していない場合(No)はステップS70に進む。例えば
図8に示すように、第1ブロック〜第6ブロックに分割した場合では、(1、2)、(1、3)、(1、4)、(1、5)、(1、6)、(2、3)、(2、4)、(2、5)、(2、6)、(3、4)、(3、5)、(3、6)、(4、5)、(4、6)、(5、6)の、
6C
2=15(通り)の全ての組合せブロックの検査が終了した場合に、本RAMの検査の処理を終了する。
【0030】
ステップS70に進んだ場合、CPU11aは、次に検査するべき(m、n)の組合せブロックを抽出してステップS35に戻る。例えば(1、2)の組合せブロックの検査を行った際にステップS70に達した場合は、次の(1、3)の組合せブロックを抽出してステップS35に戻る。
【0031】
●[サブルーチン(SB100)の処理手順の詳細(
図4〜
図7)]
次に、
図3に示すステップSB100にて実行されるサブルーチンSB100の処理手順について、
図4〜
図7を用いて説明する。なお、
図4に示す処理手順は、RAMを昇順、かつ書き込み及び読み出しするデータ(値)を昇順、にして実行するRAMの書き込み・読み出し検査である。また、
図5に示す処理手順は、RAMを昇順、かつ書き込み及び読み出しするデータ(値)を降順、にして実行するRAMの書き込み・読み出し検査である。また、
図6に示す処理手順は、RAMを降順、かつ書き込み及び読み出しするデータ(値)を昇順、にして実行するRAMの書き込み・読み出し検査である。また、
図7に示す処理手順は、RAMを降順、かつ書き込み及び読み出しするデータ(値)を降順、にして実行するRAMの書き込み・読み出し検査である。
【0032】
●[
図4に示すフローチャートの処理(RAM:昇順、データ:昇順)の処理手順]
図4に示すステップS110にてCPU11aは、(m、n)の組合せブロック内の全RAMに、昇順に、第1・1所定値を書き込み、ステップS115に進む。例えば(1、2)の組合せブロックの場合では、ますアドレス0x00のRAMに0x00(第1・1所定値)を書き込み、昇順である次のアドレス0x01のRAMに0x00(第1・1所定値)を書き込み、以降、アドレス0x3FのRAMまで順番に0x00(第1・1所定値)を書き込む。
【0033】
ステップS115にてCPU11aは、インデックスに(m、n)の組合せブロック内の先頭のRAMのアドレス(この場合、先頭のRAMのアドレスは0x00)を代入してステップS125に進む。そしてステップS125にてCPU11aは、インデックス先が示すアドレスのRAMから値を読み出し、読み出した値が第1・1所定値(ステップS110にて書き込んだ値)と一致するか否かを判定し、一致する場合(Yes)はステップS130に進み、一致しない場合(No)はステップS180に進む。なおステップS180に進んだ場合は、RAMに異常が発見された場合であり、CPU11aは、RAM異常を記憶してサブルーチンSB100からリターンする。
【0034】
ステップS130に進んだ場合、CPU11aは、インデックス先が示すアドレスのRAMに、第1・2所定値(例えば0x01)を書き込み、ステップS135に進む。そしてステップS135にてCPU11aは、インデックス先が示すアドレスのRAMから値を読み出し、読み出した値が第1・2所定値(ステップS130にて書き込んだ値)と一致するか否かを判定し、一致する場合(Yes)はステップS140に進み、一致しない場合(No)はステップS180に進む。ステップS180に進んだ場合は、上述したように、CPU11aは、RAM異常を記憶してサブルーチンSB100からリターンする。なお、ステップS135〜ステップS140の間は、ステップS130及びステップS135と同様に、インデックス先のアドレスのRAMに、所定値を書き込んで、読み出した値が所定値であるか否かのチェックを、第1・3所定値(例えば0x03)、第1・4所定値(例えば0x07)、第1・5所定値(例えば0x0F)、第1・6所定値(例えば0x1F)、第1・7所定値(例えば0x3F)、第1・8所定値(例えば0x7F)等を用いて、昇順のデータにて行うことを省略している。
【0035】
ステップS140に進んだ場合、CPU11aは、インデックス先が示すアドレスのRAMに、第1・a所定値(例えば0xFF)を書き込み、ステップS145に進む。そしてステップS145にてCPU11aは、インデックス先が示すアドレスのRAMから値を読み出し、読み出した値が第1・a所定値(ステップS140にて書き込んだ値)と一致するか否かを判定し、一致する場合(Yes)はステップS150に進み、一致しない場合(No)はステップS180に進む。ステップS180に進んだ場合は、上述したように、CPU11aは、RAM異常を記憶してサブルーチンSB100からリターンする。
【0036】
ステップS150に進んだ場合、CPU11aは、インデックス先が示すアドレスが、現在チェックしている(m、n)の組合せブロック内の最終RAMのアドレスであるか否かを判定し、最終RAMのアドレスである場合(Yes)は「B」に示す
図5の処理に移行し、最終RAMのアドレスでない場合(No)はステップS155に進む。例えば
図8に示す(1、2)の組合せブロック(第1ブロックと第2ブロック)の場合、CPU11aは、インデックス先が示すアドレスが、0x3Fである場合、最終RAMのアドレスであると判定する。
【0037】
ステップS155に進んだ場合、CPU11aは、現在抽出している(m、n)の組合せブロック内における次に検査するべきRAMのアドレスをインデックスに代入してステップS125に戻る。例えば現在(1、2)の組合せブロックを抽出している場合であって、0x00のRAMのチェックを終えた場合、この
図4の処理ではRAMを昇順に検査しているので、次に検査するべきRAMのアドレスである0x01をインデックスに代入する。
【0038】
以上、
図4に示す処理手順にて、RAMを昇順、かつ書き込み及び読み出しするデータ(値)を昇順、にして実行するRAMの書き込み・読み出し検査が完了する。続いて、
図5に示す処理手順にて、RAMを昇順、かつ書き込み及び読み出しするデータ(値)を降順、にして実行するRAMの書き込み・読み出し検査を実行する。
【0039】
●[
図5に示すフローチャートの処理(RAM:昇順、データ:降順)の処理手順]
図4に示すフローチャートにてステップS150からYesにて「B」に進むと、
図5に示す処理に突入する。
図5に示すステップS215〜ステップS280の処理は、
図4に示す処理に対して、同じ(m、n)の組合せブロック内のRAMを昇順にチェックする点は同じであるが、書き込み及び読み出しするデータが、昇順でなく降順である点が異なる。
【0040】
ステップS215の処理は、
図4のステップS115の処理と同じであるので説明を省略する。またステップS225の処理は、
図4のステップS125の処理に対して、読み出した値が第1・a所定値(ステップS140で書き込んだ値であり、例えば0xFF)である点が異なる。CPU11aは、読み出した値が第1・a所定値と一致する場合(Yes)はステップS230に進み、第1・a所定値と一致しない場合はステップS280に進む。ステップS280に進んだ場合、CPU11aは、RAM異常を記憶してサブルーチンSB100からリターンする。
【0041】
ステップS230、S235・・S240、S245の処理は、
図4のステップS130、S135・・S140、S145の処理に対して、書き込む値及び読み出した値が異なり、昇順でなく降順である点が異なる。
図4のステップS130、S135・・S140、S145では、第1・2所定値(0x01)、第1・3所定値(0x03)、第1・4所定値(0x07)・・第1.a所定値(0xFF)のようにデータを昇順にして書き込み及び読み出しを行ったが、ステップS230、S235・・S240、S245の処理では、第2・1所定値(例えば0xFE)、第2・2所定値(例えば0xFC)、第2・3所定値(例えば0xF8)、第2・4所定値(例えば0xF0)、第2・5所定値(例えば0xE0)、第2・6所定値(例えば0xC0)、第2・7所定値(例えば0x80)、第2・b所定値(例えば0x00)のようにデータを降順にして書き込み及び読み出しを行う。
【0042】
そしてステップS250に進んだ場合、CPU11aは、
図4のステップS150の処理と同様に、インデックス先が示すアドレスが、現在チェックしている(m、n)の組合せブロック内の最終RAMのアドレスであるか否かを判定し、最終RAMのアドレスである場合(Yes)は「C」に示す
図6の処理に移行し、最終RAMのアドレスでない場合(No)はステップS255に進む。
【0043】
ステップS255に進んだ場合、CPU11aは、現在抽出している(m、n)の組合せブロック内における次に検査するべきRAMのアドレスをインデックスに代入してステップS225に戻る。例えば現在(1、2)の組合せブロックを抽出している場合であって、0x00のRAMのチェックを終えた場合、この
図5の処理ではRAMを昇順に検査しているので、次に検査するべきRAMのアドレスである0x01をインデックスに代入する。
【0044】
以上、
図5に示す処理手順にて、RAMを昇順、かつ書き込み及び読み出しするデータ(値)を降順、にして実行するRAMの書き込み・読み出し検査が完了する。続いて、
図6に示す処理手順にて、RAMを降順、かつ書き込み及び読み出しするデータ(値)を昇順、にして実行するRAMの書き込み・読み出し検査を実行する。
【0045】
●[
図6に示すフローチャートの処理(RAM:降順、データ:昇順)の処理手順]
図5に示すフローチャートにてステップS250からYesにて「C」に進むと、
図6に示す処理に突入する。
図6に示すステップS305〜ステップS380の処理は、
図4に示す処理に対して、同じ(m、n)の組合せブロック内のRAMを降順にチェックする点が異なり、書き込み及び読み出しするデータが昇順である点は同じである。
【0046】
ステップS305にてCPU11aは、(m、n)の組合せブロック内の全RAMから順番に値を読み出し(例えばRAMアドレスの昇順に読み出し)、読み出した値が第2・b所定値(0x00)と一致するか否かを判定し、一致する場合(Yes)はステップS315に進み、一致しない場合(No)はステップS380に進む。ステップS380に進んだ場合、CPU11aは、RAM異常を記憶してサブルーチンSB100からリターンする。
【0047】
ステップS315に進んだ場合、CPU11aは、インデックスに(m、n)の組合せブロック内の最終のRAMのアドレス(この場合、最終RAMのアドレスは0x3F)を代入してステップS325に進む。そしてステップS325にてCPU11aは、インデックス先が示すアドレスのRAMから値を読み出し、読み出した値が第2・b所定値(ステップS240にて書き込んだ値)と一致するか否かを判定し、一致する場合(Yes)はステップS330に進み、一致しない場合(No)はステップS380に進む。ステップS180に進んだ場合、CPU11aは、RAM異常を記憶してサブルーチンSB100からリターンする。
【0048】
ステップS330、S335・・S340、S345の処理は、
図4のステップS130、S135・・S140、S145の処理と同様、書き込む値及び読み出した値は昇順であるが、インデックスの値が最終RAMのアドレスから先頭RAMのアドレスへと降順に変化する点が異なる。例えば、書き込み及び読み出しは、第1・2所定値(0x01)、第1・3所定値(0x03)、第1・4所定値(0x07)・・第1・a所定値(0xFF)のようにデータを昇順にして書き込み及び読み出しを行う。
【0049】
そしてステップS350に進んだ場合、CPU11aは、インデックス先が示すアドレスが、現在チェックしている(m、n)の組合せブロック内の先頭のRAMのアドレスであるか否かを判定し、先頭のRAMのアドレスである場合(Yes)は「D」に示す
図7の処理に移行し、先頭のRAMのアドレスでない場合(No)はステップS355に進む。例えば
図8に示す(1、2)の組合せブロック(第1ブロックと第2ブロック)の場合、CPU11aは、インデックス先が示すアドレスが、0x00である場合、先頭のRAMのアドレスであると判定する。
【0050】
ステップS355に進んだ場合、CPU11aは、現在抽出している(m、n)の組合せブロック内における次に検査するべきRAMのアドレスをインデックスに代入してステップS325に戻る。例えば現在(1、2)の組合せブロックを抽出している場合であって、0x3FのRAMのチェックを終えた場合、この
図6の処理ではRAMを降順に検査しているので、次に検査するべきRAMのアドレスである0x3Eをインデックスに代入する。
【0051】
以上、
図6に示す処理手順にて、RAMを降順、かつ書き込み及び読み出しするデータ(値)を昇順、にして実行するRAMの書き込み・読み出し検査が完了する。続いて、
図7に示す処理手順にて、RAMを降順、かつ書き込み及び読み出しするデータ(値)を降順、にして実行するRAMの書き込み・読み出し検査を実行する。
【0052】
●[
図7に示すフローチャートの処理(RAM:降順、データ:降順)の処理手順]
図6に示すフローチャートにてステップS350からYesにて「D」に進むと、
図7に示す処理に突入する。
図7に示すステップS415〜ステップS490の処理は、
図6に示す処理に対して、同じ(m、n)の組合せブロック内のRAMを降順にチェックする点は同じであるが、書き込み及び読み出しするデータが、昇順でなく降順である点が異なる。
【0053】
ステップS415の処理は、
図6のステップS315の処理と同じであるので説明を省略する。またステップS425の処理は、
図6のステップS325の処理に対して、読み出した値が第1・a所定値(ステップS340で書き込んだ値であり、例えば0xFF)である点が異なる。CPU11aは、読み出した値が第1・a所定値と一致する場合(Yes)はステップS430に進み、第1・a所定値と一致しない場合はステップS480に進む。ステップS480に進んだ場合、CPU11aは、RAM異常を記憶してサブルーチンSB100からリターンする。
【0054】
ステップS430、S435・・S440、S445の処理は、
図6のステップS330、S335・・S340、S345の処理に対して、書き込む値及び読み出した値が異なり、昇順でなく降順である点が異なる。
図6のステップS330、S335・・S340、S345では、第1・2所定値(0x01)、第1・3所定値(0x03)、第1・4所定値(0x07)・・第1.a所定値(0xFF)のようにデータを昇順にして書き込み及び読み出しを行ったが、ステップS430、S435・・S440、S445の処理では、第2・1所定値(例えば0xFE)、第2・2所定値(例えば0xFC)、第2・3所定値(例えば0xF8)、第2・4所定値(例えば0xF0)、第2・5所定値(例えば0xE0)、第2・6所定値(例えば0xC0)、第2・7所定値(例えば0x80)、第2・b所定値(例えば0x00)のようにデータを降順にして書き込み及び読み出しを行う。
【0055】
そしてステップS450に進んだ場合、CPU11aは、
図6のステップS350の処理と同様に、インデックス先が示すアドレスが、現在チェックしている(m、n)の組合せブロック内の先頭のRAMのアドレスであるか否かを判定し、先頭のRAMのアドレスである場合(Yes)はステップS490に進み、先頭のRAMのアドレスでない場合(No)はステップS455に進む。
【0056】
ステップS455に進んだ場合、CPU11aは、現在抽出している(m、n)の組合せブロック内における次に検査するべきRAMのアドレスをインデックスに代入してステップS425に戻る。例えば現在(1、2)の組合せブロックを抽出している場合であって、0x3FのRAMのチェックを終えた場合、この
図7の処理ではRAMを降順に検査しているので、次に検査するべきRAMのアドレスである0x3Eをインデックスに代入する。
【0057】
以上、
図7に示す処理手順にて、RAMを降順、かつ書き込み及び読み出しするデータ(値)を降順、にして実行するRAMの書き込み・読み出し検査が完了する。そしてステップS490に進んだ場合、抽出した(m、n)の組合せブロック内の全RAMに対して、
図4に示すRAMを昇順かつデータを昇順としたRAMの検査、
図5に示すRAMを昇順かつデータを降順としたRAMの検査、
図6に示すRAMを降順かつデータを昇順としたRAMの検査、
図7に示すRAMを降順かつデータを降順としたRAMの検査、の全てで正常であることが確認できたことになるので、CPU11aは、RAM正常を記憶してサブルーチンSB100からリターンする。
【0058】
以上に説明したRAM検査方法により、例えばRAM検査領域を第1ブロック、第2ブロック、第3ブロックの3つのブロックに分割した場合、(1、2)、(1、3)、(2、3)の各組合せブロックで、それぞれRAMの干渉が無いことを確認すれば、第1ブロック、第2ブロック、第3ブロックで互いにRAMの干渉が無い、といえる。本実施の形態にて説明したRAM検査方法では、RAM検査領域のサイズが大きく、RAM検査領域内の全てのRAMの値を一時退避できるようなRAM一時退避領域のサイズが無い場合であっても、RAM検査領域を例えば第1ブロック、第2ブロック、第3ブロックに分割して、2つのブロックの全ての組合せで検査することで、所定の安全規格を満足しつつ、RAM検査領域の全体のRAMが正常であることを、適切に、より短時間に検査することができる。
【0059】
本発明のプログラマブルロジックコントローラのRAM検査方法は、本実施の形態にて説明した処理手順等に限定されず、本発明の要旨を変更しない範囲で種々の変更、追加、削除が可能である。また本発明のプログラマブルロジックコントローラは、本実施の形態にて説明した構成、構造、外観、形状等に限定されず、本発明の要旨を変更しない範囲で種々の変更、追加、削除が可能である。また、RAM検査領域、分割するブロックの数、RAM一時退避領域等の各アドレス等は、
図8に示すものに限定されるものではない。また、本実施の形態の説明に用いた数値は一例であり、この数値に限定されるものではない。