(57)【要約】【課題】  ＰＬＣのプログラムを比較して相違点を抽出するときに、相違部分があると、それ以降のプログラム比較はこの相違部分の影響を受けた状態で比較されるために、たとえ同一であっても、相違部分以降が全て相違として検出されてしまうという課題を解決する。【解決手段】  ２つのプログラムの命令情報を比較して共通部分を共通部分リストに抽出し、この共通部分リストから最小エディット経路を算出して、この最小エディット経路に沿って２つのプログラムから回路を取り出し、これらの回路の命令部分に一致しない部分があると、その回路の情報を不一致リストに保存するようにした。相違点があってもその相違点を引きずることがないので、正しい比較を行うことができる。【選択図】                    図１
2006059044.tif 000002
【特許請求の範囲】
【請求項１】
複数の回路で構成され、命令情報および回路固有の情報を回路単位で管理するプログラムの差分抽出方法において、
差分を抽出するプログラムの命令情報を比較し、回路単位で共通部分を抽出して共通部分リストを作成する工程と、
前記共通部分リストを用いて、前記差分を抽出するプログラムの最小エディット経路を算出する工程と、
前記最小エディット経路に沿って前記差分を抽出するプログラムから１回路分の命令情報を取り出し、この命令情報が一致していなかったときに、一致しなかった回路の情報を不一致リストに保存する工程と、
を具備したことを特徴とするプログラムの差分抽出方法。
【請求項２】
前記命令情報の比較は、バイト単位で行うことを特徴とする請求項１記載のプログラムの差分抽出方法。
【請求項３】
前記不一致リストに保存する情報は、一致しなかった回路の情報が格納されている場所を示すポインタであることを特徴とする請求項１若しくは請求項２記載のプログラムの差分抽出方法。
【請求項４】
複数の回路で構成され、命令情報および回路固有の情報を回路単位で管理するプログラムの差分を抽出する差分抽出装置において、
差分を抽出するプログラムが入力され、これらのプログラムの命令情報を比較し、回路単位で共通部分を抽出して共通部分リストを作成する共通部分リスト作成部と、
前記共通部分リストが入力され、前記差分を抽出するプログラムの最小エディット経路を算出する最小エディット経路算出部と、
前記最小エディット経路が入力され、この最小エディット経路に沿って前記差分を抽出するプログラムから１回路分の命令情報を取り出し、この命令情報が一致していなかったときに、一致しなかった回路の情報を不一致リストに保存する不一致リスト作成部と、
を具備したことを特徴とするプログラムの差分抽出装置。
【請求項５】
前記命令情報の比較は、バイト単位で行うことを特徴とする請求項４記載のプログラムの差分抽出装置。
【請求項６】
前記不一致リストに保存する情報は、一致しなかった回路の情報が格納されている場所を示すポインタであることを特徴とする請求項４若しくは請求項５記載のプログラムの差分抽出装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、バージョンの異なる２つのプログラムの差分を抽出する方法および装置において、特にＰＬＣ(Programmable Logic Controller)のプログラムに用いて好適なプログラムの差分抽出方法および装置に関するものである。
【背景技術】
【０００２】
ＰＬＣ上で動作するユーザアプリケーションプログラムは、複数の作業者によって頻繁に追加あるいは修正が行われる。このような従来のプログラム表示方式の例として、例えば、次のようなものがある。
【０００３】
【特許文献１】特開２００２−３７３００７号公報
【０００４】
しかしながら、追加・修正作業中にその履歴を残すことは希であり、後で変更内容を抽出することは困難である。そのためＰＬＣのユーザアプリケーションを開発するソフトウェアでは、高精度な差分抽出機能が求められていた。
【０００５】
従来、差分抽出は次の（１）あるいは（２）の方法で実行されていた。当初は（１）の方法で差分を抽出していたが、技術革新によって次第に（２）の方法に移行してきた。
（１）プログラムを上から順に命令単位で比較して、相違点を抽出する。
（２）プログラムを上から順に回路単位で比較して、相違点を抽出する。
【０００６】
このような差分抽出方法は、いずれもプログラムの途中で要素の有無に関わる相違点が抽出されると、それ以降のプログラムの比較は同一の部分ではなく、抽出した相違部分の影響を受けた状態で比較される。そのため、一度相違点が検出されると、それ以降は全て相違であるとされてしまうようになっていた。
【０００７】
このことを、図５を用いて説明する。図５において、７１、７２はバージョンの異なるＰＬＣのプログラムであり、７１１、７２１はプログラム７１，７２を構成している回路である。プログラム７１は（Ａ）〜（Ｉ）の９個の回路７１１で構成されており、プログラム７２は（Ａ）〜（Ｉ）の９個の回路７２１で構成されている。
【０００８】
このプログラム７１と７２の相違点を抽出するために、プログラム７１、７２を上から回路単位で比較していく。９は比較結果である。回路（Ａ）〜（Ｄ）はプログラム７１とプログラム７２で同一なので、結果は“一致”になる。８１は一致している領域を表す。
【０００９】
回路（Ｅ）は異なっているので、結果は“相違”になる。領域８２は相違の部分である。一旦“相違”を検出すると、この相違点を引きずったまま比較を行うので、９に示すように、それ以降の回路は一致していても“相違”と判定されてしまう。矢印８３は、相違点以降は正しい対象と比較されず、本来“同一”であるにも関わらず、“相違”と判定されてしまうことを表している。
【発明の開示】
【発明が解決しようとする課題】
【００１０】
しかし、このような差分抽出方法には、次のような課題があった。前述したように、命令あるいは回路単位で最初から単純に比較して差分を抽出していたが、いずれも図５で説明したように、相違点を検出するとそれ以降は全て“相違”になってしまい、正確に差分を抽出することが出来ないという課題があった。
【００１１】
正確に差分を抽出するためには、相違点を検出するのではなく、一致点を検出する必要があるが、ＰＬＣ等複数の回路で構成されるプログラムでは、プログラムの一致点を抽出するための手法が確立されておらず、一致点検出による差分抽出の技術が検討されていなかった。
【００１２】
なお、ＵＮＩＸ（登録商標）ではｄｉｆｆという、プログラムの差分を抽出するソフトウェアがよく用いられている。このプログラムは一致点を検出して差分を抽出するが、そのままではＰＬＣのプログラムの差分抽出に用いることができないという課題もあった。
【００１３】
従って本発明の目的は、一致点を検出してプログラムの差分を抽出することによって、正確に差分を抽出することができるプログラムの差分抽出方法およびその装置を提供することにある。
【課題を解決するための手段】
【００１４】
このような課題を達成するために、本発明のうち請求項１記載の発明は、
複数の回路で構成され、命令情報および回路固有の情報を回路単位で管理するプログラムの差分抽出方法において、
差分を抽出するプログラムの命令情報を比較し、回路単位で共通部分を抽出して共通部分リストを作成する工程と、
前記共通部分リストを用いて、前記差分を抽出するプログラムの最小エディット経路を算出する工程と、
前記最小エディット経路に沿って前記差分を抽出するプログラムから１回路分の命令情報を取り出し、この命令情報が一致していなかったときに、一致しなかった回路の情報を不一致リストに保存する工程と、
を具備したものである。正確にプログラムの差分を抽出することができる。
【００１５】
請求項２記載の発明は、請求項１記載の発明において、
前記命令情報の比較は、バイト単位で行うようにしたものである。より正確に比較できる。
【００１６】
請求項３記載の発明は、請求項１若しくは請求項２記載の発明において、
前記不一致リストには、一致しなかった回路の情報が格納されている場所を示すポインタを格納するようにしたものである。不一致リストの格納領域を小さくできる。
【００１７】
請求項４記載の発明は、
複数の回路で構成され、命令情報および回路固有の情報を回路単位で管理するプログラムの差分を抽出する差分抽出装置において、
差分を抽出するプログラムが入力され、これらのプログラムの命令情報を比較し、回路単位で共通部分を抽出して共通部分リストを作成する共通部分リスト作成部と、
前記共通部分リストが入力され、前記差分を抽出するプログラムの最小エディット経路を算出する最小エディット経路算出部と、
前記最小エディット経路が入力され、この最小エディット経路に沿って前記差分を抽出するプログラムから１回路分の命令情報を取り出し、この命令情報が一致していなかったときに、一致しなかった回路の情報を不一致リストに保存する不一致リスト作成部と、
を具備したものである。正確にプログラムの差分を抽出することができる。
【００１８】
請求項５記載の発明は、請求項４記載の発明において、
前記命令情報の比較は、バイト単位で行うようにしたものである。より正確に比較できる。
【００１９】
請求項６記載の発明は、請求項４若しくは請求項５記載の発明において、
前記不一致リストには、一致しなかった回路の情報が格納されている場所を示すポインタを保存するようにしたものである。不一致リストの格納領域を小さくできる。
【発明の効果】
【００２０】
以上説明したことから明らかなように、本発明によれば次のような効果がある。
請求項１、２，３、４、５および請求項６の発明によれば、命令情報を比較して回路単位で共通部分リストを作成し、この共通部分リストを用いて最小エディット経路を算出して、この最小エディット経路に沿って回路単位で命令情報を比較して、不一致があると、一致しなかった回路の情報を不一致リストに保存するようにした。
【００２１】
従来のように回路が一致していても相違になるということがなくなり、正確に差分を抽出することができるという効果がある。また、これによってプログラムの比較を正確に行うことができるという効果もある。さらに、無駄な相違点情報を検出しないので、効率よく差分を抽出することができるという効果もある。
【００２２】
また、オンラインエディットでは送信データを最小限に抑えなければならないが、本発明によって差分を抽出し、この差分のみを送信することによって、送信データを大幅に少なくすることができるという効果もある。さらに、回路単位で差分を抽出できるので、プログラムの相違点をラダーの形で表示することができ、視認性の向上を図ることができるという効果もある。
【発明を実施するための最良の形態】
【００２３】
以下本発明を図面を用いて詳細に説明する。図１は本発明に係るプログラムの差分抽出方法の一実施例を示すフローチャートである。なお、図５で説明したように、プログラムは複数の回路で構成されている。また、プログラムのデータは命令情報と回路固有の情報で構成されており、これらは回路情報として回路単位で管理されている。回路情報の中には、回路固有の情報と、その回路に含まれる複数の命令情報が格納されている場所を示すポインタが格納されている。
【００２４】
図１において、（Ａ−１）で差分を抽出する２つのプログラム内を走査して一致する部分を全て抽出し、回路単位で共通部分のリストを作成する。そして（Ａ−２）において、作成した共通部分のリストを用いて、最も無駄が少ない経路である最小エディット経路を算出する。次に（Ａ−３）において、（Ａ−２）で作成した最小エディット経路に沿って回路を比較し、不一致回路のリストを作成して、差分抽出を終了する。なお、このときに（Ａ−１）で作成した共通部分リストを用いる。
【００２５】
図２に、（Ａ−１）の共通部分リストの作成部分のフローチャートを示す。（Ｂ−１）で２つのプログラム内の命令情報をバイト単位で比較し、差分を抽出する。次に、（Ｂ−２）で共通部分を取り出して、回路単位で共通部分リストを生成する。すなわち、比較する回路中の全ての命令情報が一致したときに、共通部分があるとして、共通部分リストに追加する。この（Ｂ−１）と（Ｂ−２）の部分は、前述したｄｉｆｆの技術を応用している。
【００２６】
なお、前述したように２つのプログラムの命令情報はバイト単位で比較する。通常命令は複数のバイトで構成されているので、命令単位で比較するよりもより詳細に比較することができる。
【００２７】
次に、最小エディット経路の算出について説明する。最小エディット経路とは、比較する２つのプログラムの共通部分が一番多く、かつ無駄の少ない経路である。この最小エディット経路は、一方のプログラムから他方のプログラムに変更する際に、変更箇所が一番少ない経路になっている。
【００２８】
最小エディット経路を算出するには、（Ｂ−２）で作成した共通部分リスト中の共通部分の接続を種々変化させて、一方のプログラムから他方のプログラムに変更するための一番無駄が少ない経路を選択する。なお、この最小エディット経路に沿って測定した距離を最小エディット距離と言う。
【００２９】
次に、不一致回路のリスト生成について説明する。比較する２つのプログラムから、（Ａ−２）で算出した最小エディット経路に沿って回路を抽出し、これらの回路に属する命令情報を比較する。そして、不一致部分があると、その回路の情報を不一致リストに格納する。
【００３０】
このようにすることにより、一致部分の抽出を基にして２つのプログラムの不一致部分（差分）を取り出すことができる。また、最小エディット経路を基にして不一致部分をリストアップするので、効率的に不一致部分の抽出を行うことができる。
【００３１】
なお、格納領域を小さくするために、実際には回路情報そのものではなく、一致しない回路の回路情報が格納されている場所を示すポインタ情報が格納される。
【００３２】
図３に本実施例の効果を示す。なお、図５と同じ要素には同一符号を付し、説明を省略する。図３において、１は比較結果、２は一致している部分、３は不一致部分を表す。矢印８３が示すように、不一致部分３以降もこの不一致部分を引きずることなく、正しい対象回路と比較していることがわかる。そのため、１に示すように、不一致部分３以降も正しく一致、不一致の判定を行っている。
【００３３】
図４に本発明の他の実施例を示す。図４において、４は共通部分リスト作成部であり、差分を抽出するプログラムが入力され、これらの共通部分をリストアップした共通部分リストを作成する。
【００３４】
５は最小エディット経路算出部であり、４が作成した共通部分リストが入力され、このリストから最小エディット経路を算出する。６は不一致リスト作成部であり、５が作成した最小エディット経路が入力され、この経路を基にして不一致リストすなわち差分を作成する。
【００３５】
なお、ＰＬＣにはオンラインエディット機能という、動作中のＰＬＣのプログラム編集を行うことができる機能が備わっている。このオンラインエディットでは、通信バスを用いてエディットデータをＰＬＣに送信するが、他の機器への影響を最小限にするためには、送信データをできるだけ小さくしなければならない。
【００３６】
そのため、本発明の差分抽出方法および装置を用いてプログラムの差分のみをＰＬＣに送信することによって、送信データを大幅に少なくすることができ、他の機器に与える影響を最小限することができる。
【図面の簡単な説明】
【００３７】
【図１】本発明の一実施例を示すフローチャートである。
【図２】本発明の一実施例を示すフローチャートである。
【図３】本発明の一実施例の効果を説明するための図である。
【図４】本発明の他の実施例を示す構成図である。
【図５】従来のプログラム比較方法の課題を説明するための図である。
【符号の説明】
【００３８】
１  比較結果
２  一致している部分
３  一致していない部分
４  共通部分リスト作成部
５  最小エディット経路算出部
６  不一致リスト作成部
７１，７２  ＰＬＣのプログラム
７１１，７２１  回路
【図１】
2006059044.tif 000003
【図２】
2006059044.tif 000004
【図３】
2006059044.tif 000005
【図４】
2006059044.tif 000006
【図５】
2006059044.tif 000007