.NET アセンブリ
EGrabber
can be used in .NET languages (C#, VB.NET, etc.) via a .NET assembly named Coaxlink_NetApi.dll
.
最初の例
この例では、グラバーを作成し、それに含まれるインターフェイス、デバイス、およびリモートデバイスモジュールに関する基本情報を表示します。これは the first C++ EGrabber
exampleバージョンです:
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);
}
}
}
}
-
キャリブレータ
Euresys.EGenTL
オブジェクトを作成。これには以下の操作が含まれます:- Coaxlink GenTLプロデューサーを見つけて動的にロードする (
coaxlink.cti
); coaxlink.cti
によってエクスポートされた関数へのポインタを取得します。coaxlink.cti
を開始。
- Coaxlink GenTLプロデューサーを見つけて動的にロードする (
-
Euresys.EGrabberCallbackOnDemand
object. The constructor needs thegentl
オブジェクトを作成します。また、オプションの引数として、使用するインタフェースとデバイスのインデックスも取ります。 -
GenApiを使用し、CoaxlinkカードのIDを調べます。
InterfaceModule
suffix ingetString
InterfaceModule
に気付きます。interface moduleからの回答が必要であることを示しています。 -
同様に、デバイスのIDを調べます。今回は、
getString
DeviceModule
を使用し device moduleをターゲットにします。 -
最後に、カメラの解像度を読みます。今回は、値をカメラから読み取る必要があるため
getInteger
RemoteModule
を使用します。 -
EGrabber
uses exceptions to report errors, so we wrap our code inside atry ... catch
ブロック。
プログラム出力例
Interface: PC1633 - Coaxlink Quad G3 (2-camera) - KQG00014
Device: Device0
Resolution: 4096x4096
C ++と.NETの違いEGrabber
ITALIC
の用語はプレースホルダーです:
MODULE
can be replaced byInterfaceModule
,DeviceModule
...EVENT_DATA
can be replaced byNewBufferData
,CicData
...
EGrabber
クラス-
C++ .NET EGrabber<>
- EGrabber<CallbackOnDemand>
EGrabberCallbackOnDemand
EGrabber<CallbackSingleThread>
EGrabberCallbackSingleThread
EGrabber<CallbackMultiThread>
EGrabberCallbackMultiThread
EGrabber
方法-
C++ .NET getInfo<
MODULE
,
TYPE
>(cmd)
getInfo
MODULE
(cmd, out ...)
getInteger<
MODULE
>(f)
getInteger
MODULE
(f)
getFloat<
MODULE
>(f)
getFloat
MODULE
(f)
getString<
MODULE
>(f)
getString
MODULE
(f)
getStringList<
MODULE
>(f)
getStringList
MODULE
(f)
setInteger<
MODULE
>(f, v)
setInteger
MODULE
(f, v)
setFloat<
MODULE
>(f, v)
setFloat
MODULE
(f, v)
setString<
MODULE
>(f, v)
setString
MODULE
(f, v)
execute<
MODULE
>(f)
execute
MODULE
(f)
enableEvent<
EVENT_DATA
>()
enable
EVENT_DATA
Event(f)
disableEvent<
EVENT_DATA
>()
disable
EVENT_DATA
Event(f)
- コールバック
-
.NETでは、コールバックは代理として定義されています:
grabber.onNewBufferEvent = delegate ... grabber.onDataStreamEvent = delegate ... grabber.onCicEvent = delegate ... grabber.onIoToolboxEvent = delegate ... grabber.onCxpInterfaceEvent = delegate ...
次のセクションで例を確認ください。
シングルスレッドコールバック
このプログラムは、CallbackSingleThread
model. This is the C# version of the C++ CallbackSingleThread
の例を使用して、グラバーによって生成されたCICイベントに関する基本情報を表示します。
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);
}
}
}
}
-
config.js
スクリプトを実行してください:- カメラとフレームグラバーを正しく設定してください;
- CICイベントの 通知 を有効にします。
-
CIC イベント用のコールバック関数を登録します:
- イベントに関する情報を含む
delegate
that will be called byEGrabber
when a CIC event occurs; this delegate will be called with two arguments: the grabber and theCicData
を作成します。 - グラバーの
onDataStreamEvent
to thisdelegate
機能に設定します。
- イベントに関する情報を含む
-
コールバック関数の本体では、単にイベントに関する基本情報を表示します。
-
これで
onCicEvent
コールバック関数の定義は終了です。 -
onCicEvent
コールバックを有効にしてください。 -
グラバーを起動して無限ループに入ります。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