.NETアセンブリ
eGrabberは、という.NETアセンブリを介して.NET言語(C#、VB.NETなど)で使用できます。
最初の例
この例では、グラバーを作成し、それに含まれるインターフェース、デバイス、およびリモートデバイスモジュールに関する基本情報を表示します。これは、C++言語によるEGrabber
の最初の例をC#バージョンに書き換えたものです。
using System;
namespace FirstExample {
class ShowInfo {
const int CARD_IX = 0;
const int DEVICE_IX = 0;
static void showInfo() {
using (Euresys.EGenTL gentl = new Euresys.EGenTL()) { // 1
using (Euresys.EGrabberCallbackOnDemand grabber =
new Euresys.EGrabberCallbackOnDemand(gentl, CARD_IX, DEVICE_IX)) { // 2
String card = grabber.getStringInterfaceModule("InterfaceID"); // 3
String dev = grabber.getStringDeviceModule("DeviceID"); // 4
long width = grabber.getIntegerRemoteModule("Width"); // 5
long height = grabber.getIntegerRemoteModule("Height"); // 5
System.Console.WriteLine("Interface: {0}", card);
System.Console.WriteLine("Device: {0}", dev);
System.Console.WriteLine("Resolution: {0}x{1}", width, height);
}
}
}
static void Main() {
try { // 6
showInfo();
} catch (System.Exception e) { // 6
System.Console.WriteLine("error: {0}", e.Message);
}
}
}
}
1. | オブジェクトを作成します。これには以下のような操作が含まれます。 |
□ | Coaxlink GenTLプロデューサー()を見つけて動的に読み込みます。 |
□ | がエクスポートした関数へのポインターを取得します。 |
□ | を初期化します。 |
2. | オブジェクトを作成します。コンストラクターには、上記で作成したオブジェクトが必要です。また、オプションの引数として、使用するインターフェースとデバイスのインデックスを取ります。 |
3. | GenApiを使用し、CoaxlinkカードのIDを調べます。InterfaceModuleの接尾辞に注意してください。インターフェースモジュールからの返答が必要であることを示しています。 |
4. | 同様に、デバイスのIDを調べます。今回は、DeviceModuleを使用してデバイスモジュールをターゲットにします。 |
5. | 最後に、カメラの解像度を読み取ります。今回は、カメラから値を読み取る必要があるため RemoteModule を使用します。 |
6. | は例外を使用してエラーをレポートするため、コードをブロック内に包括します。 |
プログラムの出力例:
Interface: PC1633 - Coaxlink Quad G3 (2-camera) - KQG00014
Device: Device0
Resolution: 4096x4096
C++と.NETのEGrabber
の違い
次の語はプレースホルダーです。
□ | は、やなどに置き換えられます。 |
□ | は、やなどに置き換えられます。 |
EGrabberクラス
C++ | .NET |
---|---|
EGrabber<>
|
- |
EGrabber<CallbackOnDemand>
|
EGrabberCallbackOnDemand
|
EGrabber<CallbackSingleThread>
|
EGrabberCallbackSingleThread
|
EGrabber<CallbackMultiThread>
|
EGrabberCallbackMultiThread
|
EGrabberメソッド
C++ | .NET |
---|---|
getInfo<MODULE,TYPE>(cmd)
|
getInfoMODULE(cmd, out ...)
|
getInteger<MODULE>(f)
|
getIntegerMODULE(f)
|
getFloat<MODULE>(f)
|
getFloatMODULE(f)
|
getString<MODULE>(f)
|
getStringMODULE(f)
|
getStringList<MODULE>(f)
|
getStringListMODULE(f)
|
setInteger<MODULE>(f, v)
|
setIntegerMODULE(f, v)
|
setFloat<MODULE>(f, v)
|
setFloatMODULE(f, v)
|
setString<MODULE>(f, v)
|
setStringMODULE(f, v)
|
execute<MODULE>(f)
|
executeMODULE(f)
|
enableEvent<EVENT_DATA>()
|
enableEVENT_DATAEvent(f)
|
disableEvent<EVENT_DATA>()
|
disableEVENT_DATAEvent(f)
|
コールバック
.NETでは、コールバックはデリゲートとして定義されます。
grabber.onNewBufferEvent = delegate ...
grabber.onDataStreamEvent = delegate ...
grabber.onCicEvent = delegate ...
grabber.onIoToolboxEvent = delegate ...
grabber.onCxpInterfaceEvent = delegate ...
完全な例は次のセクションをご覧ください。
シングルスレッドコールバック
このプログラムは、モデルを使用して、グラバーが生成したCICイベントに関する基本情報を表示します。これは、C++言語によるの例をC#バージョンに書き換えたものです。
using System;
namespace Callbacks {
class CallbackExample {
static void showEvents(Euresys.EGrabberCallbackSingleThread grabber) {
grabber.runScript("config.js"); // 1
grabber.onCicEvent = delegate(Euresys.EGrabberCallbackSingleThread g, // 2
Euresys.CicData data) {
System.Console.WriteLine("timestamp: {0} us, {1}", // 3
data.timestamp, data.numid);
}; // 4
grabber.enableCicDataEvent(); // 5
grabber.reallocBuffers(3); // 6
grabber.start(); // 6
while (true) { // 6
}
}
static void Main() {
try {
using (Euresys.EGenTL gentl = new Euresys.EGenTL()) {
using (Euresys.EGrabberCallbackSingleThread grabber =
new Euresys.EGrabberCallbackSingleThread(gentl)) {
showEvents(grabber);
}
}
} catch (System.Exception e) {
System.Console.WriteLine("error: {0}", e.Message);
}
}
}
}
1. | スクリプトを実行します。このスクリプトでは、次のことが行われます。 |
□ | カメラとフレームグラバーを適切に設定します。 |
CICイベントの通知を有効化します。
2. | CICイベントのコールバック関数を登録します。 |
□ | CICイベントが発生したときにによって呼び出されるを作成します。このデリゲートは、グラバーと、イベントに関する情報を含むの2つの引数を使って呼び出されます。 |
□ | この関数にグラバーのを設定します。 |
3. | コールバック関数の本文では、単にイベントに関する基本情報を表示します。 |
4. | これでコールバック関数の定義は終了です。 |
5. | コールバックを有効にします。 |
6. | グラバーを開始して無限ループを実行します。CICイベントは専用のスレッドで通知されます。 |
プログラムの出力例:
timestamp: 2790824897 us, EVENT_DATA_NUMID_CIC_CAMERA_TRIGGER_RISING_EDGE
timestamp: 2790824897 us, EVENT_DATA_NUMID_CIC_STROBE_RISING_EDGE
timestamp: 2790824902 us, EVENT_DATA_NUMID_CIC_CXP_TRIGGER_ACK
timestamp: 2790825897 us, EVENT_DATA_NUMID_CIC_STROBE_FALLING_EDGE
timestamp: 2790830397 us, EVENT_DATA_NUMID_CIC_CAMERA_TRIGGER_FALLING_EDGE
timestamp: 2790830401 us, EVENT_DATA_NUMID_CIC_CXP_TRIGGER_ACK
timestamp: 2790842190 us, EVENT_DATA_NUMID_CIC_ALLOW_NEXT_CYCLE
timestamp: 2790842190 us, EVENT_DATA_NUMID_CIC_CAMERA_TRIGGER_RISING_EDGE
timestamp: 2790842191 us, EVENT_DATA_NUMID_CIC_STROBE_RISING_EDGE
timestamp: 2790842195 us, EVENT_DATA_NUMID_CIC_CXP_TRIGGER_ACK