本発明の実施の形態を説明するに先立ち、前提となる、あらかじめ予期する変化点をマクロ記述としてラダープログラムに組み込み、アプリケーションに応じて与えるパラメータセットを変更するとともにマクロ処理を実行し、その特定のアプリケーション用プログラム部品を生成する技術について説明する。
まず、再利用範囲を共通性の多い類似のアプリケーション群(プロダクトライン)に限定する。つまり、特定のプロダクトライン(製品系列)の範囲内だけでプログラム部品の再利用を考えるようにした。一例を示すと、携帯電話、CDプレーヤ、半導体製造装置など一つの製品ドメインに限定し、再利用範囲は、その限定された1つの製品の品揃えやバージョンアップを想定した範囲とした。これは、従来のユーザプログラムの開発においては、例えば、ある製品或いはその製品を製造するための製造ラインの動作・制御を司るラダープログラムを開発する場合、その製品にのみ着目し、その製品のための製造ライン用の専用のラダープログラムを作成していた。一方、複数のアプリケーションにおいて再利用できる汎用性のあるプログラム部品を作成するに際し、PLSE手法による戦略的な再利用部品をつくるため部品にあらかじめ予期されている変化点を組み込むことが行なわれる。この場合に、想定する複数のアプリケーションの範囲をいたずらに広げるのではなく、上述したように、特定のプロダクトライン(製品系列)の範囲内だけでプログラム部品の再利用を考えることで、より適切な部品を作成することができる。
具体的には、対象となる製品のアプリケーション群(プロダクトライン)において共通性と差異性とを分析し、共通部分と差異部分とが一つのプログラム部品内に混在しないようにプログラム部品を設計する。図1は、製品の共通性と差異性とを分けた一例を説明する図である。同図(a)には、上述した従来の開発対象の製品A(アプリケーション)のみを考慮して分析し、その製品用のプログラムを作成した例が示されている。ここでは、便宜上、4つのモジュール(ファンクションブロック)によりラダープログラムが構築されているとする。この状態において、その製品と同一シリーズ(バリエーション:品揃え)の製品が存在したり、その製品を基礎としたバージョンアップが行なわれたりすることがある。係る場合、そのバリエーションの製品A1,A2,……やバージョンアップされた製品A′,A″,……は、元となる製品Aと共通することが多く、その製品A1,A′等のためのラダープログラムは、元となる製品Aのラダープログラムの一部を編集・変更することで製造することができる場合が多々ある。ただし、通常では、製品A用のラダープログラムを開発する場合には、製品Aのみを考慮して作成するため、バージョンアップした次の製品A′等や製品Aのバリエーションの製品A1等のためのラダープログラムを開発する場合、例えば、同図の変更箇所Xにて示されるように変更箇所が多岐にわたってしまう。
そのため、次の製品を作成するためにどこを変更すればよいのか分かりづらくなってしまう。また、それらの変更箇所Xは、モジュールA〜Dに組み込まれており、しかも、複数のモジュールにまたがって存在するものもあり、変更箇所のみを入れ替えて対応することが困難である。そのため、共通部分が多く、部分的な変更によって対応できるような場合においても、実際には、再度その製品に合わせたラダープログラムを作成する必要が生じてしまうことがある。
そこで、同図(b)に示されるように、対象となる製品のみではなく、予め製品の品揃えに加えて将来のバージョンアップも含めて、共通性と差異性とを分析することによって、同図(c)に示されるように、対象製品のバリエーションにおいて差異部分のみをまとめたモジュールEを構成することが可能となる。そして、このように共通部分と差異部分とを明確に分けて部品設計を行うことにより、異なる製品バリエーション等を作成する際にはその差異部分に対応する別のモジュールFと置き換えることにより容易に当該製品のバリエーションを作成することが可能となる。
図2には、一つのアプリケーションとしての検査装置が示されている。同図において点線で囲まれたように、検査装置はその機能や処理内容によって大まかに6つの部分に分けられる。
すなわち、この検査装置は、供給部1と、ロードアーム3と、インデックステーブル4と、検査ヘッド5と、アンロードアーム6と、排出部7と、を備えている。供給部1は、検査対象のワークWを貯留するホッパー1aと、そのホッパー1aの下方から1つずつ搬出されるワークWを上昇移動させるエレベータ1bと、そのエレベータ1bで上昇移動されたワークWを搬出する下方傾斜状のシューター1cとを備える。ワークWは、シューター1cを滑り降りるように移動し、供給部1の先端に至る。この供給部1は、エレベータ1bを備えたエレベータ供給装置となっている。
ロードアーム3は、供給部1の先端に位置しているワークWを掴むと共に旋回し、インデックステーブル4上の所定位置に置くロボットである。つまり、ロボットアーム3は、インデックステーブル4へのワーク搬入を行なうロボット輸送の一形態である。他には、3次元空間上を移動可能なロボットアームなど、各種の代替え品がある。
このインデックステーブル4が回転動作を行うことにより、ワークWは検査位置へと移動し、検査ヘッド5が所定位置に降下し検査を行う。インデックステーブル4は更に回転し、ワークWを取り出し位置へと移動する。つまり、インデックステーブル4は、90度ごとに回転・停止するように制御される。これにより、ロードアーム3により供給されワークWは、90度回転して検査位置に移動し、その後さらに90度移動して排出位置に移動することになる。換言すると、インデックステーブル4は、4つの位置で位置決めがされるように動作する。
検査位置や排出位置などの所望に位置にワークを移動させる手段としては、インデックステーブル4に限ることはなく、たとえば、ベルトコンベアその他各種の手段がある。そして、ベルトコンベアを用いた場合には、ワークを検出するためのセンサを設け、そのセンサ位置にワークが来たときにベルトコンベアを停止することで位置決めできる。よって、センサの設置位置を調整することで任意の位置で位置決めをすることができる。
検査装置5は、たとえばカラーセンサなどを用いることで、形状と色情報を加味して良否判定を行なうことができる。これにより、より高精度な判定を行なうことができる。また、これに限ることはなく、形状を認識する画像センサを用い、簡易で短時間での良否判定を行なうようにすることもできる。
排出位置に移動したワークWは、アンロードアーム16によって掴まれてインデックステーブル14から取り出され、排出部17に送られる。そして、排出部17は、検査結果に従い良品/不良品とを分別して排出する。
上述したように、図2に示すアプリケーション(検査装置)は、仕様の異なるバリエーションを構築することができる。図3は、上記の検査装置に対して、同様の検査機能を有するものの、一部の特性において仕様の異なるバリエーションからなるアプリケーションの一例を表形式にて示している。同図における検査装置Aが、図2を用いて説明した検査装置の一例であり、検査装置Bとは、その検査装置Aの特性を一部変更したバリエーションである。同図に示される検査装置Aと検査装置Bとの特性を比較すると、ワークの搬入及び搬出に関しては双方ともロボット輸送を採用しているが、それ以外の特性においては差異が見られる。例えば、供給部において、検査装置Aはエレベータ供給を採用しているが、検査装置Bは採用していない(供給部がない)。同様に、検査対象のワークを位置決めするために、検査装置Aはインデックステーブルを用いているが、検査装置Bはベルトコンベアを採用している。同様に、ワークの停止位置についても、検査装置Aは4ポジションによる位置決めを行っているが、検査装置Bではセンサによる位置決めを採用している。そして、検査を行う際に、検査装置Aはカラーセンサを採用しているが、検査装置Bは画像センサを用いている。また、検査後のワークの排出については、検査装置Aはロボットによる良品と不良品との分別を行っており、検査装置Bでは不良品のみを押し出す方法を採用している。
これらの検査装置A並びに検査装置Bを特性によって共通部分と差異部分とに分けたコンポーネント関連図が、図4〜図6に示されている。「コンポーネント関連図」は、ユーザが選択する特性とは異なり、何をどのようにして作るかという視点で作成される部品図であり、ソフトウェア設計のクラス図に相当する。そして、分析結果を参考に、共通特性と、差異特性が一つの部品内に混在しないように部品を設計する。
図4には、コンポーネントの全体図が示されている。同図にて示されるように、検査装置20は、ワーク搬入部21、位置決め部22、検査部23、及びワーク搬出部24に区分されている。そして、ワーク搬入部21は、さらに供給部21aとロードアーム21bとが備えられている。そして、位置決め部22にはインデックステーブル22aとベルトコンベア22bが、検査部23には検査方法25が、そしてワーク搬出部24にはアンロ―ドアーム24aと搬出部24bとがそれぞれ備えられている。実際の装置(アプリケーション)における6つの部分との関係でいうと、供給部1と、ロードアーム3とでワーク搬入部21が構成され、アンロードアーム6と、排出部7とでワーク搬出部24が構成される。
図5は図4のコンポーネント関連図の一部に対応し、ワーク搬入部21における検査装置A並びに検査装置Bの共通性と差異性が示されている。同図に示すように、検査装置Aは、ワーク搬入部21として供給部(エレベータ供給)21aとロードアーム21bが備えられているが、それに対して検査装置Bは供給部21aはなく、ロードアーム21bのみ備えられている。すなわち、これらの検査装置においては、供給部21aが差異部分であり、ロードアーム21bは共通部分となる。そして、このように製品バリエーションにおける差異部分となった供給部21aは、オプション部品として切り出しておく。
図6は図4のコンポーネント関連図の一部に対応し、位置決め部22における検査装置A並びに検査装置Bの共通性と差異性が示されている。同図にて示されるように、検査装置Aは、位置決め部22としてインデックステーブル22aを採用しているが、それに対して検査装置Bはベルトコンベア22bを採用している。すなわち、これらの検査装置においては、インデックステーブル22aとベルトコンベア22bとのいずれかを選択することとなる。そして、このような場合は、インデックステーブル22aとベルトコンベア22bとを代替部品(代替コンポーネント)として切り出しておく。
このとき、ラダープログラムにて必要な回路を行単位で取り出すマクロ例としては、
!$IF(condition)[
true statements
!][
false statements
!]
となる。ここで、conditionには、条件を記述する。ある特性が選択されているかどうかを条件とする場合は、
;$feature=true
もしくは、
;$feature=false
と記述する。このとき、feature(特性)には、特定の特性名を指定する。そして、truestatementsとfalse statementsには、取り出したい範囲の回路が入り、行コメントに記述された[]で囲む。
このようなマクロを使用した例が図7及び図8に示されている。図7には上述したワーク搬入部21のファンクションブロックが示されており、オプションの扱いが示されている。同図にて示されるように、「エレベータ供給」が条件として記述されており、オプションとして選択されていることが示されている。
そして、図8には位置決め部22のファンクションブロックが示されており、代替の扱いが示されている。同図にて示されるように、インデックステーブルとベルトコンベアが代替として記述されている。このように、アプリケーション毎の部品に生じる差異は部品の変形で対応する。尚、ここでは、ワーク搬入部21におけるエレベータ供給と、位置決め部22におけるインデックステーブルとベルトコンベアについて説明したが、他の差異についても同様に対応できることは言うまでもない。
図9及び図10に、特性モデルの例が示されている。特性モデルとは、製品ラインアップを特性によって表現したモデルである。ここで「特性」は、機能、性能、デザインなどユーザが製品を選択する基準になる概念である。また、特性モデルは、装置を共通性と差異性に着目して分析した特性のモデルである。
これらの図にて示されるように、検査装置30は、その特性によって供給31,ワーク搬入32,位置決め33,検査34,ワーク搬出35,排出36のコンポーネントに分けられる。そして、供給31にはエレベータ供給がオプションコンポーネントとして備えられている。ここで、エレベータ供給に設けられている円37aは、この特性がオプションコンポーネントとして選択可能に設定されていることを示している。それに対して、ワーク搬入32及びワーク搬出35に設けられたロボット輸送38及び40は、オプションとしての特性ではないため、エレベータ供給37における円37aのような表示はされていない。
また、位置決め33には停止位置39が設けられており、その停止位置は、その特性上さらに4ポジション39aとセンサによる位置決め39bとが代替コンポーネントとして設けられている。同様に、検査34にはカラーセンサ34aと画像センサ34bが、そして排出36には不良品のみ押し出し36aとロボットによる分別36bとがそれぞれ代替整コンポーネントとして設定されている。
また、この特性モデルと、図4に示したコンポーネント関連図とを対比すると、特性モデル図の供給31とワーク搬入32とが、コンポーネント関連図のワーク搬入部21に対応し、特性モデル図のワーク搬出35と排出36とが、コンポーネント関連図のワーク搬出部24に対応する。このように、各図を作成する際の視点が異なることから、まとめ方が一部相違する。
図11は、本発明に係るプログラム作成支援装置10の一実施の形態が示されている。同図に示すように、この実施の形態においては、ドメイン分析支援ツール50と、プログラム部品管理ツール60と、プログラム部品データベース70と、単体テストツール71と、PLCシミュレータ72とを備えている。なお、ドメイン分析支援ツール50は、なくても良い。
ドメイン分析支援ツール50内の特性モデルエディタ51は、開発対象ドメインにおける製品ラインアップの共通性と差異性とを分析し、製品ラインアップを「特性」によって表現した分析モデルである特性モデル(製品の特性情報)52を作成するものである。つまり、図9に示す特性モデルを作成するエディタである。この特性モデルを作成することによって、共通性と差異性(オプションの有無や、選択(代替え)可能な部品の有無等)が分析でき、図において表現できる。係る特性モデルが、プログラム部品管理ツール60に与えられる。
プログラム部品管理ツール60は、プロダクト・パラメータ・マネージャ61と、コンポーネント・マネージャ62と、マクロ・プロセッサ63と、コンポーネント関連図エディタ64と、コンポーネント・エディタ65と、ワークメモリ66とを備えている。
プロダクト・パラメータ・マネージャ61は、ある設備装置や製品のアプリケーションを構築するのに必要なプログラム部品群と、そこに記述されるマクロへの入力パラメータセット(「プロダクト・パラメータ」と呼ぶ)67を管理するものである。本実施の形態では、ドメイン分析支援ツール50が作成した特性モデルと製品の特性情報を元に、プロダクト・パラメータを作成する機能も持っている。
つまり、差異性に基づいて変更可能な各種の組み合わせからなるアプリケーションを実現するために記述されるマクロへの入力パラメータセット(プロダクト・パラメータ)67を作成する。上述した例では、検査装置Aを実現するためのマクロの入力パラメータや、検査装置Bを実現するためのマクロへの入力パラメータを作成する。もちろん、選択・生成可能なアプリケーションは、検査装置A,Bに限られるものではなく、他の部品の組み合わせからなる検査装置も生成可能なため、それらの検査装置を実現するためのマクロへの入力パラメータも作成する。
このマクロへの入力パラメータセット67の作成であるが、製品の特性情報を認識しその差異性に基づいて選択可能な組み合わせを全て自動的に抽出することで、自動的に生成するようにすることができる。ただし、係る自動的に生成する方法によると、現実的でないアプリケーションも構築されるため、例えば、図9に示す特性モデル図を表示装置に表示すると共に、図示省略する入力装置をユーザが操作して、差異性の部分(選択可能な部分)について指定する(図10中黒丸印)。プロダクト・パラメータ・マネージャ61は、係る指定された組み合わせに基づいてマクロへの入力パラメータを生成する。これにより、ユーザが、入力装置を操作してアプリケーションを複数設定することで、マクロへの入力パラメータセット(プロダクト・パラメータ)67が生成される。
プログラム部品データベース70は、図12に示すように、製品の特性情報と、資産プログラム情報とが格納されている。製品の特性情報は、ドメイン分析支援ツール50で作成された特性モデルと、特性の組み合わせ(「マクロへの入力パラメータ」に対応)を規定する特性選択データ(マクロへの入力パラメータである)がある。資産プログラム部品情報は、各部品を構成するコンポーネントごとに登録される。これら各コンポーネントは、図4中符号20から25で示す個々のコンポーネントに対応し、「a」,「b」などの付記号が付された符号は、変更箇所及び変更内容を示すためのマクロとして、上位のコンポーネント中に記述される。
各コンポーネントは、コンポーネントヘッダと、そのコンポーネントヘッダに関連付けられた資産プログラム部品並びにテストシナリオから構成される。資産プログラム部品は、そのコンポーネントを実現するために基本となるラダープログラムである。この資産プログラム部品を元にして、一部を変更した新プログラム部品を作成する。資産プログラム部品のラダープログラムを変化したいところが存在する場合には、マクロ記述が組み込まれる。そして、1つのコンポーネントに対し、1つのファンクションブロックが構築される。テストシナリオは、プログラム部品への入力条件、および期待出力を時系列に記載したものである。作成されたユーザプログラムの検証(単体テスト)時に使用する。
コンポーネントヘッダは、図13に示すようなデータ構造からなる。図から明らかなように、上位から順に、コンポーネント名,実現している特性のリスト,インタフェース定義,関連コンポーネントリスト,プログラム種別,プログラム部品ファイル,テストシナリオリスト並びにコメントから構築される。
「コンポーネント名」には、コンポーネント関連図エディタで表示されるそのコンポーネントの名称が記述される。このコンポーネント名は、対応するコンポーネントの1番上の欄に標記される。
「実現している特性のリスト」には、コンポーネントにより実現/実装されている特性のリストが記述される。特性の名前でもあり、コンポーネント関連図エディタで表示された場合に、そのコンポーネントの2番目の欄に標記される。また、特性モデル図(図9等)において、各それぞれの特性として標記される。
インタフェース定義と、関連コンポーネントリストは、外部との関連を定義する領域である。「インタフェース定義」には、他のコンポーネントが利用可能な入出力定義を記述する。具体的には、変数名およびデータ型、入出力の区別などが記述される。「関連コンポーネントリスト」には、そのコンポーネントが動作するために必要なコンポーネントを記載したリストが記述される。たとえば、図4において検査装置20のコンポーネントには、ワーク搬入部21,位置決め部22,検査部23,ワーク搬出部24の各コンポーネントを特定する情報がリストとして記述される。これにより、各コンポーネントの接続関係がわかり、コンポーネント関連図も再現できる。
プログラム種別と、プログラム部品ファイルは、コンポーネント本体であり、「プログラム種別」には、プログラム部品が実装されている言語、または実行できるPLC機種の種別が記述され、「プログラム部品ファイル」には、上記プログラム種別により、実装されたプログラムのソースコードが記述される。
テストシナリオリストは、制御対象情報であり、上記プログラム部品への入力条件、および期待出力を時系列に記載したシナリオファイルを複数リストにしたものが記述される。このテストシナリオリストは、図13(b)に示すように、シナリオIDと、テスト結果と、テストシナリオファイル名と、適合特性選択データ名とを関連付けたテーブルとなっている。ここで、シナリオIDは、テストシナリオをユニークに特定するための認識番号であり、テスト結果の欄は、そのテストシナリオに従って実行した結果(OK/NG)並びに未テスト状態(−)が格納される。テキストシナリオファイル名は、各テキストシナリオのファイル名が格納される。適合特性選択データ名は、対応するテキストシナリオを用いてテストを行なえる特性選択データのファイル名を格納する。すなわち、異なる特性選択データであっても、プログラム部品への入力条件、およびそれに対する期待出力の時系列データが等しいことがある。特に、アプリケーション群を構成する各アプリケーションは、バージョンアップであったり、製品の品揃えであり共通する部分も多数あるため、異なる特性選択データであっても同一のテストシナリオを用いることができることがある。また、1つの特性選択データに対し、複数のテストシナリオが用意されることももちろんある。
なお、「コメント」には、コンポーネントの内容を把握するためのコメントが記述される。このように、コンポーネントヘッダにより、そのコンポーネントに格納された資産プログラム部品並びにテストシナリオとのリンクが張られるとともに、他のコンポーネントとの関連づけが行なわれる。
単体テストツール71は、ラダー部品に与える仮想入力と期待出力のペアをテストケースとして設定できる。設定した「仮想入力」をPLCシミュレータ72に与え、シミュレーションを実行し、その出力と期待出力を比較して、テストケースのOK/NGを判定する機能を持つ。その判定結果は、コンポーネント関連図エディタ64,コンポーネント・マネージャ62経由でプログラム部品データベース70に格納される。
PLCシミュレータ72はプログラマブルコントローラ(PLC)をパソコン上で模擬実行するエミュレータである。ダウンロードされたラダープログラムを、単体テストツール71から与えられる仮想的なI/O情報を元に実行する。
コンポーネント・マネージャ62は、プログラム部品データベース70にアクセスし、データの読み書きを行なう。一例を示すと、ラダープログラムの作成用の資産プログラム部品(マクロ付)が格納されているプログラム部品データベース70から、プロダクト・パラメータ・マネージャ61によって作成されたプロダクト・パラメータに従い、必要となる資産プログラム部品68を取り出す機能を有する。また、プログラム部品データベース70に格納されていない部品を新規作成したり、既存の資産プログラム部品に編集を加えた場合において、新たに作成された資産プログラム部品をプログラム部品データベース70に格納する機能も有する。
マクロ・プロセッサ63は、マクロ記述とプロダクト・パラメータに従い、ラダープログラムの変形を実行し、特定アプリケーション用のプログラム部品を生成する機能を有する。すなわち、アプリケーションの要求仕様(特性)と差異部分の関連づけを行なうもので、図14に示すように、必要な資産プログラム部品を読み出し、資産プログラム部品中にマクロ記述が存在するものに対しては、マクロへの入力パラメータである特性選択データに基づいてマクロ処理を実行し、ラダープログラム中の不要な回路を削除し、必要十分なラダー回路で記述された特定のアプリケーション用プログラム部品が生成される。マクロ処理は、あらかじめマクロ記述で定義した変化点を特性選択データを入力パラメータとして変形処理するもので、係る処理をマクロ・プロセッサ63が実行する。
なお、図14に示すように、資産プログラム部品の中には、実際のプログラムと、マクロに加え、その子コンポーネントとが編集禁止状態にあるか否かを規定する「読み取り専用属性フラグ」と、テストが完了して合格した資産プログラム部品であるかを特定するための「テスト済みフラグ」がある。これらのフラグについての利用は、後述する。
コンポーネント関連図エディタ64は、コンポーネント間の関連を視覚的に表示した図であるコンポーネント関連図(図4参照)を表示装置のエディタ画面上に表示すると共に、そのコンポーネント関連図上で編集・テスト対象コンポーネントを特定し、コンポーネントの編集手段たるコンポーネント・エディタ65や、テスト手段たる単体テストツール71を起動する。コンポーネント関連図は、例えばプログラムデータベース70に格納されたコンポーネントヘッダの関連コンポーネントリストなどを参照することで各コンポーネントの関係がわかるので、コンポーネント関連図を構築できる。換言すると、コンポーネント関連図が構築できるような情報を関連コンポーネントリストに登録する。また、特性モデルと同様に、コンポーネント関連図もプログラム部品データベース70に登録しておき、それを読み出すようにしても良い。
また起動処理は、具体的には、図15に示すように、表示装置に表示されたコンポーネント関連図エディタ34のエディタ画面Wに表示されたコンポーネント関連図の中から、処理対象のコンポーネントを選択する。係る選択は、たとえばユーザがポインティングデバイスを操作し、エディタ画面W上のポインタを移動し、目的のコンポーネント(図では「ワーク搬入部」)の上に位置させた後、クリックする。すると、コンポーネント関連図エディタ64は、そのクリックされた位置の座標位置からどのコンポーネントが指定・選択されたかを判断し、選択されたことを示す標記(図の例では、頂点並びに中間点に○を表示)をするとともに、起動する手段(編集/単体テスト)を選択する入力メニューリストMLを表示する。そして、入力メニューリストML中の「編集」が選択された場合には、編集手段たるコンポーネント・エディタ65を起動し、入力メニューリストML中の「単体テスト」が選択された場合には、テスト手段たる単体テストツール71を起動する。これらの処理もコンポーネント関連図エディタ64が行なう。
さらにコンポーネント関連図エディタ64は、指定されたコンポーネントの資産プログラム部品(マクロ記述済み)68を取得すると共に、そのコンポーネントを元とし(以下、親のコンポーネントと表現)、その元から派生したコンポーネント(以下、子のコンポーネントと表現)が有るか否かを判断する。つまり、図15のコンポーネント関連図で下位側に接続されたコンポーネント(子)があるか否かを判断し、存在する場合には、その子のコンポーネントに対応する資産プログラム部品68も読み出し、読み出した各資産プログラム部品を合成し、合成したプログラムをワークメモリ66に格納する。図15に示す例では、「ワーク搬入部」が選択されたため、その下位に繋がる「供給部」と「ロードアーム」の各コンポーネントが子のコンポーネントとなり、それぞれの資産プログラム部品も読み出され、合成される。ただし、選択されたのはあくまでも親のコンポーネントである「ワーク搬入部」であるため、本実施の形態では、編集対象は係る親のコンポーネント(ワーク搬入部)に対する資産プログラム部品の部分のみとした。換言すると、子のコンポーネント(供給部,ロードアーム)に対応する資産プログラム部品については、プログラムの中身(ラダー回路)を見ることはできるものの、編集処理はできないようにしている。もちろん、本発明は係る機能を設けるものに限られるものではなく、このコンポーネントに対しても編集できるようにしても良い。
このとき、コンポーネント関連図エディタ64は、ワークメモリ66に格納した際の日時情報を記憶保持する機能も持つ。また、起動されたコンポーネント・エディタ65は、このワークメモリ66に格納されたプログラム(合成済み)を読み出して編集処理をする。そして、コンポーネント・エディタ65は、編集処理が終了したならば、編集後のプログラムをワークメモリ66に保存する。この保存された編集後のプログラムは、コンポーネント関連図エディタ64で読み出され、編集対象の資産プログラム部品(編集後)をコンポーネント・マネージャ62を介してプログラム部品データベース70の対応するコンポーネントのファイルに格納し、更新処理をする。コンポーネント関連図エディタ64は、コンポーネント・エディタ65で編集処理が行なわれなかった場合には、上述したプログラム部品データベース70への更新処理を行なわないようにしている。編集処理がされたか否かは、コンポーネント関連図エディタ64がワークメモリ66に保存した際に記憶した日時情報と、現在のプログラムについての保存時の日時情報を比較し、一致すれば編集処理がされておらず、一致しなければ編集処理がされたと判断するようにしている。もちろん、編集処理の有無の判断は、これに限ることはなく、サムチェックや、編集前のプログラム全体を記憶しておきそれと比較するなどの他、各種の方式を採ることができる。
コンポーネント・エディタ65は、コンポーネントの編集等を行なうものであり、本実施の形態ではマクロ記述を含んだラダープログラム部品の編集を行うものである。つまり、コンポーネント・エディタ65の一形態として、ラダーエディタ(ラダープログラミングツール)がある。この実施の形態においては、マクロの編集機能と、ラダープログラムの編集機能とを併せ持っている。図16は、起動されたコンポーネント・エディタ(ラダーエディタ)65の操作画面を示している。
次に、編集機能を説明する。本実施の形態では、コンポーネント関連図エディタ64とコンポーネント・エディタ65との協働により、編集機能を実現している。具体的には、図17,図18に示すフローチャートを実行するものである。
まず、コンポーネント関連図エディタ64は、ポインティングデバイスを操作して指定された(ポインタでクリックされた)コンポーネントを認識し、そのコンポーネントのコンポーネントヘッダをコンポーネント・マネージャ62を介してプログラム部品データベース70より取得する。
該当コンポーネントの「資産プログラム部品」ファイルが存在するか否かを判断し(S2)、存在する場合には、該当コンポーネント、およびそれに関連する子のコンポーネントのリストを作成する(S3)。このリストの作成は、上述したように、コンポーネントヘッダの関連コンポーネントリストに基づいて作成できる。
ついで、上記リストに従い、プログラム部品データベース70より、リストに載った個々の資産プログラム部品のファイルを取り出すとともに(S4)、その取り出した個々の「資産プログラム部品」のファイルを合成し、コンポーネント・エディタ65のラダープログラミングツールが認識できる1つのプログラムファイルとする。(S5)。
ユーザが指定したコンポーネント以外、つまり、子のコンポーネントに対応するプログラム部分(ファンクションブロック)は、編集ができないように読み取り専用属性に変更する(S6)。つまり、図14に示すように、資産プログラム部品には、プログラム(マクロ付)とともに、読み取り専用属性フラグと、テスト済みフラグが設定されている。そこで、読み取り専用属性フラグをONにする。
そして、該当プログラムファイルをコンポーネント・エディタ65に渡す。具体的には、処理ステップS5で作成した1つのプログラムファイル(S6の処理で設定した読み取り専用属性フラグON情報とともに)をワークメモリ66に保存する。このとき、保存日時を記憶する。そして、コンポーネント・エディタ65を起動する。また、処理ステップS2の分岐判断がNo、つまり、該当コンポーネントの「資産プログラム部品」ファイルが存在しない場合には、「資産プログラム部品」のファイルを新規作成する(S8)。上述した処理ステップS1からS8までの各処理は、コンポーネント関連図エディタ64が実行する。
次に、コンポーネント・エディタ65は、ワークメモリ66に格納された該当プログラムファイルをロードし、該当「資産プログラム部品」の内容(ファンクションブロックのラダープログラム)を表示装置のエディタ画面に表示する(図16参照)。ユーザは、コンポーネント・エディタ65であるラダープログラミングツール(ラダーエディタ)を操作し、表示されたラダー回路に対する編集処理を行ない、その後ユーザによる編集処理を終了する(S10,S11)。すると、編集後のラダープログラムについて、文法が正しいか否かのチェックを行ない(S12)、文法が正しくなるまで編集処理を行なわせる。上述した処理ステップS10からS12までの各処理は、コンポーネント・エディタ65が実行する。
コンポーネント・エディタ65が終了したならば、プログラム変更の有無を判断する(S13)。本実施の形態では、現在のワークメモリ66に記憶されているプログラムファイルの保存日時と、処理ステップS7で記憶保持した日時情報とを比較し、一致している場合には、プログラム変更がなく、一致していない場合には、プログラム変更があったと判断するようにした。
プログラム変更があった場合には、そのコンポーネントのテスト済みフラグをOFFにし(S14)、該当プログラムを「資産プログラム部品」としてプログラム部品データベース70に保存する(S15)。つまり、後述する単体テストにより合格し、テスト済みフラグがONになっている場合でも、編集処理によりプログラムの内容が変更された場合には、そのテスト済みフラグは編集前のプログラムについてのものであるため、フラグをOFFにし、不合格状態(ここでは未テスト状態)に戻す。また、これに伴い、プログラム部品データベース70に格納されるテストシナリオのテスト結果の欄は「−」にする。なお、処理ステップS13の分岐判断がNo、つまり、プログラム変更がなかった場合には、そのまま処理を終了する。上述した処理ステップS13からS15までの各処理は、コンポーネント関連図エディタ64が実行する。
図19は、編集禁止手段の機能を示すフローチャートである。図18の処理ステップS10のファンクションブロックの編集処理を行なうべく、ユーザがその編集しようとするファンクションブロックを指定した場合、その指定されたファンクションブロックを認識し(S21)、該当ファンクションのラダー回路を表示する(S22)。そして、その該当ファンクションブロックに関連する読み取り専用属性フラグがONか否かを判断し(S23)、読み取り専用属性がONの場合には、編集モードを解除する(S26)。これにより、ラダー回路を見ることはできるが、編集処理は禁止される。また、読み取り専用属性がOFFの場合には、そのまま編集モードに移行し(S24)、ユーザからの編集命令を待ち、入力された指示に従ってラダー回路の編集(変更)を行なう(S25)。この図19に示すフローチャートに示された機能は、コンポーネント・エディタ65であるラダープログラミングツールが行なう。
次に、単体テスト機能について説明する。図20は、一部のコンポーネントに対して単体テストを実行した後のコンポーネント関連図エディタ63により表示されるコンポーネント関連図を示している。図20に示すように、単体テスト機能を実行し、テスト済み(合格)のコンポーネントにはテスト済みマークMを付けたり、表示する色を変えたりしている(図では、両方行なっている)。このように表示形態を変えることで、「単体テストを実行していない」か或いは「単体テストを実行したがNG」のコンポーネントと、単体テストが完了(OK)」して完成されたコンポーネントとを、一目で識別することができる。
そして、係る単体テスト機能は、本実施の形態では、コンポーネント関連図エディタ64と単体テストツール71と、PLCシミュレータ72との協働により実現している。具体的には、図21に示すフローチャートを実行するものである。
ユーザがポインティングデバイスを操作してコンポーネントを指定すると共に、入力メニューリストML中の「単体テスト」が選択された場合、コンポーネント関連図エディタ64は、指定されたコンポーネントを認識し、そのコンポーネントのコンポーネントヘッダをコンポーネント・マネージャ62を介してプログラム部品データベース70より取得する(S31)。次いで、該当コンポーネントの「資産プログラム部品」ファイルが存在するか否かを判断し(S32)、存在しない場合には、エラー表示をして(S37),処理を終了する。
一方、存在する場合には、特性選択データを(ユーザに選択要求し)、プログラム部品データベース70より取り出す(S33)。すなわち、本実施の形態では、単体テストをする特定アプリケーション用プログラム部品を生成するためのマクロへの入力パラメータ(特性選択データ)をマニュアルで指定するようにしている。これは、例えば、上述した編集処理機能により編集したプログラムが正常に動作するか否かをチェックしたいことが多々ある。特に、マクロに対応する一部のラダー回路を編集した場合、その編集したラダー回路に関連する特性選択データを優先的にテストしたいということがある。そこで、係る要求を満たすために、ユーザが単体テストを実行したいコンポーネントを指定させるとともに、特性選択データを指定させるようにした。もちろん、プログラム部品データベース70に格納された特性選択データを順次抽出するように自動実行するようにしても良い。
次いで、ユーザに指定された特性選択データに対応する「特定アプリケーション用プログラム部品」を生成する(S34)。この処理ステップ34の具体的な処理手順は、図22に示すフローチャートを実行する。すなわち、まず該当コンポーネント、およびそれに関連する子のコンポーネントのリストを作成する(S41)。係る処理は、編集処理における処理ステップS3と同様である。そして、上記リストに従い、「プログラム部品データベース70」より、個々の「資産プログラム部品」のファイルを取り出す(S42)。係る処理は、編集処理における処理ステップS4と同様である。
その後、指定された該当特性選択データ(マクロへの入力パラメータ)を用いてマクロ・プロセッサ63にてマクロ処理を行い、「資産プログラム部品」を「特定アプリケーション用プログラム部品」に変換する(S43)。ここで、該当特性選択データは、指定されたコンポーネントはもちろんのこと、子のコンポーネントが存在する場合には、その子のコンポーネントについての特性選択データも含まれる。換言すると、S33におけるユーザの選択に伴い取り出された特性選択データは、子のコンポーネントについても指定され、取り出される。そして、個々の「特定アプリケーション用プログラム部品73」のファイルを合成し、1つのプログラムファイルとする(S44)。
このようにして特定アプリケーション用プログラム部品が生成される。つまり、子のコンポーネントが存在しない場合には、特定アプリケーション用プログラム部品は元々指定された1つのコンポーネントから生成された1つの特定のアプリケーション用プログラム部品からなるプログラムファイルで構成されるが、子のコンポーネントが存在する場合には、各コンポーネントに基づく特定アプリケーション用プログラム部品を合成し、1つのプログラムファイルを生成する。
次に、コンポーネント関連図エディタ64は、コンポーネント・マネージャ62を介して、処理ステップ34を実行して生成された「特定アプリケーション用プログラム部品」に対応したテストシナリオを、プログラム部品データベース70から取り出す(S35)。この処理ステップ35の具体的な処理手順は、図23に示すフローチャートを実行する。すなわち、まず、コンポーネント関連図エディタ64は、コンポーネント・マネージャ62を介してプログラム部品データベース70に格納された該当コンポーネントヘッダより、テストシナリオリストを取得する。つまり、子のコンポーネントが存在する場合には、その子のコンポーネントに対するテストシナリオも取得する。そして、取得したテストシナリオリストから、該当特性選択データと適合するテストシナリオを抽出する(S52)。すなわち、図13(b)に示すように、コンポーネントヘッダのテストシナリオリスト名の欄には、適合特性選択データ名が記述されているため、指定された特性選択データと一致するテストシナリオファイル名をすべて抽出し、取得することができる。
コンポーネント関連図エディタ64は、抽出した「指定された特性選択データと一致するテストシナリオファイル名」を候補テストシナリオとして表示画面に表示し、ユーザに対して今回実行するテストシナリオの選択を促す(S53)。そして、ユーザが選択したならば、その選択されたテストシナリオ名に対応するテストシナリオのファイルを取得する(S54)。
コンポーネント関連図エディタ64は、上記の処理ステップS34,S35を実行して取得した該当するプログラムファイルとテストシナリオを単体ツールに渡す(S36)。そして、単体ツールは、取得したプログラムファイルとテストシナリオに基づいてテストを実行する(S38)。係るテストの具体的な処理手順は、図24に示すフローチャートを実行する。すなわち、まず、単体テストツール71は、該当プログラムファイルをPLCシミュレータ72にダウンロードし(S61)、PLCシミュレータ72の実行を開始する(S62)。次いで、単体テストツール71は、テストシナリオを順番に実行する(S63)。シナリオが終了したか否かを判断し(S64)、終了していない場合には、シナリオに従い入力を変更する(S65)。この入力の変更に伴い、PLCシミュレータ72は、演算実行して出力をするので、単体ツール71は、その出力を記録し、シナリオの想定結果と比較する(S66)。そして、比較した結果、出力が想定内か否か、つまり、想定結果と一致するか否かを判断し(S67)、想定内の場合には、処理ステップS63に戻り、次のシナリオの実行をする。
処理ステップ67の分岐判断でNo、つまり、PLCシミュレータ72が求めた出力と、想定結果とが一致しなかった場合には、このテストシナリオについてのテスト結果をNGとする(S68)。また、処理ステップ64の分岐判断でYesとなった場合には、シナリオを最後まで実行して全ての出力の結果が想定結果と一致したことを意味するので、このテストシナリオについてのテスト結果をOKとする(S69)。
このようにして指定された特性選択データに基づく特定アプリケーション用プログラム部品についての、選択されたテストシナリオを用いた単体テストツールでのテストが終了すると、テスト結果をテストシナリオリスト内の該当テストシナリオの結果に反映する(S39)。すなわち、単体テストツール71は、コンポーネント関連図エディタ64から渡された該当プログラムファイルとテストシナリオに基づくテストが終了したならば、そのテスト結果をコンポーネント関連図エディタ64に渡すため、コンポーネント関連図エディタ64は、受け取ったテスト結果(OK/NG)を、該当するコンポーネントヘッダのテストシナリオリスト名のテスト結果の欄に格納する。
コンポーネント関連図エディタ64は、全てのテストシナリオのテスト結果がOKのコンポーネントには、図20に示すようにテスト済みマークMを付けたり、色を変える(S40)。これにより、コンポーネント関連図を見るだけで、テストが完了(全てのテストシナリオのテスト結果がOK:合格)していないコンポーネントを一目で見つけることができる。よって、使用者は、編集処理或いは単体テストをすべきコンポーネントを見つけ、必要な処理をスムーズに実行できる。なお、テストに合格したコンポーネントは、本来プログラムが完成しており、修正する必要はないが、編集機能により編集をすることはできる。係る場合には、図18の処理ステップS14の実行により、テスト済みフラグがOFFとなるため、全てのテストシナリオのテスト結果がOKの条件を満たさなくなるので、コンポーネント関連図エディタ64は、テスト済みマークMを消去したり、色を元の状態に戻す処理を行なうことになる。
これにより、たとえ一度単体テストに合格したコンポーネントであっても、その後に編集処理をした場合は、その編集によって書き換えられたラダー回路が正常に動作する保証がないため、一旦不合格状態に戻すことになる。よって、ユーザは再度単体テストを実行し、編集後のコンポーネントもテストが合格するか否かの判断を行なうことができる。
なお、上述した実施の形態では、合格したコンポーネントに合格したことがわかる表示形態(マーク付与や色替え)とし、合格していないも(不合格と未テスト)は基本の表示形態のままとしたが、合格していないものについては、不合格と未テストをさらに識別可能に異なる表示形態をとるようにしても良い。
合格した特定アプリケーション用プログラム部品は、特定のPLCに格納されて、そのPLCは特定アプリケーション用プログラム部品(ラダープログラム)をサイクリックに実行し、検査装置の一部である特定アプリケーションを制御する。また、合格した複数の特定アプリケーション用プログラム部品をもとに、それらを合成したプログラムを作成し、必要なデストをする。その後、その合成プログラムをPLCに格納し、そのPLCが合成プログラムをサイクリックに実行し、検査装置全体を任意に制御する。