コンテンツにスキップ
ステージングサーバー
開発サーバー

Serial Communication#

Serial Communicationカメラ機能を使用すると、カメラのI/Oラインを介してホストと外部デバイス間のシリアル通信を確立できます。

これは、カメラがホストと別のデバイス間の中間UARTデバイスとして機能することを意味します。

情報

Serial Communication機能は、以下のBaslerカメラモデルでのみ利用可能です: ace 2 R GigE PRO(1GigEのみ)、ace 2 R USB PRO、dart M、およびboost Rカメラ。

機能を使用する#

仕組み#

カメラには、送信(Tx)データ用と受信(Rx)データ用の2つの独立したシリアルポートFIFOがあります。ホストとの通信には、両方のFIFOが共通の転送バッファーを使用します。

Serial Communication図

上記のインターフェイスを使用するには、適切な通信プロトコルを実装する必要があります。プロトコルの実際の実装は、セットアップユーティリティとデバイスの特性によって異なります。

プロトコルの実装に役立つカメラパラメーターを以下に示します。

Serial Communicationの設定#

カメラと外部デバイス間のシリアル通信を設定するには、次の手順を実行します:

  1. パラメーターを BslSerialBaudRate パラメータを外部デバイスのボーレートに設定します(例: Baud9600.

情報

受信(Rx)データにフォトカプラ絶縁I/Oラインを使用する場合、最大ボーレートは19200 Bdに制限されることに注意してください。フォトカプラ絶縁I/Oラインを使用する場合は、 BslSerialBaudRate パラメータを適切に設定してください。

  1. パラメーターを BslSerialNumberOfDataBits パラメータを外部デバイスで使用されるデータビット数に設定します(例: Bits8.
  2. パラメーターを BslSerialNumberOfStopBits パラメータを外部デバイスで使用されるストップビット数に設定します(例: Bits1.
  3. パラメーターを BslSerialParity パラメータを外部デバイスによって実行されるパリティチェックの種類に設定します(例: Even.
  4. カメラの入力信号を設定します。これを行うには、 BslSerialRxSource パラメータをシリアルデータを受信するI/Oラインに設定します(例: Line2)に設定します。回線は 入力として設定.
  5. パラメーターを BslSerialTransmitMode パラメータを HalfDuplex または FullDuplexが無効になります。 BslSerialTransmitMode パラメータとその値については、 Transmit Parameters セクション。
  6. カメラの出力信号を設定します:
    1. パラメーターを LineSelector パラメータをシリアルデータを送信するI/Oラインに設定します(例: Line3)に設定します。回線は 出力として設定.
    2. パラメーターを LineSource パラメータを SerialTx.

Serial Communicationのテスト#

カメラに外部デバイスを接続せずにシリアル通信をテストする場合、または外部デバイスに起因するエラーを排除するには、 BslSerialRxSource パラメータを SerialTx.

これによりループバックが発生します。シリアル入力は内部的にシリアル出力に接続されるため、カメラは伝送内容を正確に受信します。

データの送受信#

シリアル通信を設定した後、外部デバイスにデータを送信して、外部デバイスからデータを受信することができます。

情報

詳細については、「pylon APIドキュメント」のParametrizeCamera_SerialCommunication (C++)コードサンプルを参照してください。

Transmit and Receive Parameters#

次のパラメーターは、データの送受信の両方に関係します:

  • BslSerialTransferBuffer: トランスファーバッファには送信するデータが保持され、受信したデータも含まれます。最大16シンボルを保持できます。シンボルは、 BslSerialNumberOfDataBits 設定に応じて7ビットまたは8ビットで構成されます。GigEカメラでは、転送長が4の倍数でない場合でも、トランスファーバッファにはDWORD(4バイトの倍数)でアクセスする必要があります。たとえば、 BslSerialTransferLength パラメータを9に設定した場合、トランザクションごとにバッファから12バイトを読み取る必要があります。USBおよびCoaXPressカメラでは、この制限は適用されません。
  • BslSerialTransferLength: 受信時には、最後のトランザクション中にカメラが受信したシンボルの数を示します。送信時には、カメラがトランザクションごとに送信すべきシンボルの数を指定します。最大値は16です。

Transmit Parameters#

データの送信には、次のパラメーターが関係します:

  • BslSerialTransmitMode: このパラメータは、カメラから外部デバイスへの送信中に、カメラの受信FIFO(Rx)をオフにするかオンにするかを決定します。送信と受信で単一のI/Oラインを共有していた場合(半二重)、カメラの受信FIFO(Rx)は外部デバイスに送信されるデータも受信してしまいます。これにより、受信FIFO(Rx)が非常に急速に満杯になります。
    パラメーターを BslSerialTransmitMode パラメータを HalfDuplex カメラから外部デバイスへの送信中に受信FIFO(Rx)をオフに設定します。これにより、外部デバイスによって送信されたデータのみがカメラの受信FIFO(Rx)にコピーされます。
    2つの独立したI/Oラインを使用する場合は、 BslSerialTransmitMode パラメータを FullDuplex.
  • BslSerialTransmit: このコマンドを実行して、シリアル出力線を介してトランスファーバッファの現在の値を送信します。これにより、 BslSerialTxFifoEmpty および BslSerialTxFifoOverflow パラメータ。
  • BslSerialTxFifoEmpty: 送信FIFOが空かどうか、つまりカメラがデータを送信する準備ができているかどうかを示します。
  • BslSerialTxFifoOverflow: 送信FIFOがオーバーフローしたかどうかを示します。新しいデータが、前のデータが送信される速度よりも速く送信FIFOに転送された場合、つまり BslSerialTransmit コマンドを速く実行しすぎた場合にオーバーフローが発生します。オーバーフロー中に送信されたデータは、送信FIFOに書き込まれません。
  • BslSerialTxBreak: 外部デバイスにシリアルブレークを通知します。このパラメータが次のように設定されている場合: true、カメラはシリアル出力をLowレベル(スペース)に設定してブレークを通知します。このパラメータが次のように設定されている場合: false、カメラはシリアル出力をHigh(マーク)にリセットします。

Receive Parameters#

データの受信には、次のパラメーターが関係します:

  • BslSerialReceive:このコマンドを実行すると、シリアル入力ライン経由でデータを受信します。トランザクションの完了後、 BslSerialTransferBuffer パラメータには受信したデータが含まれ、 BslSerialTransferLength パラメータは受信した有効なシンボルの数を示します。また、コマンドを実行すると、 BslSerialRxFifoOverflow, BslSerialRxParityErrorおよび BslSerialRxStopBitError パラメータの状態が更新されます。以下を参照してください。
  • BslSerialRxFifoOverflow:受信FIFOがオーバーフローしたかどうかを示します。外部デバイスからの新しいデータが、前のデータを転送バッファに移動してホストに送信する速度よりも速く到着した場合、つまり、 BslSerialReceive コマンドの実行が遅すぎる場合にオーバーフローが発生します。オーバーフロー中に受信したデータは失われます。
  • BslSerialRxParityError:カメラが受信FIFOのデータ内でパリティエラーを検出したかどうかを示します。エラーが検出された場合、パラメータは true を実行して受信FIFOを空にするまでそのままになります。 BslSerialReceive コマンド。
  • BslSerialRxStopBitError:カメラが受信FIFOのデータ内でストップビットエラーを検出したかどうかを示します。エラーが検出された場合、パラメータは true を実行して受信FIFOを空にするまでそのままになります。 BslSerialReceive コマンド。
  • BslSerialRxBreak:外部デバイスがシリアルブレークを通知したかどうかを示します。シリアル入力が少なくとも12ビット期間にわたってLow(スペース)である場合、カメラはブレークを検出してパラメータを trueに設定します。カメラはブレーク信号がどのくらい続くか「認識」しないため、パラメータの値は trueのままになります。これを falseにリセットするには、外部デバイスがブレークの送信を完了したことを確認してから、 BslSerialRxBreakReset コマンド。
  • BslSerialRxBreakReset:設定内容: BslSerialRxBreak パラメータを false。上記を参照してください。

サンプルコード#

// Configure serial communication
// Example: 19200 Baud, 8 data bits, 2 stop bits, even parity
camera.BslSerialBaudRate.SetValue(BslSerialBaudRate_Baud19200);
camera.BslSerialNumberOfDataBits.SetValue(BslSerialNumberOfDataBits_Bits8);
camera.BslSerialNumberOfStopBits.SetValue(BslSerialNumberOfStopBits_Bits2);
camera.BslSerialParity.SetValue(BslSerialParity_Even);
// Configure the camera's input signal
camera.BslSerialRxSource.SetValue(BslSerialRxSource_Line2);
// Configure the camera's output signal
camera.LineSelector.SetValue(LineSelector_Line3);
camera.LineSource.SetValue(LineSource_SerialTx);
// Now, you must implement a suitable communication protocol.
// Camera parameters that help you implement the protocol are listed
// in the "Transmitting and Receiving Data" section above.
INodeMap& nodemap = camera.GetNodeMap();
// Configure serial communication
// Example: 19200 Baud, 8 data bits, 2 stop bits, even parity
CEnumParameter(nodemap, "BslSerialBaudRate").SetValue("Baud19200");
CEnumParameter(nodemap, "BslSerialNumberOfDataBits").SetValue("Bits8");
CEnumParameter(nodemap, "BslSerialNumberOfStopBits").SetValue("Bits2");
CEnumParameter(nodemap, "BslSerialParity").SetValue("Even");
// Configure the camera's input signal
CEnumParameter(nodemap, "BslSerialRxSource").SetValue("Line2");
// Configure the camera's output signal
CEnumParameter(nodemap, "LineSelector").SetValue("Line3");
CEnumParameter(nodemap, "LineSource").SetValue("SerialTx");
// Now, you must implement a suitable communication protocol.
// Camera parameters that help you implement the protocol are listed
// in the "Transmitting and Receiving Data" section above.
// Configure serial communication
// Example: 19200 Baud, 8 data bits, 2 stop bits, even parity
camera.Parameters[PLCamera.BslSerialBaudRate].SetValue(PLCamera.BslSerialBaudRate.Baud19200);
camera.Parameters[PLCamera.BslSerialNumberOfDataBits].SetValue(PLCamera.BslSerialNumberOfDataBits.Bits8);
camera.Parameters[PLCamera.BslSerialNumberOfStopBits].SetValue(PLCamera.BslSerialNumberOfStopBits.Bits2);
camera.Parameters[PLCamera.BslSerialParity].SetValue(PLCamera.BslSerialParity.Even);
// Configure the camera's input signal
camera.Parameters[PLCamera.BslSerialRxSource].SetValue(PLCamera.BslSerialRxSource.Line2);
// Configure the camera's output signal
camera.Parameters[PLCamera.LineSelector].SetValue(PLCamera.LineSelector.Line3);
camera.Parameters[PLCamera.LineSource].SetValue(PLCamera.LineSource.SerialTx);
// Now, you must implement a suitable communication protocol.
// Camera parameters that help you implement the protocol are listed
// in the "Transmitting and Receiving Data" section above.
/* 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 */
/* Configure serial communication */
/* Example: 19200 Baud, 8 data bits, 2 stop bits, even parity */
errRes = PylonDeviceFeatureFromString(hdev, "BslSerialBaudRate", "Baud19200");
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "BslSerialNumberOfDataBits", "Bits8");
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "BslSerialNumberOfStopBits", "Bits2");
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "BslSerialParity", "Even");
CHECK(errRes);
/* Configure the camera's input signal */
errRes = PylonDeviceFeatureFromString(hdev, "BslSerialRxSource", "Line2");
CHECK(errRes);
/* Configure the camera's output signal */
errRes = PylonDeviceFeatureFromString(hdev, "LineSelector", "Line3");
CHECK(errRes);
errRes = PylonDeviceFeatureFromString(hdev, "LineSource", "SerialTx");
CHECK(errRes);
/* Now, you must implement a suitable communication protocol. */
/* Camera parameters that help you implement the protocol are listed */
/* in the "Transmitting and Receiving Data" section above. */
# Configure serial communication
# Example: 19200 Baud, 8 data bits, 2 stop bits, even parity
camera.BslSerialBaudRate.Value = "Baud19200"
camera.BslSerialNumberOfDataBits.Value = "Bits8"
camera.BslSerialNumberOfStopBits.Value = "Bits2"
camera.BslSerialParity.Value = "Even"
# Configure the camera's input signal
camera.BslSerialRxSource.Value = "Line2"
# Configure the camera's output signal
camera.LineSelector.Value = "Line3"
camera.LineSource.Value = "SerialTx"
# Now, you must implement a suitable communication protocol.
# Camera parameters that help you implement the protocol are listed
# in the "Transmitting and Receiving Data" section above.

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