コンテンツにスキップ

ネットワーク関連パラメータ(GigEカメラ)#

ネットワーク関連パラメーターを使用すると、Basler ace GigEカメラのパフォーマンスを最適化できます。

このトピックでは、最も重要なネットワーク関連パラメーターについて説明します。

Payload Size#

PayloadSizeパラメーターの値は、送信された画像データとあらゆるチャンクデータの合計サイズ(バイト)を示します。パケットヘッダーは含まれません。

このパラメーターは読み取り専用です。

Packet Size#

GevSCPSPacketSizeパラメーターは、Ethernet経由で送信されるデータパケットの最大サイズを指定します。値はバイト単位です。

このパラメーターは、ネットワークハードウェアが処理できる最大サイズに常に設定されている必要があります。

デフォルトでは、パケットサイズは1 500バイトに設定されています。これは、ほとんどの構成に対して十分です。必要に応じて、パケットサイズを大きくしてEthernetのオーバーヘッド負荷を軽減し、ネットワーク効率を改善できます。

リーダーとトレーラーのサイズは、パケットサイズに関係なく常に同じです。最後のデータパケットは、多くの場合、他のパケットよりも小さいことに注意してください。

情報

  • パケットサイズを1 500バイトより大きくする場合は、スイッチを含むすべての関連するネットワークデバイスで、いわゆるJumbo Framesサポートを有効にする必要があります。
  • カメラ側でパケットサイズを大きくする場合は、必ずネットワークコントローラーカードのパケットサイズも調整する必要があります。そうしないと、ブロックされたパケットが原因でストリーミングが失敗することがあります。

Inter-Packet Delay#

お使いのネットワークハードウェアで、受信パケットレートを処理できない場合は、パケット転送間の遅延を大きくすると便利です。これにより、ドロップされるパケットの量が減る可能性があります。ただし、データ転送も遅くなることに注意してください。その結果、カメラのフレームレートが低下することがあります。

GevSCPDパラメーターは、パケット間遅延をティックで設定します。

Frame Transmission Delay#

GevSCFTDパラメーターは、カメラが通常取得したフレームの送信を開始するときと実際に開始するときの間の遅延をティックで設定します。

多くの場合、このパラメーターはゼロに設定する必要があります。

ただし、お使いのネットワークハードウェアがネットワークトラフィックのスパイクに対応できない場合(複数のカメラを同時にトリガーする場合など)は、フレーム伝送遅延パラメーターを使用して、各カメラからの画像データ転送の開始をずらすことができます。

Bandwidth Assigned#

GevSCBWAパラメーターは、画像およびチャンクデータの送信、パケット再送信の処理、データ転送の制御のために、カメラが使用できる帯域幅をバイト/秒単位で示します。割り当てられた帯域幅は、パケット間遅延およびフレーム伝送遅延設定を変更することによって調整できます。

このパラメーターは読み取り専用です。

Bandwidth Reserve#

GevSCBWRパラメーターは、割り当てられた帯域幅のどの部分が、パケット再送信の処理とデータ転送の制御のために予約されるかを指定します。

この設定は、割り当てられた帯域幅のパーセンテージで表されます。

Example:カメラに30MByte/sの帯域幅が割り当てられ、GevSCBWRパラメーターが5%に設定されている場合、帯域幅予約は1.5MByte/sになります。

Bandwidth Reserve Accumulation#

GevSCBWRAパラメーターを使用すると、突然のEMIバーストなどによってネットワーク接続が不安定になった場合に対処できます。このような状況では、画像の送信に大量のパケット再送信が必要になる場合があります。基本的に、帯域幅予約累積は、カメラが異常な状況で使用できる再送信のスペアプールです。

GevSCBWRAパラメーターは、「アキュムレータープール」に保持できる再送信の最大数を設定するために使用される乗数です。

Example:現在の帯域幅予約設定が、フレーム周期中に最大5パケットが再送信されるのに十分な大きさであるとします。また、帯域幅予約累積(GevSCBWRAパラメーター)が3に設定されているとします。これらの設定では、アキュムレータープールは、最大5 x 3 = 15回の再送信を保持できます。

Bandwidth Reserve Mode#

使用可能な場合は、BandwidthReserveModeパラメーターにより、帯域幅予約帯域幅予約累積をシングルステップで設定できます。

パラメーターは次の値に設定できます。

  • Standard:カメラは、中程度の帯域幅を必要とするように設定されています。
  • Performance:カメラは高帯域幅を必要とするように設定されています。
  • Manual:プリセットは使用されません。帯域幅予約帯域幅予約累積を手動で設定できます。

Frame Jitter Max#

帯域幅予約累積が高い値に設定されている場合、フレームの伝送中に、カメラでデータ再送信のバーストが発生することがあります。この再送信のバーストにより、次の撮影フレームの伝送開始が遅延します。GevSCFJMパラメーターは、再送信のバーストによって次のフレーム伝送が遅延する可能性がある最大時間をティックaで示します。

このパラメーターは読み取り専用です。

Device Max Throughput#

GevSCDMTパラメーターは、現在の設定とネットワーク制限のない理想的な条件下で、カメラが理論的に生成できる最大データ量(バイト/秒)を示します。このパラメーターでは、GigEネットワークにすべてのデータを転送する容量があるかどうかは考慮されず、再送信に必要な帯域幅は加味されません。

Acquisition Frame Rateパラメーターを使用してカメラのフレームレートを制御している場合、カメラはそのパラメーター値を使用してGevSCDMTパラメーター値を計算します。ソフトウェアトリガーまたはハードウェアトリガーを使用してカメラのフレームレートを制御している場合、カメラは現在のカメラ設定で許可されている最大フレームレートを使用してGevSCDMTパラメーター値を計算します。

このパラメーターは読み取り専用です。

Device Current Throughput#

GevSCDCTパラメーターは、現在のカメラ設定でカメラが画像データとチャンクデータの送信に使用する実際の帯域幅(バイト/秒)を示します。

Acquisition Frame Rateパラメーターを使用してカメラのフレームレートを制御している場合、カメラはそのパラメーター値を使用してGevSCDCTパラメーター値を計算します。ソフトウェアトリガーまたはハードウェアトリガーを使用してカメラのフレームレートを制御している場合、カメラは現在のカメラ設定で許可されている最大フレームレートを使用してGevSCDCTパラメーター値を計算します。

このパラメーターは読み取り専用です。

情報

GevSCDCTパラメーターは、実際の画像データとチャンクデータの送信に必要な帯域幅を示します。GevSCBWAパラメーター(割り当てられた帯域幅)は、画像データおよびチャンクデータの送信に必要な帯域幅に、パケット再送信の処理およびデータ転送の制御に予約された帯域幅を加えたものを示します。

使用可能な場合、DeviceLinkCurrentThroughputパラメーターにより、データ転送に使用できる最大帯域幅を制限できます。詳細については、「Device Information Parameters」を参照してください。

Heartbeat Timeout#

GigE Vision規格では、カメラとホストコンピューターの間の接続を監視するために「ハートビート」ルーチンを実装する必要があります。GevHeartbeatTimeoutパラメーターは、ハートビートタイムアウト(ミリ秒)を設定します。タイムアウトが発生すると、カメラはネットワーク接続を解除し、再接続を許可する状態になります。

デフォルトでは、ハートビートタイムアウトは3000msに設定されています。通常のカメラ操作では、値を変更する必要はありません。ただし、アプリケーションをデバッグしてブレークポイントで停止すると、ハートビートタイムアウトが発生し、カメラへの接続が失われる可能性があります。したがって、デバッグ中には、GevHeartbeatTimeoutパラメーター値を大きくする必要があります。デバッグが完了したら、タイムアウトを通常の設定に戻す必要があります。

詳細については、Basler pylon Camera Software Suiteに含まれている『C++ Programmer's Guide and Reference Documentation』にある「Advanced Topics」トピックの「Debugging pylon Applications Using GigE Cameras」セクションを参照してください。

情報

また、このpylon APIにはHeartbeatTimeoutパラメーターも用意されており、トランスポート層側でハートビートタイムアウトを設定できます。HeartbeatTimeoutパラメーターとGevHeartbeatTimeoutパラメーターは自動的に同期されます。1つのパラメーターを変更すると、もう1つのパラメーターが適合し、その逆も同様です。

Stream Channel Selector#

GigE Vision規格では、カメラとコンピューターの間に複数の独立したストリームチャンネルを確立するためのメカニズムが指定されます。GevStreamChannelSelectorパラメーターを使用すると、他のネットワーク関連パラメーターが変更されたときに影響を受けるストリームチャンネルを指定できます。

現在カメラは、1つのストリームチャンネル(ストリームチャンネル0)のみをサポートしています。したがって、GevStreamChannelSelectorパラメーターはStreamChannel0にプリセットされており、変更できません。


  1. On ace Classic/U/L cameras, one tick equals 8 ns (PTP enabled) or 1 ns (PTP disabled). On other cameras, one tick always equals 1 ns. You can determine the tick frequency by reading the GevTimestampTickFrequency parameter value. This value indicates the number of clock ticks per second.

サンプルコード#

// Payload Size
int64_t payloadSize = camera.PayloadSize.GetValue();
// Packet Size
camera.GevSCPSPacketSize.SetValue(1500);
// Inter-Packet Delay
camera.GevSCPD.SetValue(1000);
// Frame transmission delay
camera.GevSCFTD.SetValue(1000);
// Bandwidth Assigned
int64_t bandwidthAssigned = camera.GevSCBWA.GetValue();
// Bandwidth Reserve
camera.GevSCBWR.SetValue(10);
// Bandwidth Reserve Accumulation
camera.GevSCBWRA.SetValue(10);
// Frame Jitter Max
int64_t jitterMax = camera.GevSCFJM.GetValue();
// Device Max Throughput
int64_t maxThroughput = camera.GevSCDMT.GetValue();
// Device Current Throughput
int64_t currentThroughput = camera.GevSCDCT.GetValue();
// Heartbeat Timeout
camera.GevHeartbeatTimeout.SetValue(5000);
INodeMap& nodemap = camera.GetNodeMap();
// Payload Size
int64_t payloadSize = CIntegerParameter(nodemap, "PayloadSize").GetValue();
// Packet Size
CIntegerParameter(nodemap, "GevSCPSPacketSize").SetValue(1500);
// Inter-Packet Delay
CIntegerParameter(nodemap, "GevSCPD").SetValue(1000);
// Frame transmission delay
CIntegerParameter(nodemap, "GevSCFTD").SetValue(1000);
// Bandwidth Assigned
int64_t bandwidthAssigned = CIntegerParameter(nodemap, "GevSCBWA").GetValue();
// Bandwidth Reserve
CIntegerParameter(nodemap, "GevSCBWR").SetValue(10);
// Bandwidth Reserve Accumulation
CIntegerParameter(nodemap, "GevSCBWRA").SetValue(10);
// Frame Jitter Max
int64_t jitterMax = CIntegerParameter(nodemap, "GevSCFJM").GetValue();
// Device Max Throughput
int64_t maxThroughput = CIntegerParameter(nodemap, "GevSCDMT").GetValue();
// Device Current Throughput
int64_t currentThroughput = CIntegerParameter(nodemap, "GevSCDCT").GetValue();
// Heartbeat Timeout
CIntegerParameter(nodemap, "GevHeartbeatTimeout").SetValue(5000);
// Payload Size
Int64 payloadSize = camera.Parameters[PLCamera.PayloadSize].GetValue();
// Packet Size
camera.Parameters[PLCamera.GevSCPSPacketSize].SetValue(1500);
// Inter-Packet Delay
camera.Parameters[PLCamera.GevSCPD].SetValue(1000);
// Frame transmission delay
camera.Parameters[PLCamera.GevSCFTD].SetValue(1000);
// Bandwidth Assigned
Int64 bandwidthAssigned = camera.Parameters[PLCamera.GevSCBWA].GetValue();
// Bandwidth Reserve
camera.Parameters[PLCamera.GevSCBWR].SetValue(10);
// Bandwidth Reserve Accumulation
camera.Parameters[PLCamera.GevSCBWRA].SetValue(10);
// Frame Jitter Max
Int64 jitterMax = camera.Parameters[PLCamera.GevSCFJM].GetValue();
// Device Max Throughput
Int64 maxThroughput = camera.Parameters[PLCamera.GevSCDMT].GetValue();
// Device Current Throughput
Int64 currentThroughput = camera.Parameters[PLCamera.GevSCDCT].GetValue();
// Heartbeat Timeout
camera.Parameters[PLCamera.GevHeartbeatTimeout].SetValue(5000);
/* Macro to check for errors */
#define CHECK(errc) if (GENAPI_E_OK != errc) printErrorAndExit(errc)
GENAPIC_RESULT errRes = GENAPI_E_OK;  /* Return value of pylon methods */
int64_t payloadSize = 0;
int64_t bandwidthAssigned = 0;
int64_t jitterMax = 0;
int64_t maxThroughput = 0;
int64_t currentThroughput = 0;
/* Payload Size */
errRes = PylonDeviceGetIntegerFeature(hdev, "PayloadSize", &payloadSize);
CHECK(errRes);
/* Packet Size */
errRes = PylonDeviceSetIntegerFeature(hdev, "GevSCPSPacketSize", 1500);
CHECK(errRes);
/* Inter-Packet Delay */
errRes = PylonDeviceSetIntegerFeature(hdev, "GevSCPD", 1000);
CHECK(errRes);
/* Frame transmission delay */
errRes = PylonDeviceSetIntegerFeature(hdev, "GevSCFTD", 1000);
CHECK(errRes);
/* Bandwidth Assigned */
errRes = PylonDeviceGetIntegerFeature(hdev, "GevSCBWA", &bandwidthAssigned);
CHECK(errRes);
/* Bandwidth Reserve */
errRes = PylonDeviceSetIntegerFeature(hdev, "GevSCBWR", 10);
CHECK(errRes);
/* Bandwidth Reserve Accumulation */
errRes = PylonDeviceSetIntegerFeature(hdev, "GevSCBWRA", 10);
CHECK(errRes);
/* Frame Jitter Max */
errRes = PylonDeviceGetIntegerFeature(hdev, "GevSCFJM", &jitterMax);
CHECK(errRes);
/* Device Max Throughput */
errRes = PylonDeviceGetIntegerFeature(hdev, "GevSCDMT", &maxThroughput);
CHECK(errRes);
/* Device Current Throughput */
errRes = PylonDeviceGetIntegerFeature(hdev, "GevSCDCT", &currentThroughput);
CHECK(errRes);
/* Heartbeat Timeout */
errRes = PylonDeviceSetIntegerFeature(hdev, "GevHeartbeatTimeout", 5000);
CHECK(errRes);

pylon Viewerを使用して、パラメーターを簡単に設定することもできます。