콘텐츠로 건너뛰기
STAGING SERVER
DEVELOPMENT SERVER

Serial Communication#

Serial Communication camera feature를 사용하면 카메라의 I/O 라인을 통해 호스트와 외부 장치 간에 Serial Communication을 설정할 수 있습니다.

즉, 카메라는 호스트와 다른 장치 사이에서 중개 UART 장치 역할을 합니다.

정보

Serial Communication 기능은 다음 Basler 카메라 모델에서만 사용할 수 있습니다: ace 2 R GigE PRO(1GigE 전용), ace 2 R USB PRO, dart M, boost R 카메라.

기능 사용법#

작동 원리#

카메라는 송신(Tx) 데이터용과 수신(Rx) 데이터용으로 두 개의 독립적인 Serial Port FIFO를 제공합니다. 호스트와의 통신을 위해 두 FIFO는 공통 전송 버퍼를 사용합니다.

Serial Communication 다이어그램

위에 설명된 인터페이스를 활용하려면 적절한 통신 프로토콜을 구현해야 합니다. 프로토콜의 실제 구현은 시스템 설정과 장치 특성에 따라 다릅니다.

프로토콜 구현에 도움이 되는 카메라 파라미터는 아래에 나열되어 있습니다.

Serial Communication 구성#

카메라와 외부 장치 간의 Serial Communication을 구성하려면:

  1. 다음 값 중 하나로 BslSerialBaudRate 파라미터를 외부 장치의 보 레이트(예: Baud9600.

정보

옵토커플러 I/O 라인을 수신(Rx) 데이터에 사용하는 경우 최대 보 레이트가 19200 Bd로 제한된다는 점에 유의하세요. 옵토커플러 I/O 라인을 사용하는 경우 BslSerialBaudRate 파라미터를 적절하게 설정하세요.

  1. 다음 값 중 하나로 BslSerialNumberOfDataBits 파라미터를 외부 장치에서 사용하는 데이터 비트 수로 설정합니다(예: Bits8.
  2. 다음 값 중 하나로 BslSerialNumberOfStopBits 파라미터를 외부 장치에서 사용하는 정지 비트 수로 설정합니다(예: Bits1.
  3. 다음 값 중 하나로 BslSerialParity 파라미터를 외부 장치에서 수행하는 패리티 검사 종류로 설정합니다(예: Even.
  4. 카메라의 입력 신호를 구성합니다. 이렇게 하려면 BslSerialRxSource 파라미터를 Serial Data를 수신할 I/O 라인으로 설정합니다(예: Line2. 해당 라인은 입력으로 구성되어야 합니다..
  5. 다음 값 중 하나로 BslSerialTransmitMode 매개변수: HalfDuplex 또는 FullDuplex. BslSerialTransmitMode 파라미터와 해당 값은 다음 섹션에 설명되어 있습니다. 송신 파라미터 섹션.
  6. 카메라의 출력 신호를 구성합니다:
    1. 다음 값 중 하나로 LineSelector 파라미터를 Serial Data를 전송할 I/O 라인으로 설정합니다(예: Line3. 해당 라인은 출력으로 구성되어야 합니다..
    2. 다음 값 중 하나로 LineSource 매개변수: SerialTx.

Serial Communication 테스트#

카메라에 외부 장치가 연결되지 않은 상태에서 Serial Communication을 테스트하거나 외부 장치로 인한 오류를 배제하려면 BslSerialRxSource 매개변수: SerialTx.

이렇게 하면 루프백이 생성됩니다. Serial 입력이 내부적으로 Serial 출력에 연결되므로 카메라가 전송한 내용을 그대로 수신합니다.

데이터 송수신#

Serial Communication을 구성한 후에는 외부 장치로 데이터를 전송하고 외부 장치로부터 데이터를 수신할 수 있습니다.

정보

자세한 내용은 pylon API Documentation의 ParametrizeCamera_SerialCommunication (C++) 코드 샘플을 참조하십시오.

송신 및 수신 파라미터#

데이터 전송과 수신 모두에 다음과 같은 파라미터가 관련됩니다.

  • BslSerialTransferBuffer: 전송 버퍼에는 전송할 데이터가 보관되며 수신된 데이터도 포함됩니다. 최대 16개의 심볼을 보관할 수 있습니다. 심볼은 다음 설정에 따라 BslSerialNumberOfDataBits 7비트 또는 8비트로 구성됩니다. GigE 카메라의 경우 전송 길이가 4의 배수가 아니더라도 전송 버퍼에 DWORD(4바이트의 배수) 단위로 액세스해야 합니다. 예를 들어 BslSerialTransferLength 파라미터를 9로 설정한 경우 각 트랜잭션마다 버퍼에서 12바이트를 읽어야 합니다. USB 및 CoaXPress 카메라에서는 이 제한이 적용되지 않습니다.
  • BslSerialTransferLength: 수신 시 카메가 마지막 트랜잭션 동안 수신한 심볼 수를 나타냅니다. 전송 시 카메라가 트랜잭션당 전송해야 하는 심볼 수를 지정합니다. 최대값은 16입니다.

송신 파라미터#

데이터 전송에는 다음과 같은 파라미터가 관련됩니다.

  • BslSerialTransmitMode: 이 파라미터는 카메라에서 외부 장치로 전송하는 동안 카메라의 수신 FIFO(Rx)를 꺼짐 또는 켜짐으로 설정할지 여부를 결정합니다. 데이터 전송 및 수신에 단일 I/O 라인이 공유된 경우(반이중), 카메라의 수신 FIFO(Rx)는 외부 장치로 전송되는 데이터도 수신하게 됩니다. 이로 인해 수신 FIFO(Rx)가 매우 빠르게 Fill될 수 있습니다.
    다음 값 중 하나로 BslSerialTransmitMode 매개변수: HalfDuplex 카메라에서 외부 장치로 전송하는 동안 수신 FIFO(Rx)를 끄도록 합니다. 이렇게 하면 외부 장치에서 전송한 데이터만 카메라의 수신 FIFO(Rx)에 복사됩니다.
    두 개의 별도 I/O 라인으로 작업하는 경우 BslSerialTransmitMode 매개변수: FullDuplex.
  • BslSerialTransmit: 이 명령을 실행하여 직렬 출력 라인을 통해 전송 버퍼의 현재 값을 전송합니다. 이것은 또한 BslSerialTxFifoEmpty 및 BslSerialTxFifoOverflow 파라미터의 상태를 업데이트합니다.
  • BslSerialTxFifoEmpty: 전송 FIFO가 비어 있는지, 즉 카메라가 데이터를 전송할 준비가 되었는지 여부를 나타냅니다.
  • BslSerialTxFifoOverflow: 전송 FIFO가 오버플로되었는지 여부를 나타냅니다. 이전 데이터를 전송할 수 있는 속도보다 더 빠르게 새 데이터가 전송 FIFO로 전송되는 경우, 즉 BslSerialTransmit 명령을 너무 빨리 실행하는 경우 오버플로가 발생합니다. 오버플로 중에 전송된 데이터는 전송 FIFO에 기록되지 않습니다.
  • BslSerialTxBreak: 외부 장치에 직렬 브레이크 신호를 보냅니다. 이 파라미터가 true(으)로 설정된 경우 카메라는 브레이크 신호를 보내기 위해 직렬 출력을 로우 레벨(스페이스)로 설정합니다. 이 파라미터가 false(으)로 설정된 경우 카메라는 직렬 출력을 하이(마크)로 재설정합니다.

수신 파라미터#

데이터 수신에는 다음과 같은 파라미터가 관련됩니다.

  • BslSerialReceive: 이 명령을 실행하여 직렬 입력 라인을 통해 데이터를 수신합니다. 트랜잭션이 완료되면 BslSerialTransferBuffer 파라미터에는 수신된 데이터가 포함되고 BslSerialTransferLength 파라미터는 수신된 유효한 심볼 수를 나타냅니다. 또한 명령을 실행하면 BslSerialRxFifoOverflow, BslSerialRxParityError및 BslSerialRxStopBitError 파라미터의 상태가 업데이트됩니다. 아래 내용을 참조하십시오.
  • BslSerialRxFifoOverflow: 수신 FIFO가 오버플로되었는지 여부를 나타냅니다. 외부 장치로부터의 새 데이터가 이전 데이터가 전송 버퍼로 이동되어 호스트로 전송될 수 있는 속도보다 더 빠르게 도착하는 경우, 즉 BslSerialReceive command too slowly. 오버플로 중에 수신된 데이터는 손실됩니다.
  • 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를 사용하여 파라미터를 손쉽게 설정할 수 있습니다.