(57)【要約】【課題】ファームウェアの膨大なテストを少ない工数と時間で可能にする。【解決手段】ファームウェアテスト自動化方法は、対象機器であるエッジセンサの通常の動作時に設定される設定データと、通常の動作時にセンサヘッド１から入力される入力データと、この設定データと入力データに応じたプログラムの実行中にファームウェアが生成するデータである内部変数とに対して、ファームウェアのテスト時に外部のコンピュータ３から強制書き込みする。【選択図】  図１
2008097086.tif 000002
【特許請求の範囲】
【請求項１】
ハードウェア制御用のプログラムであるファームウェアが搭載された対象機器について前記ファームウェアをテストするファームウェアテスト自動化方法において、
前記対象機器の通常の動作時に設定される設定データと、前記対象機器の通常の動作時にセンサから入力される入力データと、この設定データと入力データに応じたプログラムの実行中に前記ファームウェアが生成するデータである内部変数とに対して、前記ファームウェアのテスト時に外部の情報処理装置から強制書き込みする強制書き込み手順を有することを特徴とするファームウェアテスト自動化方法。
【請求項２】
請求項１記載のファームウェアテスト自動化方法において、
前記設定データを入力するキー入力装置あるいは外部のスイッチのオン／オフ入力（デジタル入力）に対応して前記対象機器が複数ビットの入力バッファをソフトウェア的に生成し、
通常の動作時の前記キー入力あるいはデジタル入力については前記キー入力装置あるいはスイッチからの入力に応じて前記対象機器が前記入力バッファの最上位ビットのみに書き込みを行い、
テスト中の前記キー入力あるいはデジタル入力の強制書き込みについては前記情報処理装置が前記入力バッファの複数ビットに書き込みを行うことを特徴とするファームウェアテスト自動化方法。
【請求項３】
請求項１記載のファームウェアテスト自動化方法において、
前記対象機器が前記ファームウェアの実行結果に応じて表示タイミングが異なる２つの表示パターンを書き込む出力バッファをソフトウェア的に生成し、
前記出力バッファの２つの表示パターンを一定時間毎に交互に前記対象機器の表示装置に出力することを特徴とするファームウェアテスト自動化方法。
【請求項４】
請求項３記載のファームウェアテスト自動化方法において、
前記ファームウェアのテスト時に前記情報処理装置が前記対象機器の出力バッファの表示パターンを表示の期待値として読み出すことを特徴とするファームウェアテスト自動化方法。
【請求項５】
請求項１記載のファームウェアテスト自動化方法において、
前記対象機器が前記ファームウェアの実行結果に応じて表示タイミングが異なる２つの表示パターンを書き込む出力バッファ、および前記ファームウェアの実行結果に応じたアナログ出力やデジタル出力の出力データを保持している出力バッファを、前記強制書き込み後に、指定された時間待って読み出し、正しい結果であるか否かを判定する判定手順を有することを特徴とするファームウェアテスト自動化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ファームウェアが搭載された例えばエッジセンサ等の機器についてファームウェアをテストするファームウェアテスト自動化方法に関するものである。
【背景技術】
【０００２】
近年、フィルムやシート等の物品の縁部（エッジ）の位置を検出するエッジセンサが実用化されている（例えば、特許文献１参照）。このエッジセンサは、図１１に示すように、レーザ１０００とコリメータレンズ１００１とからなる投光器１００２から物品１００５に向けて平行光を照射し、物品１００５により遮られなかった平行光を、投光器１００２と対峙させて配置したリニアイメージセンサ等からなる受光器１００３で受光し、エッジ検出部１００４が受光器１００３における平行光の受光領域と非受光領域（遮光領域）との境界を物品１００５のエッジの位置として検出するようにしたものである。
【０００３】
また、最近ではレーザ光等の単色平行光を用い、物品１００５のエッジにおける単色平行光のフレネル回折に着目して、例えばマイクロコンピュータからなるエッジ検出部１００４にて受光器１００３の受光面上における光強度分布から物品１００５のエッジの位置を高精度に検出するエッジセンサも提唱されている。
【０００４】
【特許文献１】特開２００４−１７７３３５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
以上のようなエッジセンサには、数多くの設定項目があり、これらの設定をキー入力で行うが、キー入力どおりに正しく設定されるかを確認したり、設定どおりの動きをするかを確認したりするのに非常に手間がかかるという問題点があった。また、標準機種以外に特定客先向けの製品がたくさんあり、製品毎に評価テストが必要になるという問題点があった。また、製品になる前に客先からサンプル出荷を求められた場合、設計者だけで出荷前のテストを行うために不具合が発生し易く、サンプル出荷した後で不具合が判明すると、ファームウェアを変更する必要があり、ファームウェアを変更する度にテストを繰り返すことになるので、効率が悪いという問題点があった。エッジセンサの機能の大半はファームウェアで実現しているため、不具合を減らすにはファームウェアの評価テストを漏れなく効率良く行うしかないが、従来はファームウェアの評価テストを手動で行っているために、膨大な工数と時間がかかっていた。
【０００６】
また、以上のような問題点は、エッジセンサのファームウェアに限らず、他のファームウェアでも同様に発生する。例えば自動車や携帯電話機、エレベータなどファームウェアに起因する不具合は、社会問題にもなっている。したがって、ファームウェアの評価テストを漏れなく行う必要があるが、これらのファームウェアを手動で行っているために、膨大な工数と時間がかかっていた。
【０００７】
本発明は、上記課題を解決するためになされたもので、ファームウェアの膨大なテストを少ない工数と時間で可能にするファームウェアテスト自動化方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明は、ハードウェア制御用のプログラムであるファームウェアが搭載された対象機器について前記ファームウェアをテストするファームウェアテスト自動化方法において、前記対象機器の通常の動作時に設定される設定データと、前記対象機器の通常の動作時にセンサから入力される入力データと、この設定データと入力データに応じたプログラムの実行中に前記ファームウェアが生成するデータである内部変数とに対して、前記ファームウェアのテスト時に外部の情報処理装置から強制書き込みする強制書き込み手順を有するものである。
また、本発明のファームウェアテスト自動化方法の１構成例は、前記設定データを入力するキー入力装置あるいは外部のスイッチのオン／オフ入力（デジタル入力）に対応して前記対象機器が複数ビットの入力バッファをソフトウェア的に生成し、通常の動作時の前記キー入力あるいはデジタル入力については前記キー入力装置あるいはスイッチからの入力に応じて前記対象機器が前記入力バッファの最上位ビットのみに書き込みを行い、テスト中の前記キー入力あるいはデジタル入力の強制書き込みについては前記情報処理装置が前記入力バッファの複数ビットに書き込みを行うようにしたものである。
また、本発明のファームウェアテスト自動化方法の１構成例は、前記対象機器が前記ファームウェアの実行結果に応じて表示タイミングが異なる２つの表示パターンを書き込む出力バッファをソフトウェア的に生成し、前記出力バッファの２つの表示パターンを一定時間毎に交互に前記対象機器の表示装置に出力するようにしたものである。
また、本発明のファームウェアテスト自動化方法の１構成例は、前記ファームウェアのテスト時に前記情報処理装置が前記対象機器の出力バッファの表示パターンを表示の期待値として読み出すようにしたものである。
また、本発明のファームウェアテスト自動化方法の１構成例は、前記対象機器が前記ファームウェアの実行結果に応じて表示タイミングが異なる２つの表示パターンを書き込む出力バッファ、および前記ファームウェアの実行結果に応じたアナログ出力やデジタル出力の出力データを保持している出力バッファを、前記強制書き込み後に、指定された時間待って読み出し、正しい結果であるか否かを判定する判定手順を有するものである。
【発明の効果】
【０００９】
本発明によれば、対象機器の通常の動作時に設定される設定データと、対象機器の通常の動作時にセンサから入力される入力データと、この設定データと入力データに応じたプログラムの実行中にファームウェアが生成するデータである内部変数とに対して、ファームウェアのテスト時に外部の情報処理装置から強制書き込みすることにより、ファームウェアの膨大なテストを少ない工数と時間で行うことができる。
【００１０】
また、本発明では、設定データを入力するキー入力装置あるいは外部のスイッチのオン／オフ入力（デジタル入力）に対応して対象機器が複数ビットの入力バッファをソフトウェア的に生成し、通常の動作時のキー入力あるいはデジタル入力についてはキー入力装置あるいはスイッチへの入力に応じて対象機器が入力バッファの最上位ビットのみに書き込みを行い、テスト中のキー入力あるいはデジタル入力の強制書き込みについては情報処理装置が入力バッファの複数ビットに書き込みを行うことにより、通常の動作かテスト動作かを判別することなく、また通常のキー入力やデジタル入力か情報処理装置からの強制書き込みかを判別することなく、入力バッファの最上位ビットを調べてオン／オフ状態を判断し、また最上位ビットと１つ下のビットを調べて立ち上がり状態、立ち下がり状態を判断することができる。その結果、立ち上がり、立ち下がり、オン状態、オフ状態を容易に判別することができ、また情報処理装置からの強制書き込みのテスト動作時と通常の動作時の処理に差が出ないようにすることができる。
【００１１】
また、本発明では、対象機器がファームウェアの実行結果に応じて表示タイミングが異なる２つの表示パターンを書き込む出力バッファをソフトウェア的に生成し、出力バッファの２つの表示パターンを一定時間毎に交互に対象機器の表示装置に出力することにより、表示装置の点灯、点滅、消灯の３つの状態を容易に作り出すことができる。
【００１２】
また、本発明では、ファームウェアのテスト時に情報処理装置が対象機器の出力バッファの表示パターンを表示の期待値として読み出すことにより、この期待値を用いてファームウェアの動作が正しいかどうかをテストすることができる。
【発明を実施するための最良の形態】
【００１３】
以下、本発明の実施の形態について図面を参照して説明する。図１は本発明の実施の形態に係るエッジセンサの構成を示すブロック図である。
エッジセンサは、投光器及び受光器を備えたセンサヘッド１と、コントローラ２とから構成される。
【００１４】
コントローラ２は、センサヘッド１と接続されるセンサヘッドインタフェース２０と、設定入力のための複数の入力キーが設けられたコンソール２１と、図示しないプログラマブルコントローラ（ＰＬＣ）等からセンタ設定入力などのデジタル入力を受け付けるデジタル入力インタフェース２２と、情報表示のための複数のＬＥＤが設けられた表示器２３と、エッジセンサが検出した測定対象１０のエッジの位置をアナログ値で出力するためのアナログ出力インタフェース２４と、後述するイベント出力をデジタル出力するためのデジタル出力インタフェース２５と、外部の情報処理装置であるパーソナルコンピュータ３との通信のための例えばＲＳ２３２ＣやＲＳ４８５等の通信インタフェース２６と、予め格納されたソフトウェア（ファームウェア）を実行してエッジセンサの機能を実現するＣＰＵ２７と、ＣＰＵ２７が実行するファームウェアやＣＰＵ２７の実行結果等のデータ、あるいは設定されたデータを記憶する記憶装置２８とを有する。
【００１５】
コンソール２１やデジタル入力インタフェース２２は、設定データを入力する入力装置を構成している。コントローラ２は、ＣＰＵ２７、記憶装置２８およびインタフェース２０，２２，２４〜２６を備えたコンピュータであることは言うまでもない。ＣＰＵ２７は、記憶装置２８に格納されたプログラム（ファームウェア）を実行する。
同様に、コンピュータ３は、ＣＰＵ、記憶装置およびインタフェースを備えた周知の構成をしており、このコンピュータ３のＣＰＵは、記憶装置に格納されたプログラム（テストスクリプト）を実行する。
【００１６】
次に、エッジセンサの設定項目について説明する。エッジセンサには、（ａ）検出距離の設定、（ｂ）受光調整設定、（ｃ）センタ調整設定、（ｄ）平均回数設定、（ｅ）エッジ変化量設定、（ｆ）位置変化時間設定、（ｇ）ＨＩＧＨしきい値設定、（ｈ）ＬＯＷしきい値設定、（ｉ）ヒステリシス幅設定、（ｊ）エッジ変化ホールド設定、（ｋ）エッジの種類設定、（ｌ）アナログ出力設定、（ｍ）汚れしきい値設定、（ｎ）イベント出力アサイン設定、（ｏ）チャンネル間演算定数設定、（ｐ）通信局番設定、（ｑ）通信プロトコル設定、（ｒ）ボーレート設定、（ｓ）パリティ／ストップビット設定、（ｔ）ＥＥＰＲＯＭ書き込み設定、といった多数の設定項目があり、さらにセンサヘッド１を２個使用する場合には、これらが２チャンネル分ある。
【００１７】
（ａ）検出距離の設定では、測定対象１０とエッジセンサ１の受光器間の距離を設定する。
（ｂ）受光調整設定では、センサヘッド１の投光器と受光器間の位置合わせ、及び光量調整を行う。
（ｃ）センタ調整設定では、アナログ出力のセンタを合わせるため、測定データとアナログ出力を対応させるセンタ調整を行う。
（ｄ）平均回数設定では、測定したデータの移動平均を計算する平均回数を設定する。データの移動平均を求めることで、精度を向上させることができる。
【００１８】
（ｅ）エッジ変化量設定では、測定対象１０の端に例えば電極などの突起があるとき、突起に対応してアナログ出力が変化することを防ぐために、突起を読み飛ばしてアナログ出力をホールドするエッジ読み飛ばし機能のための位置変化量を設定する。エッジ読み飛ばしは、測定対象１０のエッジの位置が後述する位置変化時間内に位置変化量以上変化したときに行われる。
（ｆ）位置変化時間設定では、エッジの位置変化を検出するための遅延時間である位置変化時間を設定する。
【００１９】
（ｇ）ＨＩＧＨしきい値設定では、測定データまたはチャンネル間演算データの上限値を設定する。測定データまたは演算データが設定された上限値より大きいときは、この上限値を測定データまたは演算データとして出力する（ＨＩＧＨ出力）。測定データまたは演算データが上限値以下の場合はデータをそのまま出力する（ＰＡＳＳ出力）。
（ｈ）ＬＯＷしきい値設定では、測定データまたはチャンネル間演算データの下限値を設定する。測定データまたは演算データが設定された下限値より小さいときは、この下限値を測定データまたは演算データとして出力する（ＬＯＷ出力）。測定データまたは演算データが下限値以上の場合はデータをそのまま出力する（ＰＡＳＳ出力）。
（ｉ）ヒステリシス幅設定では、ＨＩＧＨ出力またはＬＯＷ出力がオンする値と、ＨＩＧＨ出力またはＬＯＷ出力がオフする値の差を設定する。
【００２０】
（ｊ）エッジ変化ホールド設定では、測定対象１０のエッジの位置が急激に変化してエッジ読み飛ばし機能が働いたときにアナログ出力をホールドするか否かを設定する。
（ｋ）エッジの種類設定では、測定対象１０の透明／不透明と、測定対象１０がエッジセンサ１の検出エリアに入ってくる方向を設定する。
（ｌ）アナログ出力設定では、アナログ出力のレンジや極性を設定する。
（ｍ）汚れしきい値設定では、測定対象１０の汚れや外乱光などで正常に測定ができないときに汚れ有りと判断して、汚れ出力をオンにしアラームを出す汚れ検出のためのしきい値を設定する。
（ｎ）イベント出力アサイン設定では、２チャンネルの測定データまたはチャンネル間演算データのホールド出力、汚れ出力、ＨＩＧＨ出力、ＰＡＳＳ出力、ＬＯＷ出力のうちどのデータをデジタル出力するかを設定する。
【００２１】
（ｏ）チャンネル間演算定数設定では、２つのチャンネルのデータ間で例えば加算、減算、平均などの演算を行う際の定数を設定する。
（ｐ）通信局番設定は、エッジセンサ（コントローラ２）の機器アドレスを設定する。
（ｑ）通信プロトコル設定では、通信プロトコルを選択する。
（ｒ）ボーレート設定では、通信のボーレートを設定する。
（ｓ）パリティ／ストップビット設定では、通信のパリティビットとストップビットを設定する。
（ｔ）ＥＥＰＲＯＭ書き込み設定では、記憶装置２８内のＥＥＰＲＯＭに設定を保存するか否かを選択する。
【００２２】
エッジセンサでは、以上のような設定の内容に応じて測定対象１０のエッジの位置を検出する。図２、図３はエッジセンサの測定時の動作を示すフローチャートである。なお、図２、図３では、記載を簡略化するため１チャンネル分についてのみ記載している。
【００２３】
まず、測定が開始され、センサヘッド１の投光器と受光器間に測定対象１０が挿入されると、受光器で受光した光量（アナログ値）がコントローラ２のセンサヘッドインタフェース２０に入力される。このアナログ値は、センサヘッドインタフェース２０で光量データにＡ／Ｄ変換される。
コントローラ２のＣＰＵ２７は、この光量データを読み出し（ステップＳ１）、正規化して（ステップＳ２）、さらにフィルタ処理してノイズ等を除去する（ステップＳ３）。こうして、正規化光量データＤ１が得られる。
【００２４】
続いて、ＣＰＵ２７は、正規化光量データＤ１に対してフレネル回折補間処理を行い、実位置データＤ２を得る（ステップＳ４）。このフレネル回折補間処理は、画素数の少ないリニアイメージセンサ（受光器）を使って投光器からのレーザ平行光を受光した際に、所定の近似式を用いて、より画素数の多い高精度な光量分布パターンを求める補間処理である。
フレネル回折補間処理後、ＣＰＵ２７は、汚れしきい値設定で設定された汚れ検出しきい値と実位置データＤ２を用いて汚れ検出処理を行う（ステップＳ５）。
【００２５】
汚れ検出処理後、ＣＰＵ２７は、実位置データＤ２に対してスパン調整処理を行い、現在位置データＤ３を得る（ステップＳ６）。
続いて、ＣＰＵ２７は、エッジ読み飛ばし機能のために、現在位置データＤ３を、位置変化時間設定で設定された位置変化時間だけ遅らせる遅延処理を行い、遅延位置データＤ４を得る（ステップＳ７）。
【００２６】
そして、ＣＰＵ２７は、現在位置データＤ３と遅延位置データＤ４とエッジ変化量設定で設定された位置変化量に基づいて、測定対象１０のエッジの位置が位置変化時間内に位置変化量以上変化したか否かを判定し、エッジ位置が急激に変化したと判定した場合にはこの変化を読み飛ばして出力をホールドする読み飛ばし処理を行い、ホールド出力Ｄ５を得る（ステップＳ８）。
次に、ＣＰＵ２７は、現在位置データＤ３と遅延位置データＤ４と平均回数設定で設定された平均回数を用いて、データの移動平均を計算する平均化処理を行い、平均化位置データＤ６を得る（ステップＳ９）。
【００２７】
平均化処理後、ＣＰＵ２７は、センタ調整設定で設定されたセンタ調整パラメータを用いて、平均化位置データＤ６のセンタ調整を行い、センタ調整位置データＤ７を得る（ステップＳ１０）。
センタ調整処理後、ＣＰＵ２７は、センタ調整位置データＤ７に対して、アナログ出力設定で設定された測定レンジに従って、センタ調整位置データＤ７のレンジを制限するリミット処理を行い、測定データＤ８を得る（ステップＳ１１）。
【００２８】
次に、ＣＰＵ２７は、チャンネル間演算を行う場合、２つのチャンネルの測定データＤ８とチャンネル間演算定数設定で設定された演算定数を用いて、加算、減算、平均などのチャンネル間演算を行い、演算データＤ９を得る（ステップＳ１２）。
【００２９】
そして、ＣＰＵ２７は、ＨＩＧＨしきい値設定で設定された上限値とＬＯＷしきい値設定で設定された下限値に基づいて、測定データＤ８に対して上下限判定処理を行う（ステップＳ１３）。ＣＰＵ２７は、測定データＤ８が上限値より大きい場合は上限値を出力し（ＨＩＧＨ出力）、測定データＤ８が下限値より小さい場合は下限値を出力し（ＬＯＷ出力）、測定データＤ８が下限値以上で、かつ上限値以下の場合はデータをそのまま出力する（ＰＡＳＳ出力）。
同様に、ＣＰＵ２７は、演算データＤ９に対して上下限判定処理を行う（ステップＳ１４）。
【００３０】
次に、ＣＰＵ２７は、イベント出力アサイン設定で設定された内容に従って、２チャンネルの測定データＤ８または演算データＤ９のホールド出力、汚れ出力、ＨＩＧＨ出力、ＰＡＳＳ出力、ＬＯＷ出力の中から出力すべきデータを選択して、デジタル出力Ｄ１０を得る（ステップＳ１５）。選択されたデータは、デジタル入力インタフェース２５を通じて外部に出力される。
また、ＣＰＵ２７は、演算データＤ９に対して、アナログ出力設定で設定された測定レンジに従ってリミット処理を行い、演算出力データＤ１１を得る（ステップＳ１６）。
【００３１】
次に、ＣＰＵ２７は、アナログ出力設定で設定された内容に従って、測定データＤ８または演算出力データＤ１１のうち何れか一方を選択する（ステップＳ１７）。選択されたデータは、アナログ出力インタフェース２４でＤ／Ａ変換され（ステップＳ１８）、アナログ出力Ａ１として出力される。選択されたデータが測定データＤ８であれば、アナログ出力Ａ１は測定対象１０のエッジの位置を示している。こうして、エッジセンサの測定時の動作が終了する。
【００３２】
以上のような測定を行うには、コンソール２１から前記のような各種設定を行うが、パラメータが指定桁数入力されているかどうか、イリーガルな数値を除外しているかどうか、設定されたとおりの動作になっているかどうか等をテストする必要がある。以下、このようなテストを自動化する本実施の形態のファームウェアテスト自動化方法について説明する。
【００３３】
まず、本実施の形態では、コントローラ２のファームウェアに機能を追加して、前記の設定データを入力するキー入力や外部のスイッチ等のオン／オフ入力（デジタル入力）と各種データ（内部変数）に対して、コンピュータ３から通信インタフェース２６を介して強制書き込みができるようにした。強制書き込みができる内部変数としては、図２、図３に示したデータのうち、実位置データＤ２、現在位置データＤ３、遅延位置データＤ４、平均化位置データＤ６、センタ調整位置データＤ７、測定データＤ８、演算データＤ９、演算出力データＤ１１がある。受光器からのアナログ光量は膨大なデータ量になるため、強制書き込みが難しい。したがって、本実施の形態の自動テストは、実位置データＤ２以降から行われる。
【００３４】
次に、本実施の形態の自動テストにおいて、データの強制書き込みや読み出しあるいはエラーチェックなどテストの内容を作業者がコンピュータ３に対して指示するためのプログラムであるテストスクリプトの１例を図４に示す。図４において、４０は命令、４１はパラメータ、４２は遅延時間、４３は表示器２３のＬＥＤ表示の期待値である。
【００３５】
図５はコンソール２１に設けられた入力キーの１例を示す図である。ＤＩＳＰキーはチャンネルを切り替えるためのキー、ＰＡＲＡキーは調整やパラメータ設定に移行するためのキー、ＲＵＮキーはＲＵＮモードに移行するためのキー、アップキーは数値を増加させるためのキー、ダウンキーは数値を減少させるためのキー、ＥＮＴキーはパラメータ変更した数値を確定するためのキーである。
【００３６】
図４に示した命令４０のうち、ＩＮＩは初期化（工場出荷時設定に戻す）ことを命令するものであり、ＫＥＹはコンソール２１の６つの入力キー、すなわちＤＩＳＰキー、ＰＡＲＡキー、ＲＵＮキー、ＵＰキー、ＤＯＷＮキー、ＥＮＴキーの操作と同じ状態を作り出すことを命令するものである。また、ＳＥＴは内部変数に強制書き込みすることを命令するものであり、ＣＨＫは内部変数や出力バッファの内容をチェックすることを命令するものである。
【００３７】
パラメータ４１には、キー入力の種類や、内部変数のアドレス、内部変数あるいは出力バッファの番号が記述される。例えば図４における「ＫＥＹ：ＰＡＲＡ」はＰＡＲＡキーの入力を命令するものであり、「ＳＥＴ：９９６１Ｗ＝０１５０００」はアドレス９９６１Ｗで指定される内部変数に０１５０００という値を強制書き込みすることを命令するものであり、「ＣＨＫ：１００４Ｗ＝０１５０００」はアドレス１００４Ｗで指定される内部変数の値が０１５０００かどうかをチェックすることを命令するものである。
【００３８】
遅延時間４２は、命令が実行されてから結果を確認または格納するまでの待ち時間である。遅延時間４２を設定する理由は、キー入力や内部変数に強制書き込みしてから、実際に結果が表れるまでに時間のかかる処理があるため、すぐにＬＥＤの状態や内部変数、出力バッファを読み出すと正しい結果になっていない可能性があるからである。したがって、遅延時間４２で指定された時間だけ待ってから結果を読み出すことになる。
なお、ＬＥＤ表示の期待値４３については後述する。
【００３９】
強制書き込みでは、通常の入力を止めてコンピュータ３からの書き込みを優先させるため特殊な書き込みコマンドが必要である。コントローラ２のファームウェアとしては、各レジスタに強制ビット領域を設け、この強制ビットがセットされている場合には、該当するキーや外部のスイッチ等のオン／オフ入力、内部変数について、通常のキー入力や、デジタル入力、内部変数の書き込みをスキップする処理を追加するだけで良い。
【００４０】
キー入力やデジタル入力では、オフからオンへの立ち上がり、オンからオフへの立ち下がり、オン状態、オフ状態の４通りの状態があるため、これらの状態を通信で疑似入力しようとすると、例えば状態をコード化する等の煩雑な処理が必要になる。
そこで、キー入力やデジタル入力については、コントローラ２のファームウェアで図６に示すような１６ビットの入力バッファ５０をソフトウェア的に実現し、入力バッファ５０のビット１５（最上位ビット、以下、ＭＳＢとする）に現在の状態を格納し、その他のビットに過去の状態を格納するように取り決めておけば、キー入力やデジタル入力について立ち上がり、立ち下がり、オン状態、オフ状態を判別することができ、またコンピュータ３からの強制書き込みと通常のキー入力やデジタル入力で処理に差が出ないようにすることができる。
【００４１】
このような入力バッファ５０を２点のデジタル入力とＤＩＳＰキー、ＰＡＲＡキー、ＲＵＮキー、ＵＰキー、ＤＯＷＮキー、ＥＮＴキーの各入力キー毎に生成する。図６の例では、ＤＯＷＮキーの例について示している。
コンソール２１上の入力キーが操作された場合、コントローラ２のＣＰＵ２７は、この入力キーに該当する入力バッファ５０のＭＳＢのみに「１」を書き込む。
【００４２】
一方、コンピュータ３からの強制書き込みでキー入力やデジタル入力を擬似的に行う場合、コンピュータ３のＣＰＵは、テストスクリプトに従って、該当する入力バッファ５０に８０００Ｈ（最後のＨは１６進数表記であることを示す）を書き込む。例えばテストスクリプトに「ＫＥＹ：ＰＡＲＡ」と記述されていた場合には、ＰＡＲＡキーの入力バッファ５０に８０００Ｈを書き込むことになる。これにより、キー入力やデジタル入力の立ち上がりを表現することができる。一方、立ち下がりを入力する場合には、入力バッファ５０に７ＦＦＦＨを書き込むようにすればよい。
【００４３】
コントローラ２のファームウェアの一部である、入力バッファを処理するプログラムとしては、通常の測定かテストかを判別することなく、また通常のデジタル入力やキー入力かコンピュータ３からの強制書き込みかを判別することなく、各入力バッファ５０のＭＳＢを調べて該当するキー入力やデジタル入力のオン／オフ状態を判断し、またＭＳＢとビット１４を調べて該当するキー入力やデジタル入力の立ち上がり状態、立ち下がり状態を判断するようにしておけばよい。このキー入力やデジタル入力の状態を判断する入力処理後に、各入力バッファ５０を算術右シフト（ＭＳＢをそのままにして右シフト）すれば、同じ立ち上がり、立ち下がり入力が誤って２度実行されることはない。
【００４４】
なお、前述のとおり、各入力バッファ５０毎に設けられた強制ビット５１がセットされている場合には、コンピュータ３からの強制書き込みを優先し、通常のキー入力やデジタル入力があったとしても、入力バッファ５０に書き込みしないようにする。
以上のような入力バッファを設けない場合には、オンとオフの２回の書き込みを行わないと動作しないとか、同じキーが何度も押された状態になってしまうとかいった問題が起きて、このような問題を回避するために複雑な処理を追加することになり、通常の入力と強制書き込みで差がでてしまい、ＣＰＵの負荷も増えるといった問題が生じる。
【００４５】
次に、本実施の形態では、コントローラ２のファームウェアで図７（Ａ）に示すような１６ビットの出力バッファ７０をソフトウェア的に実現し、表示器２３の７セグメントＬＥＤや個別ＬＥＤを点灯させる最終段のバッファで０．２５秒ごとに交互にポート出力してＬＥＤの点滅も分かるようにした。
【００４６】
図８は表示器２３に設けられたＬＥＤの配置の１例を示す図である。表示器２３には、４個の上段７セグメントＬＥＤ２３０と、４個の下段７セグメントＬＥＤ２３１と、８個の個別ＬＥＤ２３２が設けられている。上段の７セグメントＬＥＤ２３０は、測定したエッジ位置をｍｍ単位で表示し、またエラーが発生したときは、エラーコードを点滅表示する。下段の７セグメントＬＥＤ２３１は、センサヘッド１を２組使用するときにチャンネル２のエッジ位置を表示する。また、パラメータを表示するときは、最上位桁が機能番号を表し、下３桁が設定内容を表す。
【００４７】
ＣＨ１，ＣＨ２の個別ＬＥＤ２３２の点灯はそれぞれチャンネル１、チャンネル２が選択されていることを表し、ＣＨ１，ＣＨ２の点滅はそれぞれチャンネル１、チャンネル２にエラーが発生していることを表す。ＥＶ１〜ＥＶ４は割り付けられたイベントがオンしたときに点灯し、ＲＵＮは、ＲＵＮモード時に点灯し、調整モード時に点滅する。また、ＡＬＭは異常があるときや操作エラーの場合に点滅する。
【００４８】
図７（Ａ）に示したような出力バッファ７０を４個の上段７セグメントＬＥＤ２３０の各７セグメントＬＥＤ毎、４個の下段７セグメントＬＥＤ２３１の各７セグメントＬＥＤ毎、個別ＬＥＤ２３２は８個なので全体で１個生成する。したがって、図８の表示器２３の場合には、４＋４＋１＝９個の出力バッファ７０が存在することになる。図７（Ａ）の例では、４個の上段７セグメントＬＥＤ２３０のうちの１個の７セグメントＬＥＤについて示している。
コントローラ２のＣＰＵ２７は、ファームウェアを実行して、所定のＬＥＤ表示を行うべきときに該当する出力バッファに値を書き込む。どのようなＬＥＤ表示を行うかは、予めエッジセンサの機能として定められている。
【００４９】
１６ビットの出力バッファ７０のビット０〜ビット７は０．２５秒経過時に出力する７セグメントＬＥＤの状態を表しており、ビット８〜ビット１５は０．５秒経過時に出力する７セグメントＬＥＤの状態を表している。そして、図７（Ａ）、図７（Ｂ）に示すようにビット０〜ビット７は７セグメントＬＥＤのそれぞれセグメントｓｅｇ１〜ｓｅｇ８の状態を表し、同様にビット８〜ビット１５はそれぞれセグメントｓｅｇ１〜ｓｅｇ８の状態を表している。
【００５０】
そして、出力バッファ７０のビット０〜ビット７とビット８〜ビット１５を０．２５秒毎に交互に表示器２３の対応するＬＥＤドライバに出力すれば、該当する７セグメントＬＥＤの点灯、点滅、消灯の３つの状態を作り出すことができる。つまり、ビット０〜ビット７とビット８〜ビット１５において、同一のセグメントに対応するビット（例えばビット０とビット８）が共に「１」の場合には、そのセグメントは点灯し、同一のセグメントに対応するビットが異なる場合には、そのセグメントは点滅し、同一のセグメントに対応するビットが共に「０」の場合には、そのセグメントは消灯する。したがって、例えば出力バッファ７０のビット１５〜ビット０が「００１１１１１１００００００００」であれば、数字の０が点滅表示されることになる。
【００５１】
こうして、出力バッファ７０に表示パターンを２つ持たせ、この２つの表示パターンを割り込み処理で交互に出力することにより、ＬＥＤの点灯、点滅、消灯の３つの状態を作り出すことができる。
なお、７セグメントＬＥＤ２３０，２３１の場合は１６ビットの出力バッファ７０が必要であるが、８個の個別ＬＥＤ２３２についてはそれぞれ２ビットの出力バッファがあればよい。その理由は、０．２５秒経過時に出力する１ビットと０．５秒経過時に出力する１ビットがあればよいからである。この２ビットが「１１」であれば、個別ＬＥＤは点灯し、「１０」または「０１」であれば点滅し、「００」であれば消灯することになる。
【００５２】
次に、図４に示したＬＥＤ表示の期待値４３について説明する。期待値４３は、各出力バッファの状態を、対応するＬＥＤの状態で表現したものである。図４の期待値４４，４５は、４個の上段７セグメントＬＥＤ２３０の出力バッファ７０に対応するものである。期待値４４，４５はそれぞれ４個の値からなり、左端の値、左から２番目の値、左から３番目の値、右端の値はそれぞれ左端、左から２番目、左から３番目の値、右端の７セグメントＬＥＤ２３０の状態を表している。また、期待値４４は出力バッファ７０のビット０〜ビット７の状態を表し、期待値４５はビット８〜ビット１５の状態を表している。
【００５３】
したがって、例えば期待値４４，４５がそれぞれ「１５００」であったとすれば、左端の７セグメントＬＥＤ２３０に対応する出力バッファ７０のビット１５〜ビット０は文字“１”を示す「０００００１１００００００１１０」、左端から２番目の７セグメントＬＥＤ２３０に対応する出力バッファ７０のビット１５〜ビット０は文字“５”を示す「０１１０１１０１０１１０１１０１」、左端から３番目の７セグメントＬＥＤ２３０に対応する出力バッファ７０のビット１５〜ビット０は文字“０”を示す「００１１１１１１００１１１１１１」、右端の７セグメントＬＥＤ２３０に対応する出力バッファ７０のビット１５〜ビット０も文字“０”を示す「００１１１１１１００１１１１１１」である。
【００５４】
同様に、期待値４６，４７は、４個の下段７セグメントＬＥＤ２３１の出力バッファ７０に対応するものである。期待値４６，４７はそれぞれ４個の値からなり、左端の値、左から２番目の値、左から３番目の値、右端の値はそれぞれ左端、左から２番目、左から３番目の値、右端の７セグメントＬＥＤ２３１の状態を表している。また、期待値４６は出力バッファ７０のビット０〜ビット７の状態を表し、期待値４７はビット８〜ビット１５の状態を表している。
【００５５】
期待値４８，４９，５０，５１，５２，５３，５４，５５は、それぞれＣＨ１，ＣＨ２，ＥＶ１，ＥＶ２，ＥＶ３，ＥＶ４，ＲＵＮ，ＡＬＭの各個別ＬＥＤ２３２の出力バッファに対応するものである。これらの期待値はそれぞれ２ビットで、２ビットの出力バッファの状態を示している。
【００５６】
以上のような期待値４３（４４〜５５）は、テストスクリプトに記述されている命令を実行した後、この命令と同一行に記述されている遅延時間だけ待ってから、出力バッファを読みにいって、出力バッファの状態を該当する期待値４４〜４５の箇所に記述したものである。このように、ＬＥＤ表示の期待値４３は、テストの実行によって自動的に生成される。自動生成する理由は、人が期待値４３を記述しようとすると非常に手間がかかるからである。
【００５７】
従来、ＬＥＤを点滅させるには、ＬＥＤの表示パターンと点滅有無フラグを用意して、点滅有無フラグを見て、点滅モードであれば割り込み処理の中で一時ＬＥＤをオフにするといった処理をしていた。
一方、本実施の形態では、出力バッファに表示パターンを２つ持たせ、この２つの表示パターンを一定時間毎に交互に出力するだけでよい。
【００５８】
また、本実施の形態では、ファームウェアのテストを行う場合、出力バッファの状態を読み出して期待値と一致するかどうかをチェックするだけでよく、点灯か点滅か消灯かを識別する必要がない。
これに対して、従来の方法では、表示パターンと点滅有無フラグに分かれているため、表示パターンと点滅有無フラグを通信で同時に読み出せない可能性があり、時間的にずれて読み出すと、期待値と一致しない等の矛盾が生じる可能性があった。
【００５９】
次に、テストスクリプトの生成方法について説明する。図９はテストスクリプトの生成とテストの実行を行うコンピュータ３の画面の１例を示す図である。図９に示すように、コンピュータ３の画面には、コンソール２１に対応するキー入力部９０と、表示器２３に対応するＬＥＤ表示部９１と、テストスクリプトを表示するスクリプト表示部９２と、内部変数や出力バッファのアドレスを入力するためのアドレス入力欄９３と、内部変数の値を入力するためのデータ入力欄９４と、遅延時間を入力するための遅延時間入力欄９５と、内部変数のアドレスや内部変数の値をＳＥＴ命令に記述するための強制書き込みボタン９６と、ＣＨＫ命令を生成するためのチェックスクリプト生成ボタン９７と、テストを開始するキー操作再生ボタン９８などが表示されている。
【００６０】
作業者は、このような画面に対して操作を行うことにより、図４に示したテストスクリプトを作成する。
テストスクリプトの作成後に、作業者がキー操作再生ボタン９８を操作すると、コンピュータ３のＣＰＵは、テストスクリプトを実行して結果をスクリプト表示部９２に表示する。
【００６１】
テストの実行時、コンピュータ３のＣＰＵは、テストスクリプトのＫＥＹ命令やＳＥＴ命令に従って、コントローラ２のキー入力やデジタル入力の入力バッファ、あるいは内部変数に対して強制書き込みを行う。
コントローラ２のＣＰＵ２は、強制書き込みされた値に応じて、図２、図３に示したような一連の処理を実行していく。
【００６２】
そして、コンピュータ３のＣＰＵは、テストスクリプトの命令を実行した後、この命令と同一行に記述されている遅延時間だけ待ってから、コントローラ２の出力バッファを読みにいって、出力バッファの状態をテストスクリプトの該当するＬＥＤ表示の期待値に書き込む。
【００６３】
また、テストスクリプトにＣＨＫ命令が記述されている場合、コンピュータ３のＣＰＵは、このＣＨＫ命令と同一行に記述されている遅延時間だけ待ってから、ＣＨＫ命令の後のパラメータ４１に記述されたアドレスで指定される内部変数の値が同パラメータ４１に記述されている値（パラメータ４１の「＝」以降の数値）どおりかどうかをチェックし、また出力バッファの値がＬＥＤ表示の期待値どおりかどうかをチェックする。
【００６４】
なお、ＬＥＤ表示の期待値は始めはテストスクリプトに記述されておらず、テストの実行によって自動生成されたものであるから、最初のテストでは出力バッファの値が正しいかどうかをチェックすることはできない。最初のテストでは、ＬＥＤ表示の期待値が正しいかどうかを作業者がチェックする必要がある。一度実行したテストスクリプトを使用して、再度テストを行う場合には、期待値はチェック済みなので、この期待値を使ってファームウェアの動作が正しいかどうかをチェックすることができる。
【００６５】
図１０にテストの実行結果の１例を示す。図１０の例では、トータル７２行のチェックで、７１行目にエラーが発生したことが分かる。また、７１行目（「ＣＨＫ：００６８Ｗ・・・・」の行）はＬ１とＬ２の２行表示されており、Ｌ１が内部変数と出力バッファの値を読み出した実行結果、Ｌ２がテストスクリプトに記述されていたものである。図１０の例では、内部変数の値は一致しているが、ＬＥＤ表示の期待値が一致していないために、エラーが発生したことが分かる。このような実行結果は、実行結果ファイルとしてコンピュータ３の記憶装置に保存される。また、実行結果ファイルからエラー箇所だけ削除して、新たな期待値を付加したテストスクリプトを作成することもできる。
【００６６】
以上のように、本実施の形態では、設定データと内部変数に対して、コンピュータ３から強制書き込みすることにより、ファームウェアの膨大なテストを少ない工数と時間で行うことができ、評価工数や評価時間を大幅に削減することができる。エッジセンサでは、ファームウェアのテストが例えば数万ステップに達する。仮に、数万ステップの操作をキーやデジタル入力といった手動操作で確かめようとすると、膨大な日数がかかり、また見落としも発生する可能性がある。これに対して、本実施の形態では、キー入力やデジタル入力をコンピュータ３からの疑似入力に置き換えることができ、また一度作成したテストスクリプトをコピー＆ペーストして数万ステップのテストを行うことができるので、テストに要する時間を大幅に短縮することができる。テストパターンは繰り返しが多いので、１つのテストパターンをコピー＆ペーストしてステップ数を増やしていくことが可能である。また、標準機種以外の特定客先向けの製品であっても、共通部分のテストスクリプトはそのまま使えるので、評価工数を大幅に削減することができる。
【００６７】
また、本実施の形態では、設定データや内部変数の強制書き込みを実現することにより、意図的に誤った値や境界値を入力してファームウェアの挙動を調べることができるので、評価の質を向上させることができる。また、本実施の形態では、計算途中の内部変数に強制書き込みできるため、センサヘッドがなくてもテストを行うことができ、間違っている箇所を特定することができる。
また、本実施の形態では、入出力バッファの構造を工夫したことにより、テスト時と通常の動作で処理に差を設ける必要がなく、テスト用に追加したファームウェアも最小限で済み、ＣＰＵ負荷もない。
【００６８】
なお、本実施の形態では、図９に示したコンピュータ３の画面に結果を表示しながら実行するが、表示しながらの実行だと指定遅延時間で実行できない場合もあるので、バッチファイルで実行して、結果をファイルに残すようにしてもよい。
【産業上の利用可能性】
【００６９】
本発明は、例えばエッジセンサで用いるファームウェアを自動的にテストする技術に適用することができる。
【図面の簡単な説明】
【００７０】
【図１】本発明の実施の形態に係るエッジセンサの構成を示すブロック図である。
【図２】本発明の実施の形態のエッジセンサの測定時の動作を示すフローチャートである。
【図３】本発明の実施の形態のエッジセンサの測定時の動作を示すフローチャートである。
【図４】本発明の実施の形態の自動テストで用いるテストスクリプトの１例を示す図である。
【図５】本発明の実施の形態のエッジセンサのコンソールに設けられた入力キーの１例を示す図である。
【図６】本発明の実施の形態のエッジセンサにおける入力バッファの構造を示す図である。
【図７】本発明の実施の形態のエッジセンサにおける出力バッファの構造及び出力バッファに対応する７セグメントＬＥＤを示す図である。
【図８】本発明の実施の形態のエッジセンサの表示器に設けられたＬＥＤの配置の１例を示す図である。
【図９】本発明の実施の形態においてテストスクリプトの生成とテストの実行を行うコンピュータの画面の１例を示す図である。
【図１０】本発明の実施の形態におけるテストの実行結果の１例を示す図である。
【図１１】従来のエッジセンサの１構成例を示すブロック図である。
【符号の説明】
【００７１】
１…センサヘッド、２…コントローラ、３…パーソナルコンピュータ、１０…測定対象、２０…センサヘッドインタフェース、２１…コンソール、２２…デジタル入力インタフェース、２３…表示器、２４…アナログ出力インタフェース、２５…デジタル出力インタフェース、２６…通信インタフェース、２７…ＣＰＵ、２８…記憶装置、５０…入力バッファ、７０…出力バッファ。
【図１】
2008097086.tif 000003
【図２】
2008097086.tif 000004
【図３】
2008097086.tif 000005
【図４】
2008097086.tif 000006
【図５】
2008097086.tif 000007
【図６】
2008097086.tif 000008
【図７】
2008097086.tif 000009
【図８】
2008097086.tif 000010
【図９】
2008097086.tif 000011
【図１０】
2008097086.tif 000012
【図１１】
2008097086.tif 000013