(57)【要約】【課題】検査対象となるＲＡＭ検査領域内の全てのＲＡＭの検査を数分程度で実施することが可能であり、かつ所定の安全規格を適切に満足することができる、プログラマブルロジックコントローラのＲＡＭ検査方法及びプログラマブルロジックコントローラを提供する。【解決手段】プログラマブルロジックコントローラのメイン処理時（通常処理時）において、制御手段を用いて、ＲＡＭの検査対象となる領域であるＲＡＭ検査領域が複数に分割されたブロックの中から抽出した２つのブロックを組合せた組合せブロック内の各ＲＡＭに対して、所定値を書き込んだ後、当該ＲＡＭから読み出した値が書き込んだ値と一致するか否かを順番に検査する、書き込み読み出しステップ、を有し、書き込み読み出しステップを、分割した複数のブロックの中から２つのブロックを抽出する全ての組合せに対して実行する、プログラマブルロジックコントローラのＲＡＭ検査方法。【選択図】図３
2015184992.tif 000002
【特許請求の範囲】
【請求項１】
プログラマブルロジックコントローラのＲＡＭ検査方法であって、
制御手段を用いて、ＲＡＭの検査対象となる領域であるＲＡＭ検査領域が複数に分割されたブロックの中から抽出した２つのブロックを組合せた組合せブロック内の各ＲＡＭに対して、所定値を書き込んだ後、当該ＲＡＭから読み出した値が書き込んだ値と一致するか否かを順番に検査する、書き込み読み出しステップ、を有し、
前記書き込み読み出しステップを、分割した複数の前記ブロックの中から２つのブロックを抽出する全ての組合せに対して実行する、
プログラマブルロジックコントローラのＲＡＭ検査方法。
【請求項２】
請求項１に記載のプログラマブルロジックコントローラのＲＡＭ検査方法であって、
前記ＲＡＭの領域には、前記ＲＡＭ検査領域とは異なる領域であるＲＡＭ一時退避領域があり、
前記ＲＡＭ検査領域は、プログラマブルロジックコントローラのＲＡＭ検査方法による検査の前に記憶していた値を前記ＲＡＭ検査方法による検査の後にも維持しておく必要があり、
前記ブロック内のＲＡＭの個数は、前記ＲＡＭ一時退避領域のＲＡＭの個数の１／２以下に設定されており、
前記書き込み読み出しステップを実行する際、抽出した前記組合せブロック内の各ＲＡＭの値を前記一時退避領域に記憶した後に前記書き込み読み出しステップを実行し、前記書き込み読み出しステップを実行した後に前記一時退避領域に記憶した値を前記組合せブロック内の各ＲＡＭに書き戻す、
プログラマブルロジックコントローラのＲＡＭ検査方法。
【請求項３】
請求項１または２に記載のプログラマブルロジックコントローラのＲＡＭ検査方法を用いて前記ＲＡＭ検査領域のＲＡＭの検査を行うＲＡＭ検査プログラムが搭載された、
プログラマブルロジックコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラマブルロジックコントローラのＲＡＭ検査方法及びプログラマブルロジックコントローラに関する。
【背景技術】
【０００２】
プログラマブルロジックコントローラ（Programmable Logic Controller、以下、ＰＬＣと記載する）は、工場の自動機械の制御等に使用されている。ＰＬＣは、小型のコンピュータであり、プログラムで動作する中央処理装置（以下、ＣＰＵと記載する）を備え、プログラムの設計にはラダー回路が利用され、用途に合わせたシーケンスプログラムに適宜書き換えられて利用されている。そしてＰＬＣには種々の入力機器（スイッチ、センサ等）からの導通状態に関する信号（ＯＮまたはＯＦＦの情報）が入力され、ＰＬＣは、種々の入力機器を所望する形態に組み合わせた（直列または並列に組み合わせた）シーケンスプログラムを用いて、出力機器（リレー、モータ等）を制御（ＯＮまたはＯＦＦ信号を出力等）している。
【０００３】
また工場等で使用されるＰＬＣは、所定の安全規格（例えばＩＥＣ規格）を満足する必要があり、当該安全規格の中の１つに、ＣＰＵが利用するＲＡＭに関する安全規格がある。当該ＲＡＭに関する安全規格を満足するための検査方法には、種々の方法が考えられ、例えばＧａｌｐａｔという手法を用いてＲＡＭの検査を行うことで、ＲＡＭに関する安全規格を満足することができる。しかし、Ｇａｌｐａｔの手法を用いてＲＡＭの検査を行うと、非常に長い時間（例えば２〜３時間程度）を必要としてしまい、異常の検知に時間がかかってしまうので、好ましくない。
【０００４】
特許文献１では、用途に応じて変更されるシーケンス制御を行うためのＰＬＣの応用プログラムの記憶領域（ＲＯＭの領域）を検査する方法として、予め検査対象領域のプログラムコードを合計したチェックサム（検査基準値）をＲＯＭに記憶している。検査を実行する際は、検査対象領域のＲＯＭから読み出した値を合計し、ＲＯＭに記憶されているチェックサムと一致するか否かを判定している。
【０００５】
また、特許文献２では、ＰＬＣの検査対象のＲＡＭを複数に分割しておき、電源が１回投入される毎に、１つの検査単位を対象として検査し、電源が切断され、再度、電源が投入されると、前回の電源の切断前に完了していた検査単位の次の検査単位から検査を開始している。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平８−８７４２９号公報
【特許文献２】特開２００６−４０１２２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
特許文献１に記載の検査方法は、ＲＯＭに記憶されたプログラムコードの検査を行うものであり、随時、値を書き換え可能なＲＡＭの検査を行うものではなく、ＲＡＭの検査に適用できるものではない。
【０００８】
また特許文献２に記載の検査方法は、電源が投入されたときに検査対象となるＲＡＭ領域の全てを１度に検査しているのでなく、電源の投入毎に、少しずつ検査を行い、Ｎ回目の電源投入がされたときに、ようやく検査対象のＲＡＭ領域の全体の検査が完了することになるので、あまり好ましくない。
【０００９】
本発明は、このような点に鑑みて創案されたものであり、検査対象となるＲＡＭ検査領域内の全てのＲＡＭの検査を数分程度で実施することが可能であり、かつ所定の安全規格を適切に満足することができる、プログラマブルロジックコントローラのＲＡＭ検査方法及びプログラマブルロジックコントローラを提供することを課題とする。
【課題を解決するための手段】
【００１０】
上記課題を解決するため、本発明に係るプログラマブルロジックコントローラのＲＡＭ検査方法及びプログラマブルロジックコントローラは次の手段をとる。本発明の第１の発明は、プログラマブルロジックコントローラのＲＡＭ検査方法である。そして、制御手段を用いて、ＲＡＭの検査対象となる領域であるＲＡＭ検査領域が複数に分割されたブロックの中から抽出した２つのブロックを組合せた組合せブロック内の各ＲＡＭに対して、所定値を書き込んだ後、当該ＲＡＭから読み出した値が書き込んだ値と一致するか否かを順番に検査する、書き込み読み出しステップ、を有し、前記書き込み読み出しステップを、分割した複数の前記ブロックの中から２つのブロックを抽出する全ての組合せに対して実行する、プログラマブルロジックコントローラのＲＡＭ検査方法である。
【００１１】
次に、本発明の第２の発明は、上記第１の発明に係るプログラマブルロジックコントローラのＲＡＭ検査方法であって、前記ＲＡＭの領域には、前記ＲＡＭ検査領域とは異なる領域であるＲＡＭ一時退避領域があり、前記ＲＡＭ検査領域は、プログラマブルロジックコントローラのＲＡＭ検査方法による検査の前に記憶していた値を前記ＲＡＭ検査方法による検査の後にも維持しておく必要がある。そして、前記ブロック内のＲＡＭの個数は、前記ＲＡＭ一時退避領域のＲＡＭの個数の１／２以下に設定されており、前記書き込み読み出しステップを実行する際、抽出した前記組合せブロック内の各ＲＡＭの値を前記一時退避領域に記憶した後に前記書き込み読み出しステップを実行し、前記書き込み読み出しステップを実行した後に前記一時退避領域に記憶した値を前記組合せブロック内の各ＲＡＭに書き戻す、プログラマブルロジックコントローラのＲＡＭ検査方法である。
【００１２】
次に、本発明の第３の発明は、上記第１の発明または第２の発明に係るプログラマブルロジックコントローラのＲＡＭ検査方法を用いて前記ＲＡＭ検査領域のＲＡＭの検査を行うＲＡＭ検査プログラムが搭載された、プログラマブルロジックコントローラである。
【発明の効果】
【００１３】
第１の発明によれば、ＲＡＭ検査領域を分割した複数のブロックの中から２つのブロックを抽出する全ての組合せに対して、書き込み読み出しステップを実行することで、適切に所定の安全規格（ＩＥＣ規格等）を満足することができるとともに、ＲＡＭの検査をより短時間に行うことができる。
【００１４】
第２の発明によれば、複数に分割する各ブロックのサイズを、適切なサイズにすることが可能であり、ＲＡＭ検査領域のＲＡＭの値を、ＲＡＭ検査後であっても、ＲＡＭ検査前の値を適切に保持させておくことができる。
【００１５】
第３の発明によれば、適切なＲＡＭの検査を、より短時間に行うことができる、プログラマブルロジックコントローラを実現することができる。
【図面の簡単な説明】
【００１６】
【図１】本発明のＰＬＣを構成する制御ユニットと、入力ユニットと、出力ユニットの外観の例を説明する斜視図である。
【図２】制御ユニットと、入力ユニットと、出力ユニットにて構成されたＰＬＣのブロック構成及び接続の例を説明する図である。
【図３】ＰＬＣのＣＰＵによるＲＡＭ検査の処理手順を説明するフローチャートである。
【図４】図３に示すフローチャートにおける「ＲＡＭ書き込み・読み出し（ＳＢ１００）」の処理の詳細を説明するフローチャートである。
【図５】図３に示すフローチャートにおける「ＲＡＭ書き込み・読み出し（ＳＢ１００）」の処理の詳細を説明するフローチャートである。
【図６】図３に示すフローチャートにおける「ＲＡＭ書き込み・読み出し（ＳＢ１００）」の処理の詳細を説明するフローチャートである。
【図７】図３に示すフローチャートにおける「ＲＡＭ書き込み・読み出し（ＳＢ１００）」の処理の詳細を説明するフローチャートである。
【図８】検査対象となるＲＡＭ検査領域等の例を説明する図である。
【発明を実施するための形態】
【００１７】
以下に本発明を実施するための形態を図面を用いて説明する。
●［ＰＬＣ１の外観（図１）］
図１に示すように、ＰＬＣ１は、制御ユニット１０、入力ユニット２０、出力ユニット３０にて構成されている。また入力ユニット２０及び出力ユニット３０は、入出力の数に応じて適宜増設される。入力ユニット２０内には制御ユニット１０と接続するためのコネクタ２２を備えた入力ボード２１が収容されており、複数の入力機器（スイッチ、センサ等）からの配線が接続される入力端子２５が設けられている。出力ユニット３０内には制御ユニット１０と接続するためのコネクタ３３を備えた出力ボード３１が収容されており、複数の出力機器（リレー、モータ等）への配線が接続される出力端子３５が設けられている。制御ユニット１０内には入力ユニット２０と接続するためのコネクタ１２、出力ユニット３０と接続するためのコネクタ１３、を備えた制御ボード１１が収容されており、パソコン等の端末装置を接続可能なコネクタ１５や、他のＰＬＣと接続するためのコネクタ１６等が設けられている。
【００１８】
●［ＰＬＣ１のブロック構成及び接続例（図２）］
次に図２を用いてＰＬＣ１のブロック構成及び接続の例について説明する。入力ユニット２０の入力端子２５には、複数の入力機器（スイッチ４０ａ、センサ４０ｂ・・入力手段４０ｎ等）からの配線が接続され、複数の入力機器の導通状態に関する信号（ＯＮまたはＯＦＦの情報等）が入力される。入力された導通状態に関する信号は、インターフェース２１ａ（以下、インターフェースをＩ／Ｆと記載する）及びコネクタ２２を介して制御ユニット１０に伝送される。
【００１９】
制御ユニット１０は、ＣＰＵ１１ａ（制御手段に相当）を中心に構成され、ＲＡＭ１１ｂ、ＲＯＭ１１ｃが設けられている。ＲＯＭ１１ｃには、ＥＥＰＲＯＭ、ＦｌａｓｈＲＯＭ等の書替え可能なＲＯＭが用いられ、任意の入力機器を直列または並列に組み合わせて構成したシーケンスプログラム等が記憶されている。ユーザは端末装置５０を用いて、ラダー回路等を用いてシーケンスプログラムを作成可能であり、作成したシーケンスプログラムを制御ユニット１０に記憶させる（書き込む）ことが可能である。このシーケンスプログラムには、後述するＲＡＭ検査方法を実現するＲＡＭ検査プログラムも実装されている。なお、ＲＯＭ１１ｃには、Ｉ／Ｆ１１ｇを介して端末装置５０、他のＰＬＣ６０等と通信を行うプログラム等も格納されている。ＣＰＵ１１ａは、ＲＯＭ１１ｃに記憶されているシーケンスプログラムと、コネクタ１２及びＩ／Ｆ１１ｄを介して入力ユニット２０から入力される各入力機器からの導通状態に関する信号とに基づいた演算結果を、Ｉ／Ｆ１１ｆ及びコネクタ１３を介して出力ユニット３０に出力する。
【００２０】
出力ユニット３０の出力端子３５には、複数の出力機器（モータ４２ａ、リレー４２ｂ・・出力手段４２ｎ等）への配線が接続される。そして、シーケンスプログラムと各入力機器の導通状態に基づいて制御ユニット１０にて求めた演算結果を、コネクタ３３及びＩ／Ｆ３１ａを介して出力端子３５に接続された出力機器に出力する。
【００２１】
●［ＲＡＭ検査プログラムの処理手順（図３）］
次に図３を用いて、図２に示すＰＬＣ１の制御ユニット１０のＣＰＵ１１ａ（制御手段に相当）によるＲＡＭ１１ｂの検査の処理手順について説明する。図３に示す処理は、例えば、制御ユニット１０が通常の制御（メイン処理あるいは通常処理と呼ばれる機械の制御処理）の実行中に、割り込み等にて起動される。また、起動のタイミングは特に限定しない。なお、本実施の形態にて説明するＲＡＭ検査方法の処理手順は、Ｍａｒｃｈ  Ｃという検査方法に基づいた処理手順としている。また、ＲＡＭ検査領域は、スタック領域や通信用領域や周辺装置用領域等の特殊な使用領域を除いた残りの全ての領域としている。
【００２２】
ステップＳ１０にてＣＰＵ１１ａは、ＲＡＭの検査対象となる領域であるＲＡＭ検査領域と、ＲＡＭ一時退避領域と、を確認し、ステップＳ１５に進む。なお、ＲＡＭ検査領域の先頭のＲＡＭのアドレス及び最終のＲＡＭのアドレスや、ＲＡＭ一時退避領域の先頭のＲＡＭのアドレス及び最終のＲＡＭのアドレス等は、ＲＯＭ１１ｃのプログラム領域のいずれかの位置に予め記憶されている。例えば図８に示す例では、ＲＡＭ検査領域はアドレス０ｘ００〜０ｘＢＦであり、ＲＡＭ一時退避領域はアドレス０ｘＣ０〜０ｘＦＦである例を示している。これらのアドレスがＲＯＭ１１ｃに記憶されており、ＣＰＵ１１ａは、これらのアドレスを読み出して、ＲＡＭ検査領域、ＲＡＭ一時退避領域を確認する。また、ＲＡＭ検査領域の各ＲＡＭの値は、当該ＲＡＭ検査プログラムを実行する前に記憶していた値を、ＲＡＭ検査プログラムの実行後にも維持（保持）しておく必要があるものとする。なお、ＲＡＭ一時退避領域は、例えばスタック領域である。また図８の例ではＲＡＭ検査領域が連続したアドレスの領域である例を示しているが、、ＲＡＭ検査領域は、連続したアドレスの領域に限定されず、複数の非連続の領域であってもよい。
【００２３】
ステップＳ１５にてＣＰＵ１１ａは、ＲＡＭ検査領域を複数のブロックに分割してステップＳ２０に進む。複数のブロックに分割する際、ＣＰＵ１１ａは、各ブロック内のＲＡＭの個数が、ＲＡＭ一時退避領域のＲＡＭの個数の１／２以下となるように分割する。例えば図８の例の場合、ＲＡＭ一時退避領域のＲＡＭは０ｘＣ０〜０ｘＦＦの６４個であるので、各ブロックのＲＡＭの個数が６４（個）＊１／２＝３２（個）以下となるように分割する。なお、分割するブロックの数ができるだけ少ないほうが検査時間を短くすることができるので、図８の例では、各ブロックのＲＡＭの個数が３２個となるように分割しており、ＲＡＭ検査領域を第１ブロック〜第６ブロックに分割した例を示している。なお、予めＲＡＭ検査領域を複数のブロックに分割しておき、ステップＳ１０とステップＳ１５を省略するようにしてもよい。
【００２４】
ステップＳ２０にてＣＰＵ１１ａは、分割したブロックの中から抽出した２つのブロックを組合せた組合せブロック（例えば、第１ブロックと第２ブロックの組合せ、第３ブロックと第４ブロックの組合せ等）において、最初に検査するべき（ｍ、ｎ）の組合せブロックを抽出してステップＳ３５に進む。例えば第１ブロックと第２ブロックの組合せを抽出した場合では（ｍ、ｎ）＝（１、２）であり、第３ブロックと第４ブロックの組合せを抽出した場合では（ｍ、ｎ）＝（３、４）であることを示している。例えばこの場合、最初に検査するべき組合せブロックは、（１、２）の組合せブロックである。以降の説明において、「（ｍ、ｎ）」は、第ｍブロックと第ｎブロックの組合せ（ただし、ｍ＜ｎ）を示す。
【００２５】
ステップＳ３５にてＣＰＵ１１ａは、抽出した（ｍ、ｎ）の組合せブロック内の各ＲＡＭの値を、ＲＡＭ一時退避領域の各ＲＡＭにコピー（退避）してステップＳ４０に進む。例えば（ｍ、ｎ）＝（１、２）の場合では、図８に示す第１ブロックの各ＲＡＭ（アドレス０ｘ００〜０ｘ１Ｆ）の値を、ＲＡＭ一時退避領域の各ＲＡＭ（アドレス０ｘＣ０〜０ｘＤＦ）にコピーして、第２ブロックの各ＲＡＭ（アドレス０ｘ２０〜０ｘ３Ｆ）の値を、ＲＡＭ一時退避領域の各ＲＡＭ（アドレス０ｘＥ０〜０ｘＦＦ）にコピーする。
【００２６】
そしてステップＳ４０にてＣＰＵ１１ａは、図４〜図７に示すサブルーチンＳＢ１００の処理を実行し、サブルーチンＳＢ１００からリターンするとステップＳ５０へ進む。なお、サブルーチンＳＢ１００では、後述するように、抽出した（ｍ、ｎ）の組合せブロック内の各ＲＡＭに対して、所定値を書き込んだ後、当該ＲＡＭから読み出した値が、書き込んだ値と一致するか否かを順番に検査する。このサブルーチンＳＢ１００の処理は、書き込み読み出しステップに相当しており、詳細については後述する。
【００２７】
ステップＳ５０にてＣＰＵ１１ａは、サブルーチンＳＢ１００の処理の結果、ＲＡＭが正常であるか否かを判定し、ＲＡＭが正常の場合（Ｙｅｓ）はステップＳ６０に進み、ＲＡＭが正常でない場合（Ｎｏ）はステップＳ８０に進む。なおステップＳ８０では、ＣＰＵ１１ａは、ＲＡＭに異常が発見されたことを報知して（例えば異常ランプを点灯等して）動作を停止する。
【００２８】
ステップＳ６０に進んだ場合、ＣＰＵ１１ａは、ＲＡＭ一時退避領域の各ＲＡＭにコピーした値（ステップＳ３５にてコピーした値）を、抽出した（ｍ、ｎ）の組合せブロック内の各ＲＡＭに書き戻してステップＳ６５に進む。例えば（ｍ、ｎ）＝（１、２）の場合では、図８に示すＲＡＭ一時退避領域の各ＲＡＭ（アドレス０ｘＣ０〜０ｘＤＦ）にコピー（退避）しておいた値を、第１ブロックの各ＲＡＭ（アドレス０ｘ００〜０ｘ１Ｆ）に書き戻し、ＲＡＭ一時退避領域の各ＲＡＭ（アドレス０ｘＥ０〜０ｘＦＦ）にコピー（退避）しておいた値を、第２ブロックの各ＲＡＭ（アドレス０ｘ２０〜０ｘ３Ｆ）に書き戻す。これにより、ＲＡＭ検査前に保持していた値を、ＲＡＭ検査後でも維持（保持）させておくことができる。
【００２９】
そしてステップＳ６５にてＣＰＵ１１ａは、全ての（ｍ、ｎ）の組合せブロックの検査が終了したか否かを判定し、全ての組合せブロックの検査が終了した場合（Ｙｅｓ）は、本ＲＡＭの検査の処理を終了し、全ての組合せブロックの検査が終了していない場合（Ｎｏ）はステップＳ７０に進む。例えば図８に示すように、第１ブロック〜第６ブロックに分割した場合では、（１、２）、（１、３）、（１、４）、（１、５）、（１、６）、（２、３）、（２、４）、（２、５）、（２、６）、（３、４）、（３、５）、（３、６）、（４、５）、（４、６）、（５、６）の、6Ｃ2＝１５（通り）の全ての組合せブロックの検査が終了した場合に、本ＲＡＭの検査の処理を終了する。
【００３０】
ステップＳ７０に進んだ場合、ＣＰＵ１１ａは、次に検査するべき（ｍ、ｎ）の組合せブロックを抽出してステップＳ３５に戻る。例えば（１、２）の組合せブロックの検査を行った際にステップＳ７０に達した場合は、次の（１、３）の組合せブロックを抽出してステップＳ３５に戻る。
【００３１】
●［サブルーチン（ＳＢ１００）の処理手順の詳細（図４〜図７）］
次に、図３に示すステップＳＢ１００にて実行されるサブルーチンＳＢ１００の処理手順について、図４〜図７を用いて説明する。なお、図４に示す処理手順は、ＲＡＭを昇順、かつ書き込み及び読み出しするデータ（値）を昇順、にして実行するＲＡＭの書き込み・読み出し検査である。また、図５に示す処理手順は、ＲＡＭを昇順、かつ書き込み及び読み出しするデータ（値）を降順、にして実行するＲＡＭの書き込み・読み出し検査である。また、図６に示す処理手順は、ＲＡＭを降順、かつ書き込み及び読み出しするデータ（値）を昇順、にして実行するＲＡＭの書き込み・読み出し検査である。また、図７に示す処理手順は、ＲＡＭを降順、かつ書き込み及び読み出しするデータ（値）を降順、にして実行するＲＡＭの書き込み・読み出し検査である。
【００３２】
●［図４に示すフローチャートの処理（ＲＡＭ：昇順、データ：昇順）の処理手順］
図４に示すステップＳ１１０にてＣＰＵ１１ａは、（ｍ、ｎ）の組合せブロック内の全ＲＡＭに、昇順に、第１・１所定値を書き込み、ステップＳ１１５に進む。例えば（１、２）の組合せブロックの場合では、ますアドレス０ｘ００のＲＡＭに０ｘ００（第１・１所定値）を書き込み、昇順である次のアドレス０ｘ０１のＲＡＭに０ｘ００（第１・１所定値）を書き込み、以降、アドレス０ｘ３ＦのＲＡＭまで順番に０ｘ００（第１・１所定値）を書き込む。
【００３３】
ステップＳ１１５にてＣＰＵ１１ａは、インデックスに（ｍ、ｎ）の組合せブロック内の先頭のＲＡＭのアドレス（この場合、先頭のＲＡＭのアドレスは０ｘ００）を代入してステップＳ１２５に進む。そしてステップＳ１２５にてＣＰＵ１１ａは、インデックス先が示すアドレスのＲＡＭから値を読み出し、読み出した値が第１・１所定値（ステップＳ１１０にて書き込んだ値）と一致するか否かを判定し、一致する場合（Ｙｅｓ）はステップＳ１３０に進み、一致しない場合（Ｎｏ）はステップＳ１８０に進む。なおステップＳ１８０に進んだ場合は、ＲＡＭに異常が発見された場合であり、ＣＰＵ１１ａは、ＲＡＭ異常を記憶してサブルーチンＳＢ１００からリターンする。
【００３４】
ステップＳ１３０に進んだ場合、ＣＰＵ１１ａは、インデックス先が示すアドレスのＲＡＭに、第１・２所定値（例えば０ｘ０１）を書き込み、ステップＳ１３５に進む。そしてステップＳ１３５にてＣＰＵ１１ａは、インデックス先が示すアドレスのＲＡＭから値を読み出し、読み出した値が第１・２所定値（ステップＳ１３０にて書き込んだ値）と一致するか否かを判定し、一致する場合（Ｙｅｓ）はステップＳ１４０に進み、一致しない場合（Ｎｏ）はステップＳ１８０に進む。ステップＳ１８０に進んだ場合は、上述したように、ＣＰＵ１１ａは、ＲＡＭ異常を記憶してサブルーチンＳＢ１００からリターンする。なお、ステップＳ１３５〜ステップＳ１４０の間は、ステップＳ１３０及びステップＳ１３５と同様に、インデックス先のアドレスのＲＡＭに、所定値を書き込んで、読み出した値が所定値であるか否かのチェックを、第１・３所定値（例えば０ｘ０３）、第１・４所定値（例えば０ｘ０７）、第１・５所定値（例えば０ｘ０Ｆ）、第１・６所定値（例えば０ｘ１Ｆ）、第１・７所定値（例えば０ｘ３Ｆ）、第１・８所定値（例えば０ｘ７Ｆ）等を用いて、昇順のデータにて行うことを省略している。
【００３５】
ステップＳ１４０に進んだ場合、ＣＰＵ１１ａは、インデックス先が示すアドレスのＲＡＭに、第１・ａ所定値（例えば０ｘＦＦ）を書き込み、ステップＳ１４５に進む。そしてステップＳ１４５にてＣＰＵ１１ａは、インデックス先が示すアドレスのＲＡＭから値を読み出し、読み出した値が第１・ａ所定値（ステップＳ１４０にて書き込んだ値）と一致するか否かを判定し、一致する場合（Ｙｅｓ）はステップＳ１５０に進み、一致しない場合（Ｎｏ）はステップＳ１８０に進む。ステップＳ１８０に進んだ場合は、上述したように、ＣＰＵ１１ａは、ＲＡＭ異常を記憶してサブルーチンＳＢ１００からリターンする。
【００３６】
ステップＳ１５０に進んだ場合、ＣＰＵ１１ａは、インデックス先が示すアドレスが、現在チェックしている（ｍ、ｎ）の組合せブロック内の最終ＲＡＭのアドレスであるか否かを判定し、最終ＲＡＭのアドレスである場合（Ｙｅｓ）は「Ｂ」に示す図５の処理に移行し、最終ＲＡＭのアドレスでない場合（Ｎｏ）はステップＳ１５５に進む。例えば図８に示す（１、２）の組合せブロック（第１ブロックと第２ブロック）の場合、ＣＰＵ１１ａは、インデックス先が示すアドレスが、０ｘ３Ｆである場合、最終ＲＡＭのアドレスであると判定する。
【００３７】
ステップＳ１５５に進んだ場合、ＣＰＵ１１ａは、現在抽出している（ｍ、ｎ）の組合せブロック内における次に検査するべきＲＡＭのアドレスをインデックスに代入してステップＳ１２５に戻る。例えば現在（１、２）の組合せブロックを抽出している場合であって、０ｘ００のＲＡＭのチェックを終えた場合、この図４の処理ではＲＡＭを昇順に検査しているので、次に検査するべきＲＡＭのアドレスである０ｘ０１をインデックスに代入する。
【００３８】
以上、図４に示す処理手順にて、ＲＡＭを昇順、かつ書き込み及び読み出しするデータ（値）を昇順、にして実行するＲＡＭの書き込み・読み出し検査が完了する。続いて、図５に示す処理手順にて、ＲＡＭを昇順、かつ書き込み及び読み出しするデータ（値）を降順、にして実行するＲＡＭの書き込み・読み出し検査を実行する。
【００３９】
●［図５に示すフローチャートの処理（ＲＡＭ：昇順、データ：降順）の処理手順］
図４に示すフローチャートにてステップＳ１５０からＹｅｓにて「Ｂ」に進むと、図５に示す処理に突入する。図５に示すステップＳ２１５〜ステップＳ２８０の処理は、図４に示す処理に対して、同じ（ｍ、ｎ）の組合せブロック内のＲＡＭを昇順にチェックする点は同じであるが、書き込み及び読み出しするデータが、昇順でなく降順である点が異なる。
【００４０】
ステップＳ２１５の処理は、図４のステップＳ１１５の処理と同じであるので説明を省略する。またステップＳ２２５の処理は、図４のステップＳ１２５の処理に対して、読み出した値が第１・ａ所定値（ステップＳ１４０で書き込んだ値であり、例えば０ｘＦＦ）である点が異なる。ＣＰＵ１１ａは、読み出した値が第１・ａ所定値と一致する場合（Ｙｅｓ）はステップＳ２３０に進み、第１・ａ所定値と一致しない場合はステップＳ２８０に進む。ステップＳ２８０に進んだ場合、ＣＰＵ１１ａは、ＲＡＭ異常を記憶してサブルーチンＳＢ１００からリターンする。
【００４１】
ステップＳ２３０、Ｓ２３５・・Ｓ２４０、Ｓ２４５の処理は、図４のステップＳ１３０、Ｓ１３５・・Ｓ１４０、Ｓ１４５の処理に対して、書き込む値及び読み出した値が異なり、昇順でなく降順である点が異なる。図４のステップＳ１３０、Ｓ１３５・・Ｓ１４０、Ｓ１４５では、第１・２所定値（０ｘ０１）、第１・３所定値（０ｘ０３）、第１・４所定値（０ｘ０７）・・第１．ａ所定値（０ｘＦＦ）のようにデータを昇順にして書き込み及び読み出しを行ったが、ステップＳ２３０、Ｓ２３５・・Ｓ２４０、Ｓ２４５の処理では、第２・１所定値（例えば０ｘＦＥ）、第２・２所定値（例えば０ｘＦＣ）、第２・３所定値（例えば０ｘＦ８）、第２・４所定値（例えば０ｘＦ０）、第２・５所定値（例えば０ｘＥ０）、第２・６所定値（例えば０ｘＣ０）、第２・７所定値（例えば０ｘ８０）、第２・ｂ所定値（例えば０ｘ００）のようにデータを降順にして書き込み及び読み出しを行う。
【００４２】
そしてステップＳ２５０に進んだ場合、ＣＰＵ１１ａは、図４のステップＳ１５０の処理と同様に、インデックス先が示すアドレスが、現在チェックしている（ｍ、ｎ）の組合せブロック内の最終ＲＡＭのアドレスであるか否かを判定し、最終ＲＡＭのアドレスである場合（Ｙｅｓ）は「Ｃ」に示す図６の処理に移行し、最終ＲＡＭのアドレスでない場合（Ｎｏ）はステップＳ２５５に進む。
【００４３】
ステップＳ２５５に進んだ場合、ＣＰＵ１１ａは、現在抽出している（ｍ、ｎ）の組合せブロック内における次に検査するべきＲＡＭのアドレスをインデックスに代入してステップＳ２２５に戻る。例えば現在（１、２）の組合せブロックを抽出している場合であって、０ｘ００のＲＡＭのチェックを終えた場合、この図５の処理ではＲＡＭを昇順に検査しているので、次に検査するべきＲＡＭのアドレスである０ｘ０１をインデックスに代入する。
【００４４】
以上、図５に示す処理手順にて、ＲＡＭを昇順、かつ書き込み及び読み出しするデータ（値）を降順、にして実行するＲＡＭの書き込み・読み出し検査が完了する。続いて、図６に示す処理手順にて、ＲＡＭを降順、かつ書き込み及び読み出しするデータ（値）を昇順、にして実行するＲＡＭの書き込み・読み出し検査を実行する。
【００４５】
●［図６に示すフローチャートの処理（ＲＡＭ：降順、データ：昇順）の処理手順］
図５に示すフローチャートにてステップＳ２５０からＹｅｓにて「Ｃ」に進むと、図６に示す処理に突入する。図６に示すステップＳ３０５〜ステップＳ３８０の処理は、図４に示す処理に対して、同じ（ｍ、ｎ）の組合せブロック内のＲＡＭを降順にチェックする点が異なり、書き込み及び読み出しするデータが昇順である点は同じである。
【００４６】
ステップＳ３０５にてＣＰＵ１１ａは、（ｍ、ｎ）の組合せブロック内の全ＲＡＭから順番に値を読み出し（例えばＲＡＭアドレスの昇順に読み出し）、読み出した値が第２・ｂ所定値（０ｘ００）と一致するか否かを判定し、一致する場合（Ｙｅｓ）はステップＳ３１５に進み、一致しない場合（Ｎｏ）はステップＳ３８０に進む。ステップＳ３８０に進んだ場合、ＣＰＵ１１ａは、ＲＡＭ異常を記憶してサブルーチンＳＢ１００からリターンする。
【００４７】
ステップＳ３１５に進んだ場合、ＣＰＵ１１ａは、インデックスに（ｍ、ｎ）の組合せブロック内の最終のＲＡＭのアドレス（この場合、最終ＲＡＭのアドレスは０ｘ３Ｆ）を代入してステップＳ３２５に進む。そしてステップＳ３２５にてＣＰＵ１１ａは、インデックス先が示すアドレスのＲＡＭから値を読み出し、読み出した値が第２・ｂ所定値（ステップＳ２４０にて書き込んだ値）と一致するか否かを判定し、一致する場合（Ｙｅｓ）はステップＳ３３０に進み、一致しない場合（Ｎｏ）はステップＳ３８０に進む。ステップＳ１８０に進んだ場合、ＣＰＵ１１ａは、ＲＡＭ異常を記憶してサブルーチンＳＢ１００からリターンする。
【００４８】
ステップＳ３３０、Ｓ３３５・・Ｓ３４０、Ｓ３４５の処理は、図４のステップＳ１３０、Ｓ１３５・・Ｓ１４０、Ｓ１４５の処理と同様、書き込む値及び読み出した値は昇順であるが、インデックスの値が最終ＲＡＭのアドレスから先頭ＲＡＭのアドレスへと降順に変化する点が異なる。例えば、書き込み及び読み出しは、第１・２所定値（０ｘ０１）、第１・３所定値（０ｘ０３）、第１・４所定値（０ｘ０７）・・第１・ａ所定値（０ｘＦＦ）のようにデータを昇順にして書き込み及び読み出しを行う。
【００４９】
そしてステップＳ３５０に進んだ場合、ＣＰＵ１１ａは、インデックス先が示すアドレスが、現在チェックしている（ｍ、ｎ）の組合せブロック内の先頭のＲＡＭのアドレスであるか否かを判定し、先頭のＲＡＭのアドレスである場合（Ｙｅｓ）は「Ｄ」に示す図７の処理に移行し、先頭のＲＡＭのアドレスでない場合（Ｎｏ）はステップＳ３５５に進む。例えば図８に示す（１、２）の組合せブロック（第１ブロックと第２ブロック）の場合、ＣＰＵ１１ａは、インデックス先が示すアドレスが、０ｘ００である場合、先頭のＲＡＭのアドレスであると判定する。
【００５０】
ステップＳ３５５に進んだ場合、ＣＰＵ１１ａは、現在抽出している（ｍ、ｎ）の組合せブロック内における次に検査するべきＲＡＭのアドレスをインデックスに代入してステップＳ３２５に戻る。例えば現在（１、２）の組合せブロックを抽出している場合であって、０ｘ３ＦのＲＡＭのチェックを終えた場合、この図６の処理ではＲＡＭを降順に検査しているので、次に検査するべきＲＡＭのアドレスである０ｘ３Ｅをインデックスに代入する。
【００５１】
以上、図６に示す処理手順にて、ＲＡＭを降順、かつ書き込み及び読み出しするデータ（値）を昇順、にして実行するＲＡＭの書き込み・読み出し検査が完了する。続いて、図７に示す処理手順にて、ＲＡＭを降順、かつ書き込み及び読み出しするデータ（値）を降順、にして実行するＲＡＭの書き込み・読み出し検査を実行する。
【００５２】
●［図７に示すフローチャートの処理（ＲＡＭ：降順、データ：降順）の処理手順］
図６に示すフローチャートにてステップＳ３５０からＹｅｓにて「Ｄ」に進むと、図７に示す処理に突入する。図７に示すステップＳ４１５〜ステップＳ４９０の処理は、図６に示す処理に対して、同じ（ｍ、ｎ）の組合せブロック内のＲＡＭを降順にチェックする点は同じであるが、書き込み及び読み出しするデータが、昇順でなく降順である点が異なる。
【００５３】
ステップＳ４１５の処理は、図６のステップＳ３１５の処理と同じであるので説明を省略する。またステップＳ４２５の処理は、図６のステップＳ３２５の処理に対して、読み出した値が第１・ａ所定値（ステップＳ３４０で書き込んだ値であり、例えば０ｘＦＦ）である点が異なる。ＣＰＵ１１ａは、読み出した値が第１・ａ所定値と一致する場合（Ｙｅｓ）はステップＳ４３０に進み、第１・ａ所定値と一致しない場合はステップＳ４８０に進む。ステップＳ４８０に進んだ場合、ＣＰＵ１１ａは、ＲＡＭ異常を記憶してサブルーチンＳＢ１００からリターンする。
【００５４】
ステップＳ４３０、Ｓ４３５・・Ｓ４４０、Ｓ４４５の処理は、図６のステップＳ３３０、Ｓ３３５・・Ｓ３４０、Ｓ３４５の処理に対して、書き込む値及び読み出した値が異なり、昇順でなく降順である点が異なる。図６のステップＳ３３０、Ｓ３３５・・Ｓ３４０、Ｓ３４５では、第１・２所定値（０ｘ０１）、第１・３所定値（０ｘ０３）、第１・４所定値（０ｘ０７）・・第１．ａ所定値（０ｘＦＦ）のようにデータを昇順にして書き込み及び読み出しを行ったが、ステップＳ４３０、Ｓ４３５・・Ｓ４４０、Ｓ４４５の処理では、第２・１所定値（例えば０ｘＦＥ）、第２・２所定値（例えば０ｘＦＣ）、第２・３所定値（例えば０ｘＦ８）、第２・４所定値（例えば０ｘＦ０）、第２・５所定値（例えば０ｘＥ０）、第２・６所定値（例えば０ｘＣ０）、第２・７所定値（例えば０ｘ８０）、第２・ｂ所定値（例えば０ｘ００）のようにデータを降順にして書き込み及び読み出しを行う。
【００５５】
そしてステップＳ４５０に進んだ場合、ＣＰＵ１１ａは、図６のステップＳ３５０の処理と同様に、インデックス先が示すアドレスが、現在チェックしている（ｍ、ｎ）の組合せブロック内の先頭のＲＡＭのアドレスであるか否かを判定し、先頭のＲＡＭのアドレスである場合（Ｙｅｓ）はステップＳ４９０に進み、先頭のＲＡＭのアドレスでない場合（Ｎｏ）はステップＳ４５５に進む。
【００５６】
ステップＳ４５５に進んだ場合、ＣＰＵ１１ａは、現在抽出している（ｍ、ｎ）の組合せブロック内における次に検査するべきＲＡＭのアドレスをインデックスに代入してステップＳ４２５に戻る。例えば現在（１、２）の組合せブロックを抽出している場合であって、０ｘ３ＦのＲＡＭのチェックを終えた場合、この図７の処理ではＲＡＭを降順に検査しているので、次に検査するべきＲＡＭのアドレスである０ｘ３Ｅをインデックスに代入する。
【００５７】
以上、図７に示す処理手順にて、ＲＡＭを降順、かつ書き込み及び読み出しするデータ（値）を降順、にして実行するＲＡＭの書き込み・読み出し検査が完了する。そしてステップＳ４９０に進んだ場合、抽出した（ｍ、ｎ）の組合せブロック内の全ＲＡＭに対して、図４に示すＲＡＭを昇順かつデータを昇順としたＲＡＭの検査、図５に示すＲＡＭを昇順かつデータを降順としたＲＡＭの検査、図６に示すＲＡＭを降順かつデータを昇順としたＲＡＭの検査、図７に示すＲＡＭを降順かつデータを降順としたＲＡＭの検査、の全てで正常であることが確認できたことになるので、ＣＰＵ１１ａは、ＲＡＭ正常を記憶してサブルーチンＳＢ１００からリターンする。
【００５８】
以上に説明したＲＡＭ検査方法により、例えばＲＡＭ検査領域を第１ブロック、第２ブロック、第３ブロックの３つのブロックに分割した場合、（１、２）、（１、３）、（２、３）の各組合せブロックで、それぞれＲＡＭの干渉が無いことを確認すれば、第１ブロック、第２ブロック、第３ブロックで互いにＲＡＭの干渉が無い、といえる。本実施の形態にて説明したＲＡＭ検査方法では、ＲＡＭ検査領域のサイズが大きく、ＲＡＭ検査領域内の全てのＲＡＭの値を一時退避できるようなＲＡＭ一時退避領域のサイズが無い場合であっても、ＲＡＭ検査領域を例えば第１ブロック、第２ブロック、第３ブロックに分割して、２つのブロックの全ての組合せで検査することで、所定の安全規格を満足しつつ、ＲＡＭ検査領域の全体のＲＡＭが正常であることを、適切に、より短時間に検査することができる。
【００５９】
本発明のプログラマブルロジックコントローラのＲＡＭ検査方法は、本実施の形態にて説明した処理手順等に限定されず、本発明の要旨を変更しない範囲で種々の変更、追加、削除が可能である。また本発明のプログラマブルロジックコントローラは、本実施の形態にて説明した構成、構造、外観、形状等に限定されず、本発明の要旨を変更しない範囲で種々の変更、追加、削除が可能である。また、ＲＡＭ検査領域、分割するブロックの数、ＲＡＭ一時退避領域等の各アドレス等は、図８に示すものに限定されるものではない。また、本実施の形態の説明に用いた数値は一例であり、この数値に限定されるものではない。
【符号の説明】
【００６０】
１        ＰＬＣ
１０      制御ユニット
１１ａ    ＣＰＵ（制御手段）
１１ｂ    ＲＡＭ
１１ｃ    ＲＯＭ
２０      入力ユニット
２５      入力端子
３０      出力ユニット
３５      出力端子
１２、１３、２２、３３    コネクタ
５０      端末装置
６０      他のＰＬＣ
【図１】
2015184992.tif 000003
【図２】
2015184992.tif 000004
【図３】
2015184992.tif 000005
【図４】
2015184992.tif 000006
【図５】
2015184992.tif 000007
【図６】
2015184992.tif 000008
【図７】
2015184992.tif 000009
【図８】
2015184992.tif 000010