(57)【要約】【課題】特殊ユニットに対する設定の確認を容易に行えるプログラム解析装置を得ること。【解決手段】ＰＬＣ２を動作させるプログラムを解析するチェック装置１において、ＰＬＣ２内の特殊ユニットへの書込み命令を行うプログラムを取得するメモリ部１４と、取得したプログラムの設定内容を解析する解析部１００と、を備え、解析部１００は、特殊ユニットへの書込み命令で特殊ユニットへ書込む値が所定の範囲内であるか否かを判断する。【選択図】        図１
2005293371.tif 000002
【特許請求の範囲】
【請求項１】
プログラマブルコントローラを動作させるプログラムを解析するプログラム解析装置において、
前記プログラマブルコントローラ内の特殊ユニットへの書込み命令を行うプログラムを取得するプログラム取得部と、
前記取得したプログラムの設定内容を解析する解析部と、
を備え、
前記解析部は、前記書込み命令で前記特殊ユニットへ書込む値が所定の範囲内であるか否かを判断することを特徴とするプログラム解析装置。
【請求項２】
前記解析部は、
前記書込み命令内に含まれる前記特殊ユニット毎に割り当てられた先頭のＩ／Ｏ番号およびバッファメモリアドレスに基づいて前記先頭のＩ／Ｏ番号に対応する特殊ユニットの前記バッファメモリアドレスにおける書込み値の許容範囲を取得し、前記特殊ユニットへ書込む値が前記許容範囲内であるか否かを判断することを特徴とする請求項１に記載のプログラム解析装置。
【請求項３】
前記解析部は、
前記先頭のＩ／Ｏ番号に対応する特殊ユニットにおいて、同一のバッファメモリアドレスが複数存在するか否かを確認することによって、前記特殊ユニットへ書込む値が複数のバッファメモリアドレスに対して重複して設定されているか否かを判断することを特徴とする請求項２に記載のプログラム解析装置。
【請求項４】
前記解析部は、
前記先頭のＩ／Ｏ番号に対応する特殊ユニットにおいて、予め定められたバッファメモリアドレスが前記書込み命令内に少なくとも１つ存在するか否かを判断することによって、前記書込み命令の設定漏れがあるか否かを判断することを特徴とする請求項１〜３のいずれか１つに記載のプログラム解析装置。
【請求項５】
前記解析部は、
前記特殊ユニットへ書込む値が所定の範囲内であるかの判断結果、前記特殊ユニットへ書込む値が複数のバッファメモリアドレスに対して重複して設定されているかの判断結果および／または前記書込み命令の設定漏れの判断結果を一覧表として作成することを特徴とする請求項１〜４のいずれか１つに記載のプログラム解析装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラマブルコントローラの周辺装置に関し、特に特殊ユニットを含むプログラマブルコントローラのプログラムの設定を解析するプログラム解析装置に関するものである。
【背景技術】
【０００２】
近年、プログラマブルコントローラ（以下、ＰＬＣ（Programmable Logic Controller）という）の動作が複雑化し、ＰＬＣを動作させるプログラムも複雑化している。このため、ＰＬＣを動作させるプログラムにおいて設計上の不具合等が多く発生し、ＰＬＣの動作に支障をきたしている。このようなＰＬＣを動作させるプログラムの不具合をなくすため、プログラムの設定内容をチェックしなければならない。
【０００３】
プログラムをチェックするためには、プログラムで使用されている入出力ユニットや特殊ユニットでの設定をチェックする必要がある。従来、このようなプログラムの設定のチェックはユーザの目視により行われていた。
【０００４】
例えば、特殊ユニットの設定をチェックするには、ＰＬＣにおいてＣＰＵ（Central Processing Unit）ユニットから特殊ユニットへの書込み値が所定の設定範囲内にあるか（範囲外設定の確認）、ＣＰＵユニットから特殊ユニットに対する書込みが重複して設定されていないか（重複設定の確認）、特殊ユニットに対して書込み命令の設定が必要なバッファメモリアドレスの設定漏れがないか（設定漏れの確認）等をチェックする必要がある。
【０００５】
範囲外設定の確認を行う場合には、プログラムの先頭から特殊ユニットに対する書込み命令を検索し、書込み命令の書込み先のバッファメモリアドレスや書込み値を特殊ユニットの取り扱い説明書等の設定範囲と照らし合わせて目視で確認する。そして、このような確認をプログラム中の特殊ユニットに対する書込み命令の数だけ繰り返し、範囲外設定の確認を行う。重複設定の確認を行うには、特殊ユニットに対して同じ先頭Ｉ／Ｏ番号で同じバッファメモリアドレスの書込み命令が複数ないかを目視で確認する。設定漏れの確認を行うには、特殊ユニットの取り扱い説明書等で設定が必要なバッファメモリアドレスを抽出し、特殊ユニットに対して書込み命令の設定が必要なバッファメモリアドレスが全て存在しているかを目視で確認する。
【０００６】
しかしながら、このようなユーザの目視による特殊ユニットの設定のチェックでは、特殊ユニットへアクセスする命令は１プログラム中に多数存在するため、チェック漏れが発生する。また、ＰＬＣには複数の特殊ユニットがあり、特殊ユニットの取り扱い説明書を複数準備しなければならないため、プログラムの修正に手間がかかる。このため、プログラムの設定のチェックを自動で行う技術の開発が進められている。
【０００７】
特許文献１に記載のシーケンサラダー回路の自動チェック装置は、設計されたシーケンサラダー回路を読み込む読込手段と、読み込まれたシーケンサラダー回路内で使用されているデバイスが入出力の割付の範囲内に有るかどうかをチェックするデバイスチェック手段と、シーケンサラダー回路内で使用されている接点および番号が論理的に整合性がとれているかどうかをチェックする論理チェック手段とを備えている。そして、シーケンス回路を読み込んだ後、デバイスチェック手段によってラダー回路で使用されているデバイスで入出力の割付の範囲外のものを取り出すとともに、論理チェック手段によって接点および番号で論理的に整合がとれないものを取り出し、発見された不具合を表示している。
【０００８】
【特許文献１】特開平５−２４１６１８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
上記従来の技術によれば入出力ユニットのデバイスが入出力の割付の範囲内に設定されているかをチェックすることはできるが、多くの設定を必要とする特殊ユニットのバッファメモリの設定をチェックすることはできないといった問題があった。
【００１０】
本発明は、上記に鑑みてなされたものであって、特殊ユニットに対する設定の確認を容易に行えるプログラム解析装置を得ることを目的とする。
【課題を解決するための手段】
【００１１】
上述した課題を解決し、目的を達成するために、本発明は、プログラマブルコントローラを動作させるプログラムを解析するプログラム解析装置において、前記プログラマブルコントローラ内の特殊ユニットへの書込み命令を行うプログラムを取得するプログラム取得部と、前記取得したプログラムの設定内容を解析する解析部と、を備え、前記解析部は、前記書込み命令で前記特殊ユニットへ書込む値が所定の範囲内であるか否かを判断することを特徴とする。
【００１２】
この発明によれば、特殊ユニットへの書き込み命令を行うプログラムの設定内容を簡易に解析することが可能となる。
【発明の効果】
【００１３】
この発明によれば、特殊ユニットへの書き込み命令を行うプログラムの設定内容を簡易に解析することが可能となり、プログラムの設定の確認作業を効率的に行うことが可能となるという効果を奏する。
【発明を実施するための最良の形態】
【００１４】
以下に、本発明にかかるチェック装置の実施の形態を図面に基づいて詳細に説明する。なお、この実施の形態によりこの発明が限定されるものではない。
【００１５】
実施の形態
図１は、本発明に係るチェック装置の構成を示すブロック図である。チェック装置（プログラム解析装置）１は、ＰＬＣ（Programmable Logic Controller）２と接続されてＰＬＣ２のプログラムを読み込み、ＰＬＣ２内の特殊ユニットの動作に関する設定項目の設定内容をチェック（解析）するパーソナルコンピュータ等の装置である。チェック装置１は、表示部１１、入力部１２、補助記憶部１３、メモリ部（プログラム取得部）１４、通信Ｉ／Ｆ部１５、ＣＰＵ（Central Processing Unit）１６からなる。
【００１６】
表示部１１は、ＣＲＴ（Cathode Ray Tube）ディスプレイや液晶ディスプレイ、ＰＤＰ（Plasma Display Panel）等からなり、特殊ユニットの設定内容や設定内容の解析結果等を表示する。入力部１２は、キーボードやマウスを備えて構成され、表示部１１や補助記憶部１３への指示情報等を入力する。
【００１７】
補助記憶部１３は、特殊ユニットの動作に必要な全ての設定項目に関する情報（後述の特殊ユニット定義データファイル）を記憶する。メモリ部１４は、特殊ユニットを動作させるためのプログラムやプログラムの解析結果等を格納する。通信Ｉ／Ｆ部１５は、ＰＬＣ２と接続され、ＰＬＣ２と情報の送受信を行う。
【００１８】
ＣＰＵ１６は、解析部１００を備え、表示部１１、入力部１２、補助記憶部１３、メモリ部１４、通信Ｉ／Ｆ部１５を制御する。解析部１００は、特殊ユニットを動作させるためのプログラムを解析し、解析結果の一覧表を作成する。
【００１９】
図２は、本発明に係るＰＬＣの構成を示す図である。ＰＬＣ２は、外部機器（図示せず）のシーケンス制御を行う電子装置であり、各種ユニットを装着するベースユニット２９を備えている。ベースユニット２９は、各種ユニットとして、ＣＰＵユニット２０、入力ユニット２１、出力ユニット２４、特殊ユニット（特殊機能ユニット）２８であるアナログ入力ユニット２２，２３を備えている。本実施の形態においては、特殊ユニットであるアナログ入力ユニット２２，２３の動作に関する設定項目の設定内容がチェック装置１によって解析される。
【００２０】
入力ユニット２１および出力ユニット２４は、ＰＬＣ２内においてディジタル信号を入出力し外部機器の電子制御を行う。アナログ入力ユニット２２，２３は、外部機器からＰＬＣ２へアナログ信号が入力されるユニットであり、後述するバッファメモリを備えている。
【００２１】
アナログ入力ユニット２２，２３等の特殊ユニット２８は、入力ユニット２１や出力ユニット２４では処理できない電圧／電流等のアナログ値、高速パルス等を扱うためのユニットであり、ＰＬＣ２（ＣＰＵユニット２０）が特殊ユニットに対して交信するには、特殊ユニット２８が有しているバッファメモリに対して読み出し／書込みを行う。特殊ユニット２８のベースユニット２９に対する装着位置は先頭Ｉ／Ｏ番号としてテーブルされる。
【００２２】
入力ユニット２１、出力ユニット２４、アナログ入力ユニット２２，２３には、それぞれ後述するユニット番号と先頭Ｉ／Ｏ番号が割り当てられる。ＣＰＵユニット２０は、入力ユニット２１、出力ユニット２４、アナログ入力ユニット２２，２３を管理して所定の処理を行わせる。
【００２３】
図３は、図２に示したＰＬＣのＩ／Ｏ割付テーブルを示す図である。Ｉ／Ｏ割付テーブル３０には、ベースユニット２９に装着するユニットの情報が設定されており、ユニット番号（ナンバ）Ａ１、ユニット種別Ａ２、ユニット形名Ａ３、ユニットの入出力点数Ａ４、ユニットの先頭Ｉ／Ｏ番号Ａ５が含まれている。
【００２４】
ユニット番号Ａ１はベースユニット２９の装着位置を示し、固定で決められている番号である。ＣＰＵユニット２０の右隣をユニット番号＝１、ユニット番号＝１の右隣がユニット番号＝２のようにユニット番号は順番に割り付けられている。ユニット種別Ａ２、ユニット形名Ａ３、入出力点数Ａ４は、チェック装置１（ＰＬＣ２）の使用者によって１０進数で設定される。例えば、ユニット種別Ａ２やユニット形名Ａ３は、ユニットの種別や形名を識別するための数字によって設定されている。先頭Ｉ／Ｏ番号Ａ５は設定された入出力点数Ａ４に基づいてユニット番号の順に０から入出力点数分ずつ、１６進数で自動的に割り付けられる。
【００２５】
Ｉ／Ｏ割付テーブル３０には、例えばユニット番号＝１は、ユニット種別Ａ２が「入力ユニット２１」、ユニット形名Ａ３が「ＡＸ４１」、入出力点数Ａ４が「１６」、先頭Ｉ／Ｏ番号Ａ５が「０」であることが設定されている。
【００２６】
Ｉ／Ｏ割付テーブル３０は、ＰＬＣ２の使用者によってチェック装置１等の周辺装置で設定され、通信ＩＦ部１５を介してＣＰＵユニット２０のメモリ（図示せず）に書き込まれる。Ｉ／Ｏ割付テーブル３０は、チェック装置１で管理される。
【００２７】
図４は、ＣＰＵユニットと特殊ユニットのデータの受渡し（交信）を説明するための図である。特殊ユニット２８は、ラダー言語などのプログラムにより特殊ユニット２８の動作に必要な設定や特殊ユニット２８が持つデータを保存するバッファメモリ２８１を備えている。ＣＰＵユニット２０は、バッファメモリ２８１を介して特殊ユニット２８とデータの受渡しを行う。
【００２８】
ＣＰＵユニット２０から特殊ユニット２８へのデータの書込みは例えばＳＰＷＲ命令によって行われ、ＣＰＵユニット２０から特殊ユニット２８へのデータの読出しは例えばＳＰＲＤ命令によって行われる。
【００２９】
特殊ユニット２８を使用する場合、例えばアナログ入力ユニット２２，２３ではアナログ値を取り込むサンプリング（抽出）、平均処理等の取り込み方式などの設定をＳＰＷＲ命令によってバッファメモリ２８１に書込みする。
【００３０】
チェック装置１で作成されるシーケンスプログラムで特殊ユニット２８に対する交信の命令を記述するには、特殊ユニット２８（アナログ入力ユニット２２，２３）の装着位置を示す先頭Ｉ／Ｏ番号と特殊ユニット２８のバッファメモリアドレスを指定する。
【００３１】
つぎに、設定プログラムの解析処理の手順について説明する。設定プログラムの解析処理は、ＳＰＷＲ命令での書込み値が設定範囲内であるか否かの範囲チェック処理と、ＳＰＷＲ命令での書込みが同一アドレスに対して複数回行われているか否かの重複チェック処理によって行われる。図５−１は、範囲チェックの処理手順を示すフローチャートであり、図５−２は、重複チェックの処理手順を示すフローチャートである。ＣＰＵ１６の解析部１００は、メモリ部１４に格納しているラダープログラム４０の先頭から順番に書込み命令を取り出す（ステップＳ１００）。
【００３２】
ここで、チェック装置１のメモリ部１４に格納しているプログラムについて説明する。図６は、ＰＬＣのアナログ入力ユニットへの書込みを行うラダープログラムの一例を示す図である。なお、特殊ユニット２８であるアナログ入力ユニット２２，２３は同一の構成を有するので、ここではアナログ入力ユニット２２を例にとって説明する。
【００３３】
ラダープログラム４０は、プログラムのステップ番号、アナログ入力ユニット２２へデータの書込みを行うＳＰＷＲ命令、プログラムの最後を示すＥＮＤ命令等によって示される。
【００３４】
図７は、ＳＰＷＲ命令の書式を説明するための図である。図７に示すようにＳＰＷＲ命令は、命令名（ＳＰＷＲ）、書込みを行うアナログ入力ユニット２２の先頭Ｉ／Ｏ番号Ｂ１、アナログ入力ユニット２２のバッファメモリアドレスＢ２、書込み命令の書込み値（書込み設定値）Ｂ３、書込み命令の書込みワード数Ｂ４によって記述される。
【００３５】
先頭Ｉ／Ｏ番号Ｂ１の「Ｈ」は１６進数を示しており、ここでは先頭Ｉ／Ｏ番号Ｂ１として「２０（１６進数）」が指定されている。すなわち、ここでの先頭Ｉ／Ｏ番号Ｂ１は図２に示した「アナログ入力ユニット２３」を指定している。
【００３６】
バッファメモリアドレスＢ２の「Ｋ」は１０進数を示し、ここではバッファメモリアドレスＢ２として「２（１０進数）」が指定されている。書込み値Ｂ３の「Ｋ」は１０進数を示し、ここでは書込み値Ｂ３として「１００（１０進数）」が指定されている。書込みワード数Ｂ４の「Ｋ」は１０進数を示し、ここでは書込みワード数Ｂ４として「１（１０進数）」が指定されている。このように、図７に示すＳＰＷＲ命令は、先頭Ｉ／Ｏ番号「２０」の「アナログ入力ユニット２３」のバッファメモリアドレス「２」に対して「１００」を「１」ワード書込みすることを示している。
【００３７】
解析部１００がメモリ部１４に格納しているラダープログラムの最初の命令を取り出すと、解析部１００は取り出した命令がＥＮＤ命令（プログラムの終了）であるか否かを判断する（ステップＳ１１０）。
【００３８】
解析部１００が、取り出した命令がＥＮＤ命令でないと判断した場合（ステップＳ１１０、Ｎｏ）、解析部１００は命令がＳＰＷＲ命令であるか否かを判断する（ステップＳ１２０）。
【００３９】
解析部１００が、最初の命令がＳＰＷＲ命令でないと判断した場合（ステップＳ１２０、Ｎｏ）、ステップＳ１００に戻り、解析部１００がラダープログラム４０から次の命令を取り出す。そして、解析部１００は、取り出した命令がＥＮＤ命令であるか、ＳＰＷＲ命令であるかを判断する処理を繰り返す（ステップＳ１１０、Ｓ１２０）。
【００４０】
解析部１００が、ラダープログラム４０から取り出した命令がＳＰＷＲ命令であると判断した場合は（ステップＳ１２０、Ｙｅｓ）、解析結果を格納する為のデータメモリをメモリ部１４に確保する（ステップＳ１３０）。そして、解析結果を格納するために確保したデータメモリを０に初期化する（ステップＳ１４０）。
【００４１】
解析部１００は、メモリ部１４に格納しているＩ／Ｏ割付テーブル３０を検索し（ステップＳ１５０）、ラダープログラム４０から取り出したＳＰＷＲ命令の先頭Ｉ／Ｏ番号Ｂ１に一致する先頭Ｉ／Ｏ番号Ａ５のユニット形名Ａ３を取得する（ステップＳ１６０）。
【００４２】
ＣＰＵ１６は、解析部１００が取得したユニット形名Ａ３に基づいて、取得したユニット形名Ａ３に対応する特殊ユニット定義データファイル５０を補助記憶部１３からメモリ部１４に読み出させる（ステップＳ１７０）。
【００４３】
ここで、特殊ユニット定義データファイル５０について説明する。図８は、特殊ユニット定義データファイルの構成を説明するための図である。特殊ユニット定義データファイル５０は、チェック装置１が特殊ユニットの設定内容を解析するための情報であり、外部機器からインストールすること等によってチェック装置１の補助記憶部１３に格納されている。特殊ユニット定義データファイル５０は、特殊ユニットの動作に必要な全ての設定項目に関する情報を含んでおり、１つの特殊ユニットには１つの特殊ユニット定義データファイルが割り当てられている。
【００４４】
特殊ユニット定義データファイル５０は、１つの項目としてアナログ入力ユニット２２等の特殊ユニットへの設定項目であるバッファメモリアドレスＣ１と、このバッファメモリアドレスＣ１の設定範囲（このアドレスにおける設定値の許容範囲）Ｃ２の対応関係を含んでいる。
【００４５】
設定範囲Ｃ２は、設定可能な値として最小値と最大値で示される。特殊ユニット定義データファイル５０は、例えば１つの項目においてバッファメモリのアドレスが０では最小値が０で最大値が１０として定義されている。
【００４６】
つぎに、解析部１００は補助記憶部１３にアクセスし、ＳＰＷＲ命令のバッファメモリアドレスＢ２と一致するバッファメモリアドレスを特殊ユニット定義データファイル５０内のバッファメモリアドレスＣ１から検索する。バッファメモリアドレスＢ２の検索は、特殊ユニット定義データファイル５０内のバッファメモリアドレスＣ１を先頭から順に抽出してバッファメモリアドレスＢ２と比較し、これらが一致しなければ次のバッファメモリアドレスＣ１を抽出してバッファメモリアドレスＢ２と比較する処理を特殊ユニット定義データファイル５０のデータ数（バッファメモリアドレス数）だけ繰り返す（ステップＳ１８０）。図７に示した特殊ユニット定義データファイル５０の場合、３つの項目（バッファメモリアドレスＣ１）を含んでいるため、最大３回バッファメモリアドレスＢ２とバッファメモリアドレスＣ１の比較を繰り返すことになる。
【００４７】
解析部１００は、バッファメモリアドレスＢ２に一致するバッファメモリアドレスＣ１を抽出すると、このバッファメモリアドレスＣ１に対応する設定範囲Ｃ２を特殊ユニット定義データファイル５０から取得する（ステップＳ１９０）。
【００４８】
解析部１００は、ＳＰＷＲ命令の書込み値Ｂ３と特殊ユニット定義データファイル５０から取得した設定範囲Ｃ２を比較し、書込み値Ｂ３が設定範囲Ｃ２の範囲内であるか否かを判断する（ステップＳ２００）。解析部１００は、書込み値Ｂ３が設定範囲Ｃ２の範囲内であるか否かを判断すると、この判断結果を解析結果データ６０として作成する。
【００４９】
ここで、解析結果データ６０について説明する。図９は、解析結果データの構成を説明するための図である。解析結果データ６０は、ＳＰＷＲ命令等の特殊ユニットへの書込みを解析した解析結果に関する情報であり、解析された特殊ユニット毎にチェック装置１のメモリ部１４に格納される。解析結果データ６０のデータ構造は、複数のＳＰＷＲ命令の解析結果を、例えば解析したＳＰＷＲ命令の順番で配列した構成となっている。
【００５０】
１つのＳＰＷＲ命令の解析結果は、アドレス（バッファメモリアドレス）Ｄ１、設定値Ｄ２、範囲チェックＤ３、重複チェックＤ４、ステップＤ５に関する情報を含んでいる。各ＳＰＷＲ命令の解析結果は、例えばアドレスＤ１、設定値Ｄ２、範囲チェックＤ３、重複チェックＤ４、ステップＤ５の順番で配列されている。
【００５１】
アドレスＤ１はＳＰＷＲ命令で書込みをするバッファメモリアドレスＢ２であり、図７に示したＳＰＷＲ命令の場合「Ｋ２」がアドレスＤ１として記述（設定）される。設定値Ｄ２はＳＰＷＲ命令で書込みをする書込み値（書込み設定値）Ｂ３であり、図７に示したＳＰＷＲ命令の場合「Ｋ１００」が設定値Ｄ２として記述される。範囲チェックＤ３は、ＳＰＷＲ命令の書込み値Ｂ３が設定範囲Ｃ２の範囲内であるか否かを示す情報である。範囲チェックＤ３は、書込み値Ｂ３が設定範囲Ｃ２の範囲内である場合は例えば「０」が記述され、書込み値Ｂ３が設定範囲Ｃ２の範囲外である場合は例えば「１」が記述される。重複チェックＤ４は、ＳＰＷＲ命令での書込みが同一アドレスに対して複数回行われているか否かを示す情報である。重複チェックＤ４は、同一アドレスに対して複数回の書込みが行われている場合は例えば「１」が記述され、同一アドレスに対して複数回の書込みが行われていない場合は例えば「０」が記述される。ステップＤ５は、解析したプログラム中のＳＰＷＲ命令のステップ番号を示す。
【００５２】
図１０−１および図１０−２は、解析結果データの構成の一例を示す図である。図１０−１は先頭Ｉ／Ｏ番号１０のアナログ入力ユニット２２の解析結果を示し、図１０−２は先頭Ｉ／Ｏ番号１０のアナログ入力ユニット２２の解析結果を示している。
【００５３】
図１０−１において１個目のデータは、アドレスＤ１が「０」、設定値Ｄ２が「０」、範囲チェックＤ３が「０」、重複チェックＤ４が「１」、ステップＤ５が「１０４」を示し、２個目のデータは、アドレスＤ１が「１」、設定値Ｄ２が「０」、範囲チェックＤ３が「１」、重複チェックＤ４が「０」、ステップＤ５が「１０９」である場合を示している。したがって、ここでは１個目のデータ（ＳＰＲＷ命令）においてはバッファメモリアドレスが０において０が設定されており書込み値Ｂ３が設定範囲Ｃ２の範囲内であり、同一アドレスに対して複数回の書込みが行われていることを示している。同様に、２個目のデータにおいてはバッファメモリアドレスが１において０が設定されており書込み値Ｂ３が設定範囲Ｃ２の範囲外であり、同一アドレスに対して複数回の書込みが行われていないことを示している。
【００５４】
また、図１０−２において１個目のデータは、アドレスＤ１が「１」、設定値Ｄ２が「１０」、範囲チェックＤ３が「０」、重複チェックＤ４が「１」、ステップＤ５が「１３０」を示し、２個目のデータは、アドレスＤ１が「２」、設定値Ｄ２が「１００」、範囲チェックＤ３が「０」、重複チェックＤ４が「０」、ステップＤ５が「１３５」である場合を示している。したがって、ここでは１個目のデータにおいてはバッファメモリアドレスが１において１０が設定されており書込み値Ｂ３が設定範囲Ｃ２の範囲内であり、同一アドレスに対して複数回の書込みが行われていないことを示している。同様に、２個目のデータにおいてはバッファメモリアドレスが２において１００が設定されており書込み値Ｂ３が設定範囲Ｃ２の範囲内であり、同一アドレスに対して複数回の書込みが行われていないことを示している。
【００５５】
つぎに、解析部１００は解析結果データ６０を作成するため、確保したデータメモリのアドレスＤ１に解析するバッファメモリアドレスＢ２として例えば「Ｋ２」を記述する。また、設定値Ｄ２に解析するバッファメモリアドレスＢ２の書込み値Ｂ３として例えば「Ｋ１００」を記述する。
【００５６】
解析部１００が、書込み値Ｂ３が設定範囲Ｃ２の設定範囲内であると判断すると（ステップＳ２００、Ｙｅｓ）、確保したデータメモリの範囲チェックＤ３に「０」を入力（記述）する（ステップＳ２１０）。一方、解析部１００が、書込み値Ｂ３が設定範囲Ｃ２の設定範囲外であると判断すると（ステップＳ２００、Ｎｏ）、確保したデータメモリの範囲チェックＤ３に「１」を入力する（ステップＳ２２０）。
【００５７】
解析部１００は、確保したデータメモリのステップＤ５にＳＰＷＲ命令のステップ番号を記述する（ステップＳ２３０）。ここでは、確保したデータメモリの全ての重複チェックＤ４に「０」を入力しておく。
【００５８】
解析部１００は、プログラムの解析によって得たアドレスＤ１、設定値Ｄ２、範囲チェックＤ３、ステップＤ５を、解析した先頭Ｉ／Ｏ番号（ユニット）に対応するデータ配列の最後に追加する（ステップＳ２４０）。
【００５９】
この後、ステップＳ１００に戻り、解析部１００がラダープログラム４０から次の命令を取り出す。そして、解析部１００はステップＳ１１０において、解析部１００がＥＮＤ命令であると判断するまでステップＳ１３０〜ステップＳ２４０の処理を繰り返す。
【００６０】
ステップＳ１１０において、解析部１００がＥＮＤ命令であると判断すると（ステップＳ１１０、Ｙｅｓ）、解析結果データ６０のデータ配列に基づいてアドレスＤ１の重複チェック処理を行う（ステップＳ３００）。
【００６１】
図５−２に示すように、まず解析部１００において解析結果データ６０の配列を参照する為の変数ｉ（ｉは自然数）を１に初期化する（ステップＳ３１０）。同じく解析結果データ６０の配列を参照する為の変数ｊ（ｊは自然数）をｉの値に初期化する（ステップＳ３２０）。変数ｉと変数ｊは、１つのＳＰＷＲ命令の解析結果データ（アドレスＤ１、設定値Ｄ２、範囲チェックＤ３、重複チェックＤ４、ステップＤ５からなる）の配列順序の番号として割り当てていくものであり、変数ｉと変数ｊの値を変化させていくことによって各アドレスＤ１が互いに重複したバッファメモリアドレスになっていないかを解析する。例えば、変数ｉ＝１は１つ目のＳＰＷＲ命令の解析結果のデータに対応し、ｉ＝２は２つ目のＳＰＲＷの解析結果のデータに対応する。
【００６２】
例えば、ＳＰＷＲの解析結果データが全部でｎ個（ｎは自然数）であるとすると、本実施の形態においては、変数ｉ＝１に対応するアドレスＤ１（１つ目のアドレスＤ１）に対して、変数ｊ＝２〜ｎに対応するアドレスＤ１（２つ目のアドレスＤ１〜ｎ個目のアドレスＤ１）を比較することによってアドレスＤ１の重複を確認する。さらに、変数ｉ＝２に対応するアドレスＤ１と変数ｊ＝３〜ｎに対応するアドレスＤ１を比較することによってアドレスＤ１の重複を確認する。そして、変数ｉの数値を順番にｎまで変化させていくことによって全てのＳＰＷＲの解析結果のアドレスＤ１に対してアドレスＤ１の重複を確認する。
【００６３】
つぎに、解析部１００は変数ｉが配列の最後のデータを参照しているか否かを判断する（ステップＳ３３０）。変数ｉが配列の最後のアドレスＤ１でなければデータの重複チェック完了していないので、解析結果データ６０の配列のｉ番目から１個分のデータを取得する（ステップＳ３４０）。そして、この取得したｉ番目のデータ（解析結果データ６０のｉ番目に配列しているＳＰＷＲの解析結果のデータ）が既に重複チェック済みか否かを確認するため、解析部１００は変数ｉ番目のデータの重複チェックの項目が「１」であるか否かを判断する（ステップＳ３５０）。
【００６４】
解析部１００が、ｉ番目のデータの重複チェックの項目が「１」であると判断した場合（ステップＳ３５０、Ｙｅｓ）、このｉ番目のデータは既に重複チェック済みのデータであると判断し、このｉ番目のデータの重複チェック処理を終了する。そして、次の比較元データ（（ｉ＋１）番目）の重複チェック処理を行うため、変数ｉに１をプラスする（ｉ＝ｉ＋１）（ステップＳ３６０）。また、変数ｊにはｉの値を代入して（ｊ＝ｉ）（ステップＳ３７０）、解析部１００が変数ｉが配列の最後のデータを参照しているか否かを判断する（ステップＳ３３０）。
【００６５】
一方、解析部１００が、ｉ番目のデータの重複チェックの項目が「１」でないと判断した場合（ステップＳ３５０、Ｎｏ）、このｉ番目のデータは重複チェック済みのデータではないと判断し、変数ｊに１をプラスして（ｊ＝ｊ＋１）（ステップＳ３８０）、このｉ番目のデータの重複チェック処理を続ける。そして、解析部１００は変数ｊが配列の最後のデータを参照しているか否かを判断する（ステップＳ３９０）
【００６６】
変数ｊが配列の最後のデータ（アドレスＤ１）でないと判断された場合（ステップＳ３９０、Ｎｏ）、変数ｉに対するデータの重複チェック完了していないので、配列のｊ番目から１個分のデータを取得する（ステップＳ４００）。
【００６７】
解析部１００は、ｉ番目のデータとｊ番目のデータのアドレスＤ１を比較してアドレスＤ１が同一であるか否かを判断する（ステップＳ４１０）。解析部１００が、ｉ番目のデータとｊ番目のデータのアドレスＤ１が同一のアドレスであると判断した場合（ステップＳ４１０、Ｙｅｓ）、ｉ番目のデータとｊ番目のデータは同一のアドレスに対して重複して書込みがなされており、ｉ番目のデータとｊ番目のデータは重複した設定であると判断する。そして、ｉ番目のデータとｊ番目のデータの重複チェックＤ４の項目に「１」を記述する（ステップＳ４２０、Ｓ４３０）。
【００６８】
一方、ステップＳ４１０において、解析部１００がｉ番目のデータとｊ番目のデータのアドレスＤ１が同一のアドレスでないと判断した場合（ステップＳ４１０、Ｎｏ）、ｉ番目のデータとｊ番目のデータは異なるアドレスに対して書込みがなされており、ｉ番目のデータとｊ番目のデータは重複した設定でないと判断する。重複した設定でないと判断した場合、ｉ番目のデータとｊ番目のデータの重複チェックＤ４の項目はステップＳ１４０で０に初期化されているため、重複チェックＤ４の項目に対しては何もしない。これにより、ｊ番目のデータが既に重複した設定であると判断され、重複チェックＤ４の項目に「１」が記述されている場合に、重複チェックＤ４の項目に対して「０」を上書きしてしまうことを回避する。そして、ステップＳ３８０に戻り、解析部１００は変数ｊに１をプラスして（ｊ＝ｊ＋１）、このｉ番目のデータの重複チェック処理を続ける。ステップＳ３９０において、変数ｊが配列の最後のデータであると判断されるまで、ステップＳ３８０〜Ｓ４３０の処理を繰り返す。
【００６９】
ステップＳ３９０において変数ｊが配列の最後のデータであると判断された場合（ステップＳ３９０、Ｙｅｓ）、このｉ番目のデータは全てのデータに対して重複チェック済みのデータであると判断し、このｉ番目のデータの重複チェック処理を終了する。そして、次の比較元データ（（ｉ＋１）番目）の重複チェック処理を行うため、変数ｉに１をプラスする（ｉ＝ｉ＋１）（ステップＳ３６０）。また、変数ｊにはｉの値を代入して（ｊ＝ｉ）（ステップＳ３７０）、ステップＳ３３０に戻り、解析部１００が変数ｉが配列の最後のデータを参照しているか否かを判断する。そして、ステップＳ３３０において変数ｉが配列の最後のデータであると判断されるまで、ステップＳ３３０〜Ｓ４３０の処理を繰り返す。
【００７０】
ステップＳ３３０において変数ｉが配列の最後のデータであると判断された場合（ステップＳ３３０、Ｙｅｓ）、全ての解析結果データに対して重複チェックが完了したと判断して、重複チェックの処理を終了するとともに特殊ユニットの動作に関わる設定プログラムの設定内容を解析する処理を終了する。範囲チェック処理と重複チェック処理が完了した解析結果データ６０はメモリ部１４において格納される。これにより、特殊ユニットの動作に関する設定項目への設定内容に範囲外設定、重複設定等の設定ミスがないかを簡易に解析することが可能となる。
【００７１】
つぎに、プログラム解析結果の表示処理手順について説明する。図１１は、プログラム解析結果の表示処理の手順を示すフローチャートである。ＣＰＵ１６の解析部１００は、メモリ部１４に格納している解析結果データ６０を取得する。解析部１００は、Ｉ／Ｏ割付テーブル３０のデータ配列を参照する為の変数ｋ（ｋは自然数）を１に初期化する（ステップＳ５００）。変数ｋは、Ｉ／Ｏ割付テーブル３０内において各ユニットに対して割り当てられるものであり、変数ｋの値を変化させていくことによってＩ／Ｏ割付テーブル３０内のユニットを順番に抽出する。例えば、変数ｋ＝１はＩ／Ｏ割付テーブル３０内において１つ目のユニットに対応し、ｋ＝２は２つ目のユニットに対応する。
【００７２】
解析部１００は、変数ｋがＩ／Ｏ割付テーブル３０のデータ数を超えているか否かを判断する（ステップＳ５１０）。解析部１００が、変数ｋがＩ／Ｏ割付テーブル３０のデータ数を超えていないと判断した場合（ステップＳ５１０、Ｎｏ）、解析部１００はＩ／Ｏ割付テーブル３０のデータからｋ番目のユニットに対応するデータ（ユニット番号Ａ１、ユニット種別Ａ２、ユニット形名Ａ３、ユニットの入出力点数Ａ４、ユニットの先頭Ｉ／Ｏ番号Ａ５）を取得する（ステップＳ５２０）。
【００７３】
解析部１００は、取得したユニットのデータが特殊ユニット２８のデータであるか否かを判断する（ステップＳ５３０）。解析部１００が、取得したユニットのデータが特殊ユニット２８のデータでないと判断した場合（ステップＳ５３０、Ｎｏ）、Ｉ／Ｏ割付テーブル３０において次のユニットのデータを参照する為、変数ｋに１をプラスする（ｋ＝ｋ＋１）（ステップＳ５４０）。そして、ステップＳ５１０に戻り、ステップＳ５３０で特殊ユニット２８のデータであると判断されるまでステップＳ５１０〜Ｓ５４０の処理を繰り返す。
【００７４】
解析部１００が、取得したユニットのデータが特殊ユニット２８のデータであると判断した場合（ステップＳ５３０、Ｙｅｓ）、解析部１００は取得した特殊ユニット２８のユニット形名Ａ３に対応する特殊ユニット定義データファイル５０を補助記憶部１３から読み出す（ステップＳ５５０）。解析部１００は、取得した特殊ユニット２８の先頭Ｉ／Ｏ番号Ａ５に対応する解析結果データ６０を取得する（ステップＳ５６０）。
【００７５】
解析部１００は、特殊ユニット定義データファイル５０内のデータを参照する為の変数ｍを１に初期化し、後述の解析結果表７０において解析結果の表示行を指定する変数Ｌを「１」に初期化する（ステップＳ５７０）。
【００７６】
変数ｍは、特殊ユニット定義データファイル５０内の特殊ユニットデータ（１つのバッファメモリアドレスＣ１および１つの設定範囲Ｃ２からなる）毎に割り当てられるものであり、変数ｍの値を変化させていくことによって特殊ユニット定義データファイル５０内の特殊ユニットデータを順番に抽出する。例えば、変数ｍ＝１は特殊ユニット定義データファイル５０において１つ目の特殊ユニットデータに対応し、ｍ＝２は２つ目の特殊ユニットデータに対応する。
【００７７】
ここで、解析結果表７０について説明する。図１２−１および図１２−２は、プログラムの解析結果表の一例を示す図である。図１２−１は先頭Ｉ／Ｏ番号１０のアナログ入力ユニット２２に対する解析結果表を示し、図１２−２は先頭Ｉ／Ｏ番号２０のアナログ入力ユニット２２に対する解析結果表を示している。
【００７８】
プログラムの解析結果は、解析結果表７０として表示部１１に表示される。解析結果表７０は、アドレス（バッファメモリアドレス）Ｅ１、設定値Ｅ２、範囲Ｅ３、重複Ｅ４、ステップＥ５の項目を含んでいる。表示部１１においては、１つのアドレス（バッファメモリアドレス）Ｅ１、１つの設定値Ｅ２、１つの範囲Ｅ３、１つの重複Ｅ４、１つのステップＥ５からなる１つの解析結果を１行に並べて表示させる。
【００７９】
アドレスＥ１は、解析を行ったバッファメモリのアドレスであり、設定値Ｅ２は解析を行ったＳＰＷＲ命令で書込みをする書込み値である。範囲Ｅ３はＳＰＷＲ命令での書込み値が設定範囲内であるか否かの解析結果を示し、重複Ｅ４はＳＰＷＲ命令での書込みが同一アドレスに対して複数回行われているか否かの解析結果を示している。また、ステップＥ５は、解析したプログラム中のＳＰＷＲ命令のステップ番号を示している。
【００８０】
解析部１００は、変数ｍが特殊ユニット定義データファイル５０内の特殊ユニットデータ数を超えているか否かを判断する（ステップＳ５８０）。解析部１００が、変数ｍが特殊ユニット定義データファイル５０内の特殊ユニットデータ数を超えていないと判断した場合（ステップＳ５８０、Ｎｏ）、解析部１００は特殊ユニット定義データファイル５０内のｍ番目から１個分の特殊ユニットデータを取得する（ステップＳ５９０）。
【００８１】
解析部１００は、取得した特殊ユニット定義データファイル５０のバッファメモリアドレスＣ１に基づいて解析結果データ６０を検索する（ステップＳ６００）。そして、解析結果データ６０にバッファメモリアドレスＣ１に一致するアドレスＤ１があるか否かを判断する（ステップＳ６１０）。解析部１００が、バッファメモリアドレスＣ１に一致するアドレスＤ１があると判断した場合（ステップＳ６１０、Ｙｅｓ）、このアドレスＤ１に対応する解析結果データを解析結果表７０の変数Ｌで示す行（Ｌ行目）に解析結果の内容を表示する（ステップＳ６２０）。
【００８２】
解析結果データ６０のアドレスＤ１を解析結果表７０のアドレスＥ１に表示し、解析結果データ６０の設定値Ｄ２を解析結果表７０の設定値Ｅ２に表示し、解析結果データ６０のステップＤ５を解析結果表７０のステップＤ５に表示することによって、表示部１１に解析結果表７０を表示する。
【００８３】
解析結果データ６０の範囲チェックＤ３が「０」の場合、解析結果表７０の範囲Ｅ３には「ＯＫ」を表示し、解析結果データ６０の範囲チェックＤ３が「１」の場合、解析結果表７０の範囲Ｅ３には「ＮＧ」を表示する。
【００８４】
また、解析結果データ６０の重複チェックＤ４が「０」の場合、解析結果表７０の範囲Ｅ３には「なし」を表示し、解析結果データ６０の重複チェックＤ４が「１」の場合、解析結果表７０の範囲Ｅ３には「あり」を表示する。
【００８５】
解析部１００は、次の解析結果を解析結果表７０の次の行に表示させるため、変数Ｌに１をプラスする（Ｌ＝Ｌ＋１）（ステップＳ６３０）。そして、ステップＳ６００に戻り解析部１００はバッファメモリアドレスＣ１に基づいて解析結果データ６０を検索する。解析部１００が、ステップＳ６１０においてバッファメモリアドレスＣ１に一致するアドレスＤ１がないと判断するまでステップＳ６００〜Ｓ６３０の処理を繰り返す。
【００８６】
解析部１００が、バッファメモリアドレスＣ１に一致するアドレスＤ１がないと判断すると（ステップＳ６１０、Ｎｏ）、特殊ユニットに対して書込み命令の設定が必要なバッファメモリアドレスの設定漏れがないか（設定漏れの確認）をチェックするため、解析部１００は解析結果データ６０内にバッファメモリアドレスＣ１に一致するアドレスＤ１が１つも存在しなかったかを確認する（ステップＳ６４０）。
【００８７】
解析部１００は、解析結果データ６０内にバッファメモリアドレスＣ１に一致するアドレスＤ１が１つも存在しなかったかことを確認すると（ステップＳ６４０、Ｙｅｓ）、解析結果表７０の変数Ｌで示す行の設定値Ｅ２に「なし」を表示する（ステップＳ６５０）。これにより、解析結果データ６０内にバッファメモリアドレスＣ１に一致するアドレスＤ１が１つも存在しない場合はプログラムの設定漏れであると判断できる。
【００８８】
一方、解析部１００は解析結果データ６０内にバッファメモリアドレスＣ１に一致するアドレスＤ１が１つでも存在したことを確認すると（ステップＳ６４０、Ｎｏ）、特殊ユニット定義データファイル５０内の次の特殊ユニットデータを参照する為、変数ｍに１をプラスする（ｍ＝ｍ＋１）（ステップＳ６６０）。
【００８９】
ステップＳ５８０に戻り、解析部１００は変数ｍが特殊ユニット定義データファイル５０内の特殊ユニットデータ数を超えていると判断するまで、ステップＳ５８０〜Ｓ６６０の処理を繰り返す。
【００９０】
解析部１００が、変数ｍが特殊ユニット定義データファイル５０内の特殊ユニットデータ数を超えたと判断した場合（ステップＳ５８０、Ｙｅｓ）、Ｉ／Ｏ割付テーブル３０内の次のデータを参照する為、変数ｋに１をプラスする（ｋ＝ｋ＋１）（ステップＳ５４０）。
【００９１】
ステップＳ５１０に戻り、解析部１００は変数ｋがＩ／Ｏ割付テーブル３０のデータ数を超えていると判断するまでステップＳ５１０〜Ｓ６６０の処理を繰り返す。解析部１００が、変数ｋがＩ／Ｏ割付テーブル３０のデータ数を超えていると判断した場合（ステップＳ５１０、Ｙｅｓ）、解析結果表７０作成処理を終了し、表示部１１に解析結果表７０を表示させる。また、解析結果表７０は、メモリ部１４に格納する。これにより、特殊ユニット２８の動作に関する設定項目への設定内容の解析結果表７０を一覧表として分かり易く表示させることが可能となる。
【００９２】
このように実施の形態によれば、特殊ユニットの動作に関する設定項目への設定内容に範囲外設定、重複設定、設定漏れ等の設定ミスがないかを簡易に解析することが可能となり、プログラムの設定の確認作業を効率的に行うことが可能となる。また、特殊ユニットの動作に関する設定項目への設定内容の解析結果を一覧表として表示させるので、範囲外設定、重複設定、設定漏れ等の設定ミスを分かり易く表示することが可能となり、設定ミスの確認漏れ等が少なくなる。
【産業上の利用可能性】
【００９３】
以上のように、本発明にかかるチェック装置は、ＰＬＣの特殊ユニットの設定プログラムの解析に適している。
【図面の簡単な説明】
【００９４】
【図１】本発明に係るチェック装置の構成を示すブロック図である。
【図２】本発明に係るＰＬＣの構成を示す図である。
【図３】ＰＬＣのＩ／Ｏ割付テーブルを示す図である。
【図４】ＣＰＵユニットと特殊ユニットのデータの受渡しを説明するための図である。
【図５−１】範囲チェックの処理手順を示すフローチャートである。
【図５−２】重複チェックの処理手順を示すフローチャートである。
【図６】ＰＬＣのアナログ入力ユニットへの書込みを行うラダープログラムの一例を示す図である。
【図７】ＳＰＷＲ命令の書式を説明するための図である。
【図８】特殊ユニット定義データファイルの構成を説明するための図である。
【図９】解析結果データの構成を説明するための図である。
【図１０−１】解析結果データの構成の一例（１）を示す図である。
【図１０−２】解析結果データの構成の一例（２）を示す図である。
【図１１】プログラム解析結果の表示処理の手順を示すフローチャートである。
【図１２−１】プログラムの解析結果表の一例（１）を示す図である。
【図１２−２】プログラムの解析結果表の一例（２）を示す図である。
【符号の説明】
【００９５】
１  チェック装置
１１  表示部
１２  入力部
１３  補助記憶部
１４  メモリ部
１５  通信Ｉ／Ｆ部
２０  ＣＰＵユニット
２１  入力ユニット
２２，２３  アナログ入力ユニット
２４  出力ユニット
２８  特殊ユニット
２９  ベースユニット
３０  割付テーブル
４０  ラダープログラム
５０  特殊ユニット定義データファイル
６０  解析結果データ
７０  解析結果表
１００  解析部
２８１  バッファメモリ
【図１】
2005293371.tif 000003
【図２】
2005293371.tif 000004
【図３】
2005293371.tif 000005
【図４】
2005293371.tif 000006
【図５−１】
2005293371.tif 000007
【図５−２】
2005293371.tif 000008
【図６】
2005293371.tif 000009
【図７】
2005293371.tif 000010
【図８】
2005293371.tif 000011
【図９】
2005293371.tif 000012
【図１０−１】
2005293371.tif 000013
【図１０−２】
2005293371.tif 000014
【図１１】
2005293371.tif 000015
【図１２−１】
2005293371.tif 000016
【図１２−２】
2005293371.tif 000017