FVC06クラス

Namespace: FVIL.Video
Assembly: FVILdevice (in FVILdevice.dll) Version: 3.1.0.0 (3.1.0.5)

Syntax

C#
public class CFviVideoFVC06 : CFviVideo
Visual Basic
Public Class CFviVideoFVC06
	Inherits CFviVideo

Remarks

PCIバス仕様 カメラリンク対応画像入力ボード(FVC06)を操作する為のクラスです。

FVC06 は、カメラリンク規格の Base/Mediumコンフィグレーションに対応した画像入力ボードです。 PCI Rev2.2 に準拠しており 32bit 33/66MHz、+3.3/+5V に対応しています。


■ トピック


Base Configuration と Medium Configuration:

FVC06 では、Base Configuration カメラの場合、CH0 と CH1 の両方に接続することが可能です。 この際、CH0 と CH1 は非同期で使用することが可能です。 また、CH0 と CH1 は同じカメラである必要はありません。 CH0 と CH1 にカメラを2台接続する場合は、 必ず、CFviVideoFVC06 のインスタンスが二つ必要となります。 同一カメラを2台接続する場合にも CFviVideoFVC06 のインスタンスは二つ必要で、 チャネル毎にオープンする必要があります。

Meduim Configuration カメラの場合、カメラ1台を2本のケーブルで接続するため、 FVC06ボード1枚に対して、1カメラ接続することが可能です。 CFviVideoFVC06 のインスタンスは 1 つ必要となります。


[↑戻る]


使用ボードの指定

FVC06が複数枚装着されている画像処理装置の場合、 FVC06上のディップスイッチによるID指定(SW1)と Open(Int32, Int32, Int32)のID指定での組み合わせでオープンされるボードが決定します。

※注) FV2300などの画像処理装置において、複数枚のFVC06が搭載されて出荷される場合、 ID は 0, 1, 2... と順番に割り振られて出荷されます。

Open(Int32, Int32, Int32)のid引数で、-1を指定した場合、 オープン可能な FVC06 の中でディップスイッチの ID が最も若いものをオープンするという意味になります。 ID=0~15 を指定した場合、その値と同じディップスイッチ ID の FVC06 をオープンします。 指定した ID と一致するFVC06がオープン不可能だった場合、エラーが返されます。


[↑戻る]


チャネルの指定:

Base Configuration カメラの場合、チャネルの指定オープン時に行われ、 Open(Int32, Int32, Int32)のch引数で、 -1 を指定した場合、オープン可能なチャネルを CH0 → CH1 に探すということを意味しています。 CH=0~1 を指定した場合、その値のチャネルをオープンします。 指定したチャネルが既にオープン済みの場合、エラーが返されます。 Medium Configuration カメラの場合、CH0 と CH1 の両方のコネクタを使用するため、 チャネルの指定は行えません。CH の値は無視されます。


[↑戻る]


画像取り込み方法(単発取り込み):

単発取り込みとは、カメラから1フレーム入力することです。

GrabImageSync(CFviImage) は、 画像を 1 枚取り込むための関数です。 GrabImageSync(CFviImage) 呼び出し後、 画像取り込みが完了するまで、関数から抜けてきません。

GrabImageASync(CFviImage) は、 画像を 1 枚取り込むための関数で、 GrabImageASync(CFviImage) 呼び出し後、 即関数から抜けてきます。 GrabImageASync(CFviImage) は、 画像取り込み中に別の操作を行うことが可能です。 画像取り込みが完了したことを確認するために、 GrabWait()()()() または GrabStatus を使用します。

前者は、取り込みが完了するまで戻ってきません。 後者は、現在の取り込み状況を調べ、現在取り込み中なのか、取り込みが完了したのかを取得できます。 両関数ともの他の画像入力ボードでも実装されており、もっとも使いやすい画像取り込み関数です。 しかしながら、画像メモリのロックを画像入力ごとに行うため、 大きな画像サイズの場合、オーバーヘッドが生じてしまう場合があります。


[↑戻る]


画像取り込み方法(連続取り込み):

連続取り込みとは取り込み開始時点からフレーム抜けすることなく、連続で画像を入力することです。 CFviContinuousGrabFVC06 は連続取り込み機能をパッケージングしたクラスです。 このクラスの ContinuousGrab プロパティから 連続取り込みクラスのインスタンスを得る事ができます。 取り込み枚数を 1 枚にすることで、単発取り込みを行うことが可能です。 実際に使用する際は、画像メモリのロック→連続取り込みの開始→取り込み完了待ち→画像メモリのアンロックという手順 を踏まなければなりません。

  1. FVC06をオープン(Open()()()())します。 -
  2. 取り込み先の画像オブジェクトのコレクション(List)を Images プロパティ に設定します。 各画像オブジェクトの画像サイズ、BPP、画像タイプを調整しておいてください。 画像メモリのサイズ変更は、 ChangeImageSize(CFviImage) をご利用ください。 -
  3. MemoryLock(UInt32) メソッドで、取り込み先の画像メモリをロックします。 -
  4. 連続取り込みを実行します。
  5. 画像取り込みが終了し、画像メモリのロックが必要なくなった場合は、 画像メモリのアンロック(MemoryUnlock()()()())を 行ってください。 尚、ロックされたまま、画像入力ボードをクローズした場合、自動的にアンロックを行うようになっています。

【連続取り込み開始までの手順】


【連続取り込み中の動作】


[↑戻る]


トリガ動作:

トリガモードは Trigger で行い、 ノーマル、内部トリガ、外部トリガを切り替えることが可能です。 ノーマルモードとは、カメラから常に映像出力される画像を入力するモードの事を言います。 最も基本的な取り込みで、静止した物体の単発取り込みや通常の連続取り込みを行うのに最適です。 移動している物体の単発取り込みは、タイミングを制御するのが難しく、あまり得意ではありません。

内部トリガモードとは、画像入力ボードからトリガ信号をカメラに送り、 そのタイミングでカメラが露光を開始するモードのことを言います。 カメラはトリガモードに設定されていなければなりません。 移動している物体の画像取り込みを得意としていますが、 連続取り込みはフルフレームの速度が出ないためあまり得意ではありません。

外部トリガモードとは、画像入力ボードに対して外部信号(外部センサーなど:TTLレベル)が入ったときに、 カメラに対してトリガ信号を出力し、そのタイミングでカメラが露光を開始するモードのことを言います。 内部トリガは CPU から取り込み開始命令を出すのに対し、外部トリガは外部装置から取り込み開始命令を出す点が違っています。 移動している物体の画像取り込みを得意としていますが、連続取り込みはフルフレームの速度が出ないためあまり得意ではありません。



【内部トリガモード】

取り込み開始命令が呼び出されると、即、最初のトリガ信号がカメラに対して出力されます。 2回目以降のトリガはサイクルタイム設定(TriggerCycleTime) で設定されている値によって、トリガ信号とトリガ信号の間隔が変わってきます。

CycleTimeMode=0 は、カメラの設定がパルス幅トリガモードであることを前提に考えられています。 ほぼ全てのカメラ設定ファイルは、CycleTimeMode=0 をデフォルトとしています。 その為、カメラの設定を「パルス幅トリガモード」に指定する必要があります。 カメラ設定ファイルの[Trigger]CycleTimeには、最小トリガ周期が設定されています。

CycleTimeMode=1 は、FIXトリガモード(エッジプリセレクトモード、スタンダードトリガモードなど、 呼び方は各カメラメーカーによって変わります)を前提としたモードで、 カメラに設定したシャッター時間を考慮して CycleTime を設定する必要があります。 CycleTime が短すぎると、FVC06 から出力されたトリガ信号はカメラ側で無視されてしまう (または、現在取り込み中の画像に問題が発生してしまう)といった現象が起こってしまうため、 最適な時間を設定する必要があります。 時間を考慮して CycleTime を設定する必要があります。



【外部トリガモード(設定値:2)】

Trigger=2 を指定した場合、 フレーム毎に外部トリガ信号を入力して連続取り込みを行います。 外部トリガ信号は、タイムアウト時間以内に入力しないとエラーとなります。 タイムアウト時間はカメラ設定ファイル Video-Timeout で設定可能で、デフォルト5秒となっています。 0 を設定するとタイムアウトなしになります。 タイムアウト時間は、1フレーム単位での最大入力時間の事を言います。 注)ラインセンサの場合、外部トリガモードは、外部トリガモード2(設定値:3)と同じ動作となります。



【外部トリガモード2(設定値:3)】

Trigger=3 を指定した場合、 最初の取り込み開始は外部トリガ信号を待ち、2フレーム目以降は、 サイクルタイムで指定した時間で画像入力を行います。 設定値3は、カメラ設定ファイルでは指定できないため、 Trigger で設定する必要があります。 外部トリガ信号は、タイムアウト時間以内に入力しないとエラーとなります。 タイムアウト時間はカメラ設定ファイル Video-Timeout で設定可能で、デフォルト5秒となっています。 0 を設定するとタイムアウトなしになります。



【トリガマスク期間中のトリガ動作について】

単発取込み外部トリガモード時、トリガマスク期間中に入力されたトリガ (画像取込み命令)は無効になります。 単発取込み内部トリガモード時、トリガマスク期間中でも入力されたトリガ (画像取込み命令)は有効になります。 カメラによって次のトリガを受け付けるまでの期間が異なります。 どちらにしてもカメラ仕様よりも早く次のトリガ(画像取込命令)を入れないようにご注意ください。 ※トリガマスク期間はトリガリトライ期間の設定TriggerCycleTime によって決まります。


[↑戻る]


ラインセンサ画像入力:

FVC06 でのラインセンサカメラ画像入力は、1 フレーム単位での単発取り込みと連続取り込みの2種類をサポートしています。
ラインセンサカメラからは 1 ライン単位での画像出力が行われ、設定されたライン数を画像メモリに取り込まれると 1 フレームとします。
単発取り込みとは、カメラから 1 フレーム分入力することです。
連続取り込みは連続で複数フレームの画像を入力することで、基本的にはフレームとフレームの間のライン抜けはありません。連続取り込みでは無限枚数を指定することが可能です。

1 フレームの入力ライン数は、カメラ設定ファイルの [Video] VerticalSize の値で設定することが可能です。 この値を変更することによって、1 フレーム最大 65534 ラインまで指定することが可能です。 (値は 2 の倍数で指定してください。 また、大きい画像サイズを指定し、メモリの空き連続容量が少ない場合、メモリロックに失敗する場合があります。)
弊社提供のカメラ設定ファイルでは、[Video] VerticalSize の値が比較的小さな値となっていますので、 使用するシステムに合わせて設定してください。

図) フレーム概念


図) ラインセンサ連続取り込み



【ラインセンサにおけるノーマルモードとトリガモード】

「カメラ内部同期モードによる取り込み」
カメラの内部同期モードで画像入力する場合、
Trigger に 0 を指定してください。
カメラの内部同期モードでは、一定周期の LVAL にあわせてデータ出力されます。FVC06 は、その LVAL に合わせて画像入力を行います。



「カメラの外部同期モードによる取込(ライン周期モード)」
カメラの外部同期モード(トリガ動作)を使用する場合は、Trigger で 1~3 の値を指定します。 FVC06 から出力されるライントリガ(以下、LT)に合わせて露光を行い画像を転送します。
ライン周期モードでは、LT と LT の間だけ露光が行われます。
エンコーダと組み合わせてラインセンサを使用する場合は、カメラを外部同期モードで使用してください。



「カメラの外部同期モードによる取込(パルス幅モード)」
カメラの外部同期モード(トリガ動作)を使用する場合は、Trigger で 1~3 の値を指定します。 FVC06 から出力されるライントリガ(以下、LT)に合わせて露光を行い画像を転送します。
パルス幅モードでは、LT の Hi(または Low)の期間だけ露光が行われます。(カメラによっては本設定が存在しないものが有ります)



【エンコーダ信号入力】

ラインセンサカメラの外部同期モードでは、FVC06 からライン単位でトリガを出力する必要があります。
トリガ出力の方法は、大きく分けて二つあり、FVC06 から一定周期で出力するモードと、 エンコーダ信号を FVC06 に入力して、エンコーダ信号の間隔を元に FVC06 からトリガ信号を出力する方法があります。
エンコーダ信号を元に LT を出力することで、画像入力対象物の移動速度が変化した場合でも、 検査対象物の移動速度に合わせ画像入力がおこなえます。

「設置例」

FVC06 はエンコーダ信号を A相 B相 の状態で加算、減算を行います。 また、サンプリング速度は A相(1倍、2倍サンプリング)、A相および B相(4倍サンプリング)から選択可能です。\n 本ボードでは下図のタイミングで CW方向、CCW方向としております。 但し、1倍、2倍サンプリング時は B相の入力を参照しないため CW/CCW 方向の検出が行えません。 \n CW 方向は、B相が A相より 90°遅延して入力される場合とします。この時カウント値は加算されます。

CCW 方向は、A相が B相より 90°遅延して入力される場合とします。この時カウント値は減算されます。

Z相の検出は、Z相のレベルがHである時に A相の立ち上がりエッジが最初に入ったタイミングになります。



「エンコーダ使用時の注意点」
エンコーダを使用してトリガ出力を行う際、カメラの最低トリガ周期を上回るような早さでトリガ出力を行ってはいけません。
必ずカメラには最低トリガ周期が存在し、最低トリガ周期よりも早い間隔でトリガが入った場合、そのトリガは無効となる場合がほとんどですが、 カメラによっては、正常に動作しなくなる場合もあります。



【露光期間出力】

カメラ設定ファイルまたは、 EXP にて、外部端子からの露光期間出力の設定を行う事が可能です。 この際、露光期間出力が、旧説明と逆の動作となっておりました。互換性維持のため、ソフトウェアの変更は行っておりません。正しくは、次の動作となります。

  • [旧] EXPは、Trueを指定した場合、通常状態はLOWで、信号出力時にHIになります。Falseを指定した場合は、通常状態はHIで、信号出力時にLOWになります。 -
  • [新] EXPは、Trueを指定した場合、通常状態はHIで、信号出力時にLOWになります。Falseを指定した場合は、通常状態はLOWで、信号出力時にHIになります。 -


[↑戻る]

Inheritance Hierarchy

System..::..Object
FVIL..::..CFviObject
FVIL.Video..::..CFviVideo
FVIL.Video..::..CFviVideoFVC06

See Also