.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