図1は、本発明の実施の形態における部品実装システムの外観図である。
本実施の形態における部品実装システム1000は、部品実装機100と、部品実装機100を制御する制御装置200とを備えている。なお、図1では、制御装置200を部品実装機100とは別体として図示しているが、部品実装機100内に制御装置200を設けてもよい。
部品実装機100は、上流から基板(回路基板)20を受け取り、その基板20に対して部品を実装し、その部品が実装された基板20を下流側に送り出す。なお、部品実装機100によって部品が実装された基板20を、以下、実装基板という。
具体的には、部品実装機100は、複数種の部品を供給する2つの部品供給部115a、115bと、基板20を部品実装機100の内部に搬入する搬入口130とを備える。部品実装機100は、搬入口130から搬入された基板20を、所定位置で停止させる。そして、部品実装機100は、部品供給部115a、115bから供給される部品を順次取り出し、所定位置で停止している基板20に対して、取り出した部品を実装する。
また、部品実装機100は、部品供給部115a、115bから供給された部品、当該部品を実装する前の基板20、及び基板20に実装された後の部品の状態等を、撮像装置等を用いて認識する。
制御装置200は、部品実装機100による部品の実装条件などを決定して、その実装条件に沿って実装が行われるように部品実装機100を制御する。
図2は、部品実装機100の内部の主要な機械的構成を示す構成図である。
部品実装機100は、基板20に対して部品を実装する2つの実装ユニット110a、110bと、基板20を搬送するための一対の基板搬送レール122a、122bと、一対のビーム駆動ロボット140とを備えている。2つの実装ユニット110a、110bは、協調して基板搬送レール122a、122b上にある基板20に対して部品を実装する。
実装ユニット110a及び実装ユニット110bは、それぞれ同様の構成を有している。つまり、実装ユニット110aは、部品供給部115a、部品検査部116a、ヘッド112a、及びビーム121aを備えている。同様に、実装ユニット110bは、部品供給部115b、部品検査部116b、ヘッド112b、及びビーム121bを備えている。
ここで、実装ユニット110aの詳細な構成について説明する。なお、実装ユニット110bの詳細な構成については、実装ユニット110aと同様であるため省略する。
部品供給部115aは、部品テープを収納する複数の部品カセット(フィーダ)114の配列からなる。また、部品供給部115aの各部品カセット114は、基板20の搬送方向(X軸方向)に沿って配列している。なお、部品テープとは、例えば、同一部品種の複数の部品がテープ(キャリアテープ)上に並べられたものであり、リール等に巻かれた状態で供給される。また、部品テープに並べられる(収納される)部品は、例えばチップ部品であって、具体的には0402チップ部品や1005チップ部品などである。
ヘッド112aは、例えばマルチ装着ヘッドと呼ばれるヘッドであって、複数の吸着ノズル(以下、単にノズルという)を備えることができる。例えば、部品供給部115aから10個の部品を吸着して基板20に装着することができる。このようなヘッド112aは、軸状に構成されたビーム121aに対してスライド自在に取り付けられている。ヘッド112aは、例えば、モータなどのアクチュエータの駆動により、ビーム121aに沿って移動する。また、ヘッド112aには、部品を実装する前の基板20の状態、及び基板20に実装された後の部品の状態等を検査する基板検査部(図示省略)が設けられている。
ビーム121aは、基板20の搬送方向(X軸方向)と垂直な方向(Y軸方向)に沿って互いに平行に配置された一対のビーム駆動ロボット140上に、Y軸方向にスライド自在に取り付けられている。したがって、ビーム121aは、例えばモータなどのアクチュエータの駆動により、一対のビーム駆動ロボット140上をY軸方向に沿って移動する。すなわち、ヘッド112aは、ビーム駆動ロボット140およびビーム121aによってX軸方向およびY軸方向に移動する。
基板搬送レール122a、122bは、それぞれX軸方向に対して平行となるように配置されている。ここで、基板搬送レール122aは、部品供給部115a側に寄せて固定されている。一方、基板搬送レール122bは、搬送される基板20のサイズ(幅)に応じてY軸方向に移動する。部品実装機100の搬入口130から搬入された基板20は、一対の基板搬送レール122a、122b上に沿って搬送されてストッパーなどにより所定位置で停止される。
部品検査部116aは、ヘッド112aに吸着された部品の形状や吸着状態を2次元又は3次元的に検査するために用いられる。また、部品検査部116aは、部品供給部115aにおけるX軸方向に沿った中央付近に配置されている。
このように構成された部品実装機100において、ヘッド112aは、部品供給部115aから供給される部品を吸着して基板20上に移動し、吸着している部品をその基板20の各実装点に装着し、部品供給部115a上に移動するという一連の動作を繰り返し実行する。ヘッド112bも同様に、部品供給部115bから供給される部品を吸着して基板20上に移動し、吸着している部品をその基板20の各実装点に装着し、部品供給部115b上に移動するという一連の動作を繰り返し実行する。
このように実行される一連の動作、または1回あたりの一連の動作でヘッドに吸着される部品群を、以下、タスクという。また、実装点とは、基板20上の部品が実装されるべき位置である。
ヘッド112aによる1つのタスクの例を具体的に説明する。まず、ヘッド112aは、X軸方向およびY軸方向に移動しながら、部品供給部115aの各部品カセット114から供給される1タスク分の部品を吸着する。その後、ヘッド112aは、部品検査部116a上を一定速度で移動する、或いは一時停止することにより、吸着している部品を部品検査部116aに撮像させ、基板20の実装領域上に入る前のポイントである突入ポイントに到達する。そして、ヘッド112aは、その突入ポイントから所定のタイミングで移動を開始して基板20の実装領域上に入る。なお、突入ポイントは複数点あってもよい。
なお、実装領域とは、基板20の実装点が存在する領域であって、基板20の一部の領域や全ての領域であってもよい。実装領域上に入ったヘッド112aは、X軸方向およびY軸方向に移動しながら、吸着している部品をそれぞれ各実装点に装着する。1タスク分の全ての部品の装着が完了すると、ヘッド112aは、基板20の実装領域上から出て部品供給部115a上に移動する。
一方、ヘッド112bも上述のヘッド112aの動作と同様の動作を行うが、ヘッド112a、112bは、それぞれが干渉することがないように、つまり、それぞれが同時に基板20の実装領域上の干渉する領域に入ることがないように、互いに協調して動作する。
図3は、ヘッド112aと部品カセット114との位置関係を示す模式図である。
上述のように、ヘッド112aには、例えば最大10個のノズルnzをX軸方向に配列させて取り付けることが可能である。10個のノズルnzが取り付けられたヘッド112aは、例えば、最大10個の部品カセット114のそれぞれから部品を順次、或いは同時に(1回の上下動作で)吸着することができる。同様に、ヘッド112bも例えば最大10個のノズルnzを取り付けることができる。なお、本発明では、ヘッド112a、112bに取り付けられるノズルnzの数は10個以外でもよく、X軸方向に沿うノズルnzの列を、Y軸方向に複数列取り付けてもよい。
図4は、部品を収めた部品テープ及びリールの例を示す図である。
チップ形電子部品などの部品423dは、図4に示すキャリアテープ424に保持されている。キャリアテープ424には、一定間隔で連続的に形成された複数の収納凹部424aが設けられている。部品は、この収納凹部424aに収納されている。さらに、キャリアテープ424の上面(部品を取り出す側)には、カバーテープ425が貼付けられている。カバーテープ425が貼り付けられたキャリアテープ424は、リール426に所定の数量分だけ巻回されたテーピング形態でユーザに供給される。このようなキャリアテープ424およびカバーテープ425によって部品テープが構成される。なお、部品テープの構成は、図4に示す構成以外の他の構成であってもよい。
本実施の形態における部品実装機100では、上述のようにヘッド112a、112bがそれぞれ同時に基板20の実装領域上の干渉する領域に入ることがないように互いに強調して動作する。その結果、この部品実装機100は、いわゆる交互打ちと非交互打ちとを実行する。交互打ちとは、ヘッド112aによる1タスク分の部品の装着と、ヘッド112bによる1タスク分の部品の装着とが交互に行われる動作である。一方、非交互打ちとは、ヘッド112aまたはヘッド112bによる1タスク分の部品の装着が繰り返し連続して同じヘッドで行われる動作である。
図5は、本実施の形態における部品実装機100の制御系の機能構成を示すブロック図である。
本実施の形態における部品実装機100は、入力部151、表示部152、ヘッド制御部153、制御部154、通信部155、および格納部156を備えている。
入力部151は、例えばキーボードやマウスなどで構成されており、オペレータ(ユーザ)からの操作を受け付けて、その操作結果をヘッド制御部153や制御部154などに通知する。
表示部152は、例えば液晶ディスプレイなどで構成されており、ヘッド制御部153などの動作状態を表示したり、格納部156などに格納されているデータを表示したりする。
制御部154は、入力部151に受け付けられた操作や、通信部155で受信されたデータに応じて、部品検査部116a、116b、表示部152、及びヘッド制御部153などを制御する。また、制御部154は、基板20を搬送するためのモータなどを制御して、基板20を適切な位置に搬送する。
通信部155は、制御装置200と通信する。例えば、通信部155は、基板20の各実装点に関する情報などを示すNCデータ156aと、各部品に関する情報を示す部品ライブラリ156bと、部品カセット114の配列や部品の実装順序などの実装条件を示す実装条件データ156cとを制御装置200から取得して、それらを格納部156に格納する。なお、図5では、制御装置200と制御部154とを別体として構成する例を示しているが、制御装置200を制御部154内に設けて、部品実装機100の制御系内の構成としてもよい。また、制御装置200、ヘッド制御部153、及び制御部154をまとめて制御部として構成するものであってもよい。
格納部156は、通信部155により取得されたNCデータ156a、部品ライブラリ156b、及び実装条件データ156c等を格納している。
図6は、NCデータ156aの一例を示す図である。
NCデータ156aは、基板20において装着の対象となる全ての部品の実装点に関する情報を示す。1つの実装点piは、部品種ci、X座標xi、Y座標yi、制御データφi、および実装角度θiからなる。ここで、部品種は、部品ライブラリ156bにおける部品名に相当する(図7参照)。X座標およびY座標は実装点の座標である。制御データφiは、その部品の装着に関する制約情報、例えば、使用可能なノズルnzのタイプや、ヘッド112a、112bの最高移動加速度等を示す。実装角度θiは、部品種ciの部品を吸着したノズルnzが回転すべき角度を示す。
図7は、部品ライブラリ156bの一例を示す図である。
部品ライブラリ156bは、部品実装機100が扱うことができる全ての部品種のそれぞれについての固有の情報を集めたライブラリである。この部品ライブラリ156bは、図7に示すように、部品種(部品名)ごとの部品サイズ(幅、奥行き、厚さ等)、その部品種におけるタクト、および制約情報などからなる。
なお、この部品ライブラリ156bの示すタクトは、一定条件下において部品を基板20に装着するのに要する部品種固有の時間である。制約情報は、例えば、使用可能なノズルnzのタイプ(SXや、SAなど)、部品検査部116a、116bによる認識方式(反射など)、及びヘッド112a、112bの最高加速度比などである。また、図7には、参考として、各部品種の部品の外観も併せて示されている。部品ライブラリ156bには、その他に、部品の色や形状などの情報が含まれていてもよい。
図8は、実装条件データ156cの一例を示す図である。
実装条件データ156cは、部品供給部115a、115bにおける部品カセット114の配列(部品配列)、及びヘッド112a、112bのそれぞれのタスクごとの実装順序などを示す。例えば、実装条件データ156cは、部品配列として、部品供給部115aのX軸方向の一方からA1番目に部品種c1があり、A2番目に部品種c2があることを示す。同様に、部品供給部115bのX軸方向の一方からB1番目に部品種c1があり、B2番目に部品種c2があることを示す。
また、実装条件データ156cは、ヘッド112aの実装順序として、部品種c1〜c4の部品を含むタスク番号Ta1のタスクが実行され、次に、部品種c9〜c12の部品を含むタスク番号Ta2のタスクが実行され、さらにその後、部品種c17〜c20の部品を含むタスク番号Ta3のタスクが実行されることを示す。同様に、実装条件データ156cは、ヘッド112bの実装順序として、部品種c5〜c8の部品を含むタスク番号Tb1のタスクが実行され、次に、部品種c13〜c16の部品を含むタスク番号Tb2のタスクが実行され、さらにその後、部品種c21〜c24の部品を含むタスク番号Tb3のタスクが実行されることを示す。なお、実装条件データ156cは、タスクに含まれる部品ごとに、その部品の実装点も示している。
ヘッド制御部153は、格納部156に格納されているデータに基づいてモータなどを制御することにより、ヘッド112a、112bを移動させたり、そのヘッド112a、112bに部品を吸着させたり、部品を基板20上の実装点に装着させたりする。そして、ヘッド制御部153の動作は、後述する開発支援方法によって開発された制御プログラムによって制御される。
例えば、ヘッド制御部153は、上述の実装条件データ156cを読み出し、ヘッド112a、112bが実装すべきタスクをタスク番号に従って特定するとともに、そのタスクの部品が供給される場所を部品配列に基づいて特定する。そして、ヘッド制御部153は、特定した場所にヘッド112a、112bを移動させ、それらのヘッド112a、112bに部品を吸着させて、その部品に対応する実装点に装着させる。
また、ヘッド制御部153は、ヘッド112aを他方のヘッド112bの動きに応じて制御する。同様に、ヘッド112bを他方のヘッド112aの動きに応じて制御する。つまり、ヘッド制御部153は、制御対象となるヘッド(以下、対象ヘッドという)を、他方のヘッド(以下、相手ヘッドという)の動きに応じて制御する。
ヘッド制御部153は、相手ヘッドが基板20の実装領域上にあるときに、対象ヘッドが突入ポイントに到達すると、対象ヘッドを突入ポイントに待機させておく。そして、相手ヘッドが実装領域上の互いのヘッドが干渉する領域である干渉領域から出ると、対象ヘッドを実装領域上に突入させる。また、ヘッド制御部153は、相手ヘッドが基板20の実装領域上にないときに、対象ヘッドが突入ポイントに到達すると、基本的に、その対象ヘッドを突入ポイントで待機させることなく実装領域上に突入させる。
但し、本実施の形態におけるヘッド制御部153は、対象ヘッドが突入ポイントに到達したタイミングでその対象ヘッドを基板20の実装領域上に突入させることによって、非交互打ちが実行されそうな場合には、その非交互打ちを避けて強制的に交互打ちを実行させるべきか否かを判別する。非交互打ちを避けるべきと判別すると、ヘッド制御部153は、相手ヘッドが実装領域上になくても、相手ヘッドが実装領域上に入って1タスク分の部品を装着してその実装領域上から出るまで、対象ヘッドを突入ポイントに待機させておく。その結果、強制的な交互打ちが実現される。
なお、交互打ちとは、上述のように、基板20へのヘッド112aによる1タスク分の部品の装着と、ヘッド112bによる1タスク分の部品の装着とが交互に行われる動作であって、例えば、「ヘッド112a→ヘッド112b→ヘッド112a→ヘッド112b→・・・」の順で基板20への部品の装着が行われる動作である。また、非交互打ちとは、上述のように、ヘッド112aまたはヘッド112bによる1タスク分の部品の装着が繰り返し連続して行われる動作であって、例えば、「ヘッド112a→ヘッド112b→ヘッド112b→ヘッド112a→・・・」の順で同じヘッドによる部品の装着が連続して行われる動作である。
次に、上記構成のヘッド制御部153の動作を制御するためのプログラムの開発を支援する開発支援方法について説明する。なお、本発明の開発支援方法は、典型的には、コンピュータが実行するプログラム(開発支援プログラム)の形態で提供される。
図9は、本実施の形態に係る開発支援プログラムを実行するコンピュータ10のハードウェア構成を示す図である。コンピュータ10は、図9に示されるように、CPU(Central Processing Unit)11と、ROM(Read Only Memory)12と、RAM(Random Access Memory)13と、入力部14と、表示部15とを主に備える。
CPU11は、ROM12又はRAM13に記憶されているプログラムを実行する。ROM12は、例えば、コンピュータ10の起動時に必要となるプログラム(BIOS等)を記憶している。RAM13は、例えば、各種プログラムを記憶すると共に、CPU11による演算結果の一時記憶領域等としても利用される。本実施の形態に係る開発支援プログラムもRAM13に記憶されている。
なお、RAM13の具体的な構成は特に限定されないが、例えば、DRAM(Dynamic random access memory)、SDRAM(Synchronous dynamic random access memory)、フラッシュメモリ、又は強誘電体メモリ等のデータを記録可能な手段であればどのようなものを利用しても構わない。
入力部14は、ユーザからの入力を受け付けるインタフェースであって、例えば、キーボードやマウス等である。表示部15は、各種情報をユーザに表示するディスプレイである。ディスプレイの具体的な構成は特に限定されないが、例えば、液晶ディスプレイ、プラズマディスプレイ、又は有機EL(Electro Luminescence)ディスプレイ等を採用することができる。
本実施の形態に係る開発支援プログラムは、部品実装機100の駆動部(この例ではヘッド112a、112b)の動作を制御するためのプログラム(以下、「制御プログラム」)の開発を支援するものである。ここで、制御プログラムは、複数のモジュールで構成されている。そして、開発支援プログラムは、制御プログラムのモジュール単位での開発を支援する。
図10を参照して、本実施の形態に係る開発支援プログラムの動作を説明する。図10は、開発支援プログラムの動作を示すフローチャートである。
まず、ユーザによって設計された状態遷移表を取得する(S11)。具体的には、開発支援プログラムは、図11に示されるような入力画面を表示部15に表示し、ユーザからの入力を入力部14を介して受け付ける。図11は、表示部15に表示される画面例を示す図である。図12は、ユーザによって設計された対象モジュールの状態遷移表の一例を示す図である。
なお、状態遷移表とは、例えば、図11及び図12に示されるように、行及び列で構成されるマトリクス状の表である。この状態遷移表の第1行(一番上の行)には、例えば、ヘッド112a、112b等の状態が定義される。また、第1列には、制御プログラムの外部で実行される処理の結果として生じるイベントが定義される。なお、第1列に状態を定義し、第1行にイベントを定義してもよい。さらに、第1行及び第1列以外の各セルには、状態及びイベントの組み合わせに対して、ヘッド112a、112bが実行する動作及びヘッド112a、112bの次の状態が定義される。
ここで、「制御プログラムの外部で実行される処理の結果として生じるイベント」とは、例えば、上位システムからの通信コマンドの結果として生じるイベント、GUI(Graphical User Interface)又は操作スイッチ等のユーザ操作の結果として生じるイベント、駆動部(この例では、ヘッド112a、112b)の動作の結果として生じるイベント、制御プログラムの外部で実行される処理の結果として生じるイベントを擬似的に発生させるプログラムを制御プログラムの内部に予め組み込んでおき、当該プログラムを実行することにより生じるイベント等が該当する。
なお、ヘッド112a、112bの状態とは、例えば図12に示されるように、「停止中」、「部品フィーダ移動中」、「部品吸着中」、「部品吸着認識位置移動中」、「部品認識中」、「部品実装位置移動中」、「部品実装中」、及び「エラー発生中」等である。また、制御プログラムの外部で実行される処理の結果として生じるイベントとは、例えば図12に示されるように、「部品吸着開始」、「部品フィーダ位置移動完了」、「部品吸着完了」、「部品吸着認識位置移動完了」、「部品認識完了」、「部品実装位置移動完了」、「部品実装完了」、「エラー」、及び「エラー復帰」等である。
さらに、状態及びイベントに対応するヘッド112a、112bが実行する動作及びヘッド112a、112bの次の状態とは、第1行の任意のセルから下向きに、第1列の任意のセルから右向きに移動した交点のセルに定義される。
例えば、第1行の「部品フィーダ位置移動中」及び第1列の「部品フィーダ位置移動完了」に対応する動作は「部品吸着()」であり、次の状態は「部品吸着中」である(図12の「(イベントID,状態ID)=(1,1)」のセル)。すなわち、この状態遷移表では、ヘッド112a、112bの状態が「部品フィーダ位置移動中」で、且つ「部品フィーダ位置移動完了」イベントが発生すると、ヘッド112a、112bは、部品吸着処理を実行する。そして、部品吸着処理の結果として、ヘッド112a、112bの状態が「部品吸着中」に遷移する。なお、ヘッド112a、112bは、上述の交互打ち又は非交互打ちが選択されている場合は、状態及びイベントのタイミングはヘッド112a、112b間で異なる。
なお、図11に示される画面には、状態遷移表の「状態」及び「イベント」を入力することができると共に、例えば、複数のボタンスイッチが表示されている。具体的には、「大域変数一覧表自動生成ボタン」、「外部関数一覧表自動生成ボタン」、「ログ出力ファイル設定ボタン」、「テストシナリオ作成ツールボタン」、「テストシナリオ入力ファイル設定ボタン」、「テスト自動実行ボタン」、及び「テストステップ実行ボタン」が表示されている。
大域変数一覧表自動生成ボタンは、例えば、図14に示される大域変数一覧表を作成するためのボタンである。同様に、外部関数一覧表自動生成ボタンは、例えば、図15に示される外部関数一覧表を作成するためのボタンである。これらの処理は、ステップS14で説明する。
ログ出力ファイル設定ボタンは、テスト実行時の時間情報等を含むログの出力先ファイル名を指定するためのボタンである。
テストシナリオ作成ツールボタンは、例えば、図16又は図18に示されるテストシナリオ等を作成するためのツールを起動させるボタンである。ここで作成されるテストシナリオには、例えば、テスト実行時に発生させるイベント及び状態と、テスト実行により期待される状態(テスト実行後の状態)とが含まれる。この処理は、ステップS16(図10参照)で説明する。テストシナリオ入力ファイル設定ボタンは、既に作成されたテストシナリオファイルを選択し、選択したテストシナリオファイルの内容を読み込ませるためのボタンである。
テスト自動実行ボタンは、テストシナリオに沿ってオブジェクトをテスト実行するボタンである。同様に、テストステップ実行ボタンは、オブジェクトを1ステップ毎にテスト実行するためのボタンである。これらの処理は、ステップS17で説明する。
次に、開発支援プログラムは、図12に示される状態遷移表から対象モジュールのソースコードを生成する(S12)。図13は、ステップS12で生成されたソースコードの一例を示す図である。但し、図13では、以降の説明で取り上げられる部分を中心に記述し、それ以外の部分の記述を省略している。
なお、図13において、大域変数(グローバル変数)のstateは、ヘッド112a、112bの状態を特定する状態ID(0〜7)を設定する変数である。また、大域変数(グローバル変数)のeventは、イベントを特定するイベントID(0〜8)を設定する変数である。また、大域変数(グローバル変数)のcntは、1タスクで実装する部品の個数を設定する変数である。さらに、ローカル変数のresultは、例えば、部品実装処理StmCall()内で呼び出される外部関数の戻り値等を設定する変数である。
また、図13において、部品フィーダ移動()は、ヘッド112a、112bを部品供給部(部品フィーダ)115a、115bの所定位置に移動させるための外部関数である。部品吸着()は、ヘッド112a、112bに部品フィーダ上の実装部品を吸着させるための外部関数である。部品吸着認識()は、ヘッド112a、112bに吸着されている部品の状態を部品検査部116a、116bに検査させるための外部関数である。ログ出力()は、指定されたログファイルにログを出力させるための外部関数である。また、例えば、停止()、エラー内容表示()、原点復帰()等は、部品実装処理でエラーが発生した場合の処理を行なう外部関数である。
次に、開発支援プログラムは、ステップS12で生成されたソースコードをコンパイルして、対象モジュールのオブジェクト(以下、「部品実装処理オブジェクト」)を生成する(S13)。なお、ステップS13と、後述するステップS14〜S16とは、どちらを先に実行してもよいし、平行して実行してもよい。
次に、開発支援プログラムは、ステップS12で生成されたソースコードから大域変数及び/又は対象モジュールで呼び出される外部関数の一覧を生成する(S14)。この処理は、例えば、図11の大域変数一覧表自動生成ボタン、及び外部関数一覧表自動生成ボタンを押下したタイミングで実行される。
図14は、ステップS14で生成される大域変数の一覧を示す図である。なお、状態ID(state)は、大域変数の一覧に含まれない。また、図15は、ステップS14で生成される外部関数の一覧を示す図である。なお、図15において、停止()、ログ出力()、原点復帰()、及びエラー内容表示()等の記載は省略している。
次に、開発支援プログラムは、ステップS14で生成される大域変数の一覧(図14)に当該大域変数の取り得る値を、外部関数の一覧(図15)に各外部関数の戻り値の取り得る値を、ユーザにコンピュータ10の入力部14から入力させる(S15)。例えば、図14の例では、大域変数cntの取り得る値に「3」、「2」、「1」、「0」が入力されている。同様に、図15の例では、各外部関数の戻り値として、「0(正常終了であることを示す値)」と、「−1(異常終了であることを示す値)」とが入力されている。
次に、ユーザによって設計されたテストシナリオを取得する(S16)。この処理は、例えば、図11のテストシナリオ作成ツールボタンを押下したタイミングで実行される。テストシナリオ作成ツールボタンを押下すると、例えば、図16に示される表形式の画面がコンピュータ10の表示部15に表示される。
そして、ユーザは、入力部14を介して、大域変数や外部関数の戻り値等のテスト実行時に必要となる値、特に評価したいテストシーケンス等を、図16に示されるようなテストシナリオとして入力する。このテストシナリオには、大域変数の設定値及び/又は外部関数の戻り値を含む。具体的には、図16のテストシーケンスNo.1は、状態ID=0且つイベントID=0の場合において、大域変数cntに「3」が設定されている時に呼び出された外部関数「部品フィーダ位置移動()」は戻り値として「0」を返し、状態ID=1に状態遷移することを示している。
なお、テストシナリオに設定可能な大域変数の設定値及び/又は外部関数の戻り値は、ステップS15で設定した値の範囲に限られる。そこで、ステップS16では、図16の各セルに、ステップS15で設定した値をプルダウンメニュー等でリスト表示し、ユーザに所望の値を選択させるようにするのが望ましい。これにより、テストシナリオの設計が容易になる。
一方、ステップS16において、図11に示されるテストシナリオ入力ファイル設定ボタンが押下された場合、テストシナリオファイルの選択画面が表示される。そして、ユーザが所望のテストシナリオを選択すると、選択されたテストシナリオファイルの内容が読み込まれる。なお、選択されるテストシナリオファイルには、例えば、図16に示されるようなテストシナリオが予め記載されている必要がある。
また、ステップS16において、開発支援プログラムがテストシナリオを自動生成してもよい。具体的には、例えば、開発支援プログラムは、ステップS15で入力された大域変数及び外部関数の戻り値の全ての組み合わせを網羅したテストシナリオを自動生成してもよい。これは、ホワイトボックステスト(経路組み合わせ網羅等)を行なう場合等に有効である。
次に、開発支援プログラムは、ステップS16で設計したテストシナリオに沿って、ステップS13で生成した部品実装処理オブジェクトをテスト実行する(S17)。この処理は、例えば、図11のテスト自動実行ボタンが押下されたタイミングで実行される。
ここで、ステップS16を実行(テストシナリオを設計等)する段階では、ステップS13で部品実装処理オブジェクトのみが生成されており、対象モジュールが呼び出す外部関数のオブジェクトは生成されていない。そこで、開発支援プログラムは、部品実装処理オブジェクトをテスト実行する際に作成されるテストシナリオに従って、例えば、外部関数を実行したものとして外部関数の戻り値に0を設定する等、外部関数の戻り値を置き換えることによってテスト実行する。
図13、図16、及び図17を参照して、部品実装処理オブジェクトをテスト実行する処理を説明する。まず、図16に示されるように、部品実装処理オブジェクトが呼び出される時の大域変数cntの初期値に「3」が設定される。
次に、外部関数である部品フィーダ移動()が呼び出されると、開発支援プログラムは、大域変数cnt=3に対応する外部関数の戻り値「0」を図16のテストシナリオから取得し、変数resultに設定し(S21)、状態IDが「0(停止中)」から「1(部品フィーダ位置移動中)」に遷移する。同様に、開発支援プログラムは、外部関数である部品吸着()及び部品吸着認識()の戻り値として、変数resultに「0」を設定し(S22、S23)、所定の状態IDに遷移する。
次に、1つ目の実装部品の実装が完了、すなわち、状態が「部品実装中」で、且つ「部品実装完了」イベントが発生すると、大域変数cntの値がデクリメントされる(S24)。次に、この時点では大域変数cnt=2(S24でNo)なので、ステップS21〜ステップS24の処理をさらに2回繰り返す。そして、大域変数cnt=0(S24でYes)になると、ヘッド112a、112bを原点に復帰させ(S25)、部品実装処理オブジェクトのテスト実行が終了する。
このように、大域変数及び/又は外部関数の戻り値を含むテストシナリオを定義しておき、部品実装処理オブジェクトのテスト実行時に、テストシナリオに定義された値を各変数に設定することにより、全てのモジュールが完成するのを待つことなく、モジュール単位でのテストが可能となる。また、各テストシーケンスを実行する度に、状態IDがテストシナリオに定義された「遷移先の状態ID」に一致するか否かを判定することにより、正常に動作していることを自動でチェックすることができる。
また、本実施の形態に係る開発支援プログラムは、状態遷移表からソースコードを生成し、ソースコードからオブジェクト、大域変数の一覧、及び/又は、外部関数の一覧を生成し、これらを基にして作成されたテストシナリオに沿って当該オブジェクトのテスト実行を行なう。すなわち、1つのツール上で、開発からテストまでを連携して行なうことが可能となる。
なお、図16及び図17に示されるテストシナリオに代えて、図18及び図19に示すようなテストシナリオを実行することもできる。図18及び図19に示されるテストシナリオは、大域変数cnt=3の時に部品吸着認識()の戻り値が「−1」である点(テストシーケンスNo.4)が図16及び図17に示されるテストシナリオと異なる。
このテストシナリオに沿って部品実装処理オブジェクトをテスト実行すると、部品フィーダ移動(S31)及び部品吸着(S32)は、図17のステップS21〜ステップS22と同じである。一方、部品吸着認識(S33)の戻り値として、resultに「−1」が設定され、停止()、エラー内容表示()等のエラー処理(S34)が実行される点が図17と相違する。なお、エラー発生中から停止中に遷移するのは、状態遷移表に示されるエラー復帰イベント(図12、図20参照)が入力されてからである(図16、図20のテストシナリオでは図示省略)。エラー復帰イベントは、典型的には、人間がエラー確認してから復帰ボタンを押す等の外部からの手動イベントである。
一方、ステップS17において、テストステップ実行ボタンが押下された場合、開発支援プログラムは、ユーザの指示するタイミングで、ソースコードに記述されている命令(ステップ)を1つずつ逐次実行する。より具体的には、ユーザがキーボードのエンターキーを押下するたびに、ソースコードの次のステップを実行する。
このとき、開発支援プログラムは、図20に示されるように、表示部15に状態遷移表を表示し、さらにこの状態遷移表上に、直近に実行された命令に対応する現在位置(この例では「部品吸着認識()」のセル)と、当該現在位置に至るまでの軌跡(この例では、「部品フィーダ位置移動()」、「部品吸着()」、「部品吸着認識位置移動()」のセル)とを表示する。軌跡として表示するセルの数は任意に設定することができる。さらに、図示は省略するが、現在位置における各変数の値等を表示してもよい。
現在位置及び軌跡の表示例は特に限定されないが、例えば、現在位置に相当するセル及び軌跡上のセルの背景色を変更、又はハイライト表示する等、状態遷移表上に表示してもよい。または、状態遷移表とは別項目として表示してもよい。例えば、現在位置の表示例として、図20には、部品吸着認識()のセルがハイライト(網掛け)表示される(図20の「(イベントID,状態ID)=(3,3)」のID位置を参照)と共に、状態遷移表の下に「現在位置:(3,3)」と表示される。また、現在位置に至るまでの軌跡の表示例として、図20には、部品フィーダ一移動()、部品吸着()、部品吸着認識位置移動()の各セルがハイライト(現在位置と異なる網掛け)表示されると共に、状態遷移表の下に、現在のID位置に至るまでの軌跡を表す表示として、「(イベントID,状態ID)」の履歴が「現在位置に至るまでの軌跡:(0,0)→(1,1)→(2,2)」と表示される。
また、状態遷移表上の軌跡としては、ログ出力直前に実行される処理時の状態遷移表における駆動部の状態、及びログ出力時における駆動部の動作によって状態遷移した遷移先の状態等の状態遷移前後の2つの状態を表示してもよい。これにより、ログ出力時の状態遷移前後の状態遷移の軌跡を明確にすることができる。
このように、ステップ実行に合わせて、状態遷移表上の現在位置と、当該現在位置に至るまで状態遷移表上の軌跡とを表示部15に表示させることにより、例えば、部品実装処理オブジェクトが予期せぬ動作(バグ)をした場合でも、容易に原因を特定することができる。
但し、状態遷移表上の現在位置及び現在位置に至るまでの状態遷移表上の軌跡を表示させるのは、部品実装処理オブジェクトをステップ実行した場合に限定されない。例えば、部品実装処理オブジェクトを自動実行した場合において、エラーが発生して停止した場合等に、状態遷移表上の現在位置と、現在位置に至るまでの状態遷移表上の軌跡とを表示部15に表示させてもよい。これにより、エラーの発生原因を容易に特定することができる。
なお、上記の実施の形態においては、駆動部としてヘッド112a、112bの例を説明したが、これに限ることなく、部品実装機100の他の駆動部にも適用することができる。
また、上記の実施の形態においては、実装基板製造装置として部品実装機100の例を説明したが、これに限ることなく、本発明は、印刷機や印刷検査機等の実装基板の製造に用いられるあらゆる装置に適用することができる。
(その他の実施形態)
コンピュータ10は、具体的には、マイクロプロセッサ、ROM、RAM、ハードディスクユニット、ディスプレイユニット、キーボード、マウスなどから構成されるコンピュータシステムである。RAMまたはハードディスクユニットには、コンピュータプログラムが記録されている。マイクロプロセッサが、コンピュータプログラムにしたがって動作することにより、コンピュータ10は、その機能を達成する。
ここでコンピュータプログラムは、所定の機能を達成するために、コンピュータに対する指令を示す命令コードが複数個組み合わされて構成されたものである。なお、各装置は、マイクロプロセッサ、ROM、RAM、ハードディスクユニット、ディスプレイユニット、キーボード、マウスなどの全てを含むコンピュータシステムには限らず、これらの一部から構成されているコンピュータシステムであってもよい。
上記のコンピュータ10を構成する構成要素の一部または全部は、1個のシステムLSI(Large Scale Integration:大規模集積回路)から構成されていてもよい。システムLSIは、複数の構成部を1個のチップ上に集積して製造された超多機能LSIであり、具体的には、マイクロプロセッサ、ROM、RAMなどを含んで構成されるコンピュータシステムである。RAMには、コンピュータプログラムが記録されている。マイクロプロセッサが、コンピュータプログラムにしたがって動作することにより、システムLSIは、その機能を達成する。また、上記のコンピュータ10を構成する構成要素の各部は、個別に1チップ化されていてもよいし、一部又は全てを含むように1チップ化されてもよい。また、ここでは、システムLSIとしたが、集積度の違いにより、IC、LSI、スーパーLSI、ウルトラLSIと呼称されることもある。また、集積回路化の手法はLSIに限るものではなく、専用回路又は汎用プロセッサで実現してもよい。LSI製造後に、プログラムすることが可能なFPGA(Field Programmable Gate Array)や、LSI内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサを利用してもよい。さらには、半導体技術の進歩又は派生する別技術によりLSIに置き換わる集積回路化の技術が登場すれば、当然、その技術を用いて機能ブロックの集積化を行ってもよい。バイオ技術の適用等が可能性としてありえる。
本発明は、上記に示す方法であってもよい。また、これらの方法をコンピュータにより実現するコンピュータプログラムであってもよいし、コンピュータプログラムからなるデジタル信号であってもよい。また、本発明は、コンピュータプログラムまたはデジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、CD−ROM、MO、DVD、DVD−ROM、DVD−RAM、BD(Blu−ray Disc)、半導体メモリなどに記録したものであってもよい。また、これらの記録媒体に記録されているデジタル信号であってもよい。また、本発明は、コンピュータプログラムまたはデジタル信号を、電気通信回線、無線または有線通信回線、インターネットを代表とするネットワーク、データ放送等を経由して伝送するものであってもよい。また、本発明は、マイクロプロセッサとメモリを備えたコンピュータシステムであって、メモリは、上記コンピュータプログラムを記録しており、マイクロプロセッサは、コンピュータプログラムにしたがって動作するものであってもよい。また、プログラムまたはデジタル信号を記録媒体に記録して移送することにより、またはプログラムまたはデジタル信号をネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施してもよい。
以上、図面を参照してこの発明の実施形態を説明したが、この発明は、図示した実施形態のものに限定されない。図示した実施形態に対して、この発明と同一の範囲内において、あるいは均等の範囲内において、種々の修正や変形を加えることが可能である。