画像処理機能のカスタマイズ装置、画像処理機能のカスタマイズ方法、および画像処理機能のカスタマイズのためのプログラム
【課題】システムインテグレータが、容易かつ十分に画像処理検査装置の画像処理機能をカスタマイズすることのできる画像処理機能のカスタマイズ装置、画像処理機能のカスタマイズ方法、および画像処理機能のカスタマイズのためのプログラムを提供する。
【解決手段】操作入力部7は、ユーザの操作を受け付ける。画像処理モジュール記憶部291は、複数個の画像処理モジュールを記憶する。基本フロー開発部9は、操作入力部7を通じたユーザの操作に従って、画像処理モジュール記憶部291に記憶されている複数個の画像処理モジュールの実行順序を決定する。画像処理モジュール開発部10は、操作入力部7を通じたユーザの操作に従って、新たな画像処理モジュールを作成して、画像処理モジュール記憶部291に記憶する。
【解決手段】操作入力部7は、ユーザの操作を受け付ける。画像処理モジュール記憶部291は、複数個の画像処理モジュールを記憶する。基本フロー開発部9は、操作入力部7を通じたユーザの操作に従って、画像処理モジュール記憶部291に記憶されている複数個の画像処理モジュールの実行順序を決定する。画像処理モジュール開発部10は、操作入力部7を通じたユーザの操作に従って、新たな画像処理モジュールを作成して、画像処理モジュール記憶部291に記憶する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、画像処理機能のカスタマイズ装置、画像処理機能のカスタマイズ方法、および画像処理機能のカスタマイズのためのプログラムに関し、特に、製品検査などに用いられる画像処理検査装置の画像処理機能のカスタマイズ装置、画像処理機能のカスタマイズ方法、および画像処理機能のカスタマイズのためのプログラムに関する。
【背景技術】
【0002】
画像処理検査装置は、カメラで撮影された画像を用いて検査を行なうもので、工場の製造ラインなど多方面で用いられている。画像処理検査装置は、どの使用者でも利用できる汎用性を有した装置およびプログラムからなる汎用タイプのものと、個々の使用者のニーズに合致した専用の装置およびプログラムからなる専用タイプのものがある。汎用タイプの画像処理検査装置は、どの使用者でもそれなりに利用することができるが、各使用者のニーズを完全に満たすことができないという問題がある。一方、専用タイプの画像処理検査装置は、使用者ごとに個別に開発しなければならず、メーカ側の開発コストが高いという問題がある。
【0003】
汎用タイプおよび専用タイプはそれぞれ上述のような問題点があるので、メーカ側が、画像処理検査装置の機能のカスタマイズが可能な装置およびそれを動作させるプログラムを提供し、システムインテグレータ(SI)が、利用者のニーズに合わせて機能をカスタマイズすることが必要となる。
【0004】
画像処理検査装置の機能のカスタマイズには、プログラム方式と、メニュー方式と、フロー方式の3つの方法がある。
【0005】
プログラム方式は、SIが、エディタ上で市販のライブラリ(たとえば、非特許文献1および2を参照)を組み合わせてソースコードを記述することによって、画像処理を行なうプログラムを作成する方式である。
【0006】
メニュー方式は、画像入力、位置補正、検査・計測、出力といった基本となる処理の流れが決まっており、SIが、個々の処理で具体的にどのような処理を行なうかを、予め用意された画像処理モジュールの中からメニューで選択する方式である。
【0007】
フロー方式は、SIが、予め用意された画像処理モジュールを選択し、フローチャートを組むようにして処理の流れを作成する方式である。
【非特許文献1】インターネット <URL : http://im.canon-sol.jp/matrox/mil/mil.html>
【非特許文献2】インターネット <URL : http://www.cognex.co.jp/products/pc/visionpro/index.asp>
【発明の開示】
【発明が解決しようとする課題】
【0008】
しかしながら、上記の従来の方式には以下のような問題がある。
プログラム方式では、SIが、画像処理検査の処理の流れと、個々の処理の内容を記述したソースコードを作成しなければならず、SIの負担が大きい。
【0009】
メニュー方式では、画像処理検査の処理の流れが固定で決まっているので、各処理の結果に応じて処理の流れを変えたい場合に対応できない。また、予め用意された画像処理モジュールによる画像処理しか行なうことができないという問題がある。
【0010】
フロー方式では、画像処理検査の処理の流れがSIが自由に設計できるメリットはあるものの、予め備えられている画像処理モジュールによる画像処理しか行なうことができないという問題がある。
【0011】
それゆえに、本発明の目的は、システムインテグレータが、容易かつ十分に画像処理検査装置の画像処理機能をカスタマイズすることのできる画像処理機能のカスタマイズ装置、画像処理機能のカスタマイズ方法、および画像処理機能のカスタマイズのためのプログラムを提供することである。
【課題を解決するための手段】
【0012】
上記課題を解決するために、本発明は、画像処理検査装置の画像処理機能をカスタマイズする装置であって、ユーザの操作を受け付ける操作入力部と、複数個の画像処理モジュールを記憶する第1の記憶部と、操作入力部を通じたユーザの操作に従って、第1の記憶部に記憶されている複数個の画像処理モジュールの実行順序を決定する基本フロー作成部と、操作入力部を通じたユーザの操作に従って、新たな画像処理モジュールを作成して、第1の記憶部に記憶する画像処理モジュール作成部とを備える。
【0013】
好ましくは、画像処理機能のカスタマイズ装置は、画像処理モジュールのテンプレートを記憶する第2の記憶部を備え、画像処理モジュール作成部は、テンプレートを表示して、操作入力部を通じたユーザの操作に従って、テンプレートを編集することによって、新たな画像処理モジュールを作成する。
【0014】
好ましくは、画像処理モジュ−ルは、画像処理結果の表示部分、画像処理結果の出力部分、画像処理の処理内容である演算部分、および画像処理のパラメータの設定のためのユーザインタフェース部分を含む。
【0015】
好ましくは、画像処理機能のカスタマイズ装置は、さらに、テンプレートの画面に貼り付ける部品を記憶する第3の記憶部を備え、画像処理モジュール作成部は、ユーザインタフェース部分の作成時には、第2の記憶部からユーザインタフェース部分のテンプレートを読み出して、ユーザインタフェース画面のテンプレートを表示し、操作入力部を通じたユーザの操作に従って、ユーザインタフェース画面のテンプレートに第3の記憶部に記憶されている部品を貼り付けることによって、ユーザインタフェース部分のテンプレートを編集する。
【0016】
好ましくは、画像処理モジュール作成部は、表示部分、出力部分、または演算部分の作成時には、第2の記憶部から部分のプログラムのテンプレートを読み出してエディタ上に表示し、操作入力部を通じたユーザの操作に従って、プログラムのテンプレートを編集する。
【0017】
好ましくは、画像処理モジュールは、1個または複数個のファイルで構成されており、、ファイルの名前、ファイル内の関数の名前、またはファイル内のコメント文によってファイルまたはファイル内の関数が、画像処理モジュールの表示部分、出力部分、および演算部分のいずれに対応するかが識別可能とされている。
【0018】
好ましくは、画像処理機能のカスタマイズ装置は、さらに、第2の記憶部は、さらに画像処理検査装置による画像処理の結果を表示するための運転画面のテンプレートを記憶し、第2の記憶部から運転画面のテンプレートを読み出して表示し、操作入力部を通じたユーザの操作に従って、運転画面のテンプレートに第3の記憶部に記憶されている部品を貼り付けることによって運転画面のテンプレートを編集する運転画面作成部とを備える。
【0019】
好ましくは、画像処理機能のカスタマイズ装置は、さらに、操作入力部を通じたユーザの操作に従って、画像処理検査装置による画像処理実行中にイベントが発生した場合に、イベントが発生したタイミングで実行される処理を定めたイベントモジュールを作成するイベント処理作成部を備え、基本フロー作成、画像処理モジュール作成、運転画面作成、またはイベント処理作成を選択するためのボタンを表示し、操作入力部を通じたユーザの選択操作にしたがって、実行する処理を切替える実行制御部とを備え、実行制御部は、画像処理機能のカスタマイズ手順として、基本フロー作成、画像処理モジュール作成、運転画面作成、イベント処理作成の順番で行なうことを推奨するガイドを表示する。
【0020】
また、本発明は、複数個の画像処理モジュールを記憶する第1の記憶部を備えた装置におけ画像処理検査装置の画像処理機能をカスタマイズする方法であって、操作入力部が、ユーザの操作を受け付けるステップと、、基本フロー作成部が、操作入力部を通じたユーザの操作に従って、第1の記憶部に記憶されている複数個の画像処理モジュールの実行順序を決定するステップと、画像処理モジュール作成部が、操作入力部を通じたユーザの操作に従って、新たな画像処理モジュールを作成して、第1の記憶部に記憶するステップとを備える。
【0021】
また、本発明の画像処理機能をカスタマイズするプログラムは、コンピュータを、ユーザの操作を受け付ける操作入力部と、複数個の画像処理モジュールを記憶する第1の記憶部と、操作入力部を通じたユーザの操作に従って、第1の記憶部に記憶されている複数個の画像処理モジュールの実行順序を決定する基本フロー作成部と、操作入力部を通じたユーザの操作に従って、新たな画像処理モジュールを作成して、第1の記憶部に記憶する画像処理モジュール作成部として機能させる。
【発明の効果】
【0022】
本発明によれば、システムインテグレータが、容易かつ十分に画像処理機能をカスタマイズすることができる。
【発明を実施するための最良の形態】
【0023】
以下、本発明に係る実施の形態について図面を参照して説明する。
図1は、本発明の実施形態の画像処理機能のカスタマイズ装置の構成を表わす図である。この画像処理機能のカスタマイズ装置1は、画像処理検査装置の画像処理機能をカスタマイズする装置であって、画像処理検査装置で動作する実行形式のプログラムを作成する。
【0024】
図1を参照して、この画像処理機能のカスタマイズ装置1は、コンピュータで実現されており、ディスプレイ2と、CPU(Central Processing Unit)およびメモリ4と、操作入力部7と、ハードディスク5と、リムーバブルメディア6を備える。
【0025】
操作入力部7は、マウス20とキーボード21を含み、画像処理機能のカスタマイズ装置1のユーザであるSIからの操作入力を受け付ける。
【0026】
ハードディスク5は、カスタマイズプログラム記憶部14と、画像処理モジュール記憶部291と、基本フロー記憶部294と、イベント処理モジュール記憶部292と、運転画面記憶部293と、テンプレート記憶部16と、部品記憶部15と、OS類記憶部22と、ライブラリ類記憶部23と、シミュレーションソフト記憶部17と、マニュアル類記憶部18と、実行プログラム記憶部19とを含む。
【0027】
カスタマイズプログラム記憶部14は、カスタマイズプログラム(Application Producer)を記憶する。カスタマイズプログラムは、CPUに読み込まれて実行され、コンピュータを画像処理機能のカスタマイズ装置1の各構成要素として機能させる。
【0028】
画像処理モジュール記憶部291は、ソースコード形式の画像処理モジュールを記憶する。画像処理モジュールは、色面積の計算、エッジ位置検出などの画像処理の基本単位を実行するためのもので、複数個のファイルからなる。画像処理モジュール記憶部291は、出荷時に予め組み込まれている画像処理モジュールと、SIによって新たに作成された画像処理モジュールとを記憶する。画像処理モジュールは、画像処理結果の表示部分、画像処理結果の出力部分、画像処理の処理内容である演算部分、および画像処理のパラメータの設定のためのユーザインタフェース部分を少なくとも含む。画像処理のパラメータの設定には、サーチなどのモデル画像の領域座標および画像の設定、画像計測などの計測領域の設定、面積計測での穴埋め(輪郭の中を塗りつぶす)機能の実行の有無の設定、計測結果の判定を行なうための上下限値の設定などがある。
【0029】
基本フロー記憶部294は、SIによって作成された画像処理モジュールの実行順序と、そのパラメータからなる基本フローを記憶する。
【0030】
イベント処理モジュール記憶部292は、SIによって新たに作成されたソースコード形式のイベント処理モジュールを記憶する。イベント処理モジュールは、画像処理検査装置による画像処理の実行中にイベントが発生した場合に、イベントが発生したタイミングで実行される処理を定めたものである。イベント処理モジュールは、画像処理モジュールのようなパラメータの設定のためのユーザインタフェース部分を含まない。
【0031】
運転画面記憶部293は、SIによって新たに作成された運転画面を記憶する。運転画面は、画像処理検査装置による画像処理の結果を表示するための画面であり、記憶されている運転画面は、ビジュアルベーシックのファイルからなる。
【0032】
テンプレート記憶部16は、画像処理モジュールのテンプレートおよび運転画面のテンプレートを記憶する。運転画面のテンプレートは、ビジュアルベーシック(登録商標)のファイルからなる。テンプレートとは、新たな画像処理モジュールおよび運転画面を作成するときの原型となるものであって、1個以上のファイルで構成され、ファイル内には、実行する典型的な呼び出し関数が記述されているものである。ファイル内の呼び出し関数には、典型的な実行命令が記述されていたり、あるいはリターン値だけが記載されている(スケルトン形式という)。
【0033】
図2は、画像処理モジュールのテンプレートを構成するファイルの一覧とその機能の例を表わす図である。画像処理モジュール記憶部291に記憶されている画像処理モジュールも、「Sample」が個々の画像処理モジュール特有の名称となっている以外は、図2と同様のファイル構成である。
【0034】
図2を参照して、「Sample_jpn.msg」は、日本語のメッセージファイルである。「Sample_eng.msg」は、英語のメッセージファイルである。
【0035】
UIプログラムは、画像処理のパラメータ(各種の閾値など)を設定するためのユーザインタフェースを規定したものであり、2個の必須ファイルがある。「NormalForm.vb」は、通常使用されるユーザインタフェースを記述したビジュアルベーシックのファイルである。「NonstopForm.vb」は、計測中に一時的に上下限値を変更するための簡易ノンストップをするときのユーザインタフェースを記述したビジュアルベーシックのファイルである。
【0036】
MSプログラムは、画像処理の処理内容である演算(つまり計測)、画像処理結果(つまり計測結果)の表示、画像処理結果(つまり計測結果)の出力などを規定したものであり、9個の必須ファイルと、5個の任意ファイルとがある。MSプログラムのうち、どのファイルが画像処理モジュールの表示部分、出力部分、および演算(計測)部分のいずれに対応するかがファイル名によって識別可能とされている。これにより、SIがテンプレートを編集する際にどのファイルを修正すべきであるかが容易にわかる。また、MSプログラムのテンプレートに記述される関数は、その中身が戻り値(リターン値)だけが記述されているスケルトンの形式である。
【0037】
「AssignProc.cpp」は、処理ユニット登録時処理関連の処理を記述したテキストファイルである。処理ユニットは、画像処理モジュールと同義である。「Assign」は登録を意味し、「Proc」は処理を意味する「Processing」を略したものであるから、SIがテンプレートの編集の際に、「AssignProc.cpp」が上記処理を記述するものであることを容易に識別できる。
「FigureUpdate.cpp」は、図形データ更新時処理関連の処理を記述したテキストファイルである。「Figure」は図形を意味し、「Update」は更新を意味するものであるから、SIがテンプレートの編集の際に、「FigureUpdate.cpp」が上記処理を記述するものであることを容易に識別できる。
【0038】
「ItemDefs.h」は、処理項目の各種定義を記述したテキストファイルである。処理項目は、画像処理モジュールおよび処理ユニットと同義である。「「Item」は項目を意味し、「Def」は定義を意味する「Definition」を略したものであるから、SIがテンプレートの編集の際に、「ItemDefs.h」が上記処理を記述するものであることを容易に識別できる。
【0039】
「ItemInit.cpp」は、処理項目の初期化処理関連の処理を記述したテキストファイルである。「Item」は項目を意味し、「Init」は初期化を意味する「Initialization」を略したものであるから、SIがテンプレートの編集の際に、「ItemInit.cpp」が上記処理を記述するものであることを容易に識別できる。
【0040】
「MeasureDisp.cpp」は、計測結果表示処理関連の処理を記述したテキストファイルである。「Measure」は計測を意味し、「Disp」は表示を意味する「Display」を略したものであるから、SIがテンプレートの編集の際に、「MeasureDisp.cpp」が上記処理を記述するものであることを容易に識別できる。
【0041】
「MeasureInit.cpp」は、計測初期化/終了関連の処理を記述したテキストファイルである。「Measure」は計測を意味し、「Init」は初期化を意味する「Initialization」を略したものであるから、SIがテンプレートの編集の際に、「MeasureInit.cpp」が上記処理を記述するものであることを容易に識別できる。
【0042】
「MeasureOut.cpp」は、計測結果出力処理関連の処理を記述したテキストファイルである。「Measure」は計測を意味し、「Out」は出力を意味するものであるから、SIがテンプレートの編集の際に、「MeasureOut.cpp」が上記処理を記述するものであることを容易に識別できる。
【0043】
「MeasureProc.cpp」は、計測処理関連の処理を記述したテキストファイルである。「Measure」は計測を意味し、「Proc」は処理を意味する「Processing」を略したものであるから、SIがテンプレートの編集の際に、「MeasureProc.cpp」が上記処理を記述するものであることを容易に識別できる。
【0044】
「UnitData.cpp」は、処理ユニットデータ設定/取得関連の処理を記述したテキストファイルである。「Unit」はユニットを意味し、「Data」はデータを意味するものであるから、SIがテンプレートの編集の際に、「UnitData.cpp」が上記処理を記述するものであることを容易に識別できる。
【0045】
「FigureData.cpp」、処理ユニットの図形データ操作関連の処理を記述したテキストファイルである。「Figure」は図形を意味し、「Data」はデータを意味するものであるから、SIがテンプレートの編集の際に、「FigureData.cpp」が上記処理を記述するものであることを容易に識別できる。
【0046】
「RenumProc.cpp」は、処理ユニットの参照番号更新処理関連の処理を記述したテキストファイルである。「Renum」は番号更新を意味する「Renumber」を略したものであり、「Proc」は処理を意味する「Processing」を略したものであるから、SIがテンプレートの編集の際に、「RenumProc.cpp」が上記処理を記述するものであることを容易に識別できる。
【0047】
「SaveLoad.cpp」は、処理ユニットのデータのセーブおよびロード関連の処理を記述したテキストファイルである。「Save」セーブ(保存)を意味し、「Load」はロード(読出し)を意味するものであるから、SIがテンプレートの編集の際に、「SaveLoad.cpp」が上記処理を記述するものであることを容易に識別できる。
【0048】
「SetupData.cpp」は、設定時の画像処理関連の処理を記述したテキストファイルである。「Setup」は設定を意味し、「Data」はデータを意味するものであるから、SIがテンプレートの編集の際に、「SetupData.cpp」が上記処理を記述するものであることを容易に識別できる。
【0049】
「ThroughProc.cpp」は、スルー表示のための画像入力および生成処理関連の処理を記述したテキストファイルである。「Through」はスルー(直通)を意味し、「Proc」は処理を意味する「Processing」を略したものであるから、SIがテンプレートの編集の際に、「ThroughProc.cpp」が上記処理を記述するものであることを容易に識別できる。
【0050】
部品記憶部15は、画像処理モジュールのユーザインタフェースの画面のテンプレートおよび運転画面のテンプレートに貼り付けることができる部品(ActiveXコントロール)を記憶する。また、部品記憶部15は、イベント処理開発で利用する部品を記憶する。部品記憶部15に記憶されている部品は、表示されている画面に含まれるメニューのうちのツールから選択できる。
【0051】
図3は、部品記憶部15に記憶されている部品のうち、テンプレートのユーザインタフェースの画面に貼り付け可能な部品の一例とその機能を表わす図である。
【0052】
図3を参照して、タブスイッチボタン(TabSwitchButton)およびタブコントロール(TabControl)は、全体のレイアウトのために用いられる。グループパネル(GroupPanel)は、グルーピングのために用いられる。ボタンには、イメージボタン(ImageButton)と、イメージリスト(Imagelist)がある。イメージリストは、同じ画像を使用するイメージボタンを複数個使用する場合に用いられる。ラベルには、背景透過ラベル(LabelEx)がある。アイテムを選択するために、チェックボックス(CheckBox)、ラジオボタン(RadioButton)、およびコンボボックス(ComboBox)がある。チェックボックスは、1つのアイテムを選択するか否かを指定するために用いられ、ラジオボタンは、3個以下のアイテムの選択のために用いられ、コンボボックスは、5個以上のアイテムの選択のために用いられる。数値を入力するために、数値ボックス(NumericBox)と、上下限設定ボックス(LimitBox)と、スライダーセット(SliderSet)と、値設定コントロール(ValueSetControl)と、点設定コントロール(PointSetControl)とが用いられる。数値ボックスは、通常の数値入力のために用いられ、上下限設定ボックスは、上下限値を設定するために用いられ、スライダーセットおよび値設定コントロールは、入力する数値を連続的に変更する場合に用いられ、点設定コントロールは、座標値を設定する場合に用いられる。ソフトキーボード21(SoftKeyboard)は、文字を入力するために用いられる。ファイル選択のために、ファイルダイアログ(FileDialog)と、フォルダブラウザ(FolderBloser)が用いられる。図形設定のために、図形設定コントロール(FigureSetControl)が用いられる。画像の表示のために、イメージウインドウ(SetupImageWindow)と、ズームブラウザ(ZoomBlowser)が用いられる。イメージウインドウは、設定画面の画像を表示するために用いられ、ズームブラウザは、イメージパネルのズーム設定用に用いられる。演算式の設定のために、演算式リスト(CalculationList)が用いられる。基準位置の設定のために、基準座標設定コントロール(StandardSetControl)が用いられる。色の抽出のために、色抽出設定コントロール(ColorExtractControl)が用いられる。色の指定のために、色指定設定コントロール(ColorSetControl)が用いられる。座標モードの設定のために、座標モード設定コントロール(CoordinateSetControl)が用いられる。2次元の折れ線グラフを表示するために、グラフ表示コントロール(GraphLineControl)が用いられる。
【0053】
また、図示しないが、その他に、カスタムコントロールのベースとなるコントロールベース(controlBase)、(CalculationBox)、処理ユニットのリストを表示するユニットリスト(UnitList)、グレイ抽出設定用のコントロール(GrayExtractControl)、詳細結果表示のテキストを表示するテキストパネル(TextPanel)、イメージパネルと組合わせてグラフの表示を行なうドローグラフ(DrawGraph)、数値入力ボックスとカーソルボタンを組み合わせた複合コントロールであるスタンダードセット(StandardSet)、背景イメージを指定できるイメージパネル(ImagePanel)、ユニットリストで使用する処理項目アイテム(UnitListItem)などが用いられる。
【0054】
図4は、部品記憶部15に記憶されている部品のうち、イベント処理開発で利用する部品の例を表わす図である。
【0055】
図4を参照して、「ErrorProc」は、エラー処理用のコントロールである。「MeasureDisp」は、計測結果表示処理用のコントロールである。「MeasureInit」は、計測初期化処理用のコントロールである。「MeasureOut」は、計測結果出力処理用のコントロールである。「MeasureProc」は、計測処理用のコントロールである。「ParallelCommand」パラレルコマンド入力処理用のコントロールである。「SceneChange」は、シーン切替え処理用のコントロールである。「SerialCommand」は、シリアル無手順コマンド入力処理用のコントロールである。
【0056】
OS類記憶部22は、WindowsXP(登録商標)およびVisualStudioを記憶する。
【0057】
ライブラリ類記憶部23は、ライブラリおよびドライバを記憶する。
シミュレーションソフト記憶部17は、図1の画像処理機能のカスタマイズ装置1で実行可能な実行形式のプログラムを起動するためのシミュレーションソフトを記憶する。
【0058】
マニュアル類記憶部18は、マニュアル、チュートリアル、ヘルプおよびサンプルを記憶する。
【0059】
実行プログラム記憶部19は、出荷時に予め組み込まれている画像処理モジュールの実行形式のプログラム、およびビルド実行部13で作成された実行形式のプログラムを記憶する。
【0060】
カスタマイズプログラム、部品、テンプレート、OS類、ライブラリ類、シミュレーションソフト、およびマニュアル類は、外部からリムーバブルメディア6を用いてハードディスク5にインストールすることができる。
【0061】
CPUおよびメモリ4は、OS類記憶部22からWindowsXPおよびVisualStudio(登録商標)を読出し、さらにカスタマイズプログラム記憶部14からカスタマイズプログラムを読み出して、これらを実行することによって、実行制御部8と、基本フロー開発部9と、画像処理モジュール開発部10と、運転画面開発部11と、イベント処理開発部12と、ビルド実行部13として機能する。
【0062】
実行制御部8は、この画像処理機能のカスタマイズ装置1の全体の動作を制御する。
基本フロー開発部9は、操作入力部7を通じたユーザの操作に従って、画像処理モジュール記憶部291に記憶されている複数個の画像処理モジュールの実行順序を決定して、決定した実行順序と、そのパラメータからなる基本フローを基本フロー記憶部294に記憶する。
【0063】
画像処理モジュール開発部10は、テンプレート記憶部16に記憶されている画像処理モジュールのテンプレートを読み出して表示し、操作入力部7を通じたSIの操作に従って、画像処理モジュールのテンプレートを編集して、編集後の画像処理モジュールを画像処理モジュール記憶部291に記憶する。
【0064】
運転画面開発部11は、テンプレート記憶部16に記憶されている運転画面のテンプレートを読み出して表示し、操作入力部7を通じたSIの操作に従って、運転画面のテンプレートに部品記憶部15に記憶されている部品を貼り付けて運転画面のテンプレートを編集して、編集後の運転画面を運転画面記憶部293に記憶する。
【0065】
イベント処理開発部12は、操作入力部7を通じたSIの操作に従って、イベントモジュールを作成して、イベント処理モジュール記憶部292に記憶する。
【0066】
ビルド実行部13は、ソースコードをコンパイルしてオブジェクトコードを生成し、さらにオブジェクトコードとライブラリ類記憶部23内のライブラリおよびドライバとをリンクすることによって、実行形式のプログラムを作成して実行プログラム記憶部19に記憶する。ビルド実行部13は、画像処理検査装置が動作するOSであるWindowsCE(登録商標)用の実行形式のプログラムと、図1の画像処理機能のカスタマイズ装置1が動作するOSであるWindowsXP用の実行形式のプログラムの両方を作成する。WindowsCE用の実行形式のプログラムは、リムーバブルメディア6などを用いて、画像処理検査装置にインストールされる。WindowsXP用の実行形式のプログラムは、図1の装置で、画像処理検査装置におる画像処理をエミュレート(シミュレーション)するために用いられる。
【0067】
CPUおよびメモリ4から出力される画面データは、ディスプレイ2に送られて表示される。
【0068】
(全体の処理手順)
図5は、画像処理機能のカスタマイズの全体の処理手順を表わすフローチャートである。図6は、画像処理機能のカスタマイズ装置1が起動後、最初に実行制御部8によって表示される画面の例を表わす図である。
【0069】
図6の画面では、矢印の向きによって、画像処理機能のカスタマイズの手順として、基本フロー開発、処理項目開発、運転画面開発、イベント処理開発の順番で処理を行なうことを推奨することをガイドしているが、これ以外の順番で処理を行なうことも可能である。
【0070】
図5および図6を参照して、SIが、マウス20を操作してボタン51を選択したときには(ステップS101でYES)、実行制御部8は、基本フロー開発部9に基本フロー開発の処理を指示し、図7に示す画面を表示する(ステップS102)。
【0071】
SIが、マウス20を操作してボタン52を選択したときには(ステップS103でYES)、実行制御部8は、画像処理モジュール開発部10に画像処理モジュールの開発の処理を指示し、図8に示す画面を表示する(ステップS104)。
【0072】
SIが、マウス20を操作してボタン53を選択したときには(ステップS105でYES)、実行制御部8は、運転画面開発部11に運転画面開発の処理を指示し、図9に示す画面を表示する(ステップS106)。
【0073】
SIが、マウス20を操作してボタン54を選択したときには(ステップS107でYES)、実行制御部8は、イベント処理開発部12にイベント処理開発の処理を指示する(ステップS108)。
【0074】
SIが、マウス20を操作して、ボタン55を選択したときには(ステップS109でYES)、実行制御部8は、マニュアル類記憶部18からリファレンスを読み出して表示する(ステップS110)。
【0075】
SIが、マウス20を操作して、ボタン56を選択したときは(ステップS111でYES)、実行制御部8は、マニュアル類記憶部18からサンプルを読み出して表示する(ステップS112)。
【0076】
SIが、マウス20を操作してボタン57を選択したときには(ステップS113でYES)、実行制御部8は、マニュアル類記憶部18から「Application Producer」とは何かを説明したマニュアル1章を読み出して表示する(ステップS114)。
【0077】
SIが、マウス20を操作してボタン58を選択したときには(ステップS115でYES)、実行制御部8は、マニュアル類記憶部18から「Application Producer」の使い方を説明したマニュアル1−2章を読み出して表示する(ステップS116)。
【0078】
SIが、マウス20を操作してボタン59を選択したときには(ステップS117でYES)、実行制御部8は、マニュアル類記憶部18から「Application Produce」のマニュアルを読み出して表示する(ステップS118)。
【0079】
(基本フロー開発)
図10は、基本フロー開発の処理手順を表わすフローチャートである。
【0080】
図10を参照して、SIが、マウス20を操作してボタン60を選択したときには(ステップS201でYES)、実行制御部8は、シミュレーションソフト記憶部17からシミュレーションソフトを読み出して起動する(ステップS202)。
【0081】
SIが、マウス20を操作してボタン61を選択したときには(ステップS203でYES)、基本フロー開発部9は、マニュアル類記憶部18からマニュアル3−1章を読み出して表示する(ステップS204)。
【0082】
SIが、マウス20を操作してボタン62を選択したときには(ステップS205でYES)、基本フロー開発部9は、マニュアル類記憶部18からチュートリアルを読み出して表示する(ステップS206)。
【0083】
SIが、マウス20を操作してボタン63を選択したときには(ステップS207)、基本フロー開発部9は、マニュアル類記憶部18からサンプルフローを読み出して表示する(ステップS208)。
【0084】
SIが、マウス20を操作してボタン64を選択したときには(ステップS209)、基本フロー開発部9は、基本フローの作成処理を選択して、図11に示す画面を表示する(ステップS210)。
【0085】
SIが、マウス20を操作して、図示しない「戻る」ボタンを選択したときには(ステップS211でYES)、基本フロー開発部9は、基本フローの作成処理を終了する。
【0086】
図12は、基本フローの作成処理の手順を表わすフローチャートである。
図12を参照して、SIが、マウス20を操作してリスト欄83の一つの項目を選択すると(ステップS301でYES)、基本フロー開発部9は、リスト欄83の中の1つの画像処理モジュールを選択する(ステップS302)。
【0087】
SIが、マウス20を操作して追加ボタン84を選択すると(ステップS303でYES)、基本フロー開発部9は、基本フロー欄95の最下部にリスト欄83で選択されている画像処理モジュールを追加する(ステップS304)。
【0088】
SIが、マウス20を操作して挿入ボタン85を選択すると(ステップS305でYES)、基本フロー開発部9は、基本フロー欄95の中の選択されている画像処理モジュールの直下にリスト欄83で選択されている画像処理モジュールを挿入する(ステップS306)。
【0089】
SIが、マウス20を操作して設定ボタン86を選択すると(ステップS307でYES)、画像処理モジュール開発部10は、基本フローの中の選択されている画像処理モジュールのパラメータなどを設定するためのUIプログラムを画像処理モジュール記憶部291から読み出して表示する。SIが、表示されている画面に含まれるメニューのうちのツールから部品を選択し、部品記憶部15から選択された部品を読み出して配置することによって、ユーザインタフェース画面を編集し、図示しない保存メニューを選択して、編集後のUIプログラムを画像処理モジュール記憶部291に記憶する(ステップS308)。
【0090】
SIが、マウス20を操作してコピーボタン90を選択すると(ステップS309でYES)、基本フロー開発部9は、基本フロー欄95の中の選択されている画像処理モジュールをコピーする(ステップS310)。
【0091】
SIが、マウス20を操作してペーストボタン91を選択すると(ステップS311でYES)、基本フロー開発部9は、基本フロー欄95の中の選択されている画像処理モジュールの直下に、コピーボタン90によってコピーした画像処理モジュールを挿入する(ステップS312)。
【0092】
SIが、マウス20を操作して削除ボタン92を選択すると(ステップS313でYES、基本フロー開発部9は、基本フロー欄95の中の選択されている画像処理モジュールを削除する(ステップS314)。
【0093】
SIが、マウス20を操作して移動(上へ)ボタン88を選択すると(ステップS315でYES)、基本フロー開発部9は、基本フロー欄95の中の選択される画像処理モジュールを1つ上に移動する(ステップS316)。
【0094】
SIが、マウス20を操作して移動(下へ)ボタン89を選択すると(ステップS317でYES)、基本フロー開発部9は、基本フロー欄95の中の選択される画像処理モジュールを1つ下に移動する(ステップS318)。
【0095】
SIが、マウス20を操作して名前の変更ボタン87を選択すると(ステップS319でYES)、基本フロー開発部9は、基本フロー欄95の中の選択されている画像処理モジュールの名前の変更を可能とする。SIが、キーボード21を操作して画像処理モジュールの名前を変更する(ステップS320)。
【0096】
SIが、マウス20を操作してヘルプ96を選択すると(ステップS321でYES)、基本フロー開発部9は、マニュアル類記憶部18からヘルプを読み出して表示するる(ステップS322)。
【0097】
SIが、マウス20を操作して閉じる97を選択すると(ステップS323でYES)、基本フロー開発部9は、基本フローが作成されている場合に、作成された基本フローを基本フロー記憶部294に記憶し、その処理を終了する。
【0098】
図13は、基本フローの作成後の画面の例を表わす図である。
図13を参照して、基本フローは、3つの画像処理モジュール98、99、40からなる。この基本フローでは、まずカメラ画像を入力し、次に入力した画像の面積重心を計算して、その後処理ユニットデータを設定することを定めた基本フローが作成されている。
【0099】
(画像処理モジュール開発)
図14は、画像処理モジュール開発の処理手順を表わすフローチャートである。
【0100】
図14を参照して、SIが、マウス20を操作してボタン65を選択したときには(ステップS401でYES)、画像処理モジュール開発部10は、MSプログラムの編集処理を選択し、MSプログラムのテンプレート41をテンプレート記憶部16から読み出して、図15に示すようにエディタ上に表示する。SIが、キーボートから文字を入力、削除することによって、MSプログラムのテンプレート41を編集して、図示しない保存メニューを選択して、編集後のMSプログラムを画像処理モジュール記憶部291に記憶する(ステップS402)。
【0101】
SIが、マウス20を操作してボタン66を選択したときには(ステップS403でYES)、画像処理モジュール開発部10は、マニュアル類記憶部18からMSプログラムの編集を説明したマニュアル3−2−5章を読み出して表示する(ステップS404)。
【0102】
SIが、マウス20を操作してボタン67を選択したときには(ステップS405でYES)、画像処理モジュール開発部10は、UIプログラムの編集処理を選択して、UIプログラムのテンプレートをテンプレート記憶部16から読み出して図16に示すようなユーザインタフェース画面のテンプレート461を表示する。SIが、表示されている画面に含まれるメニューのうちのツール462から部品を選択し、部品記憶部15から選択された部品を読み出して配置することによって、図16のユーザインタフェース画面のテンプレート461を編集し、図示しない保存メニューを選択して、編集後のUIプログラムを画像処理モジュール記憶部291に記憶する(ステップS406)。
【0103】
SIが、マウス20を操作してボタン68を選択したときには(ステップS407でYES)、画像処理モジュール開発部10は、マニュアル類記憶部18からUIプログラムの編集を説明したマニュアル3−2−6章を読み出して表示する(ステップS408)。
【0104】
SIが、マウス20を操作してボタン69を選択したときには(ステップS409でYES)、画像処理モジュール開発部10は、マニュアル類記憶部18からユーザインタフェース画面のサンプルを読み出して表示する(ステップS410)。
【0105】
SIが、マウス20を操作してボタン70を選択したときには(ステップS411でYES)、実行制御部8は、シミュレーションソフト記憶部17からシミュレーションソフトを読み出して起動する(ステップS412)。
【0106】
SIが、マウス20を操作してボタン71を選択したときには(ステップS413でYES)、画像処理モジュール開発部10は、マニュアル類記憶部18から画像処理モジュール開発のチュートリアルを読み出して表示する(ステップS414)。
【0107】
SIが、マウス20を操作してボタン72を選択したときには(ステップS415でYES)、画像処理モジュール開発部10は、マニュアル類記憶部18から画像処理モジュール開発を説明したマニュアル3−2章を読み出して表示する(ステップS416)。
【0108】
SIが、マウス20を操作してボタン73を選択したときには(ステップS417でYES)、画像処理モジュール開発部10は、マニュアル類記憶部18から画像処理モジュール開発のためのリファレンスを読み出して表示する(ステップS418)。
【0109】
SIが、マウス20を操作して図示しないビルドメニューを選択したときには(ステップS419でYES)、ビルド実行部13は、画像処理モジュール記憶部291に記憶されているステップS402で作成されたMSのソースコードおよびステップS406で作成されたUIのソースコードをコンパイルしてオブジェクトコードを生成し、ライブラリ類記憶部23から必要なライブラリとドライバを読み出してオブジェクトコードとリンクすることによって、WindowsCEとWindowsXP用のMSの実行形式のプログラムおよびUIの実行形式のプログラムを作成して実行プログラム記憶部19に記憶する(ステップS420)。
【0110】
SIが、マウス20を操作して図示しない「戻る」ボタンを選択したときには(ステップS421でYES)、画像処理モジュール開発部10は、処理を終了する。
【0111】
次に、テンプレートがSIの編集によってどのように変更されるかの例を説明する。ここでは、テンプレートを編集して、他の画像処理モジュールのパラメータ設定を一括して行なうための画像処理モジュールを作成する場合について説明する。この画像処理モジュールは、座標の変更や上下限値の変更などのように、複数の数値を変更する場合に用いられる。
【0112】
図17および図18は、「ItemDefs.h」のテンプレートを表わす図である。
図19および図20は、編集後の「ItemDefs.h」を表わす図である。
【0113】
図17〜図20を参照して、SIの編集によって、テンプレートの定義文190が、定義文191に変更され、定義文192、193、194が追加されている。
【0114】
図17〜図20を参照して、「ItemDefs.h」の内容を説明する。SETUPDATA構造体には、処理を実行する際に必要になるパラメータなどの設定データの構造が定義される。MEASUREDATA構造体には、処理(計測)を実行した際の結果のデータの構造が定義される。ItemDef.h中で定義した SETUPDATA構造体に含まれるデータの初期値については、AssignProc.cpp中に記述される。
【0115】
図21は、「AssignProc.cpp」のテンプレートを表わす図である。
図22および図23は、編集後の「AssignProc.cpp」を表わす図である。
【0116】
図21〜図23を参照して、SIの編集によって、日付151が記入され、作成者152が記入され、関数AssignProcの中身の命令153が追加されている。
【0117】
図21〜図23を参照して、「AssignProc.cpp」の内容を説明する。本ファイル内では以下の関数の処理を定義し、画像処理モジュールが登録される際のチェック処理などを記述する。
【0118】
int クラス名::AssignProc(*ptrProcUnit);
ProcUnit *ptrProcUnit; 処理ユニット情報へのポインタ
本関数の処理を終了する際は、戻り値として以下の値を返す。NORMAL以外の値を返した場合は処理ユニット登録不可ということで、処理ユニットの登録が行われない。
【0119】
NORMAL(0):処理ユニット登録可能
!NORMAL(0以外):処理ユニット登録不可
設定データの初期化は、このメソッドに記述し、図形データの初期化(SetFigureType())は、このメソッドに記述する。本関数を用いることで、処理ユニットの登録順序などに制約がある場合のチェックを行なうことができる。
【0120】
図24および図25は、「FigureUpdate.cpp」のテンプレートを表わす図である。
本発明の実施形態では、SIが、テンプレートを編集しなかったため、「FigureUpdate.cpp」は、変更されていない。
【0121】
図24および図25を参照して、「FigureUpdate.cpp」の内容を説明する。本ファイル内では以下のメソッドを記述し、図形データが更新されたときの処理を記述する。
【0122】
int クラス名::FigureUpdate(*ptrProcUnit, figureNo);
ProcUnit *ptrProcUnit; 処理ユニット情報へのポインタ
int figureNo; 図形データ番号
本関数の処理を終了する際は、戻り値として以下の値を返す。
【0123】
NORMAL(0):図形データ更新処理に成功
!NORMAL(0以外):図形データ更新処理に失敗
モデルの登録処理は本メソッドに記述する。
【0124】
図26および図27は、「ItemInit.cpp」のテンプレートを表わす図である。
図28および図29は、編集後の「ItemInit.cpp」を表わす図である。
【0125】
図26〜図29を参照して、SIの編集によって、日付154が記入され、作成者155が記入されている。さらに、SIの編集によって、テンプレートの"Sample"658、ITEM_MEASURE659、一般計測関連660、0(661)、"サンプル"662が、"SetUnitData4"158、ITEM_SUPPORT159、計測補助関連160、4(161)、"処理ユニットデータ設定"162に変更されている。
【0126】
図26〜図29を参照して、「ItemInit.cpp」の内容を説明する。コンストラクタ・デストラクタおよび本クラスのインスタンスを生成する関数、本クラスのインスタンスを削除する関数を記述する。なお、本クラスのインスタンスを生成する関数および本クラスのインスタンスを削除する関数は、DLLのエクスポート関数にする。コンストラクタには画像処理モジュールをシステム(CORERA)に認識させるための情報を記述する。具体的には下記のメソッドに値を設定します。
【0127】
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) 画像処理モジュールタイトル名
デストラクタには、本クラスのインスタンスが消滅するときに実行する処理を記述する。本関数では、本クラスのインスタンスを生成し戻り値として返す処理を記述する。本関数の処理を終了する際は、戻り値として以下の値を返す。
【0128】
ProcItem:インスタンスのポインタ:インスタンス生成成功時
NULL:インスタンス生成失敗時
図30および図31は、「MeasureDisp.cpp」のテンプレートを表わす図である。
【0129】
図32〜図34は、編集後の「MeasureDisp.cpp」を表わす図である。
図30および図31および図32〜図34を参照して、SIの編集によって、日付163および日付164が記入され、作成者165および作成者166が記入され、関数MeasureDispTの中身の命令167が追加されている。
【0130】
本ファイル内では以下のメソッドを記述し、画像処理モジュール個別に計測結果を表示する際の表示処理を記述する。
【0131】
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; 詳細結果表示エリア情報へのポインタ
本関数の処理を終了する際は、戻り値として以下の値を返す。
【0132】
NORMAL(0):計測結果出力処理正常終了
!NORMAL(0以外):計測結果出力処理異常終了
3つの関数は、以下の記述に対応する。
【0133】
MeasureDispI():画像表示
MeasureDispG():画像表示エリアへのグラフィック表示
MeasureDispT():詳細結果表示エリアへの文字表示
引数subNoが-1の場合は、全画像処理モジュール共通で位置一覧表示モード時の表示となる。サーチ系の画像処理モジュールの場合は、モデル領域のみ表示する。処理ユニットの判定結果が”判定なし”の場合(MEASDATA 構造体中のjudge=J_NCの場合)、処理ユニットのMeasureDisp*()はコールされない。
【0134】
図35および図36は、「MeasureInit.cpp」のテンプレートを表わす図である。
本発明の実施形態では、SIが、テンプレートを編集しなかったため、「MeasureInit.cpp」が変更されていない。
【0135】
図35および図36を参照して、「MeasureInit.cpp」の内容を説明する。本ファイル内では、以下の関数の処理を定義し、計測画面に入る時点で実行すべき初期化処理および計測終了時に実行すべき処理を記述する。
【0136】
int クラス名::MeasureInit(*ptrProcUnit);
int クラス名::MeasureEnd(*ptrProcUnit);
ProcUnit *ptrProcUnit; 処理ユニット情報へのポインタ
本関数の処理を終了する際は、戻り値として以下の値を返す。
【0137】
NORMAL(0):計測初期化処理正常終了
!NORMAL(0以外):計測初期化処理異常終了
NORMAL以外の値を返した場合は画面にエラーメッセージが表示され、当該シーン内の全処理ユニットの非セーブROIモデルがクリアされる。また、NORMAL以外の値を返して画面にエラーメッセージが表示された場合も、メッセージボックスを終了するとそのまま計測が実行可能な状態になる。
【0138】
図37は、「MeasureOut.cpp」のテンプレートを表わす図である。
本発明の実施形態では、SIが、テンプレートを編集しなかったため、「MeasureOut.cpp」が変更されていない。
【0139】
図37を参照して、「MeasureOut.cpp」の内容を説明する。本ファイル内では以下のメソッドを記述し、画像処理モジュール個別に計測結果を出力する際の結果出力処理を記述する。
【0140】
int クラス名::MeasureOut(*ptrProcUnit);
ProcUnit *ptrProcUnit; 処理ユニット情報へのポインタ
本関数の処理を終了する際は、戻り値として以下の値を返す。
【0141】
NORMAL(0):計測結果出力処理正常終了
!NORMAL(0以外):計測結果出力処理異常終了
図38は、「MeasureProc.cpp」のテンプレートを表わす図である。
【0142】
図39〜図41は、編集後の「MeasureProc.cpp」を表わす図である。
図38および図39〜図41を参照して、SIの編集によって、日付168が記入され、作成者169が記入され、関数MeasureProcの中身の命令170が追加されている。
【0143】
図38および図39〜図41を参照して、「MeasureProc.cpp」の内容を説明する。本ファイル内では以下のメソッドを記述し、計測時に実行する画像処理などの処理を記述する。
【0144】
int クラス名::MeasureProc(*ptrProcUnit);
ProcUnit *ptrProcUnit; 処理ユニット情報へのポインタ
本関数の処理を終了する際は、戻り値として以下の値を返す。
【0145】
NORMAL(0):計測処理正常終了
!NORMAL(0以外):計測処理異常終了
図42および図43は、「RenumProc.cpp」のテンプレートを表わす図である。
【0146】
図44および図45は、編集後の「RenumProc.cpp」を表わす図である。
図42〜図45を参照して、SIの編集によって、日付171が記入され、作成者172が記入され、関数RenumProcの中身の命令173が追加されている。
【0147】
図42〜図45を参照して、「RenumProc.cpp」の内容を説明する。本ファイル内では以下のメソッドを記述し、ユニット追加・削除・移動時の処理を記述する。
【0148】
int クラス名::RenumProc(*ptrProcUnit, *ptrRenumInfo);
ProcUnit *ptrProcUnit; 処理ユニット情報へのポインタ
RenumInfo *ptrRenumInfo;フロー編集情報へのポインタ
本関数の処理を終了する際は、戻り値として以下の値を返す。
【0149】
NORMAL(0):ユニット追加・削除・移動時処理正常終了
!NORMAL(0以外):ユニット追加・削除・移動時処理異常終了
図46〜図48は、「UnitData.cpp」のテンプレートを表わす図である。
【0150】
図49〜図57は、編集後の「UnitData.cpp」を表わす図である。
図46〜図48および図49〜図57を参照して、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が追加されている。
【0151】
図46〜図48および図49〜図57を参照して、「UnitData.cpp」の内容を説明する。
【0152】
本ファイル内では以下のメソッドを記述し、データ設定時およびデータ取得時の処理を記述する。
【0153】
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には以下のようにどういう型のデータを渡すかというデータ種別(を示すコード)が入れるものとする。
【0154】
T_INTEGER:整数
T_DOUBLE :実数
T_STRING :文字列
T_VARIANT:可変長データ
本関数の処理を終了する際は、戻り値として以下の値を返す。
【0155】
NORMAL(0):データ設定・データ設定成功
!NORMAL(0以外):データ取得・データ取得成功
図58および図59は、ユーザインタフェース画面のテンプレートを表わす図である。
【0156】
図60は、編集後のユーザインタフェース画面を表わす図である。
図58、図59および図60を参照して、SIの編集操作によって、タブ「メニュー1」251が「色指定」256に変更され、タブ「メニュー2」252が「領域指定」267に変更されている。さらに、タブ「基準位置」268、タブ「計測パラメータ」269、およびタブ「出力パラメータ」270が追加されている。また、タブ「色指定」266の画面には、部品271および部品272が追加されている。
【0157】
(運転画面開発)
図61は、運転画面開発の処理手順を表わすフローチャートである。
【0158】
図61を参照して、SIが、マウス20を操作してボタン74を選択したときには(ステップS501でYES)、運転画面開発部11は、運転画面の作成処理を行なう(ステップS502)。
【0159】
SIが、マウス20を操作してボタン75を選択したときには(ステップS503でYES)、運転画面開発部11は、マニュアル類記憶部18からマニュアル3−3−3章を読み出して表示する(ステップS504)。
【0160】
SIが、マウス20を操作してボタン76を選択したときには(ステップS505でYES)、運転画面開発部11は、運転画面の編集処理を選択して、テンプレート記憶部16から運転画面のテンプレートを読み出して、図62に示すような画面を表示する。SIが、表示されている画面に含まれるメニューのうちのツール462から部品を選択し、部品記憶部15から選択された部品を読み出して配置することによって、図62の運転画面のテンプレート451を編集して、図示しない保存メニューを選択して、編集後の運転画面を運転画面記憶部293に記憶する(ステップS506)。
【0161】
SIが、マウス20を操作してボタン77を選択したときには(ステップS507でYES)、運転画面開発部11は、マニュアル類記憶部18から運転画面の編集を説明したマニュアル3−3−2章を読み出して表示する(ステップS508)。
【0162】
SIが、マウス20を操作してボタン78を選択したときには(ステップS509でYES)、運転画面開発部11は、マニュアル類記憶部18から運転画面のサンプルを読み出して表示する(ステップS510)。
【0163】
SIが、マウス20を操作してボタン79を選択したときには(ステップS511でYES)、実行制御部8は、シミュレーションソフト記憶部17からシミュレーションソフトを読み出して起動する(ステップS512)。
【0164】
SIが、マウス20を操作してボタン80を選択したときには(ステップS513でYES)、運転画面開発部11は、マニュアル類記憶部18から運転画面開発のチュートリアルを読み出して表示する(ステップS514)。
【0165】
SIが、マウス20を操作してボタン81を選択したときには(ステップS515でYES)、運転画面開発部11は、マニュアル類記憶部18から運転画面開発を説明したマニュアル3−3章を読み出して表示する(ステップS516)。
【0166】
SIが、マウス20を操作してボタン82を選択したときには(ステップS517でYES)、運転画面開発部11は、マニュアル類記憶部18から運転画面開発のためのリファレンスを読み出して表示する(ステップS518)。
【0167】
SIが、マウス20を操作して図示しないビルドメニューを選択したときには(ステップS519でYES)、ビルド実行部13は、運転画面記憶部293に記憶されているステップS502またはS506で作成された運転画面のソースコードをコンパイルしてオブジェクトコードを生成し、ライブラリ類記憶部23から必要なライブラリとドライバを読み出してオブジェクトコードとリンクすることによって、WindowsCEとWindowsXP用の運転画面の実行形式のプログラムを作成して実行プログラム記憶部19に記憶する(ステップS520)。
【0168】
SIが、マウス20を操作して図示しない「戻る」ボタンを選択したときには(ステップS521でYES)、運転画面開発部11は、処理を終了する。
【0169】
図63は、運転画面の別のテンプレートを表わす図である。
図64は、編集後の運転画面を表わす図である。
【0170】
図63および図64を参照して、SIの編集操作によって、運転画面に部品352、353、354、355、356が追加されている。
【0171】
(イベント処理開発)
図65は、イベント処理開発の手順を表わすフローチャートである。
【0172】
図65を参照して、SIが、マウス20を操作して表示されている画面に含まれるメニューのうちのツールから計測初期化処理用のMeasureInitコントロールを選択したときには(ステップS601でYES)、SIが、キーボード21を操作して、MeasureInitコントロールのuserFormプロパティ(coreRAからのイベントを受け取るFormオブジェクト)を設定し(ステップS602)、SIが、さらに、マウス20を操作してイベントハンドラを追加して、追加したイベントハンドラに計測化初期化処理時に実行する処理を記述する(ステップS603)。これにより、イベント処理開発部12は、上記設定されたプロパティを有し、かつ計測初期化処理が実行されたタイミングで上記記述された処理を行なうメソッド(イベント処理モジュール)をイベント処理モジュール記憶部292に記憶する(ステップS604)。
【0173】
SIが、マウス20を操作して表示されている画面に含まれるメニューのうちのツールから計測処理用のMeasureProcコントロールを選択したときには(ステップS605でYES)、SIが、キーボード21を操作して、MeasureProcコントロールのuserFormプロパティおよびProcNoプロパティ(「ユーザ処理」画像処理モジュールの設定項目として設定した番号)を設定し(ステップS606)、SIが、さらに、マウス20を操作してイベントハンドラを追加して、追加したイベントハンドラに計測化処理時に実行する処理を記述する(ステップS607)。これにより、イベント処理開発部12は、上記設定されたプロパティを有し、かつ計測処理が実行されたタイミングで上記記述された処理を行なうメソッド(イベント処理モジュール)をイベント処理モジュール記憶部292に記憶する(ステップS608)。
【0174】
SIが、マウス20を操作して表示されている画面に含まれるメニューのうちのツールから計測結果表示処理用のMeasureDispコントロールを選択したときには(ステップS609でYES)、SIが、キーボード21を操作して、MeasureDispコントロールのuserFormプロパティを設定し(ステップS610)、SIが、さらに、マウス20を操作してイベントハンドラを追加して、追加したイベントハンドラに計測結果表示処理時に実行する処理を記述する(ステップS611)。これにより、イベント処理開発部12は、上記設定されたプロパティを有し、かつ計測結果表示処理が実行されたタイミングで上記記述された処理を行なうメソッド(イベント処理モジュール)をイベント処理モジュール記憶部292に記憶する(ステップS612)。
【0175】
SIが、マウス20を操作して表示されている画面に含まれるメニューのうちのツールから計測結果出力処理用のMeasureOutコントロールを選択したときには(ステップS613でYES)、SIが、キーボード21を操作して、MeasureOutコントロールのuserFormプロパティを設定し(ステップS614)、SIが、さらに、マウス20を操作してイベントハンドラを追加して、追加したイベントハンドラに計測結果出力時に実行する処理を記述する(ステップS615)。これにより、イベント処理開発部12は、上記設定されたプロパティを有し、かつ計測結果出力処理が実行されたタイミングで上記記述された処理を行なうメソッド(イベント処理モジュール)をイベント処理モジュール記憶部292に記憶する(ステップS616)。
【0176】
SIが、マウス20を操作して表示されている画面に含まれるメニューのうちのツールからシーン切替え処理用のSceneChangeコントロールを選択したときには(ステップS617でYES)、SIが、キーボード21を操作して、SceneChangeコントロールのuserFormプロパティを設定し(ステップS618)、SIが、さらに、マウス20を操作してイベントハンドラを追加して、追加したイベントハンドラにシーン切替え処理時に実行する処理を記述する(ステップS619)。これにより、イベント処理開発部12は、上記設定されたプロパティを有し、かつシーン切替え処理が実行されたタイミングで上記記述された処理を行なうメソッド(イベント処理モジュール)をイベント処理モジュール記憶部292に記憶する(ステップS620)。
【0177】
SIが、マウス20を操作して表示されている画面に含まれるメニューのうちのツールからシリアル無手順コマンド入力処理用のSerialCommandコントロールを選択したときには(ステップS621でYES)、SIが、キーボード21を操作して、SerialCommandコントロールのuserFormプロパティおよびCommandプロパティ(シリアル無手順コマンドの文字列のうち、イベントハンドラを実行させる文字列)を設定し(ステップS622)、SIが、さらに、マウス20を操作してイベントハンドラを追加して、追加したイベントハンドラにシリアル無手順コマンド入力時に実行する処理を記述する(ステップS623)。これにより、イベント処理開発部12は、上記設定されたプロパティを有し、かつシリアル無手順コマンドが入力されたタイミングで上記記述された処理を行なうメソッド(イベント処理モジュール)をイベント処理モジュール記憶部292に記憶する(ステップS624)。
【0178】
SIが、マウス20を操作して表示されている画面に含まれるメニューのうちのツールからパラレルコマンド入力処理用のParallelCommandコントロールを選択したときには(ステップS625でYES)、SIが、キーボード21を操作して、ParallelCommandコントロールのuserFormプロパティ、bitMaskプロパティ(DI端子のビットマスク)およびbitCommandプロパティ(DI端子の入力ビットパターン)を設定し(ステップS626)、SIが、さらに、マウス20を操作してイベントハンドラを追加して、追加したイベントハンドラにパラレルコマンド入力時に実行する処理を記述する(ステップS627)。これにより、イベント処理開発部12は、上記設定されたプロパティを有し、かつパラレルコマンドが入力されたタイミングで上記記述された処理を行なうメソッド(イベント処理モジュール)をイベント処理モジュール記憶部292に記憶する(ステップS628)。
【0179】
SIが、マウス20を操作して表示されている画面に含まれるメニューのうちのツールからエラー処理用のErrorProcコントロールを選択したときには(ステップS629でYES)、SIが、キーボード21を操作して、ErrorProcコントロールのuserFormプロパティを設定し(ステップS630)、SIが、さらに、マウス20を操作してイベントハンドラを追加して、追加したイベントハンドラにエラー発生時に実行する処理を記述する(ステップS631)。これにより、イベント処理開発部12は、上記設定されたプロパティを有し、かつエラーが発生したタイミングで上記記述された処理を行なうメソッド(イベント処理モジュール)をイベント処理モジュール記憶部292に記憶する(ステップS632)。
【0180】
SIが、マウス20を操作して図示しないビルドメニューを選択したときには(ステップS633でYES)、ビルド実行部13は、イベント処理モジュール記憶部292に記憶されているイベント処理モジュールをコンパイルしてオブジェクトコードを生成し、ライブラリ類記憶部23から必要なライブラリとドライバを読み出して、これらをオブジェクトコードとリンクすることによって、WindowsCEとWindowsXP用のイベント処理の実行形式のプログラムを作成して実行プログラム記憶部19に記憶する(ステップS634)。
【0181】
SIが、マウス20を操作して図示しない「戻る」ボタンを選択したときには(ステップS635でYES)、イベント処理開発部12は、処理を終了する。
【0182】
以上のように、本発明の実施形態の画像処理機能のカスタマイズ装置によれば、基本フローの開発に加えて、テンプレートや部品を用いて、新たな画像処理モジュール、運転画面およびイベント処理モジュールが作成できるので、SIが容易かつ十分に画像処理検査装置の画像処理機能をカスタマイズすることができる。
【0183】
(参考)
以下、参考のため、本発明の実施形態で説明した設定データ・計測データ・画像データ・モデルデータ・図形データ・ワークエリアの取得方法を説明する。
【0184】
(a)設定データの取得
各メソッドの引数で渡ってくる、処理ユニット情報クラス(ProcUnitクラス)のメソッド「GetSetupData()」を使用して設定データ格納先のポインタを取得する。
【0185】
SETUPDATA *ProcUnit::GetSetupData(void);
戻り値:設定データのポインタ
図66は、設定データの取得の例を示す図である。
【0186】
(b)計測データの取得
各メソッドの引数で渡ってくる、処理ユニット情報クラス(ProcUnitクラス)のメソッド「GetMeasureData()」を使用して計測データ格納先のポインタを取得する。
【0187】
MEASUREDATA *ProcUnit::GetMeasureData(void);
戻り値:設定データのポインタ
なお、voidのポインタとして返ってくるので、キャストして使用する必要がある。
【0188】
図67は、計測データの取得の例を示す図である。
(c)モデルデータの取得
各メソッドの引数で渡ってくる、処理ユニット情報クラス(ProcUnitクラス)のメソッド「GetModelData()」を使用してモデルデータ格納先のポインタを取得する。ただし、モデルデータの格納ポインタを取得するには、事前にモデルの登録処理が完了している必要がある。
【0189】
BYTE *ProcUnit::GetModelData(modelNo);
int modelNo; モデル管理番号
戻り値:モデルデータのポインタ
図68は、モデルデータの取得の例を示す図である。
【0190】
(d)モデルデータの登録および削除
各メソッドの引数で渡ってくる、処理ユニット情報クラス(ProcUnitクラス)のメソッド「ModelDataAlloc()」を使用してモデルデータの登録を行ない、「ModelDataFree()」を使用してモデルデータの削除をする。
【0191】
モデル登録
int ProcUnit::ModelDataAlloc(modelNo, size);
int modelNo; 登録モデル管理番号
int size; 登録モデルサイズ
戻り値:エラーコード
NORMAL(0):正常終了
ERROR(-1):異常終了(モデルデータ登録成功)
モデル削除
int ProcUnit::ModelDataFree(modelNo);
int modelNo; 削除モデル管理番号
戻り値:エラーコード
NORMAL(0):正常終了
ERROR(-1):異常終了(モデルデータ削除失敗)
図69は、モデルデータの登録および削除の例を示す図である。
【0192】
(e)画像データの取得
各メソッドの引数で渡ってくる、処理ユニット情報クラス(ProcUnitクラス)のメソッド「GetImageData()」「GetMeasureImage()」を使用して画像データ格納先のポインタを取得する。自分自身が画像データ入力や画像データ作成をする場合は、「GetImageData()」を使用する。なお「GetImageData()」を使用する場合、「ImageDataAlloc()」メソッドを使用して画像データを格納する領域を確保しておく必要がある。
【0193】
IMAGE*ProcUnit::GetImageData(imageNo);
int imageNo; 処理ユニット内での画像番号
戻り値:画像データ構造体のポインタ
画像データ構造体は以下の通りである。
【0194】
typedef struct {
unsigned char imageRGB[640 * 480 * 3]; // 画像データ
int xsize; // 画像サイズX
int ysize; // 画像サイズY
} IMAGE;
図70は、画像データの取得の例を示す図である。
【0195】
先行する処理ユニットが入力・変更した画像データを使う場合は「GetMeasureImage()」を使用する。なお「GetMeasureImage()」を使用する場合は、事前に「SetMeasureImage()」メソッドを使用して現在の処理対象画像を設定しておく必要がありる。
【0196】
IMAGE *ProcUnit::GetMeasureImage(measureImageNo);
int measureImageNo; 現在の処理対象画像の画像番号
戻り値:画像データ構造体のポインタ
図71は、画像データの取得の別の例を示す図である。
【0197】
(f)画像データの登録および削除
各メソッドの引数で渡ってくる、処理ユニット情報クラス(ProcUnitクラス)のメソッド「ImageDataAlloc()」を使用して入力・作成した画像データを格納する領域を確保し、「ImageDataFree()」を使用して画像データの削除する。
【0198】
画像データ領域確保
int ProcUnit::ImageDataAlloc(imageNo, size);
int imageNo; 処理ユニット内での画像番号
int size; 画像データサイズ
戻り値:エラーコード
NORMAL(0):正常終了
ERROR(-1):異常終了(画像データ領域確保失敗)
画像データ削除
int ProcUnit::ImageDataFree(imageNo);
int imageNo; 処理ユニット内での画像番号
戻り値:エラーコード
NORMAL(0):正常終了
ERROR(-1):異常終了(画像データ削除失敗)
図72は、画像データの登録の例を示す図である。
【0199】
(g)現在の処理対象画像の登録
各メソッドの引数で渡ってくる、処理ユニット情報クラス(ProcUnitクラス)のメソッド「SetMeasureImage()」を使用して、現在の画像処理モジュール対象画像の登録を行なう。この登録をすることにより「GetMeasureImage()」が使用可能になる。
【0200】
int ProcUnit::SetMeasureImage(measureImageNo, imageNo);
int measureImageNo; 現在の処理対象画像の画像番号
int imageNo; 登録する処理ユニット内の画像番号
戻り値:エラーコード
NORMAL(0):正常終了
ERROR(-1):異常終了(現在の処理対象画像登録失敗)
図73は、現在の処理対象画像の登録の例を示す図である。
【0201】
(h)図形データの取得
各メソッドの引数で渡ってくる、処理ユニット情報クラス(ProcUnitクラス)のメソッド「GetFiugreData()」を使用して図形データ格納先のポインタを取得する。
【0202】
FIG_HEADER *ProcUnit::GetFigureData(figureNo);
int figureNo;
戻り値:図形データ格納先のポインタ
図74は、図形データの取得の例を示す図である。
【0203】
(i)ワーク領域の取得
各メソッドの引数で渡ってくる、処理ユニット情報クラス(ProcUnitクラス)のメソッド「TmpDataAlloc()」を使用して作業用の一時領域のポインタを取得する。なお「TmpDataAlloc()」で確保した領域は、不必要になった場合に「TmpDataFree()」メソッドを使用して必ず解放する必要がある。
【0204】
主に画像処理モジュールの計測処理で、作業用のデータを一時的に格納する必要がある場合にこれを用いてメモリ領域の確保を行なう。
【0205】
BYTE *ProcUnit::TmpDataAlloc(size);
int size; 確保するサイズ
戻り値:作業用一時領域のポインタ
void ProcUnit::TmpDataFree(Byte *address);
BYTE *address; 解放する領域のアドレス
図75は、ワーク領域の取得の例を示す図である。
【0206】
(変形例)
本発明は、上記の実施の形態に限定されるものではなく、たとえば以下のような変形例を含む。
【0207】
(1) コメント、関数名
本発明の実施形態では、MSプログラムのうち、どのファイルが画像処理モジュールの表示部分、出力部分、および演算(計測)部分のいずれに対応するかがファイル名によって識別可能とされているものとしたが、これに限定するものではない。ファイル内の関数の名前、またはファイル内のコメント文によって、どのファイルまたはファイル内のどの関数が、画像処理モジュールの表示部分、出力部分、および演算(計測)部分のいずれに対応するかが識別可能とされているものであってもよい。また、MSプログラムが、1個のファイルで構成されていてもよい。
【0208】
(2)デバッグ、インストール機能
本発明の実施形態では、デバッグおよびインストールの機能を説明しなかったが、作成された実行形式のプログラムをデバッグする機能、または作成されたWindowsCEの実行形式のプログラムをハードディスクから読み出して、リムーバブルメディアに送るインストール機能を持たせてもよい。また、画像処理機能のカスタマイズ装置と、画像処理検査装置とが通信回線で接続されており、通信回線を通じて作成されたWindowsCEの実行形式のプログラムを転送するものとしてもよい。
【0209】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【図面の簡単な説明】
【0210】
【図1】本発明の実施形態の画像処理機能のカスタマイズ装置の構成を表わす図である。
【図2】画像処理モジュールのテンプレートを構成するファイルの一覧とその機能の例を表わす図である。
【図3】部品記憶部に記憶されている部品のうち、テンプレートのユーザインタフェースの画面に貼り付け可能な部品の一例とその機能を表わす図である。
【図4】部品記憶部に記憶されている部品のうち、イベント処理開発で利用する部品の例を表わす図である。
【図5】画像処理機能のカスタマイズの全体の処理手順を表わすフローチャートである。
【図6】画像処理機能のカスタマイズ装置が起動後、最初に実行制御部8によって表示される画面の例を表わす図である。
【図7】基本フロー開発の処理が選択されたときに表示される画面を表わす図である。
【図8】画像処理モジュール開発の処理が選択されたときに表示される画面の例を表わす図である。
【図9】運転画面開発の処理が選択されたときに表示される画面の例を表わす図である。
【図10】基本フロー開発の処理手順を表わすフローチャートである。
【図11】基本フローの作成処理が選択されたときに表示される画面の例を表わす図である。
【図12】基本フローの作成処理の手順を表わすフローチャートである。
【図13】基本フローの作成後の画面の例を表わす図である。
【図14】画像処理モジュール開発の処理手順を表わすフローチャートである。
【図15】MSプログラムの編集処理が選択されたときに表示される画面の例を表わす図である。
【図16】UIプログラムの編集処理が選択されたときに表示される画面の例を表わす図である。
【図17】「ItemDefs.h」のテンプレートを表わす図である。
【図18】「ItemDefs.h」のテンプレートを表わす図である。
【図19】編集後の「ItemDefs.h」を表わす図である。
【図20】編集後の「ItemDefs.h」を表わす図である。
【図21】「AssignProc.cpp」のテンプレートを表わす図である。
【図22】編集後の「AssignProc.cpp」を表わす図である。
【図23】編集後の「AssignProc.cpp」を表わす図である。
【図24】「FigureUpdate.cpp」のテンプレートを表わす図である。
【図25】「FigureUpdate.cpp」のテンプレートを表わす図である。
【図26】「ItemInit.cpp」のテンプレートを表わす図である。
【図27】「ItemInit.cpp」のテンプレートを表わす図である。
【図28】編集後の「ItemInit.cpp」を表わす図である。
【図29】編集後の「ItemInit.cpp」を表わす図である。
【図30】「MeasureDisp.cpp」のテンプレートを表わす図である。
【図31】「MeasureDisp.cpp」のテンプレートを表わす図である。
【図32】編集後の「MeasureDisp.cpp」を表わす図である。
【図33】編集後の「MeasureDisp.cpp」を表わす図である。
【図34】編集後の「MeasureDisp.cpp」を表わす図である。
【図35】「MeasureInit.cpp」のテンプレートを表わす図である。
【図36】「MeasureInit.cpp」のテンプレートを表わす図である。
【図37】「MeasureOut.cpp」のテンプレートを表わす図である。
【図38】「MeasureProc.cpp」のテンプレートを表わす図である。
【図39】編集後の「MeasureProc.cpp」を表わす図である。
【図40】編集後の「MeasureProc.cpp」を表わす図である。
【図41】編集後の「MeasureProc.cpp」を表わす図である。
【図42】「RenumProc.cpp」のテンプレートを表わす図である。
【図43】「RenumProc.cpp」のテンプレートを表わす図である。
【図44】編集後の「RenumProc.cpp」を表わす図である。
【図45】編集後の「RenumProc.cpp」を表わす図である。
【図46】「UnitData.cpp」のテンプレートを表わす図である。
【図47】「UnitData.cpp」のテンプレートを表わす図である。
【図48】「UnitData.cpp」のテンプレートを表わす図である。
【図49】編集後の「UnitData.cpp」を表わす図である。
【図50】編集後の「UnitData.cpp」を表わす図である。
【図51】編集後の「UnitData.cpp」を表わす図である。
【図52】編集後の「UnitData.cpp」を表わす図である。
【図53】編集後の「UnitData.cpp」を表わす図である。
【図54】編集後の「UnitData.cpp」を表わす図である。
【図55】編集後の「UnitData.cpp」を表わす図である。
【図56】編集後の「UnitData.cpp」を表わす図である。
【図57】編集後の「UnitData.cpp」を表わす図である。
【図58】ユーザインタフェース画面のテンプレートを表わす図である。
【図59】ユーザインタフェース画面のテンプレートを表わす図である。
【図60】編集後のユーザインタフェース画面を表わす図である。
【図61】運転画面開発の処理手順を表わすフローチャートである。
【図62】運転画面の編集処理が選択されたときに表示される画面の例を表わす図である。
【図63】運転画面の別のテンプレートを表わす図である。
【図64】編集後の運転画面を表わす図である。
【図65】イベント処理開発の手順を表わすフローチャートである。
【図66】設定データの取得の例を示す図である。
【図67】計測データの取得の例を示す図である。
【図68】モデルデータの取得の例を示す図である。
【図69】モデルデータの登録および削除の例を示す図である。
【図70】画像データの取得の例を示す図である。
【図71】画像データの取得の別の例を示す図である。
【図72】画像データの登録の例を示す図である。
【図73】現在の処理対象画像の登録の例を示す図である。
【図74】図形データの取得の例を示す図である。
【図75】ワーク領域の取得の例を示す図である。
【符号の説明】
【0211】
1 画像処理機能のカスタマイズ装置、2 ディスプレイ、4 CPUおよびメモリ、5 ハードディスク、6 リムーバブルメディア、7 操作入力部、8 実行制御部、9 基本フロー開発部、10 画像処理モジュール開発部、11 運転画面作成部、12 イベント処理開発部、13 ビルド実行部、14 カスタマイズプログラム記憶部、15 部品記憶部、16 テンプレート記憶部、17 シミュレーションソフト記憶部、18 マニュアル類記憶部、19 実行プログラム記憶部、20 マウス、21 キーボード、22 OS類記憶部、23 ライブラリ類記憶部、291 画像処理モジュール記憶部、292 イベント処理モジュール記憶部、293 運転画面記憶部、294 基本フロー記憶部。
【技術分野】
【0001】
本発明は、画像処理機能のカスタマイズ装置、画像処理機能のカスタマイズ方法、および画像処理機能のカスタマイズのためのプログラムに関し、特に、製品検査などに用いられる画像処理検査装置の画像処理機能のカスタマイズ装置、画像処理機能のカスタマイズ方法、および画像処理機能のカスタマイズのためのプログラムに関する。
【背景技術】
【0002】
画像処理検査装置は、カメラで撮影された画像を用いて検査を行なうもので、工場の製造ラインなど多方面で用いられている。画像処理検査装置は、どの使用者でも利用できる汎用性を有した装置およびプログラムからなる汎用タイプのものと、個々の使用者のニーズに合致した専用の装置およびプログラムからなる専用タイプのものがある。汎用タイプの画像処理検査装置は、どの使用者でもそれなりに利用することができるが、各使用者のニーズを完全に満たすことができないという問題がある。一方、専用タイプの画像処理検査装置は、使用者ごとに個別に開発しなければならず、メーカ側の開発コストが高いという問題がある。
【0003】
汎用タイプおよび専用タイプはそれぞれ上述のような問題点があるので、メーカ側が、画像処理検査装置の機能のカスタマイズが可能な装置およびそれを動作させるプログラムを提供し、システムインテグレータ(SI)が、利用者のニーズに合わせて機能をカスタマイズすることが必要となる。
【0004】
画像処理検査装置の機能のカスタマイズには、プログラム方式と、メニュー方式と、フロー方式の3つの方法がある。
【0005】
プログラム方式は、SIが、エディタ上で市販のライブラリ(たとえば、非特許文献1および2を参照)を組み合わせてソースコードを記述することによって、画像処理を行なうプログラムを作成する方式である。
【0006】
メニュー方式は、画像入力、位置補正、検査・計測、出力といった基本となる処理の流れが決まっており、SIが、個々の処理で具体的にどのような処理を行なうかを、予め用意された画像処理モジュールの中からメニューで選択する方式である。
【0007】
フロー方式は、SIが、予め用意された画像処理モジュールを選択し、フローチャートを組むようにして処理の流れを作成する方式である。
【非特許文献1】インターネット <URL : http://im.canon-sol.jp/matrox/mil/mil.html>
【非特許文献2】インターネット <URL : http://www.cognex.co.jp/products/pc/visionpro/index.asp>
【発明の開示】
【発明が解決しようとする課題】
【0008】
しかしながら、上記の従来の方式には以下のような問題がある。
プログラム方式では、SIが、画像処理検査の処理の流れと、個々の処理の内容を記述したソースコードを作成しなければならず、SIの負担が大きい。
【0009】
メニュー方式では、画像処理検査の処理の流れが固定で決まっているので、各処理の結果に応じて処理の流れを変えたい場合に対応できない。また、予め用意された画像処理モジュールによる画像処理しか行なうことができないという問題がある。
【0010】
フロー方式では、画像処理検査の処理の流れがSIが自由に設計できるメリットはあるものの、予め備えられている画像処理モジュールによる画像処理しか行なうことができないという問題がある。
【0011】
それゆえに、本発明の目的は、システムインテグレータが、容易かつ十分に画像処理検査装置の画像処理機能をカスタマイズすることのできる画像処理機能のカスタマイズ装置、画像処理機能のカスタマイズ方法、および画像処理機能のカスタマイズのためのプログラムを提供することである。
【課題を解決するための手段】
【0012】
上記課題を解決するために、本発明は、画像処理検査装置の画像処理機能をカスタマイズする装置であって、ユーザの操作を受け付ける操作入力部と、複数個の画像処理モジュールを記憶する第1の記憶部と、操作入力部を通じたユーザの操作に従って、第1の記憶部に記憶されている複数個の画像処理モジュールの実行順序を決定する基本フロー作成部と、操作入力部を通じたユーザの操作に従って、新たな画像処理モジュールを作成して、第1の記憶部に記憶する画像処理モジュール作成部とを備える。
【0013】
好ましくは、画像処理機能のカスタマイズ装置は、画像処理モジュールのテンプレートを記憶する第2の記憶部を備え、画像処理モジュール作成部は、テンプレートを表示して、操作入力部を通じたユーザの操作に従って、テンプレートを編集することによって、新たな画像処理モジュールを作成する。
【0014】
好ましくは、画像処理モジュ−ルは、画像処理結果の表示部分、画像処理結果の出力部分、画像処理の処理内容である演算部分、および画像処理のパラメータの設定のためのユーザインタフェース部分を含む。
【0015】
好ましくは、画像処理機能のカスタマイズ装置は、さらに、テンプレートの画面に貼り付ける部品を記憶する第3の記憶部を備え、画像処理モジュール作成部は、ユーザインタフェース部分の作成時には、第2の記憶部からユーザインタフェース部分のテンプレートを読み出して、ユーザインタフェース画面のテンプレートを表示し、操作入力部を通じたユーザの操作に従って、ユーザインタフェース画面のテンプレートに第3の記憶部に記憶されている部品を貼り付けることによって、ユーザインタフェース部分のテンプレートを編集する。
【0016】
好ましくは、画像処理モジュール作成部は、表示部分、出力部分、または演算部分の作成時には、第2の記憶部から部分のプログラムのテンプレートを読み出してエディタ上に表示し、操作入力部を通じたユーザの操作に従って、プログラムのテンプレートを編集する。
【0017】
好ましくは、画像処理モジュールは、1個または複数個のファイルで構成されており、、ファイルの名前、ファイル内の関数の名前、またはファイル内のコメント文によってファイルまたはファイル内の関数が、画像処理モジュールの表示部分、出力部分、および演算部分のいずれに対応するかが識別可能とされている。
【0018】
好ましくは、画像処理機能のカスタマイズ装置は、さらに、第2の記憶部は、さらに画像処理検査装置による画像処理の結果を表示するための運転画面のテンプレートを記憶し、第2の記憶部から運転画面のテンプレートを読み出して表示し、操作入力部を通じたユーザの操作に従って、運転画面のテンプレートに第3の記憶部に記憶されている部品を貼り付けることによって運転画面のテンプレートを編集する運転画面作成部とを備える。
【0019】
好ましくは、画像処理機能のカスタマイズ装置は、さらに、操作入力部を通じたユーザの操作に従って、画像処理検査装置による画像処理実行中にイベントが発生した場合に、イベントが発生したタイミングで実行される処理を定めたイベントモジュールを作成するイベント処理作成部を備え、基本フロー作成、画像処理モジュール作成、運転画面作成、またはイベント処理作成を選択するためのボタンを表示し、操作入力部を通じたユーザの選択操作にしたがって、実行する処理を切替える実行制御部とを備え、実行制御部は、画像処理機能のカスタマイズ手順として、基本フロー作成、画像処理モジュール作成、運転画面作成、イベント処理作成の順番で行なうことを推奨するガイドを表示する。
【0020】
また、本発明は、複数個の画像処理モジュールを記憶する第1の記憶部を備えた装置におけ画像処理検査装置の画像処理機能をカスタマイズする方法であって、操作入力部が、ユーザの操作を受け付けるステップと、、基本フロー作成部が、操作入力部を通じたユーザの操作に従って、第1の記憶部に記憶されている複数個の画像処理モジュールの実行順序を決定するステップと、画像処理モジュール作成部が、操作入力部を通じたユーザの操作に従って、新たな画像処理モジュールを作成して、第1の記憶部に記憶するステップとを備える。
【0021】
また、本発明の画像処理機能をカスタマイズするプログラムは、コンピュータを、ユーザの操作を受け付ける操作入力部と、複数個の画像処理モジュールを記憶する第1の記憶部と、操作入力部を通じたユーザの操作に従って、第1の記憶部に記憶されている複数個の画像処理モジュールの実行順序を決定する基本フロー作成部と、操作入力部を通じたユーザの操作に従って、新たな画像処理モジュールを作成して、第1の記憶部に記憶する画像処理モジュール作成部として機能させる。
【発明の効果】
【0022】
本発明によれば、システムインテグレータが、容易かつ十分に画像処理機能をカスタマイズすることができる。
【発明を実施するための最良の形態】
【0023】
以下、本発明に係る実施の形態について図面を参照して説明する。
図1は、本発明の実施形態の画像処理機能のカスタマイズ装置の構成を表わす図である。この画像処理機能のカスタマイズ装置1は、画像処理検査装置の画像処理機能をカスタマイズする装置であって、画像処理検査装置で動作する実行形式のプログラムを作成する。
【0024】
図1を参照して、この画像処理機能のカスタマイズ装置1は、コンピュータで実現されており、ディスプレイ2と、CPU(Central Processing Unit)およびメモリ4と、操作入力部7と、ハードディスク5と、リムーバブルメディア6を備える。
【0025】
操作入力部7は、マウス20とキーボード21を含み、画像処理機能のカスタマイズ装置1のユーザであるSIからの操作入力を受け付ける。
【0026】
ハードディスク5は、カスタマイズプログラム記憶部14と、画像処理モジュール記憶部291と、基本フロー記憶部294と、イベント処理モジュール記憶部292と、運転画面記憶部293と、テンプレート記憶部16と、部品記憶部15と、OS類記憶部22と、ライブラリ類記憶部23と、シミュレーションソフト記憶部17と、マニュアル類記憶部18と、実行プログラム記憶部19とを含む。
【0027】
カスタマイズプログラム記憶部14は、カスタマイズプログラム(Application Producer)を記憶する。カスタマイズプログラムは、CPUに読み込まれて実行され、コンピュータを画像処理機能のカスタマイズ装置1の各構成要素として機能させる。
【0028】
画像処理モジュール記憶部291は、ソースコード形式の画像処理モジュールを記憶する。画像処理モジュールは、色面積の計算、エッジ位置検出などの画像処理の基本単位を実行するためのもので、複数個のファイルからなる。画像処理モジュール記憶部291は、出荷時に予め組み込まれている画像処理モジュールと、SIによって新たに作成された画像処理モジュールとを記憶する。画像処理モジュールは、画像処理結果の表示部分、画像処理結果の出力部分、画像処理の処理内容である演算部分、および画像処理のパラメータの設定のためのユーザインタフェース部分を少なくとも含む。画像処理のパラメータの設定には、サーチなどのモデル画像の領域座標および画像の設定、画像計測などの計測領域の設定、面積計測での穴埋め(輪郭の中を塗りつぶす)機能の実行の有無の設定、計測結果の判定を行なうための上下限値の設定などがある。
【0029】
基本フロー記憶部294は、SIによって作成された画像処理モジュールの実行順序と、そのパラメータからなる基本フローを記憶する。
【0030】
イベント処理モジュール記憶部292は、SIによって新たに作成されたソースコード形式のイベント処理モジュールを記憶する。イベント処理モジュールは、画像処理検査装置による画像処理の実行中にイベントが発生した場合に、イベントが発生したタイミングで実行される処理を定めたものである。イベント処理モジュールは、画像処理モジュールのようなパラメータの設定のためのユーザインタフェース部分を含まない。
【0031】
運転画面記憶部293は、SIによって新たに作成された運転画面を記憶する。運転画面は、画像処理検査装置による画像処理の結果を表示するための画面であり、記憶されている運転画面は、ビジュアルベーシックのファイルからなる。
【0032】
テンプレート記憶部16は、画像処理モジュールのテンプレートおよび運転画面のテンプレートを記憶する。運転画面のテンプレートは、ビジュアルベーシック(登録商標)のファイルからなる。テンプレートとは、新たな画像処理モジュールおよび運転画面を作成するときの原型となるものであって、1個以上のファイルで構成され、ファイル内には、実行する典型的な呼び出し関数が記述されているものである。ファイル内の呼び出し関数には、典型的な実行命令が記述されていたり、あるいはリターン値だけが記載されている(スケルトン形式という)。
【0033】
図2は、画像処理モジュールのテンプレートを構成するファイルの一覧とその機能の例を表わす図である。画像処理モジュール記憶部291に記憶されている画像処理モジュールも、「Sample」が個々の画像処理モジュール特有の名称となっている以外は、図2と同様のファイル構成である。
【0034】
図2を参照して、「Sample_jpn.msg」は、日本語のメッセージファイルである。「Sample_eng.msg」は、英語のメッセージファイルである。
【0035】
UIプログラムは、画像処理のパラメータ(各種の閾値など)を設定するためのユーザインタフェースを規定したものであり、2個の必須ファイルがある。「NormalForm.vb」は、通常使用されるユーザインタフェースを記述したビジュアルベーシックのファイルである。「NonstopForm.vb」は、計測中に一時的に上下限値を変更するための簡易ノンストップをするときのユーザインタフェースを記述したビジュアルベーシックのファイルである。
【0036】
MSプログラムは、画像処理の処理内容である演算(つまり計測)、画像処理結果(つまり計測結果)の表示、画像処理結果(つまり計測結果)の出力などを規定したものであり、9個の必須ファイルと、5個の任意ファイルとがある。MSプログラムのうち、どのファイルが画像処理モジュールの表示部分、出力部分、および演算(計測)部分のいずれに対応するかがファイル名によって識別可能とされている。これにより、SIがテンプレートを編集する際にどのファイルを修正すべきであるかが容易にわかる。また、MSプログラムのテンプレートに記述される関数は、その中身が戻り値(リターン値)だけが記述されているスケルトンの形式である。
【0037】
「AssignProc.cpp」は、処理ユニット登録時処理関連の処理を記述したテキストファイルである。処理ユニットは、画像処理モジュールと同義である。「Assign」は登録を意味し、「Proc」は処理を意味する「Processing」を略したものであるから、SIがテンプレートの編集の際に、「AssignProc.cpp」が上記処理を記述するものであることを容易に識別できる。
「FigureUpdate.cpp」は、図形データ更新時処理関連の処理を記述したテキストファイルである。「Figure」は図形を意味し、「Update」は更新を意味するものであるから、SIがテンプレートの編集の際に、「FigureUpdate.cpp」が上記処理を記述するものであることを容易に識別できる。
【0038】
「ItemDefs.h」は、処理項目の各種定義を記述したテキストファイルである。処理項目は、画像処理モジュールおよび処理ユニットと同義である。「「Item」は項目を意味し、「Def」は定義を意味する「Definition」を略したものであるから、SIがテンプレートの編集の際に、「ItemDefs.h」が上記処理を記述するものであることを容易に識別できる。
【0039】
「ItemInit.cpp」は、処理項目の初期化処理関連の処理を記述したテキストファイルである。「Item」は項目を意味し、「Init」は初期化を意味する「Initialization」を略したものであるから、SIがテンプレートの編集の際に、「ItemInit.cpp」が上記処理を記述するものであることを容易に識別できる。
【0040】
「MeasureDisp.cpp」は、計測結果表示処理関連の処理を記述したテキストファイルである。「Measure」は計測を意味し、「Disp」は表示を意味する「Display」を略したものであるから、SIがテンプレートの編集の際に、「MeasureDisp.cpp」が上記処理を記述するものであることを容易に識別できる。
【0041】
「MeasureInit.cpp」は、計測初期化/終了関連の処理を記述したテキストファイルである。「Measure」は計測を意味し、「Init」は初期化を意味する「Initialization」を略したものであるから、SIがテンプレートの編集の際に、「MeasureInit.cpp」が上記処理を記述するものであることを容易に識別できる。
【0042】
「MeasureOut.cpp」は、計測結果出力処理関連の処理を記述したテキストファイルである。「Measure」は計測を意味し、「Out」は出力を意味するものであるから、SIがテンプレートの編集の際に、「MeasureOut.cpp」が上記処理を記述するものであることを容易に識別できる。
【0043】
「MeasureProc.cpp」は、計測処理関連の処理を記述したテキストファイルである。「Measure」は計測を意味し、「Proc」は処理を意味する「Processing」を略したものであるから、SIがテンプレートの編集の際に、「MeasureProc.cpp」が上記処理を記述するものであることを容易に識別できる。
【0044】
「UnitData.cpp」は、処理ユニットデータ設定/取得関連の処理を記述したテキストファイルである。「Unit」はユニットを意味し、「Data」はデータを意味するものであるから、SIがテンプレートの編集の際に、「UnitData.cpp」が上記処理を記述するものであることを容易に識別できる。
【0045】
「FigureData.cpp」、処理ユニットの図形データ操作関連の処理を記述したテキストファイルである。「Figure」は図形を意味し、「Data」はデータを意味するものであるから、SIがテンプレートの編集の際に、「FigureData.cpp」が上記処理を記述するものであることを容易に識別できる。
【0046】
「RenumProc.cpp」は、処理ユニットの参照番号更新処理関連の処理を記述したテキストファイルである。「Renum」は番号更新を意味する「Renumber」を略したものであり、「Proc」は処理を意味する「Processing」を略したものであるから、SIがテンプレートの編集の際に、「RenumProc.cpp」が上記処理を記述するものであることを容易に識別できる。
【0047】
「SaveLoad.cpp」は、処理ユニットのデータのセーブおよびロード関連の処理を記述したテキストファイルである。「Save」セーブ(保存)を意味し、「Load」はロード(読出し)を意味するものであるから、SIがテンプレートの編集の際に、「SaveLoad.cpp」が上記処理を記述するものであることを容易に識別できる。
【0048】
「SetupData.cpp」は、設定時の画像処理関連の処理を記述したテキストファイルである。「Setup」は設定を意味し、「Data」はデータを意味するものであるから、SIがテンプレートの編集の際に、「SetupData.cpp」が上記処理を記述するものであることを容易に識別できる。
【0049】
「ThroughProc.cpp」は、スルー表示のための画像入力および生成処理関連の処理を記述したテキストファイルである。「Through」はスルー(直通)を意味し、「Proc」は処理を意味する「Processing」を略したものであるから、SIがテンプレートの編集の際に、「ThroughProc.cpp」が上記処理を記述するものであることを容易に識別できる。
【0050】
部品記憶部15は、画像処理モジュールのユーザインタフェースの画面のテンプレートおよび運転画面のテンプレートに貼り付けることができる部品(ActiveXコントロール)を記憶する。また、部品記憶部15は、イベント処理開発で利用する部品を記憶する。部品記憶部15に記憶されている部品は、表示されている画面に含まれるメニューのうちのツールから選択できる。
【0051】
図3は、部品記憶部15に記憶されている部品のうち、テンプレートのユーザインタフェースの画面に貼り付け可能な部品の一例とその機能を表わす図である。
【0052】
図3を参照して、タブスイッチボタン(TabSwitchButton)およびタブコントロール(TabControl)は、全体のレイアウトのために用いられる。グループパネル(GroupPanel)は、グルーピングのために用いられる。ボタンには、イメージボタン(ImageButton)と、イメージリスト(Imagelist)がある。イメージリストは、同じ画像を使用するイメージボタンを複数個使用する場合に用いられる。ラベルには、背景透過ラベル(LabelEx)がある。アイテムを選択するために、チェックボックス(CheckBox)、ラジオボタン(RadioButton)、およびコンボボックス(ComboBox)がある。チェックボックスは、1つのアイテムを選択するか否かを指定するために用いられ、ラジオボタンは、3個以下のアイテムの選択のために用いられ、コンボボックスは、5個以上のアイテムの選択のために用いられる。数値を入力するために、数値ボックス(NumericBox)と、上下限設定ボックス(LimitBox)と、スライダーセット(SliderSet)と、値設定コントロール(ValueSetControl)と、点設定コントロール(PointSetControl)とが用いられる。数値ボックスは、通常の数値入力のために用いられ、上下限設定ボックスは、上下限値を設定するために用いられ、スライダーセットおよび値設定コントロールは、入力する数値を連続的に変更する場合に用いられ、点設定コントロールは、座標値を設定する場合に用いられる。ソフトキーボード21(SoftKeyboard)は、文字を入力するために用いられる。ファイル選択のために、ファイルダイアログ(FileDialog)と、フォルダブラウザ(FolderBloser)が用いられる。図形設定のために、図形設定コントロール(FigureSetControl)が用いられる。画像の表示のために、イメージウインドウ(SetupImageWindow)と、ズームブラウザ(ZoomBlowser)が用いられる。イメージウインドウは、設定画面の画像を表示するために用いられ、ズームブラウザは、イメージパネルのズーム設定用に用いられる。演算式の設定のために、演算式リスト(CalculationList)が用いられる。基準位置の設定のために、基準座標設定コントロール(StandardSetControl)が用いられる。色の抽出のために、色抽出設定コントロール(ColorExtractControl)が用いられる。色の指定のために、色指定設定コントロール(ColorSetControl)が用いられる。座標モードの設定のために、座標モード設定コントロール(CoordinateSetControl)が用いられる。2次元の折れ線グラフを表示するために、グラフ表示コントロール(GraphLineControl)が用いられる。
【0053】
また、図示しないが、その他に、カスタムコントロールのベースとなるコントロールベース(controlBase)、(CalculationBox)、処理ユニットのリストを表示するユニットリスト(UnitList)、グレイ抽出設定用のコントロール(GrayExtractControl)、詳細結果表示のテキストを表示するテキストパネル(TextPanel)、イメージパネルと組合わせてグラフの表示を行なうドローグラフ(DrawGraph)、数値入力ボックスとカーソルボタンを組み合わせた複合コントロールであるスタンダードセット(StandardSet)、背景イメージを指定できるイメージパネル(ImagePanel)、ユニットリストで使用する処理項目アイテム(UnitListItem)などが用いられる。
【0054】
図4は、部品記憶部15に記憶されている部品のうち、イベント処理開発で利用する部品の例を表わす図である。
【0055】
図4を参照して、「ErrorProc」は、エラー処理用のコントロールである。「MeasureDisp」は、計測結果表示処理用のコントロールである。「MeasureInit」は、計測初期化処理用のコントロールである。「MeasureOut」は、計測結果出力処理用のコントロールである。「MeasureProc」は、計測処理用のコントロールである。「ParallelCommand」パラレルコマンド入力処理用のコントロールである。「SceneChange」は、シーン切替え処理用のコントロールである。「SerialCommand」は、シリアル無手順コマンド入力処理用のコントロールである。
【0056】
OS類記憶部22は、WindowsXP(登録商標)およびVisualStudioを記憶する。
【0057】
ライブラリ類記憶部23は、ライブラリおよびドライバを記憶する。
シミュレーションソフト記憶部17は、図1の画像処理機能のカスタマイズ装置1で実行可能な実行形式のプログラムを起動するためのシミュレーションソフトを記憶する。
【0058】
マニュアル類記憶部18は、マニュアル、チュートリアル、ヘルプおよびサンプルを記憶する。
【0059】
実行プログラム記憶部19は、出荷時に予め組み込まれている画像処理モジュールの実行形式のプログラム、およびビルド実行部13で作成された実行形式のプログラムを記憶する。
【0060】
カスタマイズプログラム、部品、テンプレート、OS類、ライブラリ類、シミュレーションソフト、およびマニュアル類は、外部からリムーバブルメディア6を用いてハードディスク5にインストールすることができる。
【0061】
CPUおよびメモリ4は、OS類記憶部22からWindowsXPおよびVisualStudio(登録商標)を読出し、さらにカスタマイズプログラム記憶部14からカスタマイズプログラムを読み出して、これらを実行することによって、実行制御部8と、基本フロー開発部9と、画像処理モジュール開発部10と、運転画面開発部11と、イベント処理開発部12と、ビルド実行部13として機能する。
【0062】
実行制御部8は、この画像処理機能のカスタマイズ装置1の全体の動作を制御する。
基本フロー開発部9は、操作入力部7を通じたユーザの操作に従って、画像処理モジュール記憶部291に記憶されている複数個の画像処理モジュールの実行順序を決定して、決定した実行順序と、そのパラメータからなる基本フローを基本フロー記憶部294に記憶する。
【0063】
画像処理モジュール開発部10は、テンプレート記憶部16に記憶されている画像処理モジュールのテンプレートを読み出して表示し、操作入力部7を通じたSIの操作に従って、画像処理モジュールのテンプレートを編集して、編集後の画像処理モジュールを画像処理モジュール記憶部291に記憶する。
【0064】
運転画面開発部11は、テンプレート記憶部16に記憶されている運転画面のテンプレートを読み出して表示し、操作入力部7を通じたSIの操作に従って、運転画面のテンプレートに部品記憶部15に記憶されている部品を貼り付けて運転画面のテンプレートを編集して、編集後の運転画面を運転画面記憶部293に記憶する。
【0065】
イベント処理開発部12は、操作入力部7を通じたSIの操作に従って、イベントモジュールを作成して、イベント処理モジュール記憶部292に記憶する。
【0066】
ビルド実行部13は、ソースコードをコンパイルしてオブジェクトコードを生成し、さらにオブジェクトコードとライブラリ類記憶部23内のライブラリおよびドライバとをリンクすることによって、実行形式のプログラムを作成して実行プログラム記憶部19に記憶する。ビルド実行部13は、画像処理検査装置が動作するOSであるWindowsCE(登録商標)用の実行形式のプログラムと、図1の画像処理機能のカスタマイズ装置1が動作するOSであるWindowsXP用の実行形式のプログラムの両方を作成する。WindowsCE用の実行形式のプログラムは、リムーバブルメディア6などを用いて、画像処理検査装置にインストールされる。WindowsXP用の実行形式のプログラムは、図1の装置で、画像処理検査装置におる画像処理をエミュレート(シミュレーション)するために用いられる。
【0067】
CPUおよびメモリ4から出力される画面データは、ディスプレイ2に送られて表示される。
【0068】
(全体の処理手順)
図5は、画像処理機能のカスタマイズの全体の処理手順を表わすフローチャートである。図6は、画像処理機能のカスタマイズ装置1が起動後、最初に実行制御部8によって表示される画面の例を表わす図である。
【0069】
図6の画面では、矢印の向きによって、画像処理機能のカスタマイズの手順として、基本フロー開発、処理項目開発、運転画面開発、イベント処理開発の順番で処理を行なうことを推奨することをガイドしているが、これ以外の順番で処理を行なうことも可能である。
【0070】
図5および図6を参照して、SIが、マウス20を操作してボタン51を選択したときには(ステップS101でYES)、実行制御部8は、基本フロー開発部9に基本フロー開発の処理を指示し、図7に示す画面を表示する(ステップS102)。
【0071】
SIが、マウス20を操作してボタン52を選択したときには(ステップS103でYES)、実行制御部8は、画像処理モジュール開発部10に画像処理モジュールの開発の処理を指示し、図8に示す画面を表示する(ステップS104)。
【0072】
SIが、マウス20を操作してボタン53を選択したときには(ステップS105でYES)、実行制御部8は、運転画面開発部11に運転画面開発の処理を指示し、図9に示す画面を表示する(ステップS106)。
【0073】
SIが、マウス20を操作してボタン54を選択したときには(ステップS107でYES)、実行制御部8は、イベント処理開発部12にイベント処理開発の処理を指示する(ステップS108)。
【0074】
SIが、マウス20を操作して、ボタン55を選択したときには(ステップS109でYES)、実行制御部8は、マニュアル類記憶部18からリファレンスを読み出して表示する(ステップS110)。
【0075】
SIが、マウス20を操作して、ボタン56を選択したときは(ステップS111でYES)、実行制御部8は、マニュアル類記憶部18からサンプルを読み出して表示する(ステップS112)。
【0076】
SIが、マウス20を操作してボタン57を選択したときには(ステップS113でYES)、実行制御部8は、マニュアル類記憶部18から「Application Producer」とは何かを説明したマニュアル1章を読み出して表示する(ステップS114)。
【0077】
SIが、マウス20を操作してボタン58を選択したときには(ステップS115でYES)、実行制御部8は、マニュアル類記憶部18から「Application Producer」の使い方を説明したマニュアル1−2章を読み出して表示する(ステップS116)。
【0078】
SIが、マウス20を操作してボタン59を選択したときには(ステップS117でYES)、実行制御部8は、マニュアル類記憶部18から「Application Produce」のマニュアルを読み出して表示する(ステップS118)。
【0079】
(基本フロー開発)
図10は、基本フロー開発の処理手順を表わすフローチャートである。
【0080】
図10を参照して、SIが、マウス20を操作してボタン60を選択したときには(ステップS201でYES)、実行制御部8は、シミュレーションソフト記憶部17からシミュレーションソフトを読み出して起動する(ステップS202)。
【0081】
SIが、マウス20を操作してボタン61を選択したときには(ステップS203でYES)、基本フロー開発部9は、マニュアル類記憶部18からマニュアル3−1章を読み出して表示する(ステップS204)。
【0082】
SIが、マウス20を操作してボタン62を選択したときには(ステップS205でYES)、基本フロー開発部9は、マニュアル類記憶部18からチュートリアルを読み出して表示する(ステップS206)。
【0083】
SIが、マウス20を操作してボタン63を選択したときには(ステップS207)、基本フロー開発部9は、マニュアル類記憶部18からサンプルフローを読み出して表示する(ステップS208)。
【0084】
SIが、マウス20を操作してボタン64を選択したときには(ステップS209)、基本フロー開発部9は、基本フローの作成処理を選択して、図11に示す画面を表示する(ステップS210)。
【0085】
SIが、マウス20を操作して、図示しない「戻る」ボタンを選択したときには(ステップS211でYES)、基本フロー開発部9は、基本フローの作成処理を終了する。
【0086】
図12は、基本フローの作成処理の手順を表わすフローチャートである。
図12を参照して、SIが、マウス20を操作してリスト欄83の一つの項目を選択すると(ステップS301でYES)、基本フロー開発部9は、リスト欄83の中の1つの画像処理モジュールを選択する(ステップS302)。
【0087】
SIが、マウス20を操作して追加ボタン84を選択すると(ステップS303でYES)、基本フロー開発部9は、基本フロー欄95の最下部にリスト欄83で選択されている画像処理モジュールを追加する(ステップS304)。
【0088】
SIが、マウス20を操作して挿入ボタン85を選択すると(ステップS305でYES)、基本フロー開発部9は、基本フロー欄95の中の選択されている画像処理モジュールの直下にリスト欄83で選択されている画像処理モジュールを挿入する(ステップS306)。
【0089】
SIが、マウス20を操作して設定ボタン86を選択すると(ステップS307でYES)、画像処理モジュール開発部10は、基本フローの中の選択されている画像処理モジュールのパラメータなどを設定するためのUIプログラムを画像処理モジュール記憶部291から読み出して表示する。SIが、表示されている画面に含まれるメニューのうちのツールから部品を選択し、部品記憶部15から選択された部品を読み出して配置することによって、ユーザインタフェース画面を編集し、図示しない保存メニューを選択して、編集後のUIプログラムを画像処理モジュール記憶部291に記憶する(ステップS308)。
【0090】
SIが、マウス20を操作してコピーボタン90を選択すると(ステップS309でYES)、基本フロー開発部9は、基本フロー欄95の中の選択されている画像処理モジュールをコピーする(ステップS310)。
【0091】
SIが、マウス20を操作してペーストボタン91を選択すると(ステップS311でYES)、基本フロー開発部9は、基本フロー欄95の中の選択されている画像処理モジュールの直下に、コピーボタン90によってコピーした画像処理モジュールを挿入する(ステップS312)。
【0092】
SIが、マウス20を操作して削除ボタン92を選択すると(ステップS313でYES、基本フロー開発部9は、基本フロー欄95の中の選択されている画像処理モジュールを削除する(ステップS314)。
【0093】
SIが、マウス20を操作して移動(上へ)ボタン88を選択すると(ステップS315でYES)、基本フロー開発部9は、基本フロー欄95の中の選択される画像処理モジュールを1つ上に移動する(ステップS316)。
【0094】
SIが、マウス20を操作して移動(下へ)ボタン89を選択すると(ステップS317でYES)、基本フロー開発部9は、基本フロー欄95の中の選択される画像処理モジュールを1つ下に移動する(ステップS318)。
【0095】
SIが、マウス20を操作して名前の変更ボタン87を選択すると(ステップS319でYES)、基本フロー開発部9は、基本フロー欄95の中の選択されている画像処理モジュールの名前の変更を可能とする。SIが、キーボード21を操作して画像処理モジュールの名前を変更する(ステップS320)。
【0096】
SIが、マウス20を操作してヘルプ96を選択すると(ステップS321でYES)、基本フロー開発部9は、マニュアル類記憶部18からヘルプを読み出して表示するる(ステップS322)。
【0097】
SIが、マウス20を操作して閉じる97を選択すると(ステップS323でYES)、基本フロー開発部9は、基本フローが作成されている場合に、作成された基本フローを基本フロー記憶部294に記憶し、その処理を終了する。
【0098】
図13は、基本フローの作成後の画面の例を表わす図である。
図13を参照して、基本フローは、3つの画像処理モジュール98、99、40からなる。この基本フローでは、まずカメラ画像を入力し、次に入力した画像の面積重心を計算して、その後処理ユニットデータを設定することを定めた基本フローが作成されている。
【0099】
(画像処理モジュール開発)
図14は、画像処理モジュール開発の処理手順を表わすフローチャートである。
【0100】
図14を参照して、SIが、マウス20を操作してボタン65を選択したときには(ステップS401でYES)、画像処理モジュール開発部10は、MSプログラムの編集処理を選択し、MSプログラムのテンプレート41をテンプレート記憶部16から読み出して、図15に示すようにエディタ上に表示する。SIが、キーボートから文字を入力、削除することによって、MSプログラムのテンプレート41を編集して、図示しない保存メニューを選択して、編集後のMSプログラムを画像処理モジュール記憶部291に記憶する(ステップS402)。
【0101】
SIが、マウス20を操作してボタン66を選択したときには(ステップS403でYES)、画像処理モジュール開発部10は、マニュアル類記憶部18からMSプログラムの編集を説明したマニュアル3−2−5章を読み出して表示する(ステップS404)。
【0102】
SIが、マウス20を操作してボタン67を選択したときには(ステップS405でYES)、画像処理モジュール開発部10は、UIプログラムの編集処理を選択して、UIプログラムのテンプレートをテンプレート記憶部16から読み出して図16に示すようなユーザインタフェース画面のテンプレート461を表示する。SIが、表示されている画面に含まれるメニューのうちのツール462から部品を選択し、部品記憶部15から選択された部品を読み出して配置することによって、図16のユーザインタフェース画面のテンプレート461を編集し、図示しない保存メニューを選択して、編集後のUIプログラムを画像処理モジュール記憶部291に記憶する(ステップS406)。
【0103】
SIが、マウス20を操作してボタン68を選択したときには(ステップS407でYES)、画像処理モジュール開発部10は、マニュアル類記憶部18からUIプログラムの編集を説明したマニュアル3−2−6章を読み出して表示する(ステップS408)。
【0104】
SIが、マウス20を操作してボタン69を選択したときには(ステップS409でYES)、画像処理モジュール開発部10は、マニュアル類記憶部18からユーザインタフェース画面のサンプルを読み出して表示する(ステップS410)。
【0105】
SIが、マウス20を操作してボタン70を選択したときには(ステップS411でYES)、実行制御部8は、シミュレーションソフト記憶部17からシミュレーションソフトを読み出して起動する(ステップS412)。
【0106】
SIが、マウス20を操作してボタン71を選択したときには(ステップS413でYES)、画像処理モジュール開発部10は、マニュアル類記憶部18から画像処理モジュール開発のチュートリアルを読み出して表示する(ステップS414)。
【0107】
SIが、マウス20を操作してボタン72を選択したときには(ステップS415でYES)、画像処理モジュール開発部10は、マニュアル類記憶部18から画像処理モジュール開発を説明したマニュアル3−2章を読み出して表示する(ステップS416)。
【0108】
SIが、マウス20を操作してボタン73を選択したときには(ステップS417でYES)、画像処理モジュール開発部10は、マニュアル類記憶部18から画像処理モジュール開発のためのリファレンスを読み出して表示する(ステップS418)。
【0109】
SIが、マウス20を操作して図示しないビルドメニューを選択したときには(ステップS419でYES)、ビルド実行部13は、画像処理モジュール記憶部291に記憶されているステップS402で作成されたMSのソースコードおよびステップS406で作成されたUIのソースコードをコンパイルしてオブジェクトコードを生成し、ライブラリ類記憶部23から必要なライブラリとドライバを読み出してオブジェクトコードとリンクすることによって、WindowsCEとWindowsXP用のMSの実行形式のプログラムおよびUIの実行形式のプログラムを作成して実行プログラム記憶部19に記憶する(ステップS420)。
【0110】
SIが、マウス20を操作して図示しない「戻る」ボタンを選択したときには(ステップS421でYES)、画像処理モジュール開発部10は、処理を終了する。
【0111】
次に、テンプレートがSIの編集によってどのように変更されるかの例を説明する。ここでは、テンプレートを編集して、他の画像処理モジュールのパラメータ設定を一括して行なうための画像処理モジュールを作成する場合について説明する。この画像処理モジュールは、座標の変更や上下限値の変更などのように、複数の数値を変更する場合に用いられる。
【0112】
図17および図18は、「ItemDefs.h」のテンプレートを表わす図である。
図19および図20は、編集後の「ItemDefs.h」を表わす図である。
【0113】
図17〜図20を参照して、SIの編集によって、テンプレートの定義文190が、定義文191に変更され、定義文192、193、194が追加されている。
【0114】
図17〜図20を参照して、「ItemDefs.h」の内容を説明する。SETUPDATA構造体には、処理を実行する際に必要になるパラメータなどの設定データの構造が定義される。MEASUREDATA構造体には、処理(計測)を実行した際の結果のデータの構造が定義される。ItemDef.h中で定義した SETUPDATA構造体に含まれるデータの初期値については、AssignProc.cpp中に記述される。
【0115】
図21は、「AssignProc.cpp」のテンプレートを表わす図である。
図22および図23は、編集後の「AssignProc.cpp」を表わす図である。
【0116】
図21〜図23を参照して、SIの編集によって、日付151が記入され、作成者152が記入され、関数AssignProcの中身の命令153が追加されている。
【0117】
図21〜図23を参照して、「AssignProc.cpp」の内容を説明する。本ファイル内では以下の関数の処理を定義し、画像処理モジュールが登録される際のチェック処理などを記述する。
【0118】
int クラス名::AssignProc(*ptrProcUnit);
ProcUnit *ptrProcUnit; 処理ユニット情報へのポインタ
本関数の処理を終了する際は、戻り値として以下の値を返す。NORMAL以外の値を返した場合は処理ユニット登録不可ということで、処理ユニットの登録が行われない。
【0119】
NORMAL(0):処理ユニット登録可能
!NORMAL(0以外):処理ユニット登録不可
設定データの初期化は、このメソッドに記述し、図形データの初期化(SetFigureType())は、このメソッドに記述する。本関数を用いることで、処理ユニットの登録順序などに制約がある場合のチェックを行なうことができる。
【0120】
図24および図25は、「FigureUpdate.cpp」のテンプレートを表わす図である。
本発明の実施形態では、SIが、テンプレートを編集しなかったため、「FigureUpdate.cpp」は、変更されていない。
【0121】
図24および図25を参照して、「FigureUpdate.cpp」の内容を説明する。本ファイル内では以下のメソッドを記述し、図形データが更新されたときの処理を記述する。
【0122】
int クラス名::FigureUpdate(*ptrProcUnit, figureNo);
ProcUnit *ptrProcUnit; 処理ユニット情報へのポインタ
int figureNo; 図形データ番号
本関数の処理を終了する際は、戻り値として以下の値を返す。
【0123】
NORMAL(0):図形データ更新処理に成功
!NORMAL(0以外):図形データ更新処理に失敗
モデルの登録処理は本メソッドに記述する。
【0124】
図26および図27は、「ItemInit.cpp」のテンプレートを表わす図である。
図28および図29は、編集後の「ItemInit.cpp」を表わす図である。
【0125】
図26〜図29を参照して、SIの編集によって、日付154が記入され、作成者155が記入されている。さらに、SIの編集によって、テンプレートの"Sample"658、ITEM_MEASURE659、一般計測関連660、0(661)、"サンプル"662が、"SetUnitData4"158、ITEM_SUPPORT159、計測補助関連160、4(161)、"処理ユニットデータ設定"162に変更されている。
【0126】
図26〜図29を参照して、「ItemInit.cpp」の内容を説明する。コンストラクタ・デストラクタおよび本クラスのインスタンスを生成する関数、本クラスのインスタンスを削除する関数を記述する。なお、本クラスのインスタンスを生成する関数および本クラスのインスタンスを削除する関数は、DLLのエクスポート関数にする。コンストラクタには画像処理モジュールをシステム(CORERA)に認識させるための情報を記述する。具体的には下記のメソッドに値を設定します。
【0127】
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) 画像処理モジュールタイトル名
デストラクタには、本クラスのインスタンスが消滅するときに実行する処理を記述する。本関数では、本クラスのインスタンスを生成し戻り値として返す処理を記述する。本関数の処理を終了する際は、戻り値として以下の値を返す。
【0128】
ProcItem:インスタンスのポインタ:インスタンス生成成功時
NULL:インスタンス生成失敗時
図30および図31は、「MeasureDisp.cpp」のテンプレートを表わす図である。
【0129】
図32〜図34は、編集後の「MeasureDisp.cpp」を表わす図である。
図30および図31および図32〜図34を参照して、SIの編集によって、日付163および日付164が記入され、作成者165および作成者166が記入され、関数MeasureDispTの中身の命令167が追加されている。
【0130】
本ファイル内では以下のメソッドを記述し、画像処理モジュール個別に計測結果を表示する際の表示処理を記述する。
【0131】
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; 詳細結果表示エリア情報へのポインタ
本関数の処理を終了する際は、戻り値として以下の値を返す。
【0132】
NORMAL(0):計測結果出力処理正常終了
!NORMAL(0以外):計測結果出力処理異常終了
3つの関数は、以下の記述に対応する。
【0133】
MeasureDispI():画像表示
MeasureDispG():画像表示エリアへのグラフィック表示
MeasureDispT():詳細結果表示エリアへの文字表示
引数subNoが-1の場合は、全画像処理モジュール共通で位置一覧表示モード時の表示となる。サーチ系の画像処理モジュールの場合は、モデル領域のみ表示する。処理ユニットの判定結果が”判定なし”の場合(MEASDATA 構造体中のjudge=J_NCの場合)、処理ユニットのMeasureDisp*()はコールされない。
【0134】
図35および図36は、「MeasureInit.cpp」のテンプレートを表わす図である。
本発明の実施形態では、SIが、テンプレートを編集しなかったため、「MeasureInit.cpp」が変更されていない。
【0135】
図35および図36を参照して、「MeasureInit.cpp」の内容を説明する。本ファイル内では、以下の関数の処理を定義し、計測画面に入る時点で実行すべき初期化処理および計測終了時に実行すべき処理を記述する。
【0136】
int クラス名::MeasureInit(*ptrProcUnit);
int クラス名::MeasureEnd(*ptrProcUnit);
ProcUnit *ptrProcUnit; 処理ユニット情報へのポインタ
本関数の処理を終了する際は、戻り値として以下の値を返す。
【0137】
NORMAL(0):計測初期化処理正常終了
!NORMAL(0以外):計測初期化処理異常終了
NORMAL以外の値を返した場合は画面にエラーメッセージが表示され、当該シーン内の全処理ユニットの非セーブROIモデルがクリアされる。また、NORMAL以外の値を返して画面にエラーメッセージが表示された場合も、メッセージボックスを終了するとそのまま計測が実行可能な状態になる。
【0138】
図37は、「MeasureOut.cpp」のテンプレートを表わす図である。
本発明の実施形態では、SIが、テンプレートを編集しなかったため、「MeasureOut.cpp」が変更されていない。
【0139】
図37を参照して、「MeasureOut.cpp」の内容を説明する。本ファイル内では以下のメソッドを記述し、画像処理モジュール個別に計測結果を出力する際の結果出力処理を記述する。
【0140】
int クラス名::MeasureOut(*ptrProcUnit);
ProcUnit *ptrProcUnit; 処理ユニット情報へのポインタ
本関数の処理を終了する際は、戻り値として以下の値を返す。
【0141】
NORMAL(0):計測結果出力処理正常終了
!NORMAL(0以外):計測結果出力処理異常終了
図38は、「MeasureProc.cpp」のテンプレートを表わす図である。
【0142】
図39〜図41は、編集後の「MeasureProc.cpp」を表わす図である。
図38および図39〜図41を参照して、SIの編集によって、日付168が記入され、作成者169が記入され、関数MeasureProcの中身の命令170が追加されている。
【0143】
図38および図39〜図41を参照して、「MeasureProc.cpp」の内容を説明する。本ファイル内では以下のメソッドを記述し、計測時に実行する画像処理などの処理を記述する。
【0144】
int クラス名::MeasureProc(*ptrProcUnit);
ProcUnit *ptrProcUnit; 処理ユニット情報へのポインタ
本関数の処理を終了する際は、戻り値として以下の値を返す。
【0145】
NORMAL(0):計測処理正常終了
!NORMAL(0以外):計測処理異常終了
図42および図43は、「RenumProc.cpp」のテンプレートを表わす図である。
【0146】
図44および図45は、編集後の「RenumProc.cpp」を表わす図である。
図42〜図45を参照して、SIの編集によって、日付171が記入され、作成者172が記入され、関数RenumProcの中身の命令173が追加されている。
【0147】
図42〜図45を参照して、「RenumProc.cpp」の内容を説明する。本ファイル内では以下のメソッドを記述し、ユニット追加・削除・移動時の処理を記述する。
【0148】
int クラス名::RenumProc(*ptrProcUnit, *ptrRenumInfo);
ProcUnit *ptrProcUnit; 処理ユニット情報へのポインタ
RenumInfo *ptrRenumInfo;フロー編集情報へのポインタ
本関数の処理を終了する際は、戻り値として以下の値を返す。
【0149】
NORMAL(0):ユニット追加・削除・移動時処理正常終了
!NORMAL(0以外):ユニット追加・削除・移動時処理異常終了
図46〜図48は、「UnitData.cpp」のテンプレートを表わす図である。
【0150】
図49〜図57は、編集後の「UnitData.cpp」を表わす図である。
図46〜図48および図49〜図57を参照して、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が追加されている。
【0151】
図46〜図48および図49〜図57を参照して、「UnitData.cpp」の内容を説明する。
【0152】
本ファイル内では以下のメソッドを記述し、データ設定時およびデータ取得時の処理を記述する。
【0153】
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には以下のようにどういう型のデータを渡すかというデータ種別(を示すコード)が入れるものとする。
【0154】
T_INTEGER:整数
T_DOUBLE :実数
T_STRING :文字列
T_VARIANT:可変長データ
本関数の処理を終了する際は、戻り値として以下の値を返す。
【0155】
NORMAL(0):データ設定・データ設定成功
!NORMAL(0以外):データ取得・データ取得成功
図58および図59は、ユーザインタフェース画面のテンプレートを表わす図である。
【0156】
図60は、編集後のユーザインタフェース画面を表わす図である。
図58、図59および図60を参照して、SIの編集操作によって、タブ「メニュー1」251が「色指定」256に変更され、タブ「メニュー2」252が「領域指定」267に変更されている。さらに、タブ「基準位置」268、タブ「計測パラメータ」269、およびタブ「出力パラメータ」270が追加されている。また、タブ「色指定」266の画面には、部品271および部品272が追加されている。
【0157】
(運転画面開発)
図61は、運転画面開発の処理手順を表わすフローチャートである。
【0158】
図61を参照して、SIが、マウス20を操作してボタン74を選択したときには(ステップS501でYES)、運転画面開発部11は、運転画面の作成処理を行なう(ステップS502)。
【0159】
SIが、マウス20を操作してボタン75を選択したときには(ステップS503でYES)、運転画面開発部11は、マニュアル類記憶部18からマニュアル3−3−3章を読み出して表示する(ステップS504)。
【0160】
SIが、マウス20を操作してボタン76を選択したときには(ステップS505でYES)、運転画面開発部11は、運転画面の編集処理を選択して、テンプレート記憶部16から運転画面のテンプレートを読み出して、図62に示すような画面を表示する。SIが、表示されている画面に含まれるメニューのうちのツール462から部品を選択し、部品記憶部15から選択された部品を読み出して配置することによって、図62の運転画面のテンプレート451を編集して、図示しない保存メニューを選択して、編集後の運転画面を運転画面記憶部293に記憶する(ステップS506)。
【0161】
SIが、マウス20を操作してボタン77を選択したときには(ステップS507でYES)、運転画面開発部11は、マニュアル類記憶部18から運転画面の編集を説明したマニュアル3−3−2章を読み出して表示する(ステップS508)。
【0162】
SIが、マウス20を操作してボタン78を選択したときには(ステップS509でYES)、運転画面開発部11は、マニュアル類記憶部18から運転画面のサンプルを読み出して表示する(ステップS510)。
【0163】
SIが、マウス20を操作してボタン79を選択したときには(ステップS511でYES)、実行制御部8は、シミュレーションソフト記憶部17からシミュレーションソフトを読み出して起動する(ステップS512)。
【0164】
SIが、マウス20を操作してボタン80を選択したときには(ステップS513でYES)、運転画面開発部11は、マニュアル類記憶部18から運転画面開発のチュートリアルを読み出して表示する(ステップS514)。
【0165】
SIが、マウス20を操作してボタン81を選択したときには(ステップS515でYES)、運転画面開発部11は、マニュアル類記憶部18から運転画面開発を説明したマニュアル3−3章を読み出して表示する(ステップS516)。
【0166】
SIが、マウス20を操作してボタン82を選択したときには(ステップS517でYES)、運転画面開発部11は、マニュアル類記憶部18から運転画面開発のためのリファレンスを読み出して表示する(ステップS518)。
【0167】
SIが、マウス20を操作して図示しないビルドメニューを選択したときには(ステップS519でYES)、ビルド実行部13は、運転画面記憶部293に記憶されているステップS502またはS506で作成された運転画面のソースコードをコンパイルしてオブジェクトコードを生成し、ライブラリ類記憶部23から必要なライブラリとドライバを読み出してオブジェクトコードとリンクすることによって、WindowsCEとWindowsXP用の運転画面の実行形式のプログラムを作成して実行プログラム記憶部19に記憶する(ステップS520)。
【0168】
SIが、マウス20を操作して図示しない「戻る」ボタンを選択したときには(ステップS521でYES)、運転画面開発部11は、処理を終了する。
【0169】
図63は、運転画面の別のテンプレートを表わす図である。
図64は、編集後の運転画面を表わす図である。
【0170】
図63および図64を参照して、SIの編集操作によって、運転画面に部品352、353、354、355、356が追加されている。
【0171】
(イベント処理開発)
図65は、イベント処理開発の手順を表わすフローチャートである。
【0172】
図65を参照して、SIが、マウス20を操作して表示されている画面に含まれるメニューのうちのツールから計測初期化処理用のMeasureInitコントロールを選択したときには(ステップS601でYES)、SIが、キーボード21を操作して、MeasureInitコントロールのuserFormプロパティ(coreRAからのイベントを受け取るFormオブジェクト)を設定し(ステップS602)、SIが、さらに、マウス20を操作してイベントハンドラを追加して、追加したイベントハンドラに計測化初期化処理時に実行する処理を記述する(ステップS603)。これにより、イベント処理開発部12は、上記設定されたプロパティを有し、かつ計測初期化処理が実行されたタイミングで上記記述された処理を行なうメソッド(イベント処理モジュール)をイベント処理モジュール記憶部292に記憶する(ステップS604)。
【0173】
SIが、マウス20を操作して表示されている画面に含まれるメニューのうちのツールから計測処理用のMeasureProcコントロールを選択したときには(ステップS605でYES)、SIが、キーボード21を操作して、MeasureProcコントロールのuserFormプロパティおよびProcNoプロパティ(「ユーザ処理」画像処理モジュールの設定項目として設定した番号)を設定し(ステップS606)、SIが、さらに、マウス20を操作してイベントハンドラを追加して、追加したイベントハンドラに計測化処理時に実行する処理を記述する(ステップS607)。これにより、イベント処理開発部12は、上記設定されたプロパティを有し、かつ計測処理が実行されたタイミングで上記記述された処理を行なうメソッド(イベント処理モジュール)をイベント処理モジュール記憶部292に記憶する(ステップS608)。
【0174】
SIが、マウス20を操作して表示されている画面に含まれるメニューのうちのツールから計測結果表示処理用のMeasureDispコントロールを選択したときには(ステップS609でYES)、SIが、キーボード21を操作して、MeasureDispコントロールのuserFormプロパティを設定し(ステップS610)、SIが、さらに、マウス20を操作してイベントハンドラを追加して、追加したイベントハンドラに計測結果表示処理時に実行する処理を記述する(ステップS611)。これにより、イベント処理開発部12は、上記設定されたプロパティを有し、かつ計測結果表示処理が実行されたタイミングで上記記述された処理を行なうメソッド(イベント処理モジュール)をイベント処理モジュール記憶部292に記憶する(ステップS612)。
【0175】
SIが、マウス20を操作して表示されている画面に含まれるメニューのうちのツールから計測結果出力処理用のMeasureOutコントロールを選択したときには(ステップS613でYES)、SIが、キーボード21を操作して、MeasureOutコントロールのuserFormプロパティを設定し(ステップS614)、SIが、さらに、マウス20を操作してイベントハンドラを追加して、追加したイベントハンドラに計測結果出力時に実行する処理を記述する(ステップS615)。これにより、イベント処理開発部12は、上記設定されたプロパティを有し、かつ計測結果出力処理が実行されたタイミングで上記記述された処理を行なうメソッド(イベント処理モジュール)をイベント処理モジュール記憶部292に記憶する(ステップS616)。
【0176】
SIが、マウス20を操作して表示されている画面に含まれるメニューのうちのツールからシーン切替え処理用のSceneChangeコントロールを選択したときには(ステップS617でYES)、SIが、キーボード21を操作して、SceneChangeコントロールのuserFormプロパティを設定し(ステップS618)、SIが、さらに、マウス20を操作してイベントハンドラを追加して、追加したイベントハンドラにシーン切替え処理時に実行する処理を記述する(ステップS619)。これにより、イベント処理開発部12は、上記設定されたプロパティを有し、かつシーン切替え処理が実行されたタイミングで上記記述された処理を行なうメソッド(イベント処理モジュール)をイベント処理モジュール記憶部292に記憶する(ステップS620)。
【0177】
SIが、マウス20を操作して表示されている画面に含まれるメニューのうちのツールからシリアル無手順コマンド入力処理用のSerialCommandコントロールを選択したときには(ステップS621でYES)、SIが、キーボード21を操作して、SerialCommandコントロールのuserFormプロパティおよびCommandプロパティ(シリアル無手順コマンドの文字列のうち、イベントハンドラを実行させる文字列)を設定し(ステップS622)、SIが、さらに、マウス20を操作してイベントハンドラを追加して、追加したイベントハンドラにシリアル無手順コマンド入力時に実行する処理を記述する(ステップS623)。これにより、イベント処理開発部12は、上記設定されたプロパティを有し、かつシリアル無手順コマンドが入力されたタイミングで上記記述された処理を行なうメソッド(イベント処理モジュール)をイベント処理モジュール記憶部292に記憶する(ステップS624)。
【0178】
SIが、マウス20を操作して表示されている画面に含まれるメニューのうちのツールからパラレルコマンド入力処理用のParallelCommandコントロールを選択したときには(ステップS625でYES)、SIが、キーボード21を操作して、ParallelCommandコントロールのuserFormプロパティ、bitMaskプロパティ(DI端子のビットマスク)およびbitCommandプロパティ(DI端子の入力ビットパターン)を設定し(ステップS626)、SIが、さらに、マウス20を操作してイベントハンドラを追加して、追加したイベントハンドラにパラレルコマンド入力時に実行する処理を記述する(ステップS627)。これにより、イベント処理開発部12は、上記設定されたプロパティを有し、かつパラレルコマンドが入力されたタイミングで上記記述された処理を行なうメソッド(イベント処理モジュール)をイベント処理モジュール記憶部292に記憶する(ステップS628)。
【0179】
SIが、マウス20を操作して表示されている画面に含まれるメニューのうちのツールからエラー処理用のErrorProcコントロールを選択したときには(ステップS629でYES)、SIが、キーボード21を操作して、ErrorProcコントロールのuserFormプロパティを設定し(ステップS630)、SIが、さらに、マウス20を操作してイベントハンドラを追加して、追加したイベントハンドラにエラー発生時に実行する処理を記述する(ステップS631)。これにより、イベント処理開発部12は、上記設定されたプロパティを有し、かつエラーが発生したタイミングで上記記述された処理を行なうメソッド(イベント処理モジュール)をイベント処理モジュール記憶部292に記憶する(ステップS632)。
【0180】
SIが、マウス20を操作して図示しないビルドメニューを選択したときには(ステップS633でYES)、ビルド実行部13は、イベント処理モジュール記憶部292に記憶されているイベント処理モジュールをコンパイルしてオブジェクトコードを生成し、ライブラリ類記憶部23から必要なライブラリとドライバを読み出して、これらをオブジェクトコードとリンクすることによって、WindowsCEとWindowsXP用のイベント処理の実行形式のプログラムを作成して実行プログラム記憶部19に記憶する(ステップS634)。
【0181】
SIが、マウス20を操作して図示しない「戻る」ボタンを選択したときには(ステップS635でYES)、イベント処理開発部12は、処理を終了する。
【0182】
以上のように、本発明の実施形態の画像処理機能のカスタマイズ装置によれば、基本フローの開発に加えて、テンプレートや部品を用いて、新たな画像処理モジュール、運転画面およびイベント処理モジュールが作成できるので、SIが容易かつ十分に画像処理検査装置の画像処理機能をカスタマイズすることができる。
【0183】
(参考)
以下、参考のため、本発明の実施形態で説明した設定データ・計測データ・画像データ・モデルデータ・図形データ・ワークエリアの取得方法を説明する。
【0184】
(a)設定データの取得
各メソッドの引数で渡ってくる、処理ユニット情報クラス(ProcUnitクラス)のメソッド「GetSetupData()」を使用して設定データ格納先のポインタを取得する。
【0185】
SETUPDATA *ProcUnit::GetSetupData(void);
戻り値:設定データのポインタ
図66は、設定データの取得の例を示す図である。
【0186】
(b)計測データの取得
各メソッドの引数で渡ってくる、処理ユニット情報クラス(ProcUnitクラス)のメソッド「GetMeasureData()」を使用して計測データ格納先のポインタを取得する。
【0187】
MEASUREDATA *ProcUnit::GetMeasureData(void);
戻り値:設定データのポインタ
なお、voidのポインタとして返ってくるので、キャストして使用する必要がある。
【0188】
図67は、計測データの取得の例を示す図である。
(c)モデルデータの取得
各メソッドの引数で渡ってくる、処理ユニット情報クラス(ProcUnitクラス)のメソッド「GetModelData()」を使用してモデルデータ格納先のポインタを取得する。ただし、モデルデータの格納ポインタを取得するには、事前にモデルの登録処理が完了している必要がある。
【0189】
BYTE *ProcUnit::GetModelData(modelNo);
int modelNo; モデル管理番号
戻り値:モデルデータのポインタ
図68は、モデルデータの取得の例を示す図である。
【0190】
(d)モデルデータの登録および削除
各メソッドの引数で渡ってくる、処理ユニット情報クラス(ProcUnitクラス)のメソッド「ModelDataAlloc()」を使用してモデルデータの登録を行ない、「ModelDataFree()」を使用してモデルデータの削除をする。
【0191】
モデル登録
int ProcUnit::ModelDataAlloc(modelNo, size);
int modelNo; 登録モデル管理番号
int size; 登録モデルサイズ
戻り値:エラーコード
NORMAL(0):正常終了
ERROR(-1):異常終了(モデルデータ登録成功)
モデル削除
int ProcUnit::ModelDataFree(modelNo);
int modelNo; 削除モデル管理番号
戻り値:エラーコード
NORMAL(0):正常終了
ERROR(-1):異常終了(モデルデータ削除失敗)
図69は、モデルデータの登録および削除の例を示す図である。
【0192】
(e)画像データの取得
各メソッドの引数で渡ってくる、処理ユニット情報クラス(ProcUnitクラス)のメソッド「GetImageData()」「GetMeasureImage()」を使用して画像データ格納先のポインタを取得する。自分自身が画像データ入力や画像データ作成をする場合は、「GetImageData()」を使用する。なお「GetImageData()」を使用する場合、「ImageDataAlloc()」メソッドを使用して画像データを格納する領域を確保しておく必要がある。
【0193】
IMAGE*ProcUnit::GetImageData(imageNo);
int imageNo; 処理ユニット内での画像番号
戻り値:画像データ構造体のポインタ
画像データ構造体は以下の通りである。
【0194】
typedef struct {
unsigned char imageRGB[640 * 480 * 3]; // 画像データ
int xsize; // 画像サイズX
int ysize; // 画像サイズY
} IMAGE;
図70は、画像データの取得の例を示す図である。
【0195】
先行する処理ユニットが入力・変更した画像データを使う場合は「GetMeasureImage()」を使用する。なお「GetMeasureImage()」を使用する場合は、事前に「SetMeasureImage()」メソッドを使用して現在の処理対象画像を設定しておく必要がありる。
【0196】
IMAGE *ProcUnit::GetMeasureImage(measureImageNo);
int measureImageNo; 現在の処理対象画像の画像番号
戻り値:画像データ構造体のポインタ
図71は、画像データの取得の別の例を示す図である。
【0197】
(f)画像データの登録および削除
各メソッドの引数で渡ってくる、処理ユニット情報クラス(ProcUnitクラス)のメソッド「ImageDataAlloc()」を使用して入力・作成した画像データを格納する領域を確保し、「ImageDataFree()」を使用して画像データの削除する。
【0198】
画像データ領域確保
int ProcUnit::ImageDataAlloc(imageNo, size);
int imageNo; 処理ユニット内での画像番号
int size; 画像データサイズ
戻り値:エラーコード
NORMAL(0):正常終了
ERROR(-1):異常終了(画像データ領域確保失敗)
画像データ削除
int ProcUnit::ImageDataFree(imageNo);
int imageNo; 処理ユニット内での画像番号
戻り値:エラーコード
NORMAL(0):正常終了
ERROR(-1):異常終了(画像データ削除失敗)
図72は、画像データの登録の例を示す図である。
【0199】
(g)現在の処理対象画像の登録
各メソッドの引数で渡ってくる、処理ユニット情報クラス(ProcUnitクラス)のメソッド「SetMeasureImage()」を使用して、現在の画像処理モジュール対象画像の登録を行なう。この登録をすることにより「GetMeasureImage()」が使用可能になる。
【0200】
int ProcUnit::SetMeasureImage(measureImageNo, imageNo);
int measureImageNo; 現在の処理対象画像の画像番号
int imageNo; 登録する処理ユニット内の画像番号
戻り値:エラーコード
NORMAL(0):正常終了
ERROR(-1):異常終了(現在の処理対象画像登録失敗)
図73は、現在の処理対象画像の登録の例を示す図である。
【0201】
(h)図形データの取得
各メソッドの引数で渡ってくる、処理ユニット情報クラス(ProcUnitクラス)のメソッド「GetFiugreData()」を使用して図形データ格納先のポインタを取得する。
【0202】
FIG_HEADER *ProcUnit::GetFigureData(figureNo);
int figureNo;
戻り値:図形データ格納先のポインタ
図74は、図形データの取得の例を示す図である。
【0203】
(i)ワーク領域の取得
各メソッドの引数で渡ってくる、処理ユニット情報クラス(ProcUnitクラス)のメソッド「TmpDataAlloc()」を使用して作業用の一時領域のポインタを取得する。なお「TmpDataAlloc()」で確保した領域は、不必要になった場合に「TmpDataFree()」メソッドを使用して必ず解放する必要がある。
【0204】
主に画像処理モジュールの計測処理で、作業用のデータを一時的に格納する必要がある場合にこれを用いてメモリ領域の確保を行なう。
【0205】
BYTE *ProcUnit::TmpDataAlloc(size);
int size; 確保するサイズ
戻り値:作業用一時領域のポインタ
void ProcUnit::TmpDataFree(Byte *address);
BYTE *address; 解放する領域のアドレス
図75は、ワーク領域の取得の例を示す図である。
【0206】
(変形例)
本発明は、上記の実施の形態に限定されるものではなく、たとえば以下のような変形例を含む。
【0207】
(1) コメント、関数名
本発明の実施形態では、MSプログラムのうち、どのファイルが画像処理モジュールの表示部分、出力部分、および演算(計測)部分のいずれに対応するかがファイル名によって識別可能とされているものとしたが、これに限定するものではない。ファイル内の関数の名前、またはファイル内のコメント文によって、どのファイルまたはファイル内のどの関数が、画像処理モジュールの表示部分、出力部分、および演算(計測)部分のいずれに対応するかが識別可能とされているものであってもよい。また、MSプログラムが、1個のファイルで構成されていてもよい。
【0208】
(2)デバッグ、インストール機能
本発明の実施形態では、デバッグおよびインストールの機能を説明しなかったが、作成された実行形式のプログラムをデバッグする機能、または作成されたWindowsCEの実行形式のプログラムをハードディスクから読み出して、リムーバブルメディアに送るインストール機能を持たせてもよい。また、画像処理機能のカスタマイズ装置と、画像処理検査装置とが通信回線で接続されており、通信回線を通じて作成されたWindowsCEの実行形式のプログラムを転送するものとしてもよい。
【0209】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【図面の簡単な説明】
【0210】
【図1】本発明の実施形態の画像処理機能のカスタマイズ装置の構成を表わす図である。
【図2】画像処理モジュールのテンプレートを構成するファイルの一覧とその機能の例を表わす図である。
【図3】部品記憶部に記憶されている部品のうち、テンプレートのユーザインタフェースの画面に貼り付け可能な部品の一例とその機能を表わす図である。
【図4】部品記憶部に記憶されている部品のうち、イベント処理開発で利用する部品の例を表わす図である。
【図5】画像処理機能のカスタマイズの全体の処理手順を表わすフローチャートである。
【図6】画像処理機能のカスタマイズ装置が起動後、最初に実行制御部8によって表示される画面の例を表わす図である。
【図7】基本フロー開発の処理が選択されたときに表示される画面を表わす図である。
【図8】画像処理モジュール開発の処理が選択されたときに表示される画面の例を表わす図である。
【図9】運転画面開発の処理が選択されたときに表示される画面の例を表わす図である。
【図10】基本フロー開発の処理手順を表わすフローチャートである。
【図11】基本フローの作成処理が選択されたときに表示される画面の例を表わす図である。
【図12】基本フローの作成処理の手順を表わすフローチャートである。
【図13】基本フローの作成後の画面の例を表わす図である。
【図14】画像処理モジュール開発の処理手順を表わすフローチャートである。
【図15】MSプログラムの編集処理が選択されたときに表示される画面の例を表わす図である。
【図16】UIプログラムの編集処理が選択されたときに表示される画面の例を表わす図である。
【図17】「ItemDefs.h」のテンプレートを表わす図である。
【図18】「ItemDefs.h」のテンプレートを表わす図である。
【図19】編集後の「ItemDefs.h」を表わす図である。
【図20】編集後の「ItemDefs.h」を表わす図である。
【図21】「AssignProc.cpp」のテンプレートを表わす図である。
【図22】編集後の「AssignProc.cpp」を表わす図である。
【図23】編集後の「AssignProc.cpp」を表わす図である。
【図24】「FigureUpdate.cpp」のテンプレートを表わす図である。
【図25】「FigureUpdate.cpp」のテンプレートを表わす図である。
【図26】「ItemInit.cpp」のテンプレートを表わす図である。
【図27】「ItemInit.cpp」のテンプレートを表わす図である。
【図28】編集後の「ItemInit.cpp」を表わす図である。
【図29】編集後の「ItemInit.cpp」を表わす図である。
【図30】「MeasureDisp.cpp」のテンプレートを表わす図である。
【図31】「MeasureDisp.cpp」のテンプレートを表わす図である。
【図32】編集後の「MeasureDisp.cpp」を表わす図である。
【図33】編集後の「MeasureDisp.cpp」を表わす図である。
【図34】編集後の「MeasureDisp.cpp」を表わす図である。
【図35】「MeasureInit.cpp」のテンプレートを表わす図である。
【図36】「MeasureInit.cpp」のテンプレートを表わす図である。
【図37】「MeasureOut.cpp」のテンプレートを表わす図である。
【図38】「MeasureProc.cpp」のテンプレートを表わす図である。
【図39】編集後の「MeasureProc.cpp」を表わす図である。
【図40】編集後の「MeasureProc.cpp」を表わす図である。
【図41】編集後の「MeasureProc.cpp」を表わす図である。
【図42】「RenumProc.cpp」のテンプレートを表わす図である。
【図43】「RenumProc.cpp」のテンプレートを表わす図である。
【図44】編集後の「RenumProc.cpp」を表わす図である。
【図45】編集後の「RenumProc.cpp」を表わす図である。
【図46】「UnitData.cpp」のテンプレートを表わす図である。
【図47】「UnitData.cpp」のテンプレートを表わす図である。
【図48】「UnitData.cpp」のテンプレートを表わす図である。
【図49】編集後の「UnitData.cpp」を表わす図である。
【図50】編集後の「UnitData.cpp」を表わす図である。
【図51】編集後の「UnitData.cpp」を表わす図である。
【図52】編集後の「UnitData.cpp」を表わす図である。
【図53】編集後の「UnitData.cpp」を表わす図である。
【図54】編集後の「UnitData.cpp」を表わす図である。
【図55】編集後の「UnitData.cpp」を表わす図である。
【図56】編集後の「UnitData.cpp」を表わす図である。
【図57】編集後の「UnitData.cpp」を表わす図である。
【図58】ユーザインタフェース画面のテンプレートを表わす図である。
【図59】ユーザインタフェース画面のテンプレートを表わす図である。
【図60】編集後のユーザインタフェース画面を表わす図である。
【図61】運転画面開発の処理手順を表わすフローチャートである。
【図62】運転画面の編集処理が選択されたときに表示される画面の例を表わす図である。
【図63】運転画面の別のテンプレートを表わす図である。
【図64】編集後の運転画面を表わす図である。
【図65】イベント処理開発の手順を表わすフローチャートである。
【図66】設定データの取得の例を示す図である。
【図67】計測データの取得の例を示す図である。
【図68】モデルデータの取得の例を示す図である。
【図69】モデルデータの登録および削除の例を示す図である。
【図70】画像データの取得の例を示す図である。
【図71】画像データの取得の別の例を示す図である。
【図72】画像データの登録の例を示す図である。
【図73】現在の処理対象画像の登録の例を示す図である。
【図74】図形データの取得の例を示す図である。
【図75】ワーク領域の取得の例を示す図である。
【符号の説明】
【0211】
1 画像処理機能のカスタマイズ装置、2 ディスプレイ、4 CPUおよびメモリ、5 ハードディスク、6 リムーバブルメディア、7 操作入力部、8 実行制御部、9 基本フロー開発部、10 画像処理モジュール開発部、11 運転画面作成部、12 イベント処理開発部、13 ビルド実行部、14 カスタマイズプログラム記憶部、15 部品記憶部、16 テンプレート記憶部、17 シミュレーションソフト記憶部、18 マニュアル類記憶部、19 実行プログラム記憶部、20 マウス、21 キーボード、22 OS類記憶部、23 ライブラリ類記憶部、291 画像処理モジュール記憶部、292 イベント処理モジュール記憶部、293 運転画面記憶部、294 基本フロー記憶部。
【特許請求の範囲】
【請求項1】
画像処理検査装置の画像処理機能をカスタマイズする装置であって、
ユーザの操作を受け付ける操作入力部と、
複数個の画像処理モジュールを記憶する第1の記憶部と、
前記操作入力部を通じたユーザの操作に従って、前記第1の記憶部に記憶されている複数個の画像処理モジュールの実行順序を決定する基本フロー作成部と、
前記操作入力部を通じたユーザの操作に従って、新たな画像処理モジュールを作成して、前記第1の記憶部に記憶する画像処理モジュール作成部とを備えた、画像処理機能のカスタマイズ装置。
【請求項2】
前記画像処理機能のカスタマイズ装置は、
画像処理モジュールのテンプレートを記憶する第2の記憶部を備え、
前記画像処理モジュール作成部は、前記テンプレートを表示して、前記操作入力部を通じたユーザの操作に従って、前記テンプレートを編集することによって、新たな画像処理モジュールを作成する、請求項1記載の画像処理機能のカスタマイズ装置。
【請求項3】
前記画像処理モジュ−ルは、
画像処理結果の表示部分、画像処理結果の出力部分、画像処理の処理内容である演算部分、および画像処理のパラメータの設定のためのユーザインタフェース部分を含む、請求項2記載の画像処理機能のカスタマイズ装置。
【請求項4】
前記画像処理機能のカスタマイズ装置は、さらに、
テンプレートの画面に貼り付ける部品を記憶する第3の記憶部を備え、
前記画像処理モジュール作成部は、
前記ユーザインタフェース部分の作成時には、前記第2の記憶部からユーザインタフェース部分のテンプレートを読み出して、ユーザインタフェース画面のテンプレートを表示し、前記操作入力部を通じたユーザの操作に従って、前記ユーザインタフェース画面のテンプレートに前記第3の記憶部に記憶されている部品を貼り付けることによって、前記ユーザインタフェース部分のテンプレートを編集する、請求項3記載の画像処理機能のカスタマイズ装置。
【請求項5】
前記画像処理モジュール作成部は、前記表示部分、前記出力部分、または前記演算部分の作成時には、前記第2の記憶部から前記部分のプログラムのテンプレートを読み出してエディタ上に表示し、前記操作入力部を通じたユーザの操作に従って、前記プログラムのテンプレートを編集する、請求項3記載の画像処理機能のカスタマイズ装置。
【請求項6】
前記画像処理モジュールは、1個または複数個のファイルで構成されており、
、前記ファイルの名前、ファイル内の関数の名前、またはファイル内のコメント文によって、前記ファイルまたは前記ファイル内の関数が、前記画像処理モジュールの前記表示部分、前記出力部分、および前記演算部分のいずれに対応するかが識別可能とされている、請求項5記載の画像処理機能のカスタマイズ装置。
【請求項7】
前記画像処理機能のカスタマイズ装置は、さらに、
前記第2の記憶部は、さらに前記画像処理検査装置による画像処理の結果を表示するための運転画面のテンプレートを記憶し、
前記第2の記憶部から前記運転画面のテンプレートを読み出して表示し、前記操作入力部を通じたユーザの操作に従って、前記運転画面のテンプレートに前記第3の記憶部に記憶されている部品を貼り付けることによって前記運転画面のテンプレートを編集する運転画面作成部とを備えた、請求項2記載の画像処理機能のカスタマイズ装置。
【請求項8】
前記画像処理機能のカスタマイズ装置は、さらに、
前記操作入力部を通じたユーザの操作に従って、前記画像処理検査装置による画像処理実行中にイベントが発生した場合に、前記イベントが発生したタイミングで実行される処理を定めたイベントモジュールを作成するイベント処理作成部を備え、
基本フロー作成、画像処理モジュール作成、運転画面作成、またはイベント処理作成を選択するためのボタンを表示し、前記操作入力部を通じたユーザの選択操作にしたがって、実行する処理を切替える実行制御部とを備え、
前記実行制御部は、画像処理機能のカスタマイズ手順として、基本フロー作成、画像処理モジュール作成、運転画面作成、イベント処理作成の順番で行なうことを推奨するガイドを表示する、請求項7記載の画像処理機能のカスタマイズ装置。
【請求項9】
複数個の画像処理モジュールを記憶する第1の記憶部を備えた装置におけ画像処理検査装置の画像処理機能をカスタマイズする方法であって、
操作入力部が、ユーザの操作を受け付けるステップと、、
基本フロー作成部が、前記操作入力部を通じたユーザの操作に従って、前記第1の記憶部に記憶されている複数個の画像処理モジュールの実行順序を決定するステップと、
画像処理モジュール作成部が、前記操作入力部を通じたユーザの操作に従って、新たな画像処理モジュールを作成して、前記第1の記憶部に記憶するステップとを備えた、画像処理機能のカスタマイズ方法。
【請求項10】
画像処理検査装置の画像処理機能をカスタマイズするためのプログラムであって、コンピュータを、
ユーザの操作を受け付ける操作入力部と、
複数個の画像処理モジュールを記憶する第1の記憶部と、
前記操作入力部を通じたユーザの操作に従って、前記第1の記憶部に記憶されている複数個の画像処理モジュールの実行順序を決定する基本フロー作成部と、
前記操作入力部を通じたユーザの操作に従って、新たな画像処理モジュールを作成して、前記第1の記憶部に記憶する画像処理モジュール作成部として機能させるための、画像処理機能のカスタマイズのためのプログラム。
【請求項1】
画像処理検査装置の画像処理機能をカスタマイズする装置であって、
ユーザの操作を受け付ける操作入力部と、
複数個の画像処理モジュールを記憶する第1の記憶部と、
前記操作入力部を通じたユーザの操作に従って、前記第1の記憶部に記憶されている複数個の画像処理モジュールの実行順序を決定する基本フロー作成部と、
前記操作入力部を通じたユーザの操作に従って、新たな画像処理モジュールを作成して、前記第1の記憶部に記憶する画像処理モジュール作成部とを備えた、画像処理機能のカスタマイズ装置。
【請求項2】
前記画像処理機能のカスタマイズ装置は、
画像処理モジュールのテンプレートを記憶する第2の記憶部を備え、
前記画像処理モジュール作成部は、前記テンプレートを表示して、前記操作入力部を通じたユーザの操作に従って、前記テンプレートを編集することによって、新たな画像処理モジュールを作成する、請求項1記載の画像処理機能のカスタマイズ装置。
【請求項3】
前記画像処理モジュ−ルは、
画像処理結果の表示部分、画像処理結果の出力部分、画像処理の処理内容である演算部分、および画像処理のパラメータの設定のためのユーザインタフェース部分を含む、請求項2記載の画像処理機能のカスタマイズ装置。
【請求項4】
前記画像処理機能のカスタマイズ装置は、さらに、
テンプレートの画面に貼り付ける部品を記憶する第3の記憶部を備え、
前記画像処理モジュール作成部は、
前記ユーザインタフェース部分の作成時には、前記第2の記憶部からユーザインタフェース部分のテンプレートを読み出して、ユーザインタフェース画面のテンプレートを表示し、前記操作入力部を通じたユーザの操作に従って、前記ユーザインタフェース画面のテンプレートに前記第3の記憶部に記憶されている部品を貼り付けることによって、前記ユーザインタフェース部分のテンプレートを編集する、請求項3記載の画像処理機能のカスタマイズ装置。
【請求項5】
前記画像処理モジュール作成部は、前記表示部分、前記出力部分、または前記演算部分の作成時には、前記第2の記憶部から前記部分のプログラムのテンプレートを読み出してエディタ上に表示し、前記操作入力部を通じたユーザの操作に従って、前記プログラムのテンプレートを編集する、請求項3記載の画像処理機能のカスタマイズ装置。
【請求項6】
前記画像処理モジュールは、1個または複数個のファイルで構成されており、
、前記ファイルの名前、ファイル内の関数の名前、またはファイル内のコメント文によって、前記ファイルまたは前記ファイル内の関数が、前記画像処理モジュールの前記表示部分、前記出力部分、および前記演算部分のいずれに対応するかが識別可能とされている、請求項5記載の画像処理機能のカスタマイズ装置。
【請求項7】
前記画像処理機能のカスタマイズ装置は、さらに、
前記第2の記憶部は、さらに前記画像処理検査装置による画像処理の結果を表示するための運転画面のテンプレートを記憶し、
前記第2の記憶部から前記運転画面のテンプレートを読み出して表示し、前記操作入力部を通じたユーザの操作に従って、前記運転画面のテンプレートに前記第3の記憶部に記憶されている部品を貼り付けることによって前記運転画面のテンプレートを編集する運転画面作成部とを備えた、請求項2記載の画像処理機能のカスタマイズ装置。
【請求項8】
前記画像処理機能のカスタマイズ装置は、さらに、
前記操作入力部を通じたユーザの操作に従って、前記画像処理検査装置による画像処理実行中にイベントが発生した場合に、前記イベントが発生したタイミングで実行される処理を定めたイベントモジュールを作成するイベント処理作成部を備え、
基本フロー作成、画像処理モジュール作成、運転画面作成、またはイベント処理作成を選択するためのボタンを表示し、前記操作入力部を通じたユーザの選択操作にしたがって、実行する処理を切替える実行制御部とを備え、
前記実行制御部は、画像処理機能のカスタマイズ手順として、基本フロー作成、画像処理モジュール作成、運転画面作成、イベント処理作成の順番で行なうことを推奨するガイドを表示する、請求項7記載の画像処理機能のカスタマイズ装置。
【請求項9】
複数個の画像処理モジュールを記憶する第1の記憶部を備えた装置におけ画像処理検査装置の画像処理機能をカスタマイズする方法であって、
操作入力部が、ユーザの操作を受け付けるステップと、、
基本フロー作成部が、前記操作入力部を通じたユーザの操作に従って、前記第1の記憶部に記憶されている複数個の画像処理モジュールの実行順序を決定するステップと、
画像処理モジュール作成部が、前記操作入力部を通じたユーザの操作に従って、新たな画像処理モジュールを作成して、前記第1の記憶部に記憶するステップとを備えた、画像処理機能のカスタマイズ方法。
【請求項10】
画像処理検査装置の画像処理機能をカスタマイズするためのプログラムであって、コンピュータを、
ユーザの操作を受け付ける操作入力部と、
複数個の画像処理モジュールを記憶する第1の記憶部と、
前記操作入力部を通じたユーザの操作に従って、前記第1の記憶部に記憶されている複数個の画像処理モジュールの実行順序を決定する基本フロー作成部と、
前記操作入力部を通じたユーザの操作に従って、新たな画像処理モジュールを作成して、前記第1の記憶部に記憶する画像処理モジュール作成部として機能させるための、画像処理機能のカスタマイズのためのプログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【図28】
【図29】
【図30】
【図31】
【図32】
【図33】
【図34】
【図35】
【図36】
【図37】
【図38】
【図39】
【図40】
【図41】
【図42】
【図43】
【図44】
【図45】
【図46】
【図47】
【図48】
【図49】
【図50】
【図51】
【図52】
【図53】
【図54】
【図55】
【図56】
【図57】
【図58】
【図59】
【図60】
【図61】
【図62】
【図63】
【図64】
【図65】
【図66】
【図67】
【図68】
【図69】
【図70】
【図71】
【図72】
【図73】
【図74】
【図75】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【図28】
【図29】
【図30】
【図31】
【図32】
【図33】
【図34】
【図35】
【図36】
【図37】
【図38】
【図39】
【図40】
【図41】
【図42】
【図43】
【図44】
【図45】
【図46】
【図47】
【図48】
【図49】
【図50】
【図51】
【図52】
【図53】
【図54】
【図55】
【図56】
【図57】
【図58】
【図59】
【図60】
【図61】
【図62】
【図63】
【図64】
【図65】
【図66】
【図67】
【図68】
【図69】
【図70】
【図71】
【図72】
【図73】
【図74】
【図75】
【公開番号】特開2009−59203(P2009−59203A)
【公開日】平成21年3月19日(2009.3.19)
【国際特許分類】
【出願番号】特願2007−226493(P2007−226493)
【出願日】平成19年8月31日(2007.8.31)
【出願人】(000002945)オムロン株式会社 (3,542)
【Fターム(参考)】
【公開日】平成21年3月19日(2009.3.19)
【国際特許分類】
【出願日】平成19年8月31日(2007.8.31)
【出願人】(000002945)オムロン株式会社 (3,542)
【Fターム(参考)】
[ Back to top ]