(57)【要約】【課題】本発明は、制御プログラムの複数箇所の追加・変更・削除を検出する制御プログラム保守方法、制御プログラム保守装置及び制御プログラム保守プログラムを提供する。【解決手段】本発明にかかる制御プログラム保守装置１０は、オペコード及びオペランドを含む実行形式の制御プログラムを関連するステップ群を１つのブロックとして分割する分割手段１０１ａと、この分割手段１０１ａにより分割したブロックに基づいて２以上の制御プログラムを比較する比較手段１０１ｂと、この比較手段１０１ｂにより比較した比較結果を出力する出力手段１０１ｃとを備える。【選択図】図１
2008003725.tif 000002
【特許請求の範囲】
【請求項１】
プラントを制御する制御システムで用いられる制御プログラムの保守方法であって、
オペコード及びオペランドを含む実行形式の制御プログラムを関連する処理ステップ群を１つのブロックとして分割する分割工程と、
この分割工程により分割したブロックに基づいて２以上の前記制御プログラムを比較する比較工程と、
この比較工程により比較した比較結果を出力する出力工程と
を備えることを特徴とする制御プログラム保守方法。
【請求項２】
前記分割工程は、
前記制御プログラムを記憶した記憶手段からこの制御プログラムをステップ毎に読み込み、
この読み込んだステップから下分岐の接点又は下分岐のコイルを示すオペコードを検出した場合は、分割する単位を判断するための分岐カウンタを加算し、上分岐の接点又は上分岐のコイルを示すオペコードを検出した場合は分岐カウンタを減算し、
前記読み込んだステップからコイル、セット命令又はストア命令を示すオペコードを検出したとき、分岐カウンタがゼロであり、かつ次のステップのオペコードが分岐命令でない場合には、このコイル、セット命令又はストア命令のステップを最終出力と判定し、
最終出力と判定したステップまでをブロックの終端として制御プログラムを分割する
ことを特徴とする請求項１記載の制御プログラム保守方法。
【請求項３】
前記比較工程は、
比較元の制御プログラムと保守対象である比較先の制御プログラムとを前記分割工程により分割したブロック及びブロック単位でステップ毎に順次照合し、
この照合により不一致となるブロック又はステップが存在すると判定した場合に、比較元及び比較先の不一致と判定したブロック又はステップの数が一致している場合は比較先の制御プログラムは変更されたと判定し、
前記照合により不一致と判定したブロック又はステップが比較先の制御プログラムにのみ存在する場合は比較先の制御プログラムに不一致と判定したブロック又はステップが追加されたと判定し、
前記照合により不一致と判定したブロック又はステップが比較元の制御プログラムにのみ存在する場合は比較元の制御プログラムから不一致と判定したブロック又はステップが削除されたと判定する
ことを特徴とする請求項１又は２記載の制御プログラム保守方法。
【請求項４】
プラントを制御する制御システムで用いられる制御プログラムの保守装置であって、
オペコード及びオペランドを含む実行形式の制御プログラムを関連する処理ステップ群を１つのブロックとして分割する分割手段と、
この分割手段により分割したブロックに基づいて２以上の前記制御プログラムを比較する比較手段と、
この比較手段により比較した比較結果を出力する出力手段と
を備えることを特徴とする制御プログラム保守装置。
【請求項５】
前記分割手段は、
前記制御プログラムを記憶した記憶手段からこの制御プログラムをステップ毎に読み込む読込機能と、
この読込機能により読み込んだステップから下分岐の接点又は下分岐のコイルを示すオペコードを検出した場合は、分割する単位を判断するための分岐カウンタを加算し、上分岐の接点又は上分岐のコイルを示すオペコードを検出した場合は分岐カウンタを減算する加算減算機能と、
前記加算減算機能により読み込んだステップからコイル、セット命令又はストア命令を示すオペコードを検出したとき、分岐カウンタがゼロであり、かつ次のステップのオペコードが分岐命令でない場合には、このコイル、セット命令又はストア命令のステップを最終出力と判定する最終出力判定機能と、
この最終出力判定機能により最終出力と判定したステップまでをブロックの終端として制御プログラムを分割するブロック分割機能と、
を有することを特徴とする請求項４記載の制御プログラム保守装置。
【請求項６】
前記比較手段は、
比較元の制御プログラムと保守対象である比較先の制御プログラムとを前記分割工程により分割したブロック及びブロック単位でステップ毎に順次照合する照合機能と、
この照合機能により不一致となるブロック又はステップが存在すると判定した場合に、比較元及び比較先の不一致と判定したブロック又はステップの数が一致している場合は比較先の制御プログラムは変更されたと判定し、
前記照合機能により不一致と判定したブロック又はステップが比較先の制御プログラムにのみ存在する場合は比較先の制御プログラムに不一致と判定したブロック又はステップが追加されたと判定し、
前記照合機能により不一致と判定したブロック又はステップが比較元の制御プログラムにのみ存在する場合は比較元の制御プログラムから不一致と判定したブロック又はステップが削除されたと判定する判定機能と
を有することを特徴とする請求項４又は５記載の制御プログラム保守装置。
【請求項７】
プラントを制御する制御システムで用いられる制御プログラムの保守プログラムであって、コンピュータに、
オペコード及びオペランドを含む実行形式の制御プログラムを関連する処理ステップ群を１つのブロックとして分割する分割手段と、
この分割手段により分割したブロックに基づいて２以上の前記制御プログラムを比較する比較手段と、
この比較手段により比較した比較結果を出力する出力手段と
として機能させることを特徴とする制御プログラム保守プログラム。
【請求項８】
前記分割手段は、
前記制御プログラムを記憶した記憶手段からこの制御プログラムをステップ毎に読み込む読込機能と、
この読込機能により読み込んだステップから下分岐の接点又は下分岐のコイルを示すオペコードを検出した場合は、分割する単位を判断するための分岐カウンタを加算し、上分岐の接点又は上分岐のコイルを示すオペコードを検出した場合は分岐カウンタを減算する加算減算機能と、
前記加算減算機能により読み込んだステップからコイル、セット命令又はストア命令を示すオペコードを検出したとき、分岐カウンタがゼロであり、かつ次のステップのオペコードが分岐命令でない場合には、このコイル、セット命令又はストア命令のステップを最終出力と判定する最終出力判定機能と、
この最終出力判定機能により最終出力と判定したステップまでをブロックの終端として制御プログラムを分割するブロック分割機能と、
を有することを特徴とする請求項７記載の制御プログラム保守プログラム。
【請求項９】
前記比較手段は、
比較元の制御プログラムと保守対象である比較先の制御プログラムとを前記分割工程により分割したブロック及びブロック単位でステップ毎に順次照合する照合機能と、
この照合機能により不一致となるブロック又はステップが存在すると判定した場合に、比較元及び比較先の不一致と判定したブロック又はステップの数が一致している場合は比較先の制御プログラムは変更されたと判定し、
前記照合機能により不一致と判定したブロック又はステップが比較先の制御プログラムにのみ存在する場合は比較先の制御プログラムに不一致と判定したブロック又はステップが追加されたと判定し、
前記照合機能により不一致と判定したブロック又はステップが比較元の制御プログラムにのみ存在する場合は比較元の制御プログラムから不一致と判定したブロック又はステップが削除されたと判定する判定機能と
を有することを特徴とする請求項７又は８記載の制御プログラム保守プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、制御プログラムの複数箇所の追加・変更・削除を検出する制御プログラム保守方法、制御プログラム保守装置及び制御プログラム保守プログラムに関する。
【背景技術】
【０００２】
プラントを制御する一般的な制御システムにおいて、制御システムの提供者はプラントを安定かつ安全に制御するための各種機器の起動、停止信号等からなる制御回路を制御プログラムとして制御システムに組み込み、制御システムをプラント操業者へ提供する。
【０００３】
しかし、制御システム提供後にプラントの操業者側で制御プログラムの改造を行った場合等、現地の制御システムに組み込まれている制御プログラム（以下、現地制御プログラムという。）と提供者が保有する改造元となる制御プログラム（以下、改造元制御プログラムという。）とが一致しない場合が生じる。このような場合、改造後の制御プログラムを制御システムへ反映させると、プラント操業者側が改造を行った制御プログラムの内容が消去されることとなる。
【０００４】
このようなことを防止するため、提供者は制御プログラムを改造する前に、現地制御プログラムと改造元制御プログラムとの比較を行い、不整合がないことを確認後、制御プログラムを改造する必要がある。また両制御プログラムに不整合がある場合には、提供者はその不整合箇所を特定した後、操業者側が行った変更点を加味した上で改造元の制御プログラムの改造を行い、操業者の制御システムへ改造後の制御プログラムを反映させる必要がある。
【０００５】
そこで、従来の技術では、制御システムに組み込まれた制御プログラムのレビジョンを管理することにより、現地制御プログラムと改造元制御プログラムとの間に不整合があるか否かを判定するソフトウェア変更保護装置が提案されている（例えば、特許文献１参照。）。
【０００６】
また、制御プログラムのオブジェクト形式の実行コードや定数データからユーザが認識できるレベルのデータに逆変換し、逆変換された制御プログラムの変更箇所を比較する制御プログラム生成装置が提案されている（例えば、特許文献２参照。）。
【０００７】
さらに、ソフトウェア生産物の変更の際、ソフトウェア生産物を解析して、データの同義関係を検出し、検出した同義データとソフトウェア生産物の関係を表示したマトリックスから変更対象を特定することで、同一データに関する変更箇所の調査作業を効率化するソフトウェア方法が提案されている（例えば、特許文献３参照。）。
【特許文献１】特開２０００−１９４５４０号公報
【特許文献２】特開２００４−３８８４９号公報
【特許文献３】特開平８−９５７７４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかし、特許文献１に記載の装置では、制御プログラムのレビジョンを管理することにより制御プログラムに不整合があるか否かのみを判定するので、制御プログラムが改造された場合、制御プログラムの不整合箇所を特定することはできない。そのため、制御プログラムに不整合があると判定された場合、制御プログラムの提供者は手作業で現地制御プログラムと改造元制御プログラムとの比較を行うことにより不整合箇所を特定する必要があり、これには多大な労力を要していた。
【０００９】
また、特許文献２に記載の装置では、オブジェクト形式の実行コードや定数データから逆変換された制御プログラムを先頭から１ステップづつ比較して不整合箇所を特定するので、不整合箇所が見つかるとその不整合箇所以降全てのステップが不整合と認識される場合がある。このような場合、制御プログラムの提供者はその複数の不整合箇所を特定するのに多大な労力を要していた。
【００１０】
さらに特許文献３に記載の方法においても、同一データに関する変更箇所の調査では、制御プログラム全体の複数の不整合箇所を特定することはできず、上記同様に不整合箇所を特定するのに多大な労力を要していた。
【００１１】
本発明は、上記に鑑みてなされたものであり、制御プログラムの複数箇所の追加・変更・削除を検出することによって、制御プログラムの改造作業効率を向上することができる制御プログラム保守方法、制御プログラム保守装置及び制御プログラム保守プログラムを提供することを課題とする。
【課題を解決するための手段】
【００１２】
上記課題を解決するため、本発明の第１の特徴は、オペコード及びオペランドを含む実行形式の制御プログラムを関連する処理ステップ群を１つのブロックとして分割する分割工程と、この分割工程により分割したブロックに基づいて２以上の前記制御プログラムを比較する比較工程と、この比較工程により比較した比較結果を出力する出力工程とを備えることを特徴とする制御プログラム保守方法を提供することを要旨とする。
【００１３】
上記課題を解決するため、本発明の第２の特徴は、分割工程は、制御プログラムを記憶した記憶手段からこの制御プログラムをステップ毎に読み込み、この読み込んだステップから下分岐の接点又は下分岐のコイルを示すオペコードを検出した場合は、分割する単位を判断するための分岐カウンタを加算し、上分岐の接点又は上分岐のコイルを示すオペコードを検出した場合は分岐カウンタを減算し、読み込んだステップからコイル、セット命令又はストア命令を示すオペコードを検出したとき、分岐カウンタがゼロであり、かつ次のステップのオペコードが分岐命令でない場合には、このコイル、セット命令又はストア命令のステップを最終出力と判定し、最終出力と判定したステップまでをブロックの終端として制御プログラムを分割することを特徴とする請求項１記載の制御プログラム保守方法を提供することを要旨とする。
【００１４】
上記課題を解決するため、本発明の第３の特徴は、比較工程は、比較元の制御プログラムと保守対象である比較先の制御プログラムとを分割工程により分割したブロック及びブロック単位でステップ毎に順次照合し、この照合により不一致となるブロック又はステップが存在すると判定した場合に、比較元及び比較先の不一致と判定したブロック又はステップの数が一致している場合は比較先の制御プログラムは変更されたと判定し、照合により不一致と判定したブロック又はステップが比較先の制御プログラムにのみ存在する場合は比較先の制御プログラムに不一致と判定したブロック又はステップが追加されたと判定し、照合により不一致と判定したブロック又はステップが比較元の制御プログラムにのみ存在する場合は比較元の制御プログラムから不一致と判定したブロック又はステップが削除されたと判定することを特徴とする請求項１又は２記載の制御プログラム保守方法を提供することを要旨とする。
【発明の効果】
【００１５】
本発明によれば、制御プログラムの提供者は、現地制御プログラムと改造元制御プログラムとの複数箇所の追加・変更・削除を把握できるので、制御プログラムの改造作業効率を向上することができる。
【発明を実施するための最良の形態】
【００１６】
以下、本発明の実施の形態について図面を参照して説明する。
【００１７】
本実施形態では、オペコード及びオペランドを含む実行形式の制御プログラムを関連するステップ群を１つのブロックとして分割して、このブロックに基づいて現地制御プログラムと改造元制御プログラムとを比較することにより、複数箇所の追加・変更・削除を把握できる制御プログラム保守方法を実現するための制御プログラム保守装置を例に挙げる。
【００１８】
図１は、本発明に係る制御プログラム保守装置の一実施形態を示したブロック図である。
【００１９】
図１において、制御プログラム保守装置１０は通信回線３０を介して制御システム２０と接続され、制御プログラムの変更、追加又は削除等を検出して、制御プログラムの保守を実行する。制御プログラム保守装置１０内のプロセッサ１０１、メインメモリ１０３は、バス１０５を介して相互に接続されており、このバス１０５にはまた、Ｉ／Ｏバス１０７も接続されている。
【００２０】
プロセッサ１０１は、その機能上、分割手段１０１ａ、比較手段１０１ｂ及び出力手段１０１ｃ等を構成するもので、メインメモリ１０３にロードされた制御プログラム保守プログラム等のプログラムに従って各種の処理を実行する。
【００２１】
分割手段１０１ａは、オペコード及びオペランドを含む実行形式の制御プログラムをメインメモリ１０３から読み込み、関連するステップ群を１ブロックとして分割する。
【００２２】
比較手段１０１ｂは、分割手段１０１ａにより分割したブロックに基づいて２以上の制御プログラムを比較する。
【００２３】
出力手段１０１ｃは、比較手段１０１ｃにより比較した比較結果を出力する。
【００２４】
また、記憶手段であるメインメモリ１０３には、制御プログラムなどプロセッサ１０１が各種の処理を実行する上において必要なデータなども適宜記憶される。
【００２５】
Ｉ／Ｏバス１０７には、入出力コントローラを介して、記憶装置１１５、入力装置１１７、表示装置１１９、ネットワークＩ／Ｆ１２１が接続されている。
【００２６】
記憶装置１１５は、半導体記憶装置や磁気ディスク装置であって、オペレーティングシステムなどのプログラムの他に、制御プログラム保守プログラムが記憶されている。
【００２７】
入力装置１１７は、操作者が各種の操作を入力するキーボード、マウスなどの入力デバイスにより構成されており、例えば操作者の押しボタン操作により制御プログラムの比較を実行する入力信号を作成し、この入力信号を入出力コントローラ１１１、Ｉ／Ｏバス１０７及びメモリバス１０５を介してプロセッサ１０１に送信する。
【００２８】
表示装置１１９は、ＣＲＴ（Cathode Ray Tube）ディスプレイや液晶ディスプレイなどであり、プロセッサ１０１からメモリバス１０５、Ｉ／Ｏバス１０７、入出力コントローラ１１１を介して制御プログラムの比較結果等の出力信号を受信し表示する装置である。
【００２９】
ネットワークＩ／Ｆ１２１はＬＡＮカードやシリアルポートなどの通信装置であり、このネットワークＩ／Ｆ１２１を介して制御プログラム保守装置１０を制御システム２０に接続することで、制御システム２０内の制御プログラムを制御プログラム保守装置１０へダウンロードし、又は制御プログラム保守装置１０内の制御プログラムを制御システム２０へアップロードすることができる。
【００３０】
本実施形態では、プロセッサ１０１は記憶装置１１５内に記憶された制御プログラム保守プログラムをメインメモリ１０３へロードし、制御プログラム保守プログラムを起動し、プロセッサ１０１は図３に示すような入力画面を表示する。利用者は、現地制御プログラムと改造元制御プログラムが指定するため、図３に示す入力画面からシステム名２０１、ステーション名２０２及びコントローラ名２０３等を設定する。そして利用者が比較ボタン２０４を押すことにより、入力装置１１７は、指定された制御プログラムの比較処理の実行命令を受け付け、プロセッサ１０１へ比較実行命令を送信する。プロセッサ１０１は、入力装置１１７から比較実行命令を受信すると、制御プログラム保守プログラムに従って、図２に示す各処理を実行する。これによりオペコード及びオペランドを含む実行形式の制御プログラムを関連するステップ群を１つのブロックとして分割する分割手段と、この分割手段により分割したブロックに基づいて現地制御プログラムと改造元制御プログラムとを比較する比較手段を実現する。
【００３１】
次に、図２及び図４の各フローチャートに従って、本発明にかかる制御プログラム保守装置の一実施形態の処理手順について説明する。
【００３２】
本実施形態では、図５、図６に示す改造元制御プログラムのソースコード及びＵＮＩＡＳＭコードと、図７、図８に示す現地制御プログラムのソースコード及びＵＮＩＡＳＭコードを分割、比較する制御プログラム保守装置について説明する。
【００３３】
まず、プロセッサ１０１は、記憶装置１１５に記憶されている比較元となる改造元制御プログラムと、比較先となる現地制御プログラムをネットワークＩ／Ｆ１２１を経由して読み込み、メインメモリ１０３へ記憶する（図２、処理Ｓ１０１）。
【００３４】
次に、プロセッサ１０１の分割手段１０１ａは、図３の入力画面で指定された比較元となる改造元制御プログラムと比較先となる現地制御プログラムの分割を行う（処理Ｓ１０２、Ｓ１０３）。ここで、各制御プログラムの分割は制御プログラムを構成する処理ステップの中で関連する処理ステップ群を１つのブロックとして分割する。具体的には、オペコード及びオペランドを含む実行形式であるＵＮＩＡＳＭコードを上からステップごとに読み込み、読み込んだステップが最終出力のコイル、ストア命令、セット命令であるか否かを判定し、最終出力と判定した場合は、そのコイル、セット命令又はストア命令のステップまでをブロックの終端として制御プログラムを分割する。
【００３５】
≪分割手段１０１ａによる分割処理≫
図４に、分割手段１０１ａが上記処理Ｓ１０２、Ｓ１０３で行う分割の処理手順を示す。
【００３６】
まず、分割手段１０１ａは、分岐カウンタをイニシャライズした後（処理Ｓ２０１）、制御プログラムの先頭のステップをメインメモリ１０３から読み込む（処理Ｓ２０３）。ここで、分岐カウンタとは制御プログラムを構成する処理ステップの中で関連する処理ステップ群を１つのブロックとして分割する際、分割するステップの位置を判断するために用いる変数を指す。
【００３７】
次に分割手段１０１ａは、読み込んだステップから下分岐の接点又は下分岐のコイルを示すオペコードを検知した場合は分岐カウンタのカウント値を加算し（処理Ｓ２０５、Ｓ２０７）、上分岐の接点又は上分岐のコイルを示すオペコードを検知した場合は分岐カウンタのカウント値を減算する（処理Ｓ２０９、Ｓ２１１）。
【００３８】
そして分割手段１０１ａは、読み込んだステップからコイル、セット命令又はストア命令を示すオペコードを検出したとき（処理Ｓ２１３）に、分岐カウンタのカウント値がゼロであり（処理Ｓ２１５）、かつ次のステップのオペコードが分岐命令でない場合（処理Ｓ２１７）には、検知したコイル、セット命令又はストア命令のステップを最終出力と判定する。そして、最終出力と判定したコイル、セット命令又はストア命令のステップまでをブロックの終端として制御プログラムを分割し、分割するステップ情報をメインメモリ１０３へ記憶する（処理Ｓ２１９）。
【００３９】
分割手段１０１ａは、制御プログラムの全ステップについて上記処理Ｓ２０３乃至Ｓ２１９の処理を行う（処理Ｓ２２１）。これにより、制御プログラムを関連するステップ群を１つのブロックとして分割することができる。
【００４０】
次に、具体的な分割手段１０１ａの例を図５に示す改造元制御プログラムソースコード及び図６に示す改造元ＵＮＩＡＳＭコードを用いて説明する。
【００４１】
図６では、ステップＮＯ．を示す項３０１、オペコードを示す項３０３、オペランドを示す項３０５のデータが１対１に対応して関連付けられており、分割手段１０１ａは、ステップＮＯ．の昇順にこれらを読み込む。
【００４２】
図６において、まず分割手段１０１ａは、分岐カウンタをイニシャライズした後（処理Ｓ２０１）、先頭ステップであるステップＮＯ．０をメインメモリ１０３から読み込む（処理Ｓ２０３）。そして、読み込んだステップから「ＥＮＴＲＹ」を検出するが、これは接点、コイル、セット命令、ストア命令ではないので（処理Ｓ２１３）、分岐カウンタを初期値の“０”の状態で何も操作せず、次のステップＮＯ．１をメインメモリ１０３から読み込む。
【００４３】
次に分割手段１０１ａは、読み込んだステップＮＯ．１から「ＮＯＰ」を検出するが、ステップＮＯ．０と同様に接点、コイル、セット命令、ストア命令を示すオペコードではないと判定し（処理Ｓ２１３）、分岐カウンタのカウント値を初期値の“０”の状態で何も操作せず、次のステップＮＯ．２を読み込む。
【００４４】
分割手段１０１ａは、ステップＮＯ．２及びＮＯ．３において、接点を示すオペコード「ＬＤＯＣ」、「ＯＣ」を検出するが、これらは分岐のない接点を示しているので、同様に分岐カウンタのカウント値は初期値の“０”の状態で何も操作せず、次のステップＮＯ．４を読み込む（処理Ｓ２１３）。
【００４５】
次に、分割手段１０１ａは、ステップＮＯ．４において下分岐のコイルを示すオペコード「ＣＬ＿Ｂ」を検出するので、分岐カウンタのカウント値を加算し“１”とする（処理Ｓ２０７）。そうすると、分割手段１０１ａは、分岐カウンタのカウント値が“０”ではないので、このコイルを最終出力とは判断せず、次のステップＮＯ．５を読み込む（処理Ｓ２１５）。
【００４６】
ステップＮＯ．５では、上下に分岐のある接点を示すオペコード「ＯＣ＿Ｍ」を検出するので、分岐カウンタのカウント値を操作することなく、“１”の状態で、次のステップＮＯ．６を読み込む（処理Ｓ２１３）。
【００４７】
ステップＮＯ．６では、分岐のないコイルを示すオペコード「ＣＬ」を検出するので、分岐カウンタのカウント値は“１”の状態のまま操作せず、また分岐カウンタのカウント値が“０”ではないので、このコイルを最終出力とは判断せず、次のステップＮＯ．６を読み込む（処理Ｓ２１５）。
【００４８】
ステップＮＯ．７では、上分岐のコイルを示すオペコード「ＣＬ＿Ｅ」を検出するので、分岐カウンタのカウント値を“１”減算すると“０”となる（処理Ｓ２１１、処理Ｓ２１５）。また、次の処理ステップが分岐命令ではないので（処理Ｓ２１７）、分割手段１０１ａは、このコイルを最終出力と判定し、ステップＮＯ．０乃至７のステップを第１ブロックの終端として制御プログラムを分割し、メインメモリ１０３へ分割するステップ情報を記憶する（処理Ｓ２１９）。
【００４９】
次にステップＮＯ．１３以降のＵＮＩＡＳＭコードに着目する。
【００５０】
まず分割手段１０１ａは、ステップＮＯ．１３において、分岐のないロード命令（図５ではＬＤで示す。）を示すオペコード「ＬＤ＿ＲＥＡＬ」を検出するので、分岐カウンタのカウント値は初期値の“０”の状態で操作せず、次のステップＮＯ．１４を読み込む（処理Ｓ２１３）。ステップＮＯ．１５乃至１７においても同様に分岐がないオペコードを検出するので、分岐カウンタのカウント値を操作することなく次のステップＮＯ．１８を読み込む（処理Ｓ２１３）。
【００５１】
ステップＮＯ．１８ではストアを示すオペコード「ＳＴ＿ＲＥＡＬ」を検出するが、次のステップＮＯ．１９を読み込み、分岐命令を示すオペコード「ＷＲ＿Ｅ」を検出するので、分割手段１０１ａはステップＮＯ．１８が最終出力ではないと判定する（処理Ｓ２１７）。
【００５２】
さらに順にステップを読み込むと、ステップＮＯ．２２でストアを示すオペコード「ＳＴ＿ＲＥＡＬ」を検出し、そのときの分岐カウンタのカウント値が“０”であり（処理Ｓ２１５）、かつ次ステップであるステップＮＯ．２３が分岐命令を示すオペコードではない（処理Ｓ２１７）ので、分割手段１０１ａは、このストアを最終出力と判定する。そして、ステップＮＯ．１３乃至２２のステップを第４ブロックの終端として制御プログラムを分割し、メインメモリ１０３へ分割するステップ情報を記憶する（処理Ｓ２２１）。
【００５３】
以上のように制御プログラムを分割することにより、図５の破線に示すような関連するステップ群を１つのブロックとして分割することができ、これにより後述の比較手段による制御プログラムとの複数箇所の追加・変更・削除を把握できることとなる。
【００５４】
さらに、分割手段１０１ａは、図７に示す現地制御プログラムソースコード及び図８に示す現地ＵＮＩＡＳＭコードについても、上記と同様に関連する処理ステップ群を１つのブロックとして分割する（処理Ｓ１０３）。
【００５５】
≪比較手段１０１ｂによる比較処理≫
分割手段１０１ａによる分割処理が終了すると、プロセッサ１０１の比較手段１０１ｂは、比較元の制御プログラムと比較先の制御プログラムを分割手段１０１ａにより分割した全てのブロックについて両プログラムのブロック同士を照合することにより比較する（処理Ｓ１０５、Ｓ１０７）。
【００５６】
この照合により不一致となるブロックが存在すると判定した場合は、比較先制御プログラムが変更されたのか、追加されたのか、又は削除されたのかを判定する（処理Ｓ１１１）。
【００５７】
ここではまず、図９乃至図１１を用いて変更、追加及び削除の判定ルールについて説明する。
【００５８】
図９は、比較先の制御プログラムが変更されている場合の一例を示す。
【００５９】
比較手段１０１ｂは、上記照合により不一致となるブロックが存在すると判定した場合に、比較元と比較先の制御プログラムにおける不一致と判定したブロックの数が同一である場合には、比較先の制御プログラムは変更されていると判定する。
【００６０】
図９の例では、比較元と比較先の制御プログラムの不一致となるブロック数が互いに２ブロックであるため、比較手段１０１ｂは、比較先の制御プログラムが変更されていると判定する。
【００６１】
図１０は、比較先の制御プログラムが追加されている場合の一例を示す。
【００６２】
比較手段１０１ｂは、上記照合により不一致と判定したブロックが比較先の制御プログラムにのみに存在する場合は、比較先の制御プログラムに不一致と判定したブロックが追加されたと判定する。
【００６３】
図１０の例では、ブロックＮＯ．３及びＮＯ．４の不一致箇所が比較先の制御プログラムにのみ存在するため、比較手段１０１ｂは、比較先の制御プログラムにブロックＮＯ．３及びＮＯ．４が追加されていると判定する。
【００６４】
図１１は、比較先の制御プログラムが削除されている場合の一例を示す。
【００６５】
比較手段１０１ｂは、上記照合により不一致と判定したブロックが比較元の制御プログラムにのみに存在する場合は比較先の制御プログラムから不一致と判定したブロックが削除されたと判定する。
【００６６】
巣１１の例では、ブロックＮＯ．３及びＮＯ．４の不一致箇所が比較元の制御プログラムにのみに存在するため、比較手段１０１ｂは、比較元の制御プログラムからブロックＮＯ．３及びＮＯ．４が削除されていると判定する。
【００６７】
次に比較手段１０１ｂは、不一致となるブロックが存在すると判定した場合、変更されていると判定したブロック内の全てのステップを照合する。（処理Ｓ１１３、Ｓ１１５）。
【００６８】
この照合により不一致となるステップが存在すると判定した場合は、比較先制御プログラムが変更されたのか、追加されたのか、又は削除されたのかを判定する（処理Ｓ１１７）。ここで、変更、追加、削除の判定方法については、上記ブロック単位の判定と同様であるため、省略する。
【００６９】
なお、図９乃至図１１に示した例では、変更、追加及び削除の例を示しているが、例えば変更と追加のような組み合わせの場合であっても、同様に判定が可能である。
【００７０】
次に、分割手段１０１ａが処理Ｓ１０２、Ｓ１０３において分割した図６に示す改造元ＵＮＩＡＳＭコードと、図８に示す現地ＵＮＩＡＳＭコードを比較した場合について説明する。
【００７１】
プロセッサ１０１の比較手段１０１ｂは、図６に示す改造元ＵＮＩＡＳＭコードと、図８に示す現地ＵＮＩＡＳＭコードを分割手段１０１ａにより分割した全てのブロックについて両プログラムのブロック同士を照合することにより比較する（処理Ｓ１０５、Ｓ１０７）。
【００７２】
まず、比較手段１０１ｂは、分割手段１０１ａによって分割した第１ブロック同士を比較する。比較の結果、改造元ＵＮＩＡＳＭコードのステップＮＯ．３のオペコードは、「ＯＣ」であるのに対し、現地ＵＮＩＡＳＭコードのステップＮＯ．３のオペコードは、「ＣＣ」であるので、まず第１ブロック同士は不一致であると判定する。そこで、比較手段１０１ｂは、改造元ＵＮＩＡＳＭコードの第１ブロックと一致するブロックを現地ＵＮＩＡＳＭコードの中から検索する。しかし、第１ブロックと一致するブロックを検出できないので、第１ブロックは不一致であると判定する。
【００７３】
次に比較手段１０１ｂは、第２ブロックの判定を行う。改造元ＵＮＩＡＳＭコードのステップＮＯ．８のオペコードは、「ＯＣ＿Ｅ」であるのに対し、現地ＵＮＩＡＳＭコードのステップＮＯ．７のオペコードは、「ＬＤＯＣ」であるので、第２ブロック同士も不一致であると判定する。そこで、比較手段１０１ｂは、改造元ＵＮＩＡＳＭコードの第２ブロックと一致するブロックを現地ＵＮＩＡＳＭコードの中から検索する。しかし、第２ブロックと一致するブロックを検出できないので、第２ブロックは不一致であると判定する。
【００７４】
次に比較手段１０１ｂは、第３ブロックの判定を行う。改造元ＵＮＩＡＳＭコードのステップＮＯ．１１のオペコードは、「ＬＤＯＣ」であり、現地ＵＮＩＡＳＭコードのステップＮＯ．１０のオペコードも、「ＬＤＯＣ」で一致する。しかし、改造元ＵＮＩＡＳＭコードのステップＮＯ．１１のオペランドは、「％ＭＸ０．０．１０」であるのに対し、現地ＵＮＩＡＳＭコードのステップＮＯ．１０のオペランドは、「％ＭＸ０．０．１２」であるので、第３ブロック同士も不一致であると判定する。そこで、比較手段１０１ｂは、改造元ＵＮＩＡＳＭコードの第３ブロックと一致するブロックを現地ＵＮＩＡＳＭコードの中から検索する。そうすると、現地ＵＮＩＡＳＭコードの第４ブロックにオペコード、オペランド共に一致するブロックを検出できるので、改造元ＵＮＩＡＳＭコードの第３ブロックと現地ＵＮＩＡＳＭコードの第４ブロックは一致すると判定する。
【００７５】
ここで、上記で不一致と判定した改造元ＵＮＩＡＳＭコードと現地ＵＮＩＡＳＭコードの第１ブロック及び第２ブロックについて、不一致と判定したブロックの数が一致しているので、比較手段１０１ｂは、現地制御プログラムの第１ブロック及び第２ブロックは変更されたと判定する。そして、現地ＵＮＩＡＳＭコードの第３ブロックについては、比較先である現地ＵＮＩＡＳＭコードにのみ存在するので、比較先である現地ＵＮＩＡＳＭコードに第３ブロックが追加されたと判定する（処理Ｓ１１１）。
【００７６】
次に比較手段１０１ｂは、上記により改造元ＵＮＩＡＳＭコードの第３ブロックと現地ＵＮＩＡＳＭコードの第４ブロックは一致すると判定したので、その次ブロックである改造元ＵＮＩＡＳＭコードの第４ブロックと現地ＵＮＩＡＳＭコードの第５ブロックの比較を行う。そうすると、改造元ＵＮＩＡＳＭコードのステップＮＯ．２０のオペコードは、「ＬＤ＿ＲＥＡＬ」であるのに対し、現地ＵＮＩＡＳＭコードのステップＮＯ．２１のオペコードは、「ＬＤＩ＿Ｌ」であるので、これらのブロック同士は不一致であると判定する。
【００７７】
次に比較手段１０１ｂは、第５ブロックの判定を行う。しかし現地ＵＮＩＡＳＭコード中に第５ブロックと一致するブロックは存在しないので、第５ブロックも不一致であると判定する。
【００７８】
ここで、上記で不一致と判定した改造元ＵＮＩＡＳＭコード第４ブロックと現地ＵＮＩＡＳＭコードの第５ブロックについて、不一致と判定したブロックの数が一致しているので、現地制御プログラムは変更されたと判定する。そして、改造元ＵＮＩＡＳＭコードの第５ブロックについては、比較元である改造元ＵＮＩＡＳＭコードにのみ存在するので、比較先である現地ＵＮＩＡＳＭコードから改造元ＵＮＩＡＳＭコード第５ブロックに相当するブロックが削除されたと判定する。
【００７９】
上記により、比較手段１０１ｂは、改造元ＵＮＩＡＳＭコードと現地ＵＮＩＡＳＭコードの第１ブロック及び第２ブロックについて、変更されたと判定し、改造元ＵＮＩＡＳＭコードの第３ブロックと現地ＵＮＩＡＳＭコードの第４ブロックは一致すると判定し、改造元ＵＮＩＡＳＭコード第４ブロックと現地ＵＮＩＡＳＭコードの第５ブロックについて、変更されたと判定し、比較先である現地ＵＮＩＡＳＭコードから改造元ＵＮＩＡＳＭコード第５ブロックに相当するブロックが削除されたと判定する。
【００８０】
次に比較手段１０１ｂは、不一致となるブロックが存在すると判定したので、そのうち変更と判定したブロック内の全てのステップを照合する（処理Ｓ１１３、Ｓ１１５）。
【００８１】
まず第１ブロックについて、比較手段１０１ｂは、ステップＮＯ．０及びＮＯ．２は一致すると判定する。次に、改造元ＵＮＩＡＳＭコードのステップＮＯ．３のオペコードは、「ＯＣ」であるのに対し、現地ＵＮＩＡＳＭコードのステップＮＯ．３のオペコードは、「ＣＣ」であるので、ステップＮＯ．３同士のオペコードは不一致であると判定する。
【００８２】
そこで、比較手段１０１ｂは、現地ＵＮＩＡＳＭコードの第１ブロックの中からステップＮＯ．３のオペコード、オペランド共に一致するステップを検索する。しかし、ステップＮＯ．３と一致するステップを検出できないので、ステップＮＯ．３は不一致であると判定する。
【００８３】
次に、比較手段１０１ｂは、ステップＮＯ．４の判定を行う。改造元ＵＮＩＡＳＭコードのステップＮＯ．４のオペコード、現地ＵＮＩＡＳＭコードのステップＮＯ．４のオペコードは、共に「ＣＬ＿Ｂ」で一致し、オペランドも一致するので、ＮＯ．４ステップ同士は一致すると判定する。
【００８４】
ここで、上記で不一致と判定した改造元ＵＮＩＡＳＭコードと現地ＵＮＩＡＳＭコードのステップＮＯ．３について、不一致と判定したステップの数が一致しているので、現地制御プログラムは変更されたと判定する。
【００８５】
次に、比較手段１０１ｂは、ステップＮＯ．５の判定を行う。改造元ＵＮＩＡＳＭコードのステップＮＯ．５のオペコードは、「ＯＣ＿Ｍ」であるのに対し、現地ＵＮＩＡＳＭコードのステップＮＯ．５のオペコードは、「ＯＣ＿Ｅ」であるので、ステップＮＯ．５同士は不一致であると判定する。
【００８６】
そこで、比較手段１０１ｂは、現地ＵＮＩＡＳＭコードの第１ブロックの中からステップＮＯ．５のオペコード、オペランド共に一致するステップを検索する。しかし、ステップＮＯ．５と一致するステップを検出できないので、ステップＮＯ．５は不一致であると判定する。
【００８７】
次に、比較手段１０１ｂは、ステップＮＯ．６の判定を行う。改造元ＵＮＩＡＳＭコードのステップＮＯ．６のオペコード、現地ＵＮＩＡＳＭコードのステップＮＯ．６のオペコードは、共に「ＣＬ＿Ｅ」で一致し、オペランドも一致するので、ＮＯ．６ステップ同士は一致すると判定する。
【００８８】
ここで、上記で不一致と判定した改造元ＵＮＩＡＳＭコードと現地ＵＮＩＡＳＭコードのステップＮＯ．５について、不一致と判定したステップの数が一致しているので、現地制御プログラムは変更されたと判定する。
【００８９】
次に比較手段１０１ｂは、ステップＮＯ．７の判定を行う。しかし現地ＵＮＩＡＳＭコード中にステップＮＯ．７と一致するステップは存在しないので、ステップＮＯ．７は不一致であると判定する。
【００９０】
上記により、比較手段１０１ｂは、改造元ＵＮＩＡＳＭコードと現地ＵＮＩＡＳＭコードの第１ブロックについて、ステップＮＯ．０乃至ＮＯ．２は一致すると判定し、ステップＮＯ．３は変更されたと判定し、ステップＮＯ．４は一致すると判定し、ステップＮＯ．５は変更されたと判定し、ステップＮＯ．６は一致すると判定し、改造元ＵＮＩＡＳＭコード第１ブロックのステップＮＯ．７は削除されたと判定する。
【００９１】
このように、比較手段１０１ｂは、順次変更されていると判定した改造元ＵＮＩＡＳＭコードの第１、第２、第４ブロックについて、ブロック単位で全ステップを照合し、現地ＵＮＩＡＳＭコードが変更されたのか、追加されたのか、又は削除されたのかを判定する（処理Ｓ１１７、Ｓ１１９）。
【００９２】
≪出力手段１０１ｃによる出力処理≫
次に出力手段１０１ｃは、上記比較手段１０１ｂにより比較した比較結果を出力する。例えば、表示装置１１９に図１２、又は図１３のような比較結果を出力することができる（処理Ｓ１２１）。
【００９３】
図１２は、比較元の制御プログラムと保守対象である比較先の制御プログラムとを分割手段により分割したブロックを照合した出力結果の例を示している。
【００９４】
図１２には、分割したブロックに相当する図１２中の「プログラム構成単位ＮＯ．」４０１毎に比較先制御プログラムが変更されたのか、追加されたのか、又は削除されたのかを判定した比較結果である「結果」４０５が出力されている。例えば、「プログラム構成単位ＮＯ．」４０１の値が「２０４８」に対応する「結果」４０５の内容は「変更」であるので、出力手段１０１ｃは、比較手段１０１ｂが「第２０４８ブロックは変更されている」と判定したことを表示している。
【００９５】
さらに、利用者によって、図１２中「詳細一括」４１１ボタンの押ボタン操作されることにより、図１３のような詳細表示することもできる。
【００９６】
図１３は、比較元の制御プログラムと保守対象である比較先の制御プログラムとを分割手段により分割したブロック単位で処理ステップ毎に照合した出力結果の一例を示している。
【００９７】
図１３中では、出力手段１０１ｃは、「データファイル名」４０３単位で処理ステップ毎に照合した出力結果の例を表示領域５０１に表示している。ここで、「データファイル名」４０３は、ブロックに相当する「プログラム構成単位ＮＯ．」４０１と１対１に関連付けられている。
【００９８】
表示領域５０１では、データファイル名「ＭＳ０００」のブロックについて、ステップＮＯ．９６とステップＮＯ．９７の結果が「Ｃｈａｎｇｅｄ」で、変更内容が「Ｉｎｓｔｒｕｃｔｉｏｎ，Ａｄｄｒｅｓｓ」であるので、出力手段１０１ｃは、比較手段１０１ｂがデータファイル「ＭＳ０００」に相当する第２０４８ブロックについて、「ステップＮＯ．９６とステップＮＯ．９７のオペコード（図中Ｉｎｓｔｒｕｃｔｉｏｎに相当する。）と、オペランド（図中Ａｄｄｒｅｓｓに相当する。）が変更されている」と判定したことを表示している。
【００９９】
以上のように、オペコード及びオペランドを含む実行形式の制御プログラムを関連するステップ群を１つのブロックとして分割して、このブロックに基づいて現地制御プログラムと改造元制御プログラムとを比較することにより、現地制御プログラムと改造元制御プログラムとの複数箇所の追加・変更・削除を検出できる。これにより利用者は制御プログラムの改造作業効率を向上することができる効果を得ることができる。
【０１００】
なお、本発明にかかる制御プログラム保守方法、制御プログラム保守装置、及び制御プログラム保守プログラムは、オペコード及びオペランドを含む実行形式のコードを用いて制御プログラムの分割、比較を行うので、ソースプログラムがラダー図、シーケンシャル・ファンクション・チャート（ＳＦＣ）などの多種多様なプログラム言語で作成された制御プログラムであっても対応することができる。
【図面の簡単な説明】
【０１０１】
【図１】本発明にかかる制御プログラム保守装置の一実施形態を示すブロック図。
【図２】本発明にかかる制御プログラム保守装置の一実施形態の処理手順を示すフローチャート。
【図３】本発明にかかる制御プログラム保守装置の一実施形態の入力画面例。
【図４】本発明にかかる制御プログラム保守装置における分割手段の一実施形態の処理手順を示すフローチャート。
【図５】複数の不一致箇所を検出する改造元制御プログラムソースコードの一例を示す説明図。
【図６】複数の不一致箇所を検出する改造元ＵＮＩＳＡＭコードの一例を示す説明図。
【図７】複数の不一致箇所を検出する現地制御プログラムソースコードの一例を示す説明図。
【図８】複数の不一致箇所を検出する現地ＵＮＩＳＡＭコードの一例を示す説明図。
【図９】本発明にかかる一実施形態の比較手段で実行する変更の一例を示す説明図。
【図１０】本発明にかかる一実施形態の比較手段で実行する追加の一例を示す説明図。
【図１１】本発明にかかる一実施形態の比較手段で実行する削除の一例を示す説明図。
【図１２】本発明にかかる一実施形態の出力手段がブロックを照合した結果を出力した出力結果の一例を示す説明図。
【図１３】本発明にかかる一実施形態の出力手段がブロック単位で処理ステップを照合した結果を出力した出力結果の一例を示す説明図。
【符号の説明】
【０１０２】
１０…制御プログラム保守装置
２０…制御システム
１０１…プロセッサ
１０１ａ…分割手段
１０１ｂ…比較手段
１０１ｃ…出力手段
１０３…メインメモリ
１１５…記憶装置
１１７…入力装置
１１９…表示装置
１２１…ネットワークＩ／Ｆ
【図１】
2008003725.tif 000003
【図２】
2008003725.tif 000004
【図３】
2008003725.tif 000005
【図４】
2008003725.tif 000006
【図５】
2008003725.tif 000007
【図６】
2008003725.tif 000008
【図７】
2008003725.tif 000009
【図８】
2008003725.tif 000010
【図９】
2008003725.tif 000011
【図１０】
2008003725.tif 000012
【図１１】
2008003725.tif 000013
【図１２】
2008003725.tif 000014
【図１３】
2008003725.tif 000015