(57)【要約】      （修正有）【課題】ラダープログラムにおける不正箇所のチェック漏れを削減する。【解決手段】ラダープログラム構文解析ツール２は、ラダープログラム読み込み処理部２１によりラダープログラム１１を読み込み、ラダープログラムシミュレート処理部２３は、ラダープログラムと命令関数定義データ２２に含まれるメモリ参照命令およびメモリ更新命令を元にロジックをシミュレートする。命令抽出処理部２４は、シミュレートの実行により抽出されるメモリ参照命令およびメモリ更新命令から、メモリ参照範囲およびメモリ更新範囲を抽出し、メモリアクセス解析処理部２５は、抽出したメモリ参照範囲およびメモリ更新範囲に基づいてメモリアクセス箇所を解析し、画面表示処理部２６は、解析した結果を編集して、解析結果表示画面３を作成する。【選択図】図１
2016212710.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータのディスクに格納されているラダープログラムを読み込むラダープログラム読み込み処理部と、
前記ラダープログラム読み込み処理部が読み込んだラダープログラムと命令関数定義データに含まれるメモリ参照命令およびメモリ更新命令を元にロジックをシミュレートするラダープログラムシミュレート処理部と、
前記ラダープログラムシミュレート処理部におけるシミュレートの実行により抽出されるメモリ参照命令およびメモリ更新命令から、メモリ参照範囲およびメモリ更新範囲を抽出する命令抽出処理部と、
前記命令抽出処理部が抽出したメモリ参照範囲およびメモリ更新範囲に基づいてメモリアクセス箇所を解析するメモリアクセス解析処理部と、
前記メモリアクセス解析処理部で解析した結果を編集して、解析結果表示画面を作成する画面表示処理部と、を備えているラダープログラム構文解析ツール。
【請求項２】
前記命令関数定義データを内蔵していることを特徴とする請求項１に記載のラダープログラム構文解析ツール。
【請求項３】
前記ディスクに格納されていて、命令関数定義データを有する命令関数定義ファイルを読み込む、命令関数定義読み込み処理部を備えていることを特徴とする請求項１に記載のラダープログラム構文解析ツール。
【請求項４】
前記ディスクに格納されていて、繰り返し命令と条件分岐命令に対する入力パターンが定義されている入力パターン定義ファイルを読み込む、繰り返し命令及び条件分岐命令抽出処理部を備えていることを特徴とする請求項１に記載のラダープログラム構文解析ツール。
【請求項５】
前記ラダープログラムシミュレート処理部は、前記ディスクに格納されているメモリ許容範囲定義ファイルをもとに、ロジックをシミュレートすることを特徴とする請求項１に記載のラダープログラム構文解析ツール。
【請求項６】
前記解析結果表示画面は、重要度に応じて色分け区分されていることを特徴とする請求項１に記載のラダープログラム構文解析ツール。
【請求項７】
ディスクから、Ｍ行のステートメントを有するラダープログラムを読み込む第１のステップと、
命令関数定義データからメモリ参照命令とメモリ更新命令を読み込む第２のステップと、前記第１のステップで読み込んだラダープログラムのｎ行目（ｎ：変数；１〜Ｍ）のステートメントを読み込む第３のステップと、
前記第３のステップで読み込んだｎ行目のステートメントに繰り返し命令があるか否かを判定し、繰り返し命令がある場合には実行ステップを設定する第４のステップと、
前記第３のステップで読み込んだｎ行目のステートメントに条件分岐命令があるか否かを判定し、条件分岐命令がある場合には実行ステップを設定する第５のステップと、
前記第３のステップで読み込んだｎ行目のステートメントに前記第２のステップで読み込んだメモリ参照命令があるか否かを判定し、メモリ参照命令がある場合にはこのメモリ参照命令に対応するメモリ参照範囲を抽出する第６のステップと、
前記第３のステップで読み込んだｎ行目のステートメントに前記第２のステップで読み込んだメモリ更新命令があるか否かを判定し、メモリ更新命令がある場合にはこのメモリ更新命令に対応するメモリ更新範囲を抽出する第７のステップと、
前記第１のステップで読み込んだラダープログラムのトレースが終了したか否かを判定する第８のステップと、
前記第８のステップでトレースが終了したと判定すると、前記第６のステップで抽出したメモリ参照範囲および前記第７のステップで抽出したメモリ更新範囲に基づいてメモリアクセス箇所を解析する第９のステップと、
前記第９のステップで得られた解析結果を画面に表示する第１０のステップと、を備え、前記第１のステップから前記第１０のステップはコンピュータが実行することを特徴とするラダープログラム構文解析ツール。
【請求項８】
入力パターン定義ファイルから繰り返し命令および条件分岐命令を抽出する第１１のステップと、
前記第１１のステップで抽出した繰り返し命令および条件分岐命令を外部定義ファイルに出力する第１２のステップと、
を備えていることを特徴とする請求項７に記載のラダープログラム構文解析ツール。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、プログラム構文解析ツールに係わり、特に、ラダープログラムにおけるロジックチェックを自動化したラダープログラム構文解析ツールに関するものである。
【背景技術】
【０００２】
ＰＬＣ（Programmable Logic Controller）は、リレー回路の代替装置として開発された制御装置であり、プログラマブルコントローラとも呼ばれている。ＰＬＣでは、プログラム言語にラダープログラムという専用の言語を使用する。ＰＬＣのラダープログラムは、グラフィカルな方式を採用しており、文法を記述していくのではなく、接点やコイルとよばれるシンボルを配置していくことで作成される。ラダープログラムでは、入力データなどを元に、プログラムの構文解析やプログラムの自動生成が行われている（例えば、特許文献１〜９など）。作成済みのラダープロプログラムに対しては、入力データを与えずに、独自で条件分岐などを判断して実行パターンを網羅する方式が提案されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１２−１０３７９１号公報
【特許文献２】特開２０１２−８３９３４号公報
【特許文献３】特開２０１４―２０３３４３号公報
【特許文献４】特開２０１２−１０３７９１号公報
【特許文献５】特開２０１３−１６０２１号公報
【特許文献６】特開２００２−４１１１１号公報
【特許文献７】特開２０１２−８３９３４号公報
【特許文献８】特開平９−６２３１６号公報
【特許文献９】特開平７−２９５６１２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ＰＬＣでラダープログラムの開発を行う際、ＰＬＣに接続された機器に対する制御や状態を取得するには、ＣＰＵ（Central Processing Unit）のメモリを介して行う必要がある。ＣＰＵ上のメモリを参照および更新するには、参照元（更新先）のメモリアドレスをラダープログラム上で直接コーディングする。コーディングミスによるアドレス誤りをチェックするには、目視によりラダープログラムの確認を行うか、またはＰＬＣ上でラダープログラムを実行させて、実行結果を元にチェックするかの、二通りが考えられる。但し、これらのチェック方法では人が介在することによる見落としや、プログラム実行パターンが網羅しきれていないことによる不正箇所のチェック漏れが残る。
【０００５】
この発明は上記のような課題を解決するためになされたものであり、ＰＬＣのラダープログラムの不正ロジックを自動チェック可能な構文解析ツールの提供を目指す。すなわち、目視によるアドレス誤りをツールにより自動チェックすることでチェック漏れを削減させる。またラダープログラムの実行パターンをツールがプログラムロジックを解析して、全ての実行パターンをシミュレートすることで、不正箇所のチェック漏れを削減させる。
【課題を解決するための手段】
【０００６】
この発明に係わるラダープログラム構文解析ツールは、コンピュータのディスクに格納されているラダープログラムを読み込むラダープログラム読み込み処理部と、ラダープログラム読み込み処理部が読み込んだラダープログラムと命令関数定義データに含まれるメモリ参照命令およびメモリ更新命令を元にロジックをシミュレートするラダープログラムシミュレート処理部と、ラダープログラムシミュレート処理部におけるシミュレートの実行により抽出されるメモリ参照命令およびメモリ更新命令から、メモリ参照範囲およびメモリ更新範囲を抽出する命令抽出処理部と、命令抽出処理部が抽出したメモリ参照範囲およびメモリ更新範囲に基づいてメモリアクセス箇所を解析するメモリアクセス解析処理部と、メモリアクセス解析処理部で解析した結果を編集して、解析結果表示画面を作成する画面表示処理部と、を備えている。
【発明の効果】
【０００７】
この発明に係わるラダープログラム構文解析ツールによれば、目視によるアドレス誤りをツールが自動チェックすることでチェック漏れを削減できる。またラダープログラムの実行パターンをツールがプログラムのロジックを解析して、全ての実行パターンをシミュレートすることで、不正箇所のチェック漏れが減少する。さらに汎用ＰＣ上でラダープログラムをシミュレートすることで、ＰＬＣを準備しなくてもプログラムチェックが行うことが可能である。
【図面の簡単な説明】
【０００８】
【図１】この発明の実施の形態１を示すブロック図である。
【図２】この発明の実施の形態１における命令抽出までの動作に係わるフローチャートを示す図である。
【図３】この発明の実施の形態２を示すブロック図である。
【図４】この発明の実施の形態３を示すブロック図である。
【図５】この発明の実施の形態３における入力パターン設定の動作に係わるフローチャートを示す図である。
【図６】この発明の実施の形態４を示すブロック図である。
【図７】この発明の実施の形態５に係わる解析結果を表示する図である。
【発明を実施するための形態】
【０００９】
本発明の実施の形態に係わるラダープログラム構文解析ツールについて、図を参照しながら以下に説明する。なお、各図において、同一または同様の構成部分については同じ符号を付しており、対応する各構成部のサイズや縮尺はそれぞれ独立している。例えば構成の一部を変更した断面図の間で、変更されていない同一構成部分を図示する際に、同一構成部分のサイズや縮尺が異なっている場合もある。また、ラダープログラム構文解析ツールの構成は、実際にはさらに複数の部材を備えているが、説明を簡単にするため、説明に必要な部分のみを記載し、他の部分については省略している。
【００１０】
実施の形態１．
以下、この発明の実施の形態１を図に基づいて説明する。ＰＬＣ（Programmable Logic Controller）のプログラムはパーソナルコンピュータ（ＰＣ：Personal Computer）のアプリケーションソフトを使用して作成される。図１において、ラダープログラム１１とラダープログラム構文解析ツール２は、汎用ＰＣ１のディスクにインストールされている。本実施の形態に係わるラダープログラム構文解析ツール２は、ラダープログラム読み込み処理部２１、ラダープログラムシミュレート処理部２３、命令抽出処理部２４、メモリアクセス解析処理部２５および画面表示処理部２６の５つの処理部と、１つのデータ（命令関数定義データ２２）から構成されている。命令関数定義データ２２は、メモリ参照命令およびメモリ更新命令を抽出する元になるデータを保持している。メモリアクセス解析処理部２５で解析した結果は、画面表示処理部２６で作業者が見やすい内容に編集してディスプレイ３に表示される。
【００１１】
ラダープログラム読み込み処理部２１は、汎用ＰＣ１のディスクに格納されたＭ行のステートメントを有するラダープログラム（テキスト）１１を読み込む。ラダープログラムシミュレート処理部２３は、ラダープログラム読み込み処理部２１が読み込んだラダープログラム（テキスト）１１と命令関数定義データ２２を元にラダープログラムのロジックをシミュレートする。命令抽出処理部２４は、シミュレートの実行により抽出したメモリ参照命令およびメモリ更新命令から、メモリ参照範囲およびメモリ更新範囲を抽出する。メモリ参照命令およびメモリ更新命令は、実行されると、汎用ＰＣ１のＣＰＵ上のメモリが参照および更新される。メモリアクセス解析処理部２５は、抽出したメモリ参照範囲およびメモリ更新範囲を元にメモリアクセス箇所を解析する。画面表示処理部２６は、解析した結果を作業者が見やすい内容に編集して、解析結果表示画面を作成する。編集結果（解析結果表示画面）はディスプレイ３に表示される。
【００１２】
次に図２に示すフローチャートに従って、汎用ＰＣ上で動作するラダープログラム構文解析ツール２の動作を説明する。ラダープログラム構文解析ツール２は、命令関数定義データ２２を内蔵しており、Ｍ行のステートメントから構成されているものとする。繰り返し命令、条件分岐命令、メモリ参照命令およびメモリ更新命令には、複数種類の命令が存在する。処理がスタートすると（Ｓ０）、ラダープログラム読み込み処理部２１はラダープログラム（テキスト）１１の読み込みを開始する（Ｓ１）。次いで、ラダープログラムシミュレート処理部２３と命令抽出処理部２４は、命令関数定義データ２２の中からメモリ参照命令およびメモリ更新命令を読み込む（Ｓ２）。ラダープログラム読み込み処理部２１から読み込んだラダープログラム（テキスト）１１と、命令関数定義データ２２に含まれているメモリ参照命令およびメモリ更新命令を元にラダープログラムシミュレート処理部２３は、ラダープログラム（テキスト）１１のロジックをトレースする（Ｓ３〜Ｓ８）。
【００１３】
先ず、ラダープログラムシミュレート処理部２３では、ラダープログラム（テキスト）１１の先頭から１行毎にラダープログラムを読み込む（Ｓ３）。このため、１〜Ｍを表す変数ｎを使って表現するとすれば、ここではラダープログラムのｎ行目（ｎ：変数；１〜Ｍ）のステートメントを読み込むことになる。ラダープログラムシミュレート処理部２３は、ラダープログラム中に、繰り返し命令、条件分岐命令、メモリ参照命令およびメモリ更新命令があるか否かを判定する（Ｓ４〜Ｓ７）。繰り返し命令を見つけた場合には、繰り返し回数と繰り返し範囲を元に次の実行すべき行（ステップ）を設定する（Ｓ４ａ）。条件分岐命令を見つけた場合には、条件一致時と不一致時の両方のケースを判断して、次の実行すべき行（ステップ）を設定する（Ｓ５ａ）。メモリ参照命令を見つけた場合には、メモリ参照範囲を抽出する（Ｓ６ａ）。メモリ更新命令を見つけた場合には、メモリ更新範囲を抽出する（Ｓ７ａ）。この作業を、全ての行（ステートメント）について実行すると、ラダープログラムのトレースが終了する（Ｓ８）。
【００１４】
ラダープログラム（テキスト）１１の全てのトレースを終了した時点で、抽出したメモリ参照命令およびメモリ更新命令を命令抽出処理部２４に引き渡す。命令抽出処理部２４では引き渡されたメモリ参照命令およびメモリ更新命令と、その実行順序をまとめて、メモリアクセス解析処理部２５に引き渡す。メモリアクセス解析処理部２５では、トレース順に沿ってメモリ参照およびメモリ更新のタイミングを時系列に並べ、メモリ参照領域およびメモリ更新領域を解析する（Ｓ９）。解析結果は画面表示処理部２６に引き渡す。画面表示処理部２６では、メモリアクセス解析処理部２５で解析した結果を作業者が見やすい内容に編集してディスプレイ３に表示する（Ｓ１０）。解析結果の表示が完了すれば、ラダープログラム構文解析ツール２は終了する（Ｓ１１）。
【００１５】
実施の形態１によるラダープログラム構文解析ツール２によれば、ＰＬＣのラダープログラムにおけるメモリ不正アクセス箇所のロジックを自動でチェックできる。アドレス誤りをツールにより自動チェックすることでチェック漏れが削減され、デバッグ作業時間が短縮できる。またラダープログラムの実行パターンをツールがプログラムロジックを解析して、全ての実行パターンをシミュレートすることで、不正箇所のチェック漏れが減少する。さらに汎用ＰＣ上でラダープログラムをシミュレートすることで、ＰＬＣを準備しなくてもプログラムのチェックが行える。すなわち、ＰＬＣで採用されているラダープログラムにおいて、ラダープログラムの中からＣＰＵ上のメモリを参照および更新する命令を検索して、メモリ参照領域およびメモリ更新領域を抽出する機能を備えている。
【００１６】
実施の形態２．
なお、上記実施の形態１では、ラダープログラムから、メモリ参照命令およびメモリ更新命令を抽出する元になるデータは、命令関数定義データ２２に保持していることを述べた。ラダープログラム構文解析ツール２が命令関数定義データ２２から対象とする命令を検索する場合には、ラダープログラムの命令を文字列検索する必要がある。構文解析ツールの対象とするラダープログラムの命令関数が命令関数定義データ２２に存在しない場合にはエラーとなる。命令関数定義データ２２に検索対象外の命令関数が多数あるときには、検索に多くの時間を要する。
【００１７】
図３は実施の形態２に係わるラダープログラム構文解析ツール２の構成を示している。本実施の形態では、命令関数定義データ２２を汎用ＰＣ１のディスクに格納した命令関数定義ファイル１２に定義している。命令関数定義データを命令関数定義ファイル１２から命令関数定義読み込み処理部２７でラダープログラム構文解析ツール２に取り込むため、命令関数の追加、削除および変更が容易となる。将来的に命令が拡張されてもツールを改造することなく、命令関数定義ファイル１２に拡張された命令関数を追加するだけで、新規命令を処理することが可能となる。
【００１８】
またツールの対象となるラダープログラムによっては使用されている命令が限定されることもある。必要な命令関数だけを命令関数定義ファイル１２に定義すれば、検索性能が向上して、ツール全体の解析時間を削減することが可能となる。従って、ＰＬＣで採用されているラダープログラムの構文解析ツールにおいて、メモリ参照命令およびメモリ更新命令をツールの外部に定義し、命令追加を容易にしたことを特徴とする。
【００１９】
実施の形態３．
なお、上記実施の形態１では、ラダープログラム読み込み処理部２１で読み込んだラダープログラムのテキストデータを１行ずつトレースし、繰り返し命令や、条件分岐命令に沿ってプログラムを実行する場合を述べた。繰り返し命令や条件分岐命令は、おのおのの命令に対する入力データ値によって、実行されるロジックが変わってくるため、あらかじめ想定される入力データパターン毎にプログラムが実行できれば、入力データパターン毎にメモリアクセス箇所を洗い出せる。
【００２０】
図４は実施の形態３に係わるラダープログラム構文解析ツール２の構成を示している。汎用ＰＣ１のディスクに格納した入力パターン定義ファイル１３には入力パターンが定義されている。繰り返し命令及び条件分岐命令抽出処理部２８は、入力パターン定義ファイル１３を読み込み、ラダープログラムシミュレート処理部２３に引き渡す。ラダープログラムシミュレート処理部２３は、プログラムをシミュレートする際に、入力パターン定義ファイル１３に定義された入力パターン数分のシミュレートを実行して、入力パターン毎にメモリ参照箇所およびメモリ更新箇所の洗い出しを行う。
【００２１】
図５は、実施の形態３における入力パターン設定の動作に係わるフローチャートを示している。本実施の形態によれば、ラダープログラム構文解析ツール２は、入力パターンの設定が開始すると（Ｓ２１）、構文解析を実行する前に、ラダープログラムを１度実行させて繰り返し命令および  条件分岐命令と、その命令で扱われる入力データを抽出して（Ｓ２２）、ＣＳＶ（Comma-Separated Values）形式の外部定義ファイルに出力する（Ｓ２３）。作業者は出力されたＣＳＶ形式の外部定義ファイルに対して、あらかじめ想定される入力データ値を入力パターンとして入力した上で（Ｓ２４）、ラダープログラム構文解析ツールを実行する（Ｓ２５）。実行が完了するとラダープログラム構文解析ツール２は、終了する（Ｓ２６）。
【００２２】
すなわち、ＰＬＣで採用されているラダープログラムにおいて、抽出したメモリ参照領域およびメモリ更新領域はラダープログラムのロジックによって、アクセスするタイミングや条件分岐により変化する。このためラダープログラムのロジックに従い、想定される全てのケースをシミュレートすることで実際に実行されるロジックに応じたメモリ参照領域およびメモリ更新領域を抽出可能とする。
【００２３】
実施の形態４．
なお、上記実施の形態３では、ラダープログラムへの入力パターン毎にプログラムを実行してメモリ参照箇所およびメモリ更新箇所の洗い出しを行う場合を述べた。ラダープログラムがメモリ参照およびメモリ更新する箇所を洗い出すだけでは、そのメモリアクセスが正常なのか、異常なのかを作業者が判断するのは困難である。図６は実施の形態４に係わるラダープログラム構文解析ツール２の構成を示す。作業者は、解析対象のラダープログラム（テキスト）１１が、本来アクセス可能なメモリアドレスの許容範囲をあらかじめ決めておき、メモリ許容範囲定義ファイル１４に保存する。
【００２４】
ラダープログラムシミュレート処理部２３は、汎用ＰＣ１のディスクに格納されているメモリ許容範囲定義ファイル１４から、解析対象のラダープログラム（テキスト）１１が本来アクセス可能なメモリアドレスの許容範囲を取得する。本実施の形態では、メモリアドレスの許容範囲をラダープログラム構文解析ツール２への入力データとして与えることで、作業者ではなくラダープログラム構文解析ツール２がアドレスへの不正アクセス箇所を自動識別する。
【００２５】
本実施の形態によれば、ラダープログラム構文解析ツール２がシミュレートした実行結果は、入力パターン毎でのメモリアクセス箇所をシミュレート実行順序に保持するので、メモリアクセス順序に従って参照アドレスおよび更新アドレスをトレースして行く。「未更新のアドレスへの読み込み」、「読み込みが行われていないアドレスへの重複書き込み」、「繰り返し処理でのアドレスずれ」などをツールが自動判別して、人の目では見落としが生じる不正ロジックをＰＬＣ上で実行する前に見つけだすことが可能となる。すなわち、ＰＬＣで採用されているラダープログラムにおいて、シミュレートした結果を元に、不正と想定されるロジックを解析する機能を備えている。  
【００２６】
実施の形態５．
なお、上記実施の形態４では、不正ロジックをツールが検出することを述べた。ラダープログラムのロジックには、明らかに不正と判断できるロジックと、ラダープログラムの作成者が意図的に設計した不正と誤解されるロジックと、外部要因によっては不正と誤解されるロジックとがある。誤解を生む外部要因には、他プログラムとのインターフェースとして使用されるメモリにおいて、他プログラムによってメモリの内容が変化することなどが考えられる。
【００２７】
図７は実施の形態５に係わる解析結果を表示している。本実施の形態によるラダープログラム構文解析ツールは、ディスプレイ３に、不正ロジックが明確な場合と、不正ロジックか否かを解析結果だけでは判断できない場合とに分けて、解析結果を表示する。不正ロジックが明確な場合には赤色表示（警告：重要）で強調することで重大なロジック不正があることを作業者に報告する。またロジック不正か否か判断つかない場合には、黄色表示（注意：確認要）として作業者に注意を促す表示とする。
【００２８】
これにより作業者は表示結果を一目見ただけでどの部分に重大な不正ロジックが存在するのか分かるようになり、作業者自身が不正箇所に優先順位をつけて不正ロジックか否かの確認を行うことが可能となる。従って、ＰＬＣで採用されているラダープログラムにおいて、解析した結果を元に、不正ロジック箇所を作業者に分かり易く、ディスプレイ上に表示する機能を備えている。
【００２９】
なお、本発明は、その発明の範囲内において、各実施の形態を自由に組み合わせたり、各実施の形態を適宜、変形、省略することが可能である。
【符号の説明】
【００３０】
１  汎用ＰＣ、１１  ラダープログラム、１２  命令関数定義ファイル、１３  入力パターン定義ファイル、１４  メモリ許容範囲定義ファイル、２  ラダープログラム構文解析ツール、２１  ラダープログラム読み込み処理部、２２  命令関数定義データ、２３  ラダープログラムシミュレート処理部、２４  命令抽出処理部、２５  メモリアクセス解析処理部、２６  画面表示処理部、２７  命令関数定義読み込み処理部、２８  繰り返し命令及び条件分岐命令抽出処理部、３  ディスプレイ
【図１】
2016212710.tif 000003
【図２】
2016212710.tif 000004
【図３】
2016212710.tif 000005
【図４】
2016212710.tif 000006
【図５】
2016212710.tif 000007
【図６】
2016212710.tif 000008
【図７】
2016212710.tif 000009