(57)【特許請求の範囲】
【請求項１】
コンピュータを、ラダー言語によって記述された複数のプログラム部品を組み合わせて機器制御プログラムとしてのラダープログラムを作成する手段と、
当該ラダープログラムの接点や回路を組み替えることを目的としたマクロ処理言語をプログラム部品に記述する手段と、
マクロ記述を含むプログラム部品にマクロ処理を実行し、特定のアプリケーション専用プログラム部品へと変形させるマクロ処理手段として機能させるためのプログラムであって、
前記マクロ処理は、プログラム部品に対して入力される条件にしたがって、プログラム部品に含まれる回路を使用する回路と使用しない回路に選別するものであり、特定のアプリケーション専用のプログラム部品に変形する場合には前記使用しない回路は削除すること、を特徴とするプログラム。
【請求項２】
マクロ処理手段によって実行されたマクロ処理を、ラダープログラムのコメントとして記述する手段としてさらに機能させることを特徴とする請求項１に記載のプログラム。
【請求項３】
マクロ処理実行によりプログラム部品が変形されたラダープログラムに対し、当該マクロ処理によってプログラム部品が変形されたことを表すコメントをラダープログラム内に自動挿入する手段と、
当該コメントとしてプログラム部品における変形箇所のマクロ処理実行前の記述部分を特定する識別子情報を記述する手段と、
当該識別子によって、マクロ処理実行後のラダープログラムから、変形されたプログラム部品のマクロ処理実行前の記述を紐付けする手段としてさらに機能させるための、請求項１に記載のプログラム。
【請求項４】
マクロ処理実行前後のラダープログラムの差分を解析して共通部位を特定する手段と、
マクロ処理実行前のプログラム部品と、マクロ処理実行後に作成される特定アプリケーション専用プログラム部品における共通部位の紐付けを実行する手段としてさらに機能させるための、請求項３に記載のプログラム。
【請求項５】
マクロ処理実行前後のラダープログラムの差分を解析して共通部位を特定する手段と、
特定アプリケーション専用プログラム部品を含むラダープログラムの前記共通部位に対して修正乃至変更を行った場合に、前記修正乃至変更をマクロ処理実行前のラダープログラムのプログラム部品に反映させる手段としてさらに機能させるための、請求項３に記載のプログラム。
【請求項６】
ラダー言語によって記述された複数のプログラム部品を組み合わせて機器制御プログラムとしてのラダープログラム作成装置において、
当該ラダープログラムの接点や回路を組み替えることを目的としたマクロ処理言語をプログラム部品に記述する手段と、
マクロ記述を含むプログラム部品にマクロ処理を実行し、特定のアプリケーション専用プログラム部品へと変形させるマクロ処理手段と、を具備するプログラム作成装置であって、
前記マクロ処理は、プログラム部品に対して入力される条件にしたがって、プログラム部品に含まれる回路を使用する回路と使用しない回路に選別するものであり、特定のアプリケーション専用のプログラム部品に変形する場合には前記使用しない回路は削除すること、を特徴とするプログラム作成装置。
【請求項７】
マクロ処理手段によって実行されたマクロ処理を、ラダープログラムのコメントとして記述する手段をさらに有することを特徴とする請求項６に記載のプログラム作成装置。
【請求項８】
マクロ処理実行によりプログラム部品が変形されたラダープログラムに対し、当該マクロ処理によってプログラム部品が変形されたことを表すコメントをラダープログラム内に自動挿入する手段と、
当該コメントとしてプログラム部品における変形箇所のマクロ処理実行前の記述部分を特定する識別子情報を記述する手段と、
当該識別子によって、マクロ処理実行後のラダープログラムから、変形されたプログラム部品のマクロ処理実行前の記述を紐付けする手段と、
をさらに具備することを特徴とする請求項６に記載のプログラム作成装置。
【請求項９】
マクロ処理実行前後のラダープログラムの差分を解析して共通部位を特定する手段と、
マクロ処理実行前のプログラム部品と、マクロ処理実行後に作成される特定アプリケーション専用プログラム部品における共通部位の紐付けを実行する手段と、
をさらに具備することを特徴とする請求項８に記載のプログラム作成装置。
【請求項１０】
マクロ処理実行前後のラダープログラムの差分を解析して共通部位を特定する手段と、
特定アプリケーション専用プログラム部品を含むラダープログラムの前記共通部位に対して修正乃至変更を行った場合に、前記修正乃至変更をマクロ処理実行前のラダープログラムのプログラム部品に反映させる手段と、
をさらに具備することを特徴とする請求項８に記載のプログラム作成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ラダー言語によって記述された機器制御プログラムの部品化を推進するためのマクロ処理に関する発明である。
【背景技術】
【０００２】
ラダープログラムの部品化・再利用化については、一般的にIEC61131規格で定義された『ファンクション・ブロック』の仕組みを用いて実現されている。ファンクション・ブロックにより、ラダープログラムと変数のカプセル化が実現され、ラダープログラムを部品として再利用することが可能になっている。また、プログラム上の複数箇所に現れる複合処理をそれぞれ簡単なマクロ演算部品の図形で置き換えることにより、図形表示されたプログラムの簡素化を図ることも知られている（特許文献１参照）。
【０００３】
しかしながら、ラダープログラムが用いられる機器制御システムの分野では、製品ラインナップを充実させてユーザのニーズに対応できるように、大部分は同一であるが部分的に差異のあるシステムを多数開発しているケースが多い。近年、製品ラインアップの共通性と差異性とを分析し、効果的なソフトウェア資産の形成を目指す『プロダクトライン・ソフトウェア・エンジニアリング（以下、ＰＬＳＥと省略）』と呼ばれる手法が提唱されつつあり、機器制御システムの分野へも適用が試みられている。
【特許文献１】特開平６−２３０８０４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかし、このような分析に基づくプログラム部品化を行う上で、ファンクション・ブロックによる方法では以下の問題が生じてしまう。
【０００５】
ラダープログラムは、全回路をサイクリックスキャンすることによって動作するという特徴から、プログラムの規模の増大がそのまま実行時間性能の低下つながる性質がある。そのため実行性能の観点から利用するラダープログラム部品は、極力使用されるアプリケーションに不要な回路を含まないことが望まれる。
【０００６】
しかしながら、複数のアプリケーションにおいて再利用できる汎用性のあるプログラム部品を作成するには、プログラム部品の内部構成や振る舞いにある程度のバリエーションを持たせ、オプション設定などにより内部構成や振る舞いを少し変更させることができる必要が生じる。たとえば火災検出アルゴリズムのプログラム部品を考える場合、火災検出用のセンサの数や種類、自己診断機能の有無などの、アルゴリズムそのものは同一であっても、使用する具体的なアプリケーションにより複数のバリエーションやオプションを含むことが多い。このようなオプション選択も入力値としてプログラム部品を記述することで汎用性をもったプログラム部品を実装することはできる。しかしながらこの場合、あるシステムの実現には不要なラダー回路が部品中に存在することになりプログラムの実行性能が無為に低下する。このため実行性能の制約に厳しい分野では、汎用性のあるプログラム部品を構成することが困難となっている。
【０００７】
ラダープログラミングにおいてファンクション・ブロックの概念は、後に詳細に説明するが、プログラムの階層的な設計を実現している。しかしＪａｖａ（登録商標）やＣ＋＋などのオブジェクト指向高級言語がプログラム実行時に動的に子インスタンスを構成できるのと異なり、ファンクション・ブロックでは子インスタンスを静的に親ファンクション・ブロック中に記述する。このため中間階層のプログラムを部品化することが困難であり、結果的に大部分は同じだが一部だけが異なる多くのプログラム部品を作成しなければならないという問題が生じる。
【０００８】
そのような場合を以下に、図２１にて示される例を参照して説明する。図２１には、ラダープログラミングにおけるファンクションブロックによるプログラムの階層的な設計の一例が示されている。図２１（ａ）にて示されるように、縮みきった状態と伸びきった状態を判定するセンサを持つエアシリンダ１００を制御するプログラム部品を一例として考える。このエアシリンダ１００には、筒状のシリンダ部１０１と、このシリンダ部１０１に挿入され、前後に伸縮可能なアーム部１０２によって概略構成される。このようなエアシリンダには、その伸びきり状態や縮みきり状態を検出するためのセンサが用いられ、例えば、センサとして光センサがついているものもあれば、同じ入出力をもつ磁気センサを持つものも考えられる。
【０００９】
しかし、図２１（ｂ）にて示されるように、ロボットアームの制御プログラム１１１には、エアシリンダの制御を行うプログラム１１２が組み込まれており、さらに、そのエアシリンダを制御するプログラム１１２に、磁気センサの制御プログラム１１３が組み込まれており、階層的な構造を有している。このようなエアシリンダにおいては、センサの種類にかかわらずエアシリンダ制御部の挙動は同一であるのだが、磁気センサを制御するプログラムがエアシリンダの制御プログラムに、そしてロボットアームの制御プログラムに組み込まれているため、センサとして光センサを用いるような場合においては、センサの制御プログラムのみを取り替えるということができない。従って、このような場合、ファンクション・ブロックでは使用するセンサの種類の組み合わせの数だけ『エアシリンダ』部品を作成しなければならない。
【００１０】
例えば、Ｃ言語ではマクロ処理によってソースコードを変形させることにより、Ｃ言語の言語仕様の範囲では実現できない高度な部品化を行う試みが既になされている。しかし当然ながら、Ｃ言語に特化したマクロであり、本発明が対象とするラダープログラミングの分野にはそのまま適用することはできない。
【００１１】
本発明は上記の問題点に着目したもので、その目的とするところは、ラダープログラムを変形させるマクロの記述方法を定義し、そのルールにしたがい、ラダープログラムの変形を実行する環境を提供することである。
【００１２】
また、本発明の他の目的とするところは、ラダープログラムを変形させるマクロの記述方法を定義することによりソフトウェア資産として複数のアプリケーションで利用可能な汎用性をもつラダープログラム部品群を整備し、そこからラダープログラムの変形を実行する環境によってあるシステムを構成するのに必要な特定のアプリケーション専用のプログラム部品を取り出す仕組みを整備することである。
【００１３】
本発明のさらに他の目的並びに作用効果については、明細書の以下の記述を参照することにより、当業者であれば容易に理解されるであろう。
【課題を解決するための手段】
【００１４】
本発明の実施形態においては、コンピュータを、ラダー言語によって記述された複数のプログラム部品を組み合わせて機器制御プログラムとしてのラダープログラムを作成する手段と、当該ラダープログラムの接点や回路を組み替えることを目的としたマクロ処理言語をプログラム部品に記述する手段と、マクロ記述を含むプログラム部品にマクロ処理を実行し、特定のアプリケーション専用プログラム部品へと変形させるマクロ処理手段として機能させるためのプログラムとしたことを特徴とする。
【００１５】
このような構成により、汎用性の高いラダープログラムに対して、ユーザが所望する接点や回路を一部組み替えるマクロ処理を行うことが可能とされ、１つの汎用性の高いラダープログラムを基礎として、基本的機能は維持しつつ、当該プログラムが用いられる環境に応じて様々な調整や修正を加えた特定のアプリケーション専用のラダープログラムを容易に作成することがプログラムを提供することが可能となる。このようなプログラムを備えることにより、性能的なオーバーヘッドを生じさせることなく、汎用性の高いラダープログラム部品を作成することが可能となり、様々な製品ラインアップに対応することが可能となる。
【００１６】
本発明の実施形態においては、マクロ処理手段によって実行されたマクロ処理を、ラダープログラムのコメントとして記述する手段としてさらに機能させることを特徴とする。
【００１７】
ここで言う『コメント』とは、ラインコメント、命令コメント、または変数コメント等を含み、実行されたマクロ処理についてその実行箇所や実行内容を特定するコメントである。そして、このコメントの特徴として、マクロ処理に対応していないラダーのプログラミングツールでも開くことが可能とされている。すなわち、本発明における新しい機能においても、当該新機能に対応していない所謂旧型のプログラミングツールにおいても、ユーザは対象となるラダープログラムに対するマクロ処理の閲覧や編集を容易に行うことが可能とされている。
【００１８】
本発明の実施形態においては、マクロ処理実行により変形されたラダープログラムに対し、当該マクロ処理によって変更されたことを表すコメントをラダープログラム内に自動挿入する手段と、当該コメントとしてマクロ処理実行前のプログラム部品におけるマクロ処理記述部分を特定する識別子情報を記述する手段と、当該識別子によって、マクロ処理実行後のラダープログラムから、変形されたマクロ処理実行前のプログラム部品のマクロ記述を表示する手段としてさらに機能させることを特徴とする。
【００１９】
ここで言う『識別子』とは、ラダープログラムにおけるどの部分に対してマクロ処理を実行したかを特定するための識別子であって、用いられる識別子としては、ライン番号等が含まれる。
【００２０】
このような構成により、マクロ記述部位に識別子が挿入され、マクロ処理実行後のラダープログラムから、変形されたマクロ処理実行前のプログラム部品のマクロ記述がユーザに対して表示されるため、ユーザはプログラミングツールを介してその表示を参照してマクロ記述が行われた部分にジャンプすることが可能となる。そして、ユーザがマクロ記述部位に容易にアクセスすることを可能とすることで、閲覧や編集作業が容易となり、変更や修正作業も容易に行うことが可能となる。
【００２１】
本発明の実施形態においては、マクロ処理実行後にラダープログラムの差分を解析して同一部位を認識する手段と、マクロ処理実行前のプログラム部品と、マクロ処理実行後に作成される特定アプリケーション専用プログラム部品における同一部位の紐付け実行し、ユーザに表示する手段としてさらに機能させることを特徴とする。
【００２２】
このような構成により、マクロ処理によって変形されない部位の、マクロ処理実行前後での紐付けを差分解析によって行うことが可能となる。そして、ユーザはマクロ処理実行前のプログラム部品と、マクロ処理実行後の特定アプリケーション専用プログラム部品のラダープログラムとの共通性と差異性とをこの紐付けにより容易に認識することが可能となる。
【００２３】
本発明の実施形態においては、マクロ処理実行後にラダープログラムの差分を解析して同一部位を認識する手段と、マクロ処理実行後に作成される特定アプリケーション専用プログラム部品のラダープログラムに対して行った変更を、マクロ処理実行前のプログラム部品に反映させる手段としてさらに機能させることを特徴とする。
【００２４】
このような構成により、マクロ処理によって行った変更を、マクロ処理実行前のプログラム部品に反映させることが可能となる。そして、ユーザはマクロ処理実行前のプログラム部品と、マクロ処理実行後の特定アプリケーション専用プログラム部品のラダープログラムとの共通性と差異性とをより容易に認識することが可能となる。
【００２５】
本発明の実施形態においては、ラダー言語によって記述された複数のプログラム部品を組み合わせて機器制御プログラムとしてのラダープログラム作成装置において、当該ラダープログラムの接点や回路を組み替えることを目的としたマクロ処理言語をプログラム部品に記述する手段と、マクロ記述を含むプログラム部品にマクロ処理を実行し、特定のアプリケーション専用プログラム部品へと変形させるマクロ処理手段と、を具備することを特徴とする。
【００２６】
このような構成により、汎用性の高いラダープログラムに対して、ユーザが所望する接点や回路を一部組み替えるマクロ処理を行うことが可能とされ、１つの汎用性の高いラダープログラムを基礎として、基本的機能は維持しつつ、当該プログラムが用いられる環境に応じて様々な調整や修正を加えた特定のアプリケーション専用のラダープログラムを容易に作成するプログラム作成装置を提供することが可能となる。そして、性能的なオーバーヘッドを生じさせることなく、汎用性の高いラダープログラム部品を作成することが可能となり、様々な製品ラインアップに対応することが可能となる。
【００２７】
本発明の実施形態においては、マクロ処理手段によって実行されたマクロ処理を、ラダープログラムのコメントとして記述する手段をさらに有することを特徴とする。
【００２８】
このような構成により、記述されたコメントにより、マクロ処理に対応していないラダーのプログラミングツールでも開くことが可能とされ、本発明における新しい機能においても、当該新機能に対応していない所謂旧型のプログラミングツールにおいても、ユーザは対象となるラダープログラムに対するマクロ処理の閲覧や編集を容易に行うことが可能となる。
【００２９】
本発明の実施形態においては、マクロ処理実行により変形されたラダープログラムに対し、当該マクロ処理によって変更されたことを表すコメントをラダープログラム内に自動挿入する手段と、当該コメントとしてマクロ処理実行前のプログラム部品におけるマクロ処理記述部分を特定する識別子情報を記述する手段と、当該識別子によって、マクロ処理実行後のラダープログラムから、変形されたマクロ処理実行前のプログラム部品のマクロ記述を表示する手段と、をさらに具備することを特徴とする。
【００３０】
このような構成により、マクロ記述部位に識別子が挿入され、マクロ処理実行後のラダープログラムから、変形されたマクロ処理実行前のプログラム部品のマクロ記述がユーザに対して表示されるため、ユーザはプログラミングツールを介してその表示を参照してマクロ記述が行われた部分にジャンプすることが可能となる。そして、ユーザがマクロ記述部位に容易にアクセスすることを可能とすることで、閲覧や編集作業が容易となり、変更や修正作業も容易に行うことが可能となる。
【００３１】
本発明の実施形態においては、マクロ処理実行後にラダープログラムの差分を解析して同一部位を認識する手段と、マクロ処理実行前のプログラム部品と、マクロ処理実行後に作成される特定アプリケーション専用プログラム部品における同一部位の紐付け実行し、ユーザに表示する手段と、をさらに具備することを特徴とする。
【００３２】
このような構成により、マクロ処理によって変形されない部位の、マクロ処理実行前後での紐付けを差分解析によって行うことが可能となる。そして、ユーザはマクロ処理実行前のプログラム部品と、マクロ処理実行後の特定アプリケーション専用プログラム部品のラダープログラムとの共通性と差異性とをこの紐付けにより容易に認識することが可能となる。
【００３３】
本発明の実施形態においては、マクロ処理実行後にラダープログラムの差分を解析して同一部位を認識する手段と、マクロ処理実行後に作成される特定アプリケーション専用プログラム部品のラダープログラムに対して行った変更を、マクロ処理実行前のプログラム部品に反映させる手段と、をさらに具備することを特徴とする。
【００３４】
このような構成により、マクロ処理によって行った変更を、マクロ処理実行前のプログラム部品に反映させることが可能となる。そして、ユーザはマクロ処理実行前のプログラム部品と、マクロ処理実行後の特定アプリケーション専用プログラム部品のラダープログラムとの共通性と差異性とをより容易に認識することが可能となる。
【発明の効果】
【００３５】
以上の説明で明らかなように、本発明によれば、ラダープログラムにマクロプログラムを組み込むことによって、性能的なオーバーヘッドを生じさせることなく汎用性の高いラダープログラム部品化を実現するという利点を有する。
【００３６】
また、上記の汎用性の高いラダープログラム部品の開発にあたり、ラダープログラム部品の閲覧・編集とマクロの閲覧・編集を通常のラダー編集ソフトで同時に行うことが可能となる。
【００３７】
また、ラダープログラム部品の開発にあたり、容易にマクロのエラーを確認し、修正することができる。さらにマクロ処理後のラダープログラム部品に対して行ったデバッグ・修正結果をマクロ処理前の汎用プログラム部品に容易に反映させることが可能となる。
【００３８】
さらに、本発明によれば、開発しようとするアプリケーションの特性に応じて、必要なラダープログラム部品を簡単に取り出すことが可能となる。
【発明を実施するための最良の形態】
【００３９】
以下に、この発明の好適な実施の一形態を添付図面を参照しながら詳細に説明する。
【００４０】
本発明においては、対象となる製品のアプリケーション群（プロダクトライン）において共通性と差異性とを分析し、共通部分と差異部分とが一つの部品内に混在しないように部品を設計する。図１に製品の共通性と差異性とを分けた一例を説明する図が示されている。同図（ａ）には、開発対象のみを考慮した分析並びに設計の一例が示されている。同図にて示されるように、対象となる製品のみを考慮した場合、その製品を基礎として、異なる状況に対応できるような次の製品、並びに製品のバリエーションを作成する際に、例えば、同図の変更箇所１〜４にて示されるように変更箇所が多岐にわたってしまう。そのため、次の製品を作成するためにどこを変更すればよいのか分かりづらくなってしまう。また、それらの変更箇所１〜４は、モジュールＡ〜Ｄに組み込まれており、変更箇所のみを入れ替えて対応することが困難である。そのため、共通部分が多く、部分的な変更によって対応できるような場合においても再度製品を作成する必要が生じてしまうことがある。そこで、同図（ｂ）にて示されるように、対象となる製品のみではなく、製品の品揃えに加えて将来のバージョンアップも含めて、共通性と差異性とを分析することによって、同図（ｃ）にて示されるように、対象製品のバリエーションにおいて差異部分のみをまとめたモジュール５を構成することが可能となる。そして、このように共通部分と差異部分とを明確に分けて部品設計を行うことにより、異なる製品バリエーション等を作成する際にはその差異部分に対応する別のモジュール６と置き換えることにより容易に当該製品のバリエーションを作成することが可能となる。
【００４１】
図２には、一つの実施形態として検査装置１０が示されている。同図において点線にて描かれた円１１〜１７にて示されるように、当該検査装置はその機能や処理内容によって大まかに７つの部分に分けられる。
【００４２】
先ず、供給部１１を介して当該検査装置において検査対象となるワークが装置へと供給される。そして、エレベータ１２とロードアーム１３とを介して、ワークはインデックステーブル１４へと移動する。このインデックステーブル１４が回転動作を行うことにより、ワークは検査位置へと移動し、検査ヘッド１５が所定位置に降下し検査を行う。インデックステーブル１４は更に回転し、ワークを取り出し位置へと移動する。アンロードアーム１６によってワークはインデックステーブル１４から取り出され、排出部１７は、検査結果に従い良品／不良品とを分別して排出する。
【００４３】
次に、上記の検査装置に対して、同様の検査機能を有するものの、一部の特性において仕様の異なるバリエーションが表形式にて図３に示されている。同図における検査装置Ａが先に図２を用いて説明した検査装置の一例であり、検査装置Ｂとは、その検査装置Ａの特性を一部を変更したバリエーションである。同図に示される検査装置Ａと検査装置Ｂとの特性を比較すると、ワークの搬入及び搬出に関しては双方ともロボット輸送を採用しているが、それ以外の特性においては差異が見られる。例えば、供給部において、検査装置Ａはエレベータ供給を採用しているが、検査装置Ｂは採用していない。同様に、検査対象のワークを位置決めするために、検査装置Ａはインデックステーブルを用いているが、検査装置Ｂはベルトコンベアを採用している。同様に、ワークの停止位置についても、検査装置Ａは４ポジションによる位置決めを行っているが、検査装置Ｂではセンサによる位置決めを採用している。そして、検査を行う際に、検査装置Ａはカラーセンサを採用しているが、検査装置Ｂは画像センサを用いている。また、検査後のワークの排出については、検査装置Ａはロボットによる良品と不良品との分別を行っており、検査装置Ｂでは不良品のみを押し出す方法を採用している。
【００４４】
これらの検査装置Ａ並びに検査装置Ｂを特性によって共通部分と差異部分とに分けたコンポーネント図が図４〜６に示されている。図４には、コンポーネントの全体図が示されている。同図にて示されるように、検査装置２０は、ワーク搬入部２１、位置決め部２２、検査部２３、及びワーク搬出部２４に区分されている。そして、ワーク搬入部２１は、さらに供給部２１ａとロードアーム２１ｂとが備えられている。そして、位置決め部２２にはインデックステーブル２２ａとベルトコンベア２２ｂが、検査部２３には検査方法２５が、そしてワーク搬出部２４にはアンロ―ドアーム２４ａと仕分け部２４ｂとがそれぞれ備えられている。
【００４５】
図５には、ワーク搬入部２１における検査装置Ａ並びに検査装置Ｂの共通性と差異性が示されている。同図にて示されるように、検査装置Ａは、ワーク搬入部２１として供給部（エレベータ供給）２１ａとロードアーム２１ｂが備えられているが、それに対して検査装置Ｂは供給部２１ａはなく、ロードアーム２１ｂのみ備えられている。すなわち、これらの検査装置においては、供給部２１ａが差異部分であり、ロードアーム２１ｂは共通部分となる。そして、このように製品バリエーションにおける差異部分となった供給部２１ａは、オプション部品として切り出しておく。
【００４６】
図６には位置決め部２２における検査装置Ａ並びに検査装置Ｂの共通性と差異性が示されている。同図にて示されるように、検査装置Ａは、位置決め部２２としてインデックステーブル２２ａを採用しているが、それに対して検査装置Ｂはベルトコンベア２２ｂを採用している。すなわち、これらの検査装置においては、インデックステーブル２２ａとベルトコンベア２２ｂとのいずれかを選択することとなる。そして、このような場合は、インデックステーブル２２ａとベルトコンベア２２ｂとを代替部品（代替コンポーネント）として切り出しておく。
【００４７】
このとき、ラダープログラムにて必要な回路を行単位で取り出すマクロ例としては、
！＄ＩＦ（condition）[
true statements
！][
false statements
！]
となる。ここで、conditionには、条件を記述する。ある特性が選択されているかどうかを条件とする場合は、
；＄feature=true
もしくは、
；＄feature=false
と記述する。このとき、feature（特性）には、特定の特性名を指定する。そして、true statementsとfalse statementsには、取り出したい範囲の回路が入り、行コメントに記述された[]で囲む。
【００４８】
このようなマクロを使用した例が図７及び８に示されている。図７には上述のワーク搬入部２１のファンクションブロックが示されており、オプションの扱いが示されている。同図にて示されるように、『エレベータ供給』が条件として記述されており、オプションとして選択されていることが示されている。
【００４９】
そして、図８には位置決め部２２のファンクションブロックが示されており、代替の扱いが示されている。同図にて示されるように、インデックステーブルとベルトコンベアが代替として記述されている。このように、アプリケーション毎の部品に生じる差異は部品の変形で対応する。尚、ここでは、ワーク搬入部２１におけるエレベータ供給と、位置決め部２２におけるインデックステーブルとベルトコンベアについて説明したが、他の差異についても同様に対応できることは言うまでもない。
【００５０】
図９及び図１０に、特性モデルの例が示されている。特性モデルとは、後に詳細に説明するが、製品ラインアップを特性によって表現したモデルである。これらの図にて示されるように、検査装置３０は、その特性によって供給３１，ワーク搬入３２，位置決め３３，検査３４，ワーク搬出３５，排出３６のコンポーネントに分けられる。そして、供給３１にはエレベータ供給がオプション・コンポーネントとして備えられている。ここで、エレベータ供給に設けられている円３７ａは、この特性がオプション・コンポーネントとして選択可能に設定されていることを示している。それに対して、ワーク搬入３２及びワーク搬出３５に設けられたロボット輸送３８及び４０は、オプションとしての特性ではないため、エレベータ供給３７における円３７ａのような表示はされていない。
【００５１】
また、位置決め３３には停止位置３９が設けられており、その停止位置は、その特性上さらに４ポジション３９ａとセンサによる位置決め３９ｂとが代替コンポーネントとして設けられている。同様に、検査３４にはカラーセンサ３４ａと画像センサ３４ｂが、そして排出３６には不良品のみ押し出し３６ａとロボットによる分別３６ｂとがそれぞれ代替コンポーネントとして設定されている。
【００５２】
図１０は、上述の特性モデルにおいて、オプションの選択有無、及びどちらの代替コンポーネントが使用されているかを示している。同図にて示されるように、オプションとして設けられているエレベータ供給３７には、黒点４１にてマーキングが施されている。この黒点４１は、対象となる特性コンポーネントが選択されていることを示すものである。同様に、４ポジション３９ａ、画像センサ３４ｂ、及びロボットによる分別３６ｂにも黒点４１が施され、これらの特性が選択されていることを示している。そして、このような特性を組み合わせていくと、先に説明した検査装置Ａのような特性を有する検査装置が実現される。さらに、このような特性モデル、並びに特性の選択有無をしめすマーキングをユーザに対して画像モニタ等にて表示することによって、どの特性が選択されているのか、並びに選択可能な特性が一目瞭然となる。
【００５３】
次に、本発明における実施形態のソフトウェア構成図が図１１に示されている。
【００５４】
同図にて示されるように、この実施形態においては、ドメイン分析支援ツール５０、プログラム部品管理ソフトウェア６０、ラダー・プログラミング・ツール７０、及びプログラム部品データベース８０とによって概略構成されている。
【００５５】
ドメイン分析支援ツール５０内のＦｅａｔｕｒｅモデルエディタ（以下、特性モデルエディタと言う）５１とは、開発対象ドメインにおける製品ラインアップの共通性と差異性とを分析し、製品ラインアップを『特性』によって表現した分析モデルである『Ｆｅａｔｕｒｅ  Ｍｏｄｅｌ（以下、特性モデルと言う）』と製品の特性情報５２を作成するものである。
【００５６】
次に、プログラム管理ソフトウェア６０内の各機能を説明する。プロダクト・パラメータ・マネージャ６１とは、ある製品のアプリケーションを構築するために必要なプログラム部品群と、そこに含まれるマクロへの入力パラメータセット（以下、プロダクト・パラメータと言う）を管理するものである。本実施形態では、ドメイン分析支援ツール５０が作成する特性モデルと、製品の特性情報５２を元に、プロダクト・パラメータを作成する機能も備えている。
【００５７】
コンポーネント・マネージャ６６とは、ラダープログラムの作成用のプログラム部品６５が格納されているプログラム部品データベース８０から、プロダクト・パラメータ・マネージャ６１によって作成されたプロダクト・パラメータに従い、必要となるラダープログラム部品を取り出す機能を有する。また、プログラム部品データベース８０に格納されていない部品を新規作成したり、既存のプログラム部品６５に編集を加えた場合において、新たに作成されたプログラム部品６５をプログラム部品データベース８０に格納する機能も有する。
【００５８】
コンポーネント・エディタ６２とは、マクロを含んだラダープログラム部品の編集を行うものである。この実施形態においては、マクロの編集機能と、ラダープログラムの編集機能とを併せ持っている。
【００５９】
コンポーネント・デバッガ６３とは、マクロ処理事項前後での、ラダープログラムの紐付け情報を管理する。マクロ処理後のプログラム部品に対する修正や変更を、マクロ処理実行前の汎用的なプログラム部品に反映させる機能を有する。
【００６０】
マクロ・プロセッサ６７とは、マクロ記述とプロダクト・パラメータに従い、ラダープログラムの変形を実行し、特定アプリケーション用のプログラム部品を生成する機能を有する。
【００６１】
そして、ラダー・プログラミング・ツール７０には、図示しないラダーエディタ・デバッガが含まれており、一般的なラダープログラミングツールであるため、詳細な説明は省略する。このラダープログラミングツール７０では、プログラム部品管理ソフトウェアによって生成されたラダープログラム部品（特定アプリケーション専用プログラム部品９０）を用いて、アプリケーションを作成する。また、ラダー・プログラミング・ツール７０は、図示しないが、ＰＬＣシミュレータと単体テストツール等によって構成されるラダー実行環境と接続されており、作成されたプログラムをラダー実行環境へとダウンリロードし、単体テストを実行可能とする。
【００６２】
次に、図１２〜図１４に、全体の処理を示すフローチャートが示されている。これらのフローチャートにて示されるように、特性モデルエディタ５１は、ユーザが選択した特性を保存する（ステップ１００１）。しして、プロダクト・パラメータ・マネージャ６１が特性選択結果よりマクロへの入力パラメータ６４を生成する（ステップ１００２）。続いて、コンポーネント・マネージャ６６は、ユーザが選択したコンポーネントを記憶し（ステップ１００３）、プログラム部品データベース８０より資産プログラム部品（マクロ記述済みのプログラム部品）６５を取り出し（ステップ１００４）、資産プログラム部品６５と入力パラメータ６４とをマクロ・プロセッサへと渡す（ステップ１００５）。マクロ・プロセッサ６７は、マクロ処理を実行し、資産プログラム部品６５を変形して、特定アプリケーション専用プログラム部品９０を生成する（ステップ１００６）。
【００６３】
図１１に続き、コンポーネント・デバッガ６３は、特定アプリケーション専用プログラム部品９０をラダー・プログラミング・ツール７０へと送る（ステップ１００７）。そして、ラダー実行環境にプログラムをダウンロードし、単体テストを実行する（ステップ１００８）。この単体テストに合格しない場合（ステップ１００９，ＮＯ）、ラダー・プログラミング・ツール７０にてプログラムを修正し（ステップ１０１０）、ステップ１００８に戻りラダー実行環境にダウンロードし単体テストを実行する。それに対して、ステップ１００８の単体テストに合格した場合（ステップ１００９，ＹＥＳ）、ラダー・プログラミング・ツール７０にてプログラムをアップロードする（ステップ１０１１）。続いて、コンポーネント・デバッガ６３にてマクロの逆変換処理を実行する（ステップ１０１２）。ここで、マクロの逆変換処理に成功した場合（ステップ１０１３，ＹＥＳ）、コンポーネント・デバッガ６３にてマクロの逆変換処理を実行し（ステップ１０１４）、コンポーネント・マネージャ６６が資産プログラム部品を上書き更新する（ステップ１０１５）。それに対して、ステップ１０１２におけるマクロの逆変換処理が成功しなかった場合（ステップ１０１３，ＮＯ）、修正前との差分を表示し（ステップ１０１６）、ユーザがコンポーネント・エディタ６２で直接資産プログラムの更新を実行する（ステップ１０１７）。ここでのマクロ逆変換処理が成功しない場合とは、マクロ処理した部分にユーザが変更を加えた場合のことであり、その修正が加えられる前との差分（差異部分）を表示して、ユーザが直接マクロプログラムを更新するようにしたものである。
【００６４】
続いて、図１５及び図１６に、マクロ処理のフローチャートが記されている。同図にて示されるように、先ず資産プログラム部品を格納しているファイルがオープンされ（ステップ１３０１）、新しい特定アプリケーションプログラム部品９０を格納するファイルを新規作成する（ステップ１３０２）。続いて、資産プログラム部品のスキャンが実行される（ステップ１３０３）。資産プログラム部品６５をスキャンした結果、ファイルの終わりであれば（ステップ１３０４，ＹＥＳ）、資産プログラム部品ファイル、特定アプリケーションプログラム部品ファイルをクローズし、処理を終える（ステップ１３０５）。
【００６５】
ステップ１３０３に戻り、資産プログラム部品６５をスキャンした結果、ファイルの終わりでなければ（ステップ１３０４，ＮＯ）、続いてマクロ処理が行われているかどうかの判別が実行される（ステップ１３０６）。このとき、マクロ処理が行われていなければ、資産プログラム部品６５から特定アプリケーション専用プログラム部品９０に、その行を単純コピーし（ステップ１３０７）、ステップ１３０４に戻りファイルの終わりであるかどうかの判別を実行する。それに対して、マクロ処理がある場合（ステップ１３０６，ＹＥＳ）、マクロ命令を取り出し（ステップ１３０８）、マクロＩＤをインクリメントする（ステップ１３０９）。
【００６６】
続いて、取り出されたマクロ命令の種類の判別が行われる（ステップ１３１０）。このとき、同図においては、必要な回路を取り出す（ステップ１３１１）、回路を行単位でコピーする（ステップ１３１２）、及び命令をＡＮＤ接続でコピーする（ステップ１３１３）の３つが記載されているが、これらはマクロ命令の一例に過ぎず、後に説明する様々なマクロ命令の種類の判別を実行する。マクロ命令の種類判別が実行されると、続いて、コメントとして記述されているマクロ命令にマクロＩＤを追加する（ステップ１３１４）。ここで言うマクロＩＤとは、ラダープログラムにおけるマクロ処理の記述部位を示す識別子であり、例えば、ライン番号等が用いられる。そして、マクロ命令で削除されるオリジナル回路はコメントアウトし、マーク（ＲＥＭ文とマクロＩＤを追加）を付けておく（ステップ１３１５）。
【００６７】
その後、マクロ命令で追加、変形された結果の回路の前後にコメントでマクロＩＤを挿入する（ステップ１３１６）。ここで、その例を以下に示す。
（＊MacroID=3:マクロ命令[＊]
（＊]＊）
（＊BEGIN(3)＊）
変形結果
（＊END(3)＊）
マクロＩＤの挿入後、特定アプリケーションプログラム部品ファイルに一連の処理を書き出し（ステップ１３１７）、ステップ１３０４に戻ってファイルの終わりであるかどうかの識別を実行し、その後上述の処理を繰り返す。
【００６８】
本実施形態においては、ラダープログラムに対して以下の操作を行うためのマクロを定義する。
【００６９】
＜宣言の変更＞
（１）変数宣言の複製
（２）変数名の変更
（３）入出力属性の変更
＜ラダー回路の変更＞
（１）接点名の変更
（２）応用命令へのオペランド変更
（３）ファンクション・ブロック・インスタンスの入れ替え
（４）ライン内の特定のＩＮ接点のｎ倍化
（ア）ＩＮ接点を連番で複製し、ＡＮＤ命令で接続
（イ）ＩＮ接点を連番で複製し、ＯＲ命令で接続
（５）ライン内の特定のＯＵＴ接点のｎ倍化
（ア）ＯＵＴ接点を連番で複製し、ＯＲ命令で接続
（イ）応用命令を連番で複製し、ＯＲ命令で接続
（ウ）ファンクション・ブロック・インスタンスを連番で複製し、ＯＲ命令で接続
（６）ライン単位での変形
（ア）ブロック単位での入れ替え
（イ）ブロック単位でのｎ倍化
（７）ＰＯＵ（Program Organization Unit：プログラム部品）名の変更
（８）ＰＯＵのｎ倍化
【００７０】
そして、図１７に、本実施形態におけるマクロの定義体系が示されている。同図にて示されるように、この例でのマクロ定義は、ＦＢ（Function Block）内部変数宣言の操作、回路の操作、ＰＯＵ操作の３つに大別され、それらの操作からさらに詳細操作が枝分かれしている。
【００７１】
本マクロを使用した例が図１８に示されている。同図にて示されるケースは、先に説明した、行単位で必要な回路を取り出すマクロの一例であり、inputというオプションが存在していることが前提とされる。図１８（ａ）では、行単位で回路を取り出す条件として、inputと言う特性が記述されており、そのinputが選択されていることが条件であることを示す
；＄feature（この例ではinput）=true
という記述もされている。これに対してマクロ処理を行う。inputという特性が選択されていると、図１８（ｂ）の回路が得られる。それに対して、inputとい特性が選択されていないと、条件が満たされていないため、上同図（ｂ）の回路は取り出されずに、図１８（ｃ）の回路が得られる。このとき、条件として記述されている特性が選択されているか否かは先に図９及び図１０を参照して説明した特性モデルで確認することが可能である。
【００７２】
この処理をテキストファイル形式で表したものが図１９に示されている。同図にて示されるように、条件である特性（input）が選択されているかどうかで得られる回路は異なる。同図左側が、inputが選択されている場合を示し、同図右側がinputが選択されていない場合を示している。尚、他のマクロの例が図２０の表に示されている。図２０の表にてＦＢとは、Function Blockの略であり、ファンクションブロックを意味するものであり、ＰＯＵとは、上述のプログラム部品を意味する。
【産業上の利用可能性】
【００７３】
本発明によれば、性能的なオーバーヘッドを生じさせることなく汎用性の高いラダープログラム部品化を実現するという利点を有する。
【図面の簡単な説明】
【００７４】
【図１】製品の共通性と差異性との分析を説明する図である。
【図２】本発明の一実施形態である検査装置の構造を示す図である。
【図３】検査装置における特性のバリエーションを表形式で示した図である。
【図４】コンポーネントの全体構成図である。
【図５】オプションコンポーネントを説明する図である。
【図６】代替コンポーネントを説明する図である。
【図７】オプションコンポーネントを記述するファンクションブロックの一例を示す図である。
【図８】代替コンポーネントを記述するファンクションブロックの一例を示す図である。
【図９】特性モデルの全体図である。
【図１０】特性モデルにおいて、オプションコンポーネントと代替コンポーネントの選択状態を示す図である。
【図１１】本発明の実施形態におけるソフトウェア構成図である。
【図１２】全体の処理を示すフローチャート（その１）である。
【図１３】全体の処理を示すフローチャート（その２）である。
【図１４】全体の処理を示すフローチャート（その３）である。
【図１５】マクロ処理を示すフローチャート（その１）である。
【図１６】マクロ処理を示すフローチャート（その２）である。
【図１７】マクロの定義体系を説明するための図である。
【図１８】本発明のマクロ処理の実行例を説明するための図である。
【図１９】本発明のマクロ処理をテキストファイル形式で表した図である。
【図２０】本発明におけるマクロの一例を示す図である。
【図２１】ファンクションブロックによるプログラムの階層構造を説明する図である。
【符号の説明】
【００７５】
１〜４    変更箇所
５        差異箇所のモジュール
６        変更用モジュール
１０      検査装置
１１      供給部
１２      エレベータ
１３      ロードアーム
１４      インデックステーブル
１５      検査部
１６      アンロードアーム
１７      排出部
２０      検査装置
２１      ワーク搬入部
２１ａ    供給部
２１ｂ    ロードアーム
２２      位置決め部
２２ａ    インデックステーブル
２２ｂ    ベルトコンベア
２３      検査部
２４      ワーク搬出部
２４ａ    アンロードアーム
２４ｂ    仕分け部
２５      検査方法
５０      ドメイン支援分析ツール
５１      Featureモデルエディタ
５２      製品の特性情報
６０      プログラム部品管理ソフトウェア
６１      プロダクト・パラメータ・マネージャ
６２      コンポーネント・エディタ
６３      コンポーネント・デバッガ
６４      入力パラメータ
６５      プログラム部品
６６      コンポーネント・マネージャ
６７      マクロプロセッサ
７０      ラダー・プログラミング・ツール
８０      プログラム部品データベース
９０      特定アプリケーション専用プログラム部品
１００    エアシリンダ
１０１    シリンダー部
１０２    アーム部
１１１    ロボットアーム制御プログラム
１１２    エアシリンダ制御プログラム
１１３    磁気センサ制御プログラム
【図１】
0004488226.tif 000002
【図２】
0004488226.tif 000003
【図３】
0004488226.tif 000004
【図４】
0004488226.tif 000005
【図５】
0004488226.tif 000006
【図６】
0004488226.tif 000007
【図７】
0004488226.tif 000008
【図８】
0004488226.tif 000009
【図９】
0004488226.tif 000010
【図１０】
0004488226.tif 000011
【図１１】
0004488226.tif 000012
【図１２】
0004488226.tif 000013
【図１３】
0004488226.tif 000014
【図１４】
0004488226.tif 000015
【図１５】
0004488226.tif 000016
【図１６】
0004488226.tif 000017
【図１７】
0004488226.tif 000018
【図１８】
0004488226.tif 000019
【図１９】
0004488226.tif 000020
【図２０】
0004488226.tif 000021
【図２１】
0004488226.tif 000022