以下、本発明の開発支援装置の一実施の形態について、図面を参照しつつ説明する。なお、同一の構成要素には各図において同一の符号を付し、詳細な説明は繰返さない。
[開発支援装置のシステムの構成]
図1は、本実施の形態の開発支援装置のシステムの構成を模式的に示す図である。
図1を参照して、開発支援装置は、当該開発支援装置のハードウェア501と、ハードウェア501を制御するコンピュータシステムを全体的に管理するOS(Operating System)502と、画像処理検査装置における具体的な処理内容を記述したプログラムからなる基本フロー507と、基本フロー507の各プログラムが参照するプログラムからなるライブラリ503とを含む。
基本フロー507は、画像処理検査装置における検査処理について、検査処理中にディスプレイに表示される画面の表示を制御する運転画面UI(User Interface)506と、当該検査処理に含まれる複数の処理段階のそれぞれの処理内容を制御するための画像処理モジュール(画像処理モジュールA509A〜画像処理モジュールN509N)とを含む。
画像処理モジュール509A〜509Nは、それぞれ、実際の処理内容を制御する処理モジュールMS(Measurement Structure)504A〜504Nと、各処理モジュールMSについての設定情報をディスプレイ(画像処理検査装置または開発支援装置のディスプレイ)に表示させるための処理モジュールUI(User Interface)505A〜505Nとを含む。
開発支援装置(または、画像処理検査装置)において、SIは、設定データ510に基づいて、基本フロー507を作成する。基本フロー507は、上記したように、運転画面UI506と複数の画像処理モジュール509A〜509Nを含む。開発支援装置では、(後述する画像処理モジュール記憶部291に)複数の画像処理モジュールが用意されている。SIは、それらの処理モジュールから、基本フロー507に組み込むべきものを選択するとともに、組み込む画像処理モジュールの処理モジュールMSに対して種々の値の設定を行なう。なお、SIは、処理モジュールMSに対する値等の設定を行なう場合、当該処理モジュールMSのソースコードを直接書き換えたり追加したりすることもできるし、ディスプレイに当該処理モジュールMSに対応した処理モジュールUIに基づく画面を表示させて当該画面を介して設定するべき値を入力することもできる。また、処理モジュールMSに対する値等の設定は、対応する画像処理モジュールが基本フローに組み込まれる前に行なうこともできる。
SIが処理モジュールUIを利用して処理モジュールMSの設定を行なうために、本実施の形態の開発支援装置では、画像処理モジュールとして、処理モジュールMSを作成するための素材(本明細書では、特に区別する必要がない場合には、処理モジュールUIを利用した設定が行なわれる前の状態の処理モジュールMSについても「処理モジュールMS」と呼ぶ)が予め準備されるとともに、各処理モジュールMSに対応した処理モジュールUIが準備されている。これにより、SIは、画像処理モジュールを作成する際(カスタマイズする際)に、処理モジュールMSにおけるプログラム(ソースコード)の記述を行なう代わりに処理モジュールUIに基づいて表示される画面に従って値(情報)を入力すればよくなる。処理モジュールUIに基づいた画面に従って情報が入力されることにより、処理モジュールMSを作成するための素材に対して適宜情報の書込みが行なわれ、これにより、SIが意図する処理モジュールMSが作成される。
本実施の形態の開発支援装置では、SIによる基本フローの作成の前に、処理モジュールMSの素材および当該処理モジュールMSに対応する処理モジュールUIが作成される。なお、処理モジュールMSは、後述するように、スケルトン形式で保存されているテンプレートに対して適宜情報の書換え(または、追加)が行なわれることにより、作成される。また、処理モジュールUIは、開発支援装置のハードディスク(後述するモジュール作成用データ記憶部25)に記憶された画像情報に適宜情報が追加されることにより作成される。
開発支援装置において作成された基本フローは、ライブラリとともに、画像処理検査装置へインストールされる。画像処理検査装置では、基本フローを実行させることにより、部品の検査等の処理が実現される。なお、開発支援装置では、基本フローのソースコードが作成された場合、これに基づいて、開発支援装置と画像処理検査装置のそれぞれに対応したOS上で動作する基本フローが作成されることが好ましい。
[開発支援装置のハードウェアの構成]
図2は、本発明の一実施の形態である開発支援装置のハードウェア構成を模式的に示す図である。開発支援装置1は、画像処理検査装置の画像処理機能をカスタマイズする装置であって、画像処理検査装置で動作する実行形式のプログラムを作成する。
図2を参照して、本実施の形態の開発支援装置1は、汎用のコンピュータで実現されており、ディスプレイ2と、CPU(Central Processing Unit)およびメモリ4と、操作入力部7と、ハードディスク5と、リムーバブルメディア6を備える。
操作入力部7は、マウス20とキーボード21を含み、開発支援装置1のユーザであるSIからの操作入力を受け付ける。なお、開発支援装置1では、SIによる操作とは別に、処理モジュールMSの素材等を作成する処理が実行される。操作入力部7は、このような処理における操作入力も受け付ける。
ハードディスク5は、カスタマイズプログラム記憶部14と、画像処理モジュール記憶部291と、基本フロー記憶部294と、イベント処理モジュール記憶部292と、運転画面記憶部293と、テンプレート記憶部16と、部品記憶部15と、OS類記憶部22と、ライブラリ類記憶部23と、シミュレーションソフト記憶部17と、マニュアル類記憶部18と、実行プログラム記憶部19と、モジュール作成用プログラム記憶部24と、モジュール作成用データ記憶部25とを含む。
カスタマイズプログラム記憶部14は、カスタマイズプログラム(Application Producer)を記憶する。カスタマイズプログラムは、CPUに読み込まれて実行され、コンピュータを画像処理機能の開発支援装置1の各構成要素として機能させる。
画像処理モジュール記憶部291は、ソースコード形式の画像処理モジュールを記憶する。画像処理モジュールは、色面積の計算、エッジ位置検出などの画像処理の基本単位を実行するためのもので、複数個のファイルからなる。そして、画像処理モジュール記憶部291は、出荷時に予め組み込まれている画像処理モジュールと、SIによって新たに作成された画像処理モジュールとを記憶する。
画像処理モジュールは、画像処理結果の表示部分、画像処理結果の出力部分、画像処理の処理内容である演算部分、および画像処理のパラメータの設定のためのユーザインタフェース部分を少なくとも含む。画像処理のパラメータの設定には、サーチなどのモデル画像の領域座標および画像の設定、画像計測などの計測領域の設定、面積計測での穴埋め(輪郭の中を塗りつぶす)機能の実行の有無の設定、計測結果の判定を行なうための上下限値の設定などがある。
また、上記したように、各画像処理モジュールは、画像処理の基本単位を実行するための部分(処理モジュールMS)とともに、当該基本単位の処理に対する各種の設定を行なうための画面を表示させるための部分(処理モジュールUI)を含む。
基本フロー記憶部294は、SIによって作成された画像処理モジュールの実行順序と、そのパラメータからなる基本フローを記憶する。
イベント処理モジュール記憶部292は、SIによって新たに作成されたソースコード形式のイベント処理モジュールを記憶する。イベント処理モジュールは、画像処理検査装置による画像処理の実行中にイベントが発生した場合に、イベントが発生したタイミングで実行される処理を定めたものである。イベント処理モジュールは、画像処理モジュールのようなパラメータの設定のためのユーザインタフェース部分を含まない。
運転画面記憶部293は、SIによって新たに作成された運転画面を記憶する。運転画面は、画像処理検査装置による画像処理の結果を表示するための画面であり、記憶されている運転画面は、ビジュアルベーシックのファイルからなる。
テンプレート記憶部16は、画像処理モジュールのテンプレートおよび運転画面のテンプレートを記憶する。
運転画面のテンプレートは、ビジュアルベーシック(登録商標)のファイルからなる。テンプレートとは、新たな画像処理モジュールおよび運転画面を作成するときの原型となるものであって、1個以上のファイルで構成され、ファイル内には、実行する典型的な呼び出し関数が記述されているものである。ファイル内の呼び出し関数には、典型的な実行命令が記述されていたり、あるいはリターン値だけが記載されていたりする。なお、このようなテンプレートのプログラムパターンを、本明細書では適宜スケルトン形式という。
図3は、画像処理モジュールのテンプレートを構成するファイルの一覧とその機能の例を表わす図である。画像処理モジュール記憶部291に記憶されている画像処理モジュールも、「Sample」が個々の画像処理モジュール特有の名称となっている以外は、図3に示されたものと同様のファイル構成である。
図3を参照して、「Sample_jpn.msg」は、日本語のメッセージファイルである。「Sample_eng.msg」は、英語のメッセージファイルである。
UIプログラム(処理モジュールUI)は、画像処理のパラメータ(各種の閾値など)を設定するためのユーザインタフェースを規定したものであり、2個の必須ファイルを含む。「NormalForm.vb」は、通常使用されるユーザインタフェースを記述したビジュアルベーシックのファイルである。「NonstopForm.vb」は、計測中に一時的に上下限値を変更するための簡易ノンストップをするときのユーザインタフェースを記述したビジュアルベーシックのファイルである。
MSプログラム(処理モジュールMS)は、画像処理の処理内容である演算(つまり計測)、画像処理結果(つまり計測結果)の表示、画像処理結果(つまり計測結果)の出力などを規定したものであり、9個の必須ファイルと、5個の任意ファイルとを含む。MSプログラムのうち、どのファイルが画像処理モジュールの表示部分、出力部分、および演算(計測)部分のいずれに対応するかがファイル名によって識別可能とされている。これにより、SIがテンプレートを編集する際にどのファイルを修正すべきであるかが容易にわかる。また、MSプログラムのテンプレートに記述される関数は、その中身が戻り値(リターン値)だけが記述されているスケルトンの形式である。
「AssignProc.cpp」は、処理ユニット登録時処理関連の処理を記述したテキストファイルである。処理ユニットは、画像処理モジュールと同義である。「Assign」は登録を意味し、「Proc」は処理を意味する「Processing」を略したものであるから、SIがテンプレートの編集の際に、「AssignProc.cpp」が上記処理を記述するものであることを容易に識別できる。
「FigureUpdate.cpp」は、図形データ更新時処理関連の処理を記述したテキストファイルである。「Figure」は図形を意味し、「Update」は更新を意味するものであるから、SIがテンプレートの編集の際に、「FigureUpdate.cpp」が上記処理を記述するものであることを容易に識別できる。
「ItemDefs.h」は、処理項目の各種定義を記述したテキストファイルである。処理項目は、画像処理モジュールおよび処理ユニットと同義である。「「Item」は項目を意味し、「Def」は定義を意味する「Definition」を略したものであるから、SIがテンプレート
の編集の際に、「ItemDefs.h」が上記処理を記述するものであることを容易に識別できる。
「ItemInit.cpp」は、処理項目の初期化処理関連の処理を記述したテキストファイルである。「Item」は項目を意味し、「Init」は初期化を意味する「Initialization」を略したものであるから、SIがテンプレートの編集の際に、「ItemInit.cpp」が上記処理を記述するものであることを容易に識別できる。
「MeasureDisp.cpp」は、計測結果表示処理関連の処理を記述したテキストファイルで
ある。「Measure」は計測を意味し、「Disp」は表示を意味する「Display」を略したものであるから、SIがテンプレートの編集の際に、「MeasureDisp.cpp」が上記処理を記述
するものであることを容易に識別できる。
「MeasureInit.cpp」は、計測初期化/終了関連の処理を記述したテキストファイルで
ある。「Measure」は計測を意味し、「Init」は初期化を意味する「Initialization」を
略したものであるから、SIがテンプレートの編集の際に、「MeasureInit.cpp」が上記
処理を記述するものであることを容易に識別できる。
「MeasureOut.cpp」は、計測結果出力処理関連の処理を記述したテキストファイルである。「Measure」は計測を意味し、「Out」は出力を意味するものであるから、SIがテンプレートの編集の際に、「MeasureOut.cpp」が上記処理を記述するものであることを容易に識別できる。
「MeasureProc.cpp」は、計測処理関連の処理を記述したテキストファイルである。「Measure」は計測を意味し、「Proc」は処理を意味する「Processing」を略したものであるから、SIがテンプレートの編集の際に、「MeasureProc.cpp」が上記処理を記述するも
のであることを容易に識別できる。
「UnitData.cpp」は、処理ユニットデータ設定/取得関連の処理を記述したテキストファイルである。「Unit」はユニットを意味し、「Data」はデータを意味するものであるから、SIがテンプレートの編集の際に、「UnitData.cpp」が上記処理を記述するものであることを容易に識別できる。
「FigureData.cpp」、処理ユニットの図形データ操作関連の処理を記述したテキストファイルである。「Figure」は図形を意味し、「Data」はデータを意味するものであるから、SIがテンプレートの編集の際に、「FigureData.cpp」が上記処理を記述するものであることを容易に識別できる。
「RenumProc.cpp」は、処理ユニットの参照番号更新処理関連の処理を記述したテキス
トファイルである。「Renum」は番号更新を意味する「Renumber」を略したものであり、
「Proc」は処理を意味する「Processing」を略したものであるから、SIがテンプレートの編集の際に、「RenumProc.cpp」が上記処理を記述するものであることを容易に識別で
きる。
「SaveLoad.cpp」は、処理ユニットのデータのセーブおよびロード関連の処理を記述したテキストファイルである。「Save」セーブ(保存)を意味し、「Load」はロード(読出し)を意味するものであるから、SIがテンプレートの編集の際に、「SaveLoad.cpp」が上記処理を記述するものであることを容易に識別できる。
「SetupData.cpp」は、設定時の画像処理関連の処理を記述したテキストファイルであ
る。「Setup」は設定を意味し、「Data」はデータを意味するものであるから、SIがテ
ンプレートの編集の際に、「SetupData.cpp」が上記処理を記述するものであることを容
易に識別できる。
「ThroughProc.cpp」は、スルー表示のための画像入力および生成処理関連の処理を記
述したテキストファイルである。「Through」はスルー(直通)を意味し、「Proc」は処
理を意味する「Processing」を略したものであるから、SIがテンプレートの編集の際に、「ThroughProc.cpp」が上記処理を記述するものであることを容易に識別できる。
部品記憶部15は、画像処理モジュールのユーザインタフェースの画面のテンプレートおよび運転画面のテンプレートに貼り付けることができる部品(ActiveXコントロール)を記憶する。また、部品記憶部15は、イベント処理開発で利用する部品を記憶する。部品記憶部15に記憶されている部品は、表示されている画面に含まれるメニューのうちのツールから選択できる。
なお、出荷時の開発支援装置の画像処理モジュール記憶部291には、上記した各テンプレートに処理内容が記述されることによって作成された画像処理モジュールも記憶されている。このような画像処理モジュールには、上記した処理モジュールMSと処理モジュールUIが含まれる。
本実施の形態の開発支援装置では、SIは、基本フローを作成する際に、テンプレート記憶部16に記憶されたテンプレートに直接データを入力することによって作成した画像処理モジュールを基本フローに組み込んでも良いし、予め画像処理モジュール記憶部291に記憶された画像処理モジュール(上記した処理モジュールMSの素材と処理モジュールUIとを含む)を適宜カスタマイズして組み込んでも良い。なお、開発支援装置の出荷時(または、少なくともSIに操作される前であって画像処理モジュールの作成が行なわれた後)に記憶されている画像処理モジュールがどのように作成されるかについては、後述する。
OS類記憶部22は、Windows(登録商標)XPおよびVisualStudioを記憶する。
ライブラリ類記憶部23は、ライブラリおよびドライバを記憶する。
シミュレーションソフト記憶部17は、図1の画像処理機能の開発支援装置1で実行可能な実行形式のプログラムを起動するためのシミュレーションソフトを記憶する。
マニュアル類記憶部18は、マニュアル、チュートリアル、ヘルプおよびサンプルを記憶する。
実行プログラム記憶部19は、出荷時に予め組み込まれている画像処理モジュールの実行形式のプログラム、およびビルド実行部13で作成された実行形式のプログラムを記憶する。
カスタマイズプログラム、部品、テンプレート、OS類、ライブラリ類、シミュレーションソフト、およびマニュアル類は、外部からリムーバブルメディア6を用いてハードディスク5にインストールすることができる。
CPUおよびメモリ4は、OS類記憶部22からWindowsXPおよびVisualStudio(登録商標)を読出し、さらにカスタマイズプログラム記憶部14からカスタマイズプログラムを読み出して、これらを実行することによって、実行制御部8、基本フロー開発部9、画像処理モジュール開発部10、運転画面開発部11、イベント処理開発部12、および、ビルド実行部13として機能する。また、CPUおよびメモリ4は、OS類記憶部22からWindowsXPおよびVisualStudio(登録商標)を読出し、さらにモジュール作成用プログラム記憶部24から画像モジュール作成用プログラムを読み出し、これらを実行することによって、画像処理モジュール作成部10Aとして機能する。
実行制御部8は、この画像処理機能の開発支援装置1の全体の動作を制御する。
基本フロー開発部9は、操作入力部7を通じたユーザの操作に従って、画像処理モジュール記憶部291に記憶されている複数個の画像処理モジュールの実行順序を決定して、決定した実行順序と、そのパラメータからなる基本フローを基本フロー記憶部294に記憶する。
画像処理モジュール開発部10は、テンプレート記憶部16に記憶されている画像処理モジュールのテンプレートを読み出して表示し、操作入力部7を通じたSIの操作に従って、画像処理モジュールのテンプレートを編集して、編集後の画像処理モジュールを画像処理モジュール記憶部291に記憶する。
また、画像処理モジュール開発部10は、画像処理モジュール記憶部291に記憶されている処理モジュールUIに対応した画面を表示させ、そして、当該画面に対応して入力された情報を当該処理モジュールUIに対応する処理モジュールMSの素材に書込むことにより、画像処理モジュールのカスタマイズを行なう。カスタマイズされた画像処理モジュールは、画像処理モジュール記憶部291に記憶される。
画像処理モジュール作成部10Aは、SIが利用する処理モジュールUIおよび当該処理モジュールUIを利用して入力された情報によって作成(編集)が可能な処理モジュールMSの素材を作成する。処理モジュールUIの作成は、モジュール作成用データ記憶部25に記憶された画像情報が適宜変更することによって行なわれ、処理モジュールMSの素材は、テンプレート記憶部16に記憶されている処理モジュールMSのテンプレートを編集することによって行なわれる。
運転画面開発部11は、テンプレート記憶部16に記憶されている運転画面のテンプレートを読み出して表示し、操作入力部7を通じたSIの操作に従って、運転画面のテンプレートに部品記憶部15に記憶されている部品を貼り付けて運転画面のテンプレートを編集して、編集後の運転画面を運転画面記憶部293に記憶する。
イベント処理開発部12は、操作入力部7を通じたSIの操作に従って、イベントモジュールを作成して、イベント処理モジュール記憶部292に記憶する。
ビルド実行部13は、ソースコードをコンパイルしてオブジェクトコードを生成し、さらにオブジェクトコードとライブラリ類記憶部23内のライブラリおよびドライバとをリンクすることによって、実行形式のプログラムを作成して実行プログラム記憶部19に記憶する。ビルド実行部13は、画像処理検査装置が動作するOSであるWindows(登録商標)CE用の実行形式のプログラムと、図1の画像処理機能の開発支援装置1が動作するOSであるWindowsXP用の実行形式のプログラムの両方を作成する。WindowsCE用の実行形式のプログラムは、リムーバブルメディア6などを用いて、画像処理検査装置にインストールされる。WindowsXP用の実行形式のプログラムは、図1の装置で、画像処理検査装置におる画像処理をエミュレート(シミュレーション)するために用いられる。
CPUおよびメモリ4から出力される画面データは、ディスプレイ2に送られて表示される。
[SIによる基本フローの作成]
本実施の形態の開発支援装置では、SIが、操作入力部7に対して適宜操作を行なうことにより、基本フロー開発部9は、ディスプレイ2に、図4に示されるような画面(基本フロー開発用画面)を表示する。
図4を参照して、基本フロー開発用画面は、画像処理モジュールのリストが表示されるリスト欄83と、基本フローにおける画像処理モジュールの順序を示す基本フロー欄95を含む。画像処理モジュール記憶部291では、各画像処理モジュールは用途に応じた種別ごとに分類されて記憶されている。ここでの種別には、「検査・計測する」「画像を取り込む」「画像を補正する」「検査・計測を補助する」を含む。そして、リスト欄83では、各画像処理モジュールの名称が、これらの種別に従って表示されている。
以下、基本フロー開発用画面を用いた基本フローの作成について説明する。
SIが、マウス20を操作してリスト欄83の一つの項目を選択すると、基本フロー開発部9は、リスト欄83の中の1つの画像処理モジュールを選択する。
SIが、マウス20を操作して追加ボタン84を選択すると、基本フロー開発部9は、基本フロー欄95の最下部にリスト欄83で選択されている画像処理モジュールを追加する。
SIが、マウス20を操作して挿入ボタン85を選択すると、基本フロー開発部9は、基本フロー欄95の中の選択されている画像処理モジュールの直下にリスト欄83で選択されている画像処理モジュールを挿入する。
SIが、マウス20を操作して設定ボタン86を選択すると、画像処理モジュール開発部10は、基本フローの中の選択されている画像処理モジュール(の処理モジュールMS)のパラメータなどを設定するためのUIプログラムを画像処理モジュール記憶部291から読み出して表示する。SIが、表示されている画面に含まれるメニューのうちのツールから部品を選択し、部品記憶部15から選択された部品を読み出して配置することによって、ユーザインタフェース画面が編集され、図示しない保存メニューを選択して、編集後のUIプログラムが画像処理モジュール記憶部291に記憶される。
SIが、マウス20を操作してコピーボタン90を選択すると、基本フロー開発部9は、基本フロー欄95の中の選択されている画像処理モジュールをコピーする。
SIが、マウス20を操作してペーストボタン91を選択すると、基本フロー開発部9は、基本フロー欄95の中の選択されている画像処理モジュールの直下に、コピーボタン90によってコピーした画像処理モジュールを挿入する。
SIが、マウス20を操作して削除ボタン92を選択すると、基本フロー開発部9は、基本フロー欄95の中の選択されている画像処理モジュールを削除する。
SIが、マウス20を操作して移動(上へ)ボタン88を選択すると、基本フロー開発部9は、基本フロー欄95の中の選択される画像処理モジュールを1つ上に移動する。
SIが、マウス20を操作して移動(下へ)ボタン89を選択すると、基本フロー開発部9は、基本フロー欄95の中の選択される画像処理モジュールを1つ下に移動する。
SIが、マウス20を操作して名前の変更ボタン87を選択すると、基本フロー開発部9は、基本フロー欄95の中の選択されている画像処理モジュールの名前の変更を可能とする。SIは、キーボード21を操作することにより、画像処理モジュールの名前を入力することができる。
SIが、マウス20を操作してヘルプ96を選択すると、基本フロー開発部9は、マニュアル類記憶部18からヘルプを読み出して表示するる。
SIが、マウス20を操作して閉じる97を選択すると、基本フロー開発部9は、基本フローが作成されている場合に、作成された基本フローを基本フロー記憶部294に記憶し、その処理を終了する。
図5は、基本フローの作成後の画面の例を表わす図である。
図5を参照して、基本フローは、3つの画像処理モジュール98、99、40からなる。この基本フローでは、まずカメラ画像を入力し、次に入力した画像の面積重心を計算して、その後画像処理モジュールのデータを設定することを定めた基本フローが作成されている。
[SIによる画像処理モジュールの作成]
次に、本実施の形態の開発支援装置における、SIがテンプレート記憶部16に記憶されたテンプレートを用いて画像処理モジュールを作成する処理について説明する。
図6は、SIが画像処理モジュールの作成を行なう際にディスプレイ2に表示される画面の一例を示す図である。図7は、画像処理モジュール開発の処理手順を表わすフローチャートである。
SIが操作入力部7を適宜操作することにより画像処理モジュールを作成するプログラムを起動させると、ディスプレイ2には図6に示された画面が表示される。そして、さらに図7を参照して、SIが、当該画像に対して、マウス20を操作してボタン65を選択したときには(ステップS401でYES)、画像処理モジュール開発部10は、MSプログラムの編集処理を選択し、MSプログラムのテンプレート41をテンプレート記憶部16から読み出して、図8に示すようにエディタ上に表示する。SIが、キーボートから文字を入力、削除することによって、MSプログラムのテンプレート41を編集して、図示しない保存メニューを選択して、編集後のMSプログラムを画像処理モジュール記憶部291に記憶する(ステップS402)。
SIが、マウス20を操作してボタン66を選択したときには(ステップS403でYES)、画像処理モジュール開発部10は、マニュアル類記憶部18からMSプログラムの編集を説明したマニュアル3−2−5章を読み出して表示する(ステップS404)。
SIが、マウス20を操作してボタン67を選択したときには(ステップS405でYES)、画像処理モジュール開発部10は、UIプログラムの編集処理を選択して、UIプログラムのテンプレートをテンプレート記憶部16から読み出して図9に示すようなユーザインタフェース画面のテンプレート461を表示する。SIが、表示されている画面に含まれるメニューのうちのツール462から部品を選択し、部品記憶部15から選択された部品を読み出して配置することによって、図9のユーザインタフェース画面のテンプレート461を編集し、図示しない保存メニューを選択して、編集後のUIプログラムを画像処理モジュール記憶部291に記憶する(ステップS406)。
SIが、マウス20を操作してボタン68を選択したときには(ステップS407でYES)、画像処理モジュール開発部10は、マニュアル類記憶部18からUIプログラムの編集を説明したマニュアル3−2−6章を読み出して表示する(ステップS408)。
SIが、マウス20を操作してボタン69を選択したときには(ステップS409でYES)、画像処理モジュール開発部10は、マニュアル類記憶部18からユーザインタフェース画面のサンプルを読み出して表示する(ステップS410)。
SIが、マウス20を操作してボタン70を選択したときには(ステップS411でYES)、実行制御部8は、シミュレーションソフト記憶部17からシミュレーションソフトを読み出して起動する(ステップS412)。
SIが、マウス20を操作してボタン71を選択したときには(ステップS413でYES)、画像処理モジュール開発部10は、マニュアル類記憶部18から画像処理モジュール開発のチュートリアルを読み出して表示する(ステップS414)。
SIが、マウス20を操作してボタン72を選択したときには(ステップS415でYES)、画像処理モジュール開発部10は、マニュアル類記憶部18から画像処理モジュール開発を説明したマニュアル3−2章を読み出して表示する(ステップS416)。
SIが、マウス20を操作してボタン73を選択したときには(ステップS417でYES)、画像処理モジュール開発部10は、マニュアル類記憶部18から画像処理モジュール開発のためのリファレンスを読み出して表示する(ステップS418)。
SIが、マウス20を操作して図示しないビルドメニューを選択したときには(ステップS419でYES)、ビルド実行部13は、画像処理モジュール記憶部291に記憶されているステップS402で作成されたMSのソースコードおよびステップS406で作成されたUIのソースコードをコンパイルしてオブジェクトコードを生成し、ライブラリ類記憶部23から必要なライブラリとドライバを読み出してオブジェクトコードとリンクすることによって、WindowsCEとWindowsXP用のMSの実行形式のプログラムおよびUIの実行形式のプログラムを作成して実行プログラム記憶部19に記憶する(ステップS420)。
SIが、マウス20を操作して図示しない「戻る」ボタンを選択したときには(ステップS421でYES)、画像処理モジュール開発部10は、処理を終了する。
次に、テンプレートがSIの編集によってどのように変更されるかの例を説明する。ここでは、テンプレートを編集して、他の画像処理モジュールのパラメータ設定を一括して行なうための画像処理モジュールを作成する場合について説明する。この画像処理モジュールは、座標の変更や上下限値の変更などのように、複数の数値を変更する場合に用いられる。
図10および図11は、「ItemDefs.h」のテンプレートを表わす図である。
図12および図13は、編集後の「ItemDefs.h」を表わす図である。
図10〜図13を参照して、SIの編集によって、テンプレートの定義文190が、定義文191に変更され、定義文192、193、194が追加されている。
図10〜図13を参照して、「ItemDefs.h」の内容を説明する。SETUPDATA構造体には、処理を実行する際に必要になるパラメータなどの設定データの構造が定義される。MEASUREDATA構造体には、処理(計測)を実行した際の結果のデータの構造が定義される。ItemDef.h中で定義した SETUPDATA構造体に含まれるデータの初期値については、AssignProc.cpp中に記述される。
図14は、「AssignProc.cpp」のテンプレートを表わす図である。
図15および図16は、編集後の「AssignProc.cpp」を表わす図である。
図14〜図16を参照して、SIの編集によって、日付151が記入され、作成者152が記入され、関数AssignProcの中身の命令153が追加されている。
図14〜図16を参照して、「AssignProc.cpp」の内容を説明する。本ファイル内では以下の関数の処理を定義し、画像処理モジュールが登録される際のチェック処理などを記述する。
int クラス名::AssignProc(*ptrProcUnit);
ProcUnit *ptrProcUnit; 処理ユニット情報へのポインタ
本関数の処理を終了する際は、戻り値として以下の値を返す。NORMAL以外の値を返した場合は処理ユニット登録不可ということで、処理ユニットの登録が行われない。
NORMAL(0):処理ユニット登録可能
!NORMAL(0以外):処理ユニット登録不可
設定データの初期化は、このメソッドに記述し、図形データの初期化(SetFigureType())は、このメソッドに記述する。本関数を用いることで、処理ユニットの登録順序などに制約がある場合のチェックを行なうことができる。
図17および図18は、「FigureUpdate.cpp」のテンプレートを表わす図である。
本発明の実施形態では、SIが、テンプレートを編集しなかったため、「FigureUpdate.cpp」は、変更されていない。
図17および図18を参照して、「FigureUpdate.cpp」の内容を説明する。本ファイル内では以下のメソッドを記述し、図形データが更新されたときの処理を記述する。
int クラス名::FigureUpdate(*ptrProcUnit, figureNo);
ProcUnit *ptrProcUnit; 処理ユニット情報へのポインタ
int figureNo; 図形データ番号
本関数の処理を終了する際は、戻り値として以下の値を返す。
NORMAL(0):図形データ更新処理に成功
!NORMAL(0以外):図形データ更新処理に失敗
モデルの登録処理は本メソッドに記述する。
図19および図20は、「ItemInit.cpp」のテンプレートを表わす図である。
図21および図22は、編集後の「ItemInit.cpp」を表わす図である。
図19〜図22を参照して、SIの編集によって、日付154が記入され、作成者155が記入されている。さらに、SIの編集によって、テンプレートの"Sample"658、ITEM_MEASURE659、一般計測関連660、0(661)、"サンプル"662が、"SetUnitData4"158、ITEM_SUPPORT159、計測補助関連160、4(161)、"処理ユニッ
トデータ設定"162に変更されている。
図19〜図22を参照して、「ItemInit.cpp」の内容を説明する。コンストラクタ・デストラクタおよび本クラスのインスタンスを生成する関数、本クラスのインスタンスを削除する関数を記述する。なお、本クラスのインスタンスを生成する関数および本クラスのインスタンスを削除する関数は、DLLのエクスポート関数にする。コンストラクタには画
像処理モジュールをシステム(CORERA)に認識させるための情報を記述する。具体的には下記のメソッドに値を設定する。
this->itemIdent = _T("Sample"); (A) 画像処理モジュール識別名
this->maker = _T("OMRON AST3"); (B) 画像処理モジュール製作者名
this->version = 100; (C) バージョン番号(×100)
this->itemKind = ITEM_MEASURE; (D) 画像処理モジュール種別(=一般計測関連)
this->setupDataSize = sizeof(SETUPDATA); (E)設定データ構造体サイズ
this->measureDataSize = sizeof(MEASUREDATA); (F) 計測データ構造体サイズ
this->modelDataCount = 0; (G) モデルデータ最大個数
this->imageDataCount = 0; (H) 画像データ最大個数
this->innerUnitCount = 0;(I) 内包処理ユニット最大個数
this->figureDataCount = 0;(J) 図形データ最大個数
this->title = _T("サンプル"); (K) 画像処理モジュールタイトル名
デストラクタには、本クラスのインスタンスが消滅するときに実行する処理を記述する。本関数では、本クラスのインスタンスを生成し戻り値として返す処理を記述する。本関数の処理を終了する際は、戻り値として以下の値を返す。なお、図20中の記述991Nについては後述する。
ProcItem:インスタンスのポインタ:インスタンス生成成功時
NULL:インスタンス生成失敗時
図23および図24は、「MeasureDisp.cpp」のテンプレートを表わす図である。
図25〜図27は、編集後の「MeasureDisp.cpp」を表わす図である。
図23および図24および図25〜図27を参照して、SIの編集によって、日付163および日付164が記入され、作成者165および作成者166が記入され、関数MeasureDispTの中身の命令167が追加されている。
本ファイル内では以下のメソッドを記述し、画像処理モジュール個別に計測結果を表示する際の表示処理を記述する。
int クラス名::MeasureDispI(*ptrProcUnit, subNo, *ptrImageWindow);
void クラス名::MeasureDispG(*ptrProcUnit, subNo, *ptrImageWindow);
ProcUnit *ptrProcUnit; 処理ユニット情報へのポインタ
int subNo; 表示種別の番号
ImageWindow *ptrImageWindow; 画像表示エリア情報へのポインタ
void クラス名::MeasureDispT(*ptrProcUnit, subNo, *ptrTextWindow);
ProcUnit *ptrProcUnit; 処理ユニット情報へのポインタ
int subNo; 表示種別の番号
TextWindow *ptrTextWindow; 詳細結果表示エリア情報へのポインタ
本関数の処理を終了する際は、戻り値として以下の値を返す。
NORMAL(0):計測結果出力処理正常終了
!NORMAL(0以外):計測結果出力処理異常終了
3つの関数は、以下の記述に対応する。
MeasureDispI():画像表示
MeasureDispG():画像表示エリアへのグラフィック表示
MeasureDispT():詳細結果表示エリアへの文字表示
引数subNoが-1の場合は、全画像処理モジュール共通で位置一覧表示モード時の表示と
なる。サーチ系の画像処理モジュールの場合は、モデル領域のみ表示する。処理ユニットの判定結果が”判定なし”の場合(MEASDATA 構造体中のjudge=J_NCの場合)、処理ユニ
ットのMeasureDisp*()はコールされない。
図28および図29は、「MeasureInit.cpp」のテンプレートを表わす図である。
本発明の実施形態では、SIが、テンプレートを編集しなかったため、「MeasureInit.cpp」が変更されていない。
図28および図29を参照して、「MeasureInit.cpp」の内容を説明する。本ファイル
内では、以下の関数の処理を定義し、計測画面に入る時点で実行すべき初期化処理および計測終了時に実行すべき処理を記述する。
int クラス名::MeasureInit(*ptrProcUnit);
int クラス名::MeasureEnd(*ptrProcUnit);
ProcUnit *ptrProcUnit; 処理ユニット情報へのポインタ
本関数の処理を終了する際は、戻り値として以下の値を返す。
NORMAL(0):計測初期化処理正常終了
!NORMAL(0以外):計測初期化処理異常終了
NORMAL以外の値を返した場合は画面にエラーメッセージが表示され、当該シーン内の全処理ユニットの非セーブROIモデルがクリアされる。また、NORMAL以外の値を返して画面にエラーメッセージが表示された場合も、メッセージボックスを終了するとそのまま計測が実行可能な状態になる。
図30は、「MeasureOut.cpp」のテンプレートを表わす図である。
本発明の実施形態では、SIが、テンプレートを編集しなかったため、「MeasureOut.cpp」が変更されていない。
図30を参照して、「MeasureOut.cpp」の内容を説明する。本ファイル内では以下のメソッドを記述し、画像処理モジュール個別に計測結果を出力する際の結果出力処理を記述する。
int クラス名::MeasureOut(*ptrProcUnit);
ProcUnit *ptrProcUnit; 処理ユニット情報へのポインタ
本関数の処理を終了する際は、戻り値として以下の値を返す。
NORMAL(0):計測結果出力処理正常終了
!NORMAL(0以外):計測結果出力処理異常終了
図31は、「MeasureProc.cpp」のテンプレートを表わす図である。
図32〜図34は、編集後の「MeasureProc.cpp」を表わす図である。
図31および図32〜図34を参照して、SIの編集によって、日付168が記入され、作成者169が記入され、関数MeasureProcの中身の命令170が追加されている。
図31および図32〜図34を参照して、「MeasureProc.cpp」の内容を説明する。本ファイル内では以下のメソッドを記述し、計測時に実行する画像処理などの処理を記述する。
int クラス名::MeasureProc(*ptrProcUnit);
ProcUnit *ptrProcUnit; 処理ユニット情報へのポインタ
本関数の処理を終了する際は、戻り値として以下の値を返す。
NORMAL(0):計測処理正常終了
!NORMAL(0以外):計測処理異常終了
図35および図36は、「RenumProc.cpp」のテンプレートを表わす図である。
図37および図38は、編集後の「RenumProc.cpp」を表わす図である。
図35〜図38を参照して、SIの編集によって、日付171が記入され、作成者172が記入され、関数RenumProcの中身の命令173が追加されている。
図35〜図38を参照して、「RenumProc.cpp」の内容を説明する。本ファイル内では以下のメソッドを記述し、ユニット追加・削除・移動時の処理を記述する。
int クラス名::RenumProc(*ptrProcUnit, *ptrRenumInfo);
ProcUnit *ptrProcUnit; 処理ユニット情報へのポインタ
RenumInfo *ptrRenumInfo;フロー編集情報へのポインタ
本関数の処理を終了する際は、戻り値として以下の値を返す。
NORMAL(0):ユニット追加・削除・移動時処理正常終了
!NORMAL(0以外):ユニット追加・削除・移動時処理異常終了
図39〜図41は、「UnitData.cpp」のテンプレートを表わす図である。
図42〜図50は、編集後の「UnitData.cpp」を表わす図である。
図39〜図41および図42〜図50を参照して、SIの編集によって、マクロ定義に関する定義文174が追加され、静的変数に関する定義文175が追加され、関数参照に関する定義文176が追加されている。関数SetUnitData(ptrProcUnit, dataNo, data)に関して、日付177が記入され、作成者178が記入され、中身の命令179が追加されている。関数SetUnitData(ptrProcUnit, dataIdent, data)に関して、日付180が記入され、作成者181が記入され、中身の命令182が追加されている。関数GetUnitData(ptrProcUnit, dataNo, data)に関して、日付183が記入され、作成者184が記入され、中身の命令185が追加されている。関数GetUnitData(ptrProcUnit, dataIdent, data)に関して、日付186が記入され、作成者187が記入され、中身の命令188が追加されている。さらに、関数setDataProcおよび関数getDataProcが追加されている。
図39〜図41および図42〜図50を参照して、「UnitData.cpp」の内容を説明する。
本ファイル内では以下のメソッドを記述し、データ設定時およびデータ取得時の処理を記述する。
int クラス名::SetUnitData(*ptrProcUnit, dataNo, *data);
ProcUnit *ptrProcUnit; 処理ユニット情報へのポインタ
int datano; 設定するデータのデータ番号
ANYTYPE *data; 設定するデータ
int クラス名::SetUnitData(*ptrProcUnit, dataIdent, *data);
ProcUnit *ptrProcUnit; 処理ユニット情報へのポインタ
TCHAR *dataIdent; 設定するデータの識別文字列へのポインタ
ANYTYPE *data; 設定するデータ
int クラス名::GetUnitData(*ptrProcUnit, dataNo, *data);
ProcUnit *ptrProcUnit; 処理ユニット情報へのポインタ
int datano; 取得するデータのデータ番号
ANYTYPE *data; 取得するデータ
int クラス名::GetUnitData(*ptrProcUnit, dataIdent, *data);
ProcUnit *ptrProcUnit; 処理ユニット情報へのポインタ
TCHAR *dataIdent; 取得するデータの識別文字列へのポインタ
ANYTYPE *data; 取得するデータ
ANYTYPE データタイプ構造体定義
typedef struct {
int type;
int ival;
double dval;
TCHAR *string;
struct {
void *addr;
int size;
} variant;
} ANYTYPE;
上記のtypeには以下のようにどういう型のデータを渡すかというデータ種別(を示すコード)が入れるものとする。
T_INTEGER:整数
T_DOUBLE :実数
T_STRING :文字列
T_VARIANT:可変長データ
本関数の処理を終了する際は、戻り値として以下の値を返す。
NORMAL(0):データ設定・データ設定成功
!NORMAL(0以外):データ取得・データ取得成功
[開発支援装置における画像処理ユニットの作成]
次に、本実施の形態の開発支援装置における、SIによって編集されるための画像処理モジュール(処理モジュールMSの素材と処理モジュールUI)を作成する処理について説明する。
本実施の形態の開発支援装置では、画像処理モジュール作成部10Aは、テンプレート記憶部16に記憶されたテンプレートを修正(主に、データを追加)することにより、SIがカスタマイズできるような態様で画像処理モジュールを作成して画像処理モジュール記憶部291に記憶させる。ここで、画像処理モジュール作成部10Aが画像処理モジュールを作成する処理(画像処理モジュール作成処理)について、当該処理のフローチャートである図51を参照して説明する。
画像処理モジュール作成処理では、画像処理モジュール作成部10Aは、まずステップS10で、処理モジュール情報の入力を受付ける処理を実行して、ステップS20へ処理を進める。
なお、画像処理モジュール作成部10Aは、ステップS10において、図52に示すような画面を表示させる。これから作成しようとする画像処理モジュールを識別するための情報である処理モジュール識別名を入力するための入力欄101、当該画像処理モジュールの日本語名称を入力するための入力欄102および英語名称を入力するための入力欄103、ならびに当該画像処理モジュールを構成するデータのハードディスク5における保存場所を入力するための入力欄104が表示されている。入力欄101〜104に対するデータの入力は、当該画面上のボタン106に対して操作がなされることにより確定される。入力欄101でのデータの入力が確定されると、画像処理モジュール作成部10Aは、図3を参照して説明したような画像処理モジュールのテンプレートを構成するファイルについてのファイルおよびフォルダの名称を決定する。つまり、図52に示されたようなデータの入力が確定された場合、日本語のメッセージファイルのファイル名は、「サーチ2_ipn.msg」とされ、英語のメッセージファイルのファイル名は「search2_eng.msg」とされる。
また、これから作成しようとする画像処理モジュールならびに処理モジュールUIおよび処理モジュールMSのディレクトリ構造であって、後述するステップS70で作成されるディレクトリ構造が、図53に示されている。図53に示されたディレクトリ構成における三箇所の「search2」は、入力欄101に入力されたテキスト情報に対応している。
また、画像処理モジュール作成部10Aは、図52の入力欄101に入力が確定されたデータに基づいて、「ItemInit.cpp」のテンプレートを一部書換える。具体的には、画像処理モジュール作成部10Aは、図20の記述991Nを、図54の記述991Xに書換える。図20と図54を参照して、画像処理モジュール作成部10Aは、入力欄101に入力を確定された情報に基づいて、処理項目識別名658,601Xおよび処理項目タイトル名662,602Xの記述を変更させている。
次に、画像処理モジュール作成部10Aは、ステップS20で、設定画面パターンを選択する処理を実行して、ステップS30へ処理を進める。この処理は、処理モジュールMSによる画像処理に対して、SIがどのような情報を設定可能とするかを選択する処理に相当する。具体的には、この処理では、ディスプレイ2に図55に示すような画面が表示される。当該画面では、SIが処理モジュールMSの処理内容を設定する際に表示させる画面として処理モジュールUIに含める、表示可能な画面についての情報を登録するための画面である。処理モジュールMSの処理内容を設定するための画面には、図形設定画面、RGB色指定画面、出力パラメータ設定画面、座標指定画面、およびHSV色指定画面の5種類の画面が含まれる。図55の画面に表示されている入力欄109〜113は、この5種類の画面のそれぞれについて、処理モジュールUIに含めるか否かを設定するために表示されている。入力欄109〜113に入力された、各画面を処理モジュールUIに含ませるか否かの情報は、ボタン115を操作されることにより確定される。
図56は、図形設定画面の一例を示す図である。この画面では、画像処理検査装置において入力された画像の中の、処理対象とする領域の形状、位置、および大きさを設定するための画面である。当該画面において、入力欄109Aは、処理対象の領域の形状を設定するためのものである。また、入力欄109Bは、入力欄109Aにおいて指定された形状の、位置および大きさを設定するためのものである。当該画面では、表示欄109Dに、画像処理検査装置に入力される画像(または、そのサンプル画像)が表示される。また、入力欄109A,109Bに入力された情報に対応する処理対象領域も、表示欄109Dに表示される。SIは、表示欄109Dの表示を参照しながら、入力欄109Aおよび入力欄109Bに対して入力する情報を調整できる。入力欄109A,109Bに入力された情報は、ボタン109Cに対して操作がなされることにより確定される。
図57に、RGB色指定画面の一例を示す。
この画面では、表示欄110Cに、画像処理検査装置に入力された画像(または、そのサンプル画像)が表示される。そして、入力欄110Aには、表示欄110Cに表示された画像に対してエッジ検出を行なうための条件となる色情報が入力される。入力欄110Aに入力された情報は、ボタン110Bに対して操作がなされることにより確定される。
図58は、出力パラメータ設定画面の一例を示す図である。この画面では、表示欄111Eに、画像処理検査装置に入力される画像(または、そのサンプル画像)が表示される。この画面は、表示欄111Eに表示される画像とモデル画像(たとえば、予め画像処理検査装置に記憶されている)との間で、ターゲット画像の位置にずれが生じた場合の対処に関する設定を行なう画面である。具体的には、入力欄111Aには、ターゲットの座標として表示する座標を、位置ずれの修正を行なう前の座標とするか修正後の座標とするかを設定するためのものである。入力欄111Bは、表示欄111Eに表示させる画像を、位置ずれについての修正を行なったものとするかそのような修正を行なわないものとするかを設定するためのものである。入力欄111Cは、現在作成の対象となっている画像処理モジュールによる画像処理の結果として出力する判定内容を、同じ基本フローに含まれる他の画像処理モジュールによる判定結果も含めた総合的なものとするか、作成中の画像処理モジュール単独のものとするかを設定するためのものである。入力欄111A〜111Cに入力した情報は、ボタン111Dに対して操作がなされることにより確定される。
図59は、座標指定画面の一例を示す図である。図59では、表示欄112Dに、画像処理検査装置に入力された画像(または、そのサンプル画像)が表示される。入力欄112Cには、図形設定画面(図56参照)で指定された領域における、HSV色指定画面(後述する図60参照)において指定された色の条件を満たす面積が示される。また、入力欄112Aには、そのような領域の重心なる座標が表示されている。入力欄112Cまたは入力欄112Aに表示された値を変更することにより、SIは、後述するHSV色指定画面に対する設定情報(色についての条件に関する情報)を、入力欄112Cおよび112Aに対応するものに変更することができる。入力欄112Cおよび入力欄112Aに入力された情報は、ボタン112Bを操作されることにより確定される。
図60は、HSV色指定画面の一例を示す図である。
図60に示された画面は、画像処理検査装置に入力された画像に対する処理の条件として色情報を指定するための画面である。SIは、入力欄113Aに対して、色(色相、彩度、および明度)を指定する情報を入力する。この画面では、表示欄113Cに、画像処理検査装置に入力される画像(または、そのサンプル画像)が表示される。そして、表示欄113Cに表示される画像は、入力欄110Aに対して入力された情報に基づいて、適宜処理を施される。たとえば、入力欄110Aに特定の色を指定する情報が入力された場合、表示欄113Cでは、画像処理検査装置に入力された画像(または、そのサンプル画像)の中の、当該特定の色を有する画素のみの表示が行なわれる。
入力欄113Aでは、指定された色に基づいた画像処理に対する許容範囲を入力することもできる。入力欄113Aに入力された情報は、ボタン113Bに対して操作がなされることにより確定される。
以上説明したように、ステップS20の設定画面パターン選択処理では、処理モジュールMSに対してSIが設定を行なう際に表示される画面が選択される。図55〜図60を参照して説明した画面を表示させるための情報は、モジュール作成用データ記憶部25に記憶されている。また、図56〜図60を参照して説明した画面の中で、入力欄109〜113(図55参照)の中の設定を確定された入力欄に対応する画面については、当該画面を表示させるための情報が、画像処理モジュール記憶部291に、処理モジュールUIに含まれるように、記憶されるようになる。
図51に戻って、ステップS20の処理の後、画像処理モジュール作成部10Aは、ステップS30で、処理モジュールMSに組込む機能の選択を行なう。この処理では、画像処理モジュール作成部10Aは、ディスプレイ2に図61に示すような画面を表示させる。図61を参照して、この画面には、図3を参照して説明した5個の任意ファイル(「FigureData.cpp」「SetupData.cpp」「RenumProc.cpp」「ThroughProc.cpp」「SaveLoad.cpp」)のそれぞれに対応する入力欄116〜120が表示されている。
図61に示された画面は、画像処理モジュールの処理モジュールMSに、これらの5個の任意ファイルのそれぞれを含めるか否かを設定するための画面である。入力欄116〜120に入力された情報は、ボタン121に対して操作がなされることにより確定される。そして、この画面に入力された情報が確定されることにより、処理モジュールMSに、上記5種類の任意ファイルの中で、確定された内容に対応するファイルが組込まれる。
図51に戻って、ステップS30の処理の後、画像処理モジュール作成部10Aは、ステップS40で、バージョンや図形数などの、画像処理モジュールの基本的な情報の入力を受付ける処理を実行する。
この処理では、画像処理モジュール作成部10Aは、ディスプレイ2に図62に示したような画面を表示させる。図62を参照して、当該画面には、これから作成する画像処理モジュールの製作者の名称を入力するための入力欄122、当該画像処理モジュールのバージョンを入力するための入力欄123、その種別(図4を参照して説明した「検査・計測をする」「画像を取込む」などに対応)を入力するための入力欄124、図形設定画面(図56参照)の入力欄109Aにおいて設定することが可能な図形の最大個数を入力(設定)するための入力欄125、表示欄109D(図56参照)などに表示される画像の比較対象とされるデータ(モデルデータ)として参照されるデータの最大個数を入力するための入力欄126、表示欄109D(図56参照)などに表示させる画像データの最大個数を入力(設定)するための入力欄127、内包処理ユニット(後述するように、これから作成する画像処理ユニット機能を取込む他の画像処理ユニット)の最大個数を入力(設定)するための入力欄128を含む。
入力欄122〜128に入力された情報は、ボタン130に対して操作がなされることにより確定される。なお、入力欄124に対する種別の入力は、画像処理モジュールの種類として予め定められた複数の種別の中からプロダウンメニュー等により一の種別を選択することにより行なわれる。
図62に示された画面に対する情報の入力が確定されると、これから作成される画像処理モジュールの処理モジュールMSにおいて、「ItemInit.cpp」のファイルが、テンプレート記憶部16に記憶されていた状態から一部書換えられる。具体的には、テンプレート記憶部16に記憶されている「ItemInit.cpp」の一部である、図27中の部分991Nが、図63に示される部分991Xに書換えられる。
図20と図63とを参照して、上記したように図62に示されたような情報の入力が確定されると、処理項目製作者名は、入力欄122に入力された情報に対応するように、処理項目製作者名603Xとされる。また、バージョン番号は、入力欄123に入力された情報に対応するように、バージョン番号604Xとされる。また、処理項目種別は、入力欄124に入力された情報に対応して、処理項目種別605Xとされる。また、図20の図形データ最大個数663とモデルデータ最大個数661と画像データ最大個数664と内包処理ユニット最大個数665は、それぞれ、入力欄125〜128に入力された情報に対応して、図形データ最大個数606Xとモデルデータ最大個数607Xと画像データ最大個数608Xと内包処理ユニット最大個数609Xにされる。
図51に戻って、ステップS40の処理の後、画像処理モジュール作成部10Aは、ステップS50で、図形の種類の選択を受付ける処理を行なう。
この処理では、画像処理モジュール作成部10Aは、図64に示された画面をディスプレイ2に表示される。図64を参照して、当該画面では、入力欄131には、「長方形」「直線」「楕円」「円周」「円弧」「多角形」という、図形の種別が示されている。そして、入力欄131では、これらの種別の中で、入力欄109A(図56参照)においてSIが選択することができる種別として設定する図形の種別を選択する情報が入力される。また、入力欄132には、図形設定画面(図56参照)において入力欄131で選択された各図形が選択された際にデフォルトとして表示されるときの位置および大きさ(座標)が入力される。入力欄131および入力欄132に入力された情報は、ボタン134に対して操作がなされることにより確定される。
図64に示された画面に対して入力された情報が確定されると、これから作成する画像処理モジュールの処理モジュールMSにおいて、「AssignProc.cpp」のデータを、当該画面に入力された情報に基づいて一部書換える。具体的には、図14に示された「AssignProc.cpp」の中の記述992Nを、図65に示された記述992Xへと書換える。記述992Xには、入力欄131において選択された種別に対応する記述610Xと、当該種別に対応して入力欄132に入力された座標に対応する記述611Xが含まれる。
図51に戻って、ステップS50の処理の後、画像処理モジュール作成部10Xは、ステップS60で、機能を小計する画像処理モジュールの選択を受付ける処理を実行する。
この処理では、画像処理モジュール作成部10Aは、図66に示すような画面をディスプレイ2に表示させる。図66を参照して、当該画面には、画像処理モジュール記憶部291に記憶される他の画像処理モジュールであって、これから作成する画像処理モジュールに機能を取込む画像処理モジュールを特定する情報を入力するための入力欄135が表示されている。図66では、入力欄135には、5個の画像処理モジュールについての情報が入力される状態が示されている。この画面において情報を入力することができる画像処理モジュールの個数は、入力欄128(図62参照)に入力を確定された数値に対応している。入力欄135に入力された情報は、ボタン136に対して操作がなされることにより確定される。入力欄135に入力された情報が確定されると、図21に示された「AssignProc.cpp」の中の記述992Nは、これから作成される画像処理モジュールの「AssignProc.cpp」では、図67に示された記述992Yに書換えられる。なお、図65に示された記述992Xに既に書換えられている場合には、この記述992Xに対して、記述992Yの中の記述612Xが追加される。
図51に戻って、ステップS60の処理の後、画像処理モジュール作成部10Aは、ステップS70で、以上説明したようにテンプレート記憶部16に記憶されたテンプレートの中の一部の記述を書換えたものを新たな画像処理モジュールとして画像処理モジュール記憶部291に記憶させるために、ディレクトリの作成およびファイルの作成を行なって、ステップS80へ処理を進める。
なお、ここで作成されるファイルには、変数定義用のファイルが含まれる。ここで、変数定義用ファイルの作成について説明する。
変数定義用ファイルを作成する際、画像処理モジュール作成部10Aは、ディスプレイ2に図68に示すような画面を表示させる。
図68に示された画面は、画像処理モジュールの作成の際に(または、これに先立って)、CSV(Comma Separated Value)形式で作成された変数定義用のファイルの保存場所を入力するための画面である。入力欄137には、当該ファイルの保存場所が入力され、ボタン138に対して操作がなされることにより当該保存場所に保存されたCSV形式のデータから、変数定義用のヘッダファイルが作成されるとともに、「AssignProc.cpp」などのデータの初期化が行なわれる。
CSV形式の変数定義用のファイルの一例を図70に示す。このようなCSV形式のファイルは、たとえば、図69に示されるような表形式のデータが開発支援装置1に対して入力されることにより、周知の技術により作成される。そして、ステップS80では、画像処理モジュール作成部10Aは、図70に示されるようなファイルを読込むことにより、当該ファイルを、図71に示されるようなヘッダ情報のファイル(Itemdefs.h)に変換して、画像処理モジュール記憶部291に記憶する。
以上説明した変数定義用のファイルには、図69等から理解されるように、各変数についての名称(変数名)、形式(型)、識別子、初期値、下限値、上限値、および、外部の出力および/または入力される当該変数の値を参照するか否か(外部参照)についての情報を含む。本実施の形態の開発支援装置では、このような変数の定義に関する情報を、ファイルとして、一括して保持している。
また、上記したデータの初期化により、「AssignProc.cpp」には図72に示した記述が追加されるとともに、「UnitData.cpp」には図73および図74に示した定義文が追加される。
図51に戻って、ステップS80では、上記のように作成した処理モジュールMSを構成するファイルと処理モジュールUIを構成するファイルのソースコードを、新たな画像処理モジュールとして画像処理モジュール記憶部291に記憶させて、画像処理モジュール作成処理を終了させる。
以上説明した本実施の形態では、処理モジュールMSにより第1画像処理モジュールが構成され、処理モジュールUIにより第2画像処理モジュールが構成される。
また、以上説明した本実施の形態では、開発支援装置1では、SIによる、画像処理検査装置における検査処理のためのプログラム(基本フロー507)の開発が行なわれる。基本フロー507は、上記検査処理について、当該検査処理中に表示される画面の表示を制御する運転画面UI506と、当該検査処理に含まれる複数の処理段階の各処理内容を制御するための画像処理モジュール(画像処理モジュールA509A〜画像処理モジュールN509N)とを含む。各画像処理モジュール509A〜509Nは、実際の処理内容を制御する処理モジュールMS504A〜504Nと、各処理モジュールMSについての設定情報をディスプレイに表示させるための処理モジュールUI505A〜505Nとを含む。SIは、処理モジュールUIによる画面表示に基づいて、処理モジュールMSに対する設定情報を入力できる。
画像処理モジュール(処理モジュールMSおよび処理モジュールUI)は、画像処理モジュール291に記憶される。SIは、図6〜図50を参照して説明したように、所望の画像処理モジュールを、テンプレート記憶部16に記憶されたテンプレートを用いて作成できる。また、SIは、図51〜図68を参照して説明したように、画像処理モジュール291に記憶された処理モジュールMSおよび処理モジュールUIを用いて、所望の画像処理モジュールを作成することもできる。なお、処理モジュールUIによって表示される画面は、画像処理モジュール開発部10によって、操作入力部7に対して入力された操作内容に基づき、上記したように部品記憶部15に記憶された部品(ActiveXコントロール)を貼り付けることにより編集することができる。
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
1 開発支援装置、2 ディスプレイ、4 CPUおよびメモリ、5 ハードディスク、7 操作入力部、8 実行制御部、9 基本フロー開発部、10 画像処理モジュール開発部、10A 画像処理モジュール作成部、13 ビルド実行部、14 カスタマイズプログラム記憶部、16 テンプレート記憶部、19 実行プログラム記憶部、20 マウス、21 キーボード、22 OS類記憶部、23 ライブラリ類記憶部、24 モジュール作成用プログラム記憶部、25 モジュール作成用データ記憶部、291 画像処理モジュール記憶部、501 ハードウェア、502 OS、503 ライブラリ、504A,504B,504N 処理モジュールMS、505A,505B,505N 処理モジュールUI、506 運転画面UI、507 基本フロー、509A,509B,509N 画像処理モジュール、510 設定データ。