Serial Communication#
즉, 카อล메라는 호스트와 다른 장치 간의 중개자 UART 장치 역할을 합니다.
정보
Serial Communication 기능은 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을 구성하려면 다음을 수행하십시오.
- 파라미터를 원하는
BslSerialBaudRate파라미터를 외부 장치의 전송 속도(예:Baud9600.
정보
옵토커플러 I/O 라인을 수신(Rx) 데이터용으로 사용하는 경우 최대 전송 속도가 19200 Bd로 제한된다는 점에 유의하십시오. 옵토커플러 I/O 라인을 사용하는 경우 BslSerialBaudRate 파라미터를 그에 맞게 설정하십시오.
- 파라미터를 원하는
BslSerialNumberOfDataBits파라미터를 외부 장치에서 사용하는 데이터 비트 수로 설정합니다(예:Bits8. - 파라미터를 원하는
BslSerialNumberOfStopBits파라미터를 외부 장치에서 사용하는 정지 비트 수로 설정합니다(예:Bits1. - 파라미터를 원하는
BslSerialParity파라미터를 외부 장치에서 수행하는 패리티 검사 종류로 설정합니다(예:Even. - 카메라의 입력 신호를 구성합니다. 이렇게 하려면
BslSerialRxSource파라미터를 Serial Data를 수신할 I/O 라인으로 설정합니다(예:Line2. 해당 라인은 입력으로 구성되어야 합니다.. - 파라미터를 원하는
BslSerialTransmitMode파라메터HalfDuplex또는FullDuplex. 해당BslSerialTransmitMode파라미터와 해당 값은 다음에서 설명합니다. 송신 파라미터 섹션. - 카메라 출력 신호를 구성합니다.
- 파라미터를 원하는
LineSelector파라미터를 Serial Data를 전송할 I/O 라인으로 설정합니다(예:Line3. 해당 라인은 출력으로 구성되어야 합니다.. - 파라미터를 원하는
LineSource파라메터SerialTx.
- 파라미터를 원하는
Serial Communication 테스트#
카메라에 외부 장치가 연결되지 않은 상태에서 Serial Communication을 테스트하거나 외부 장치로 인한 오류를 배제하려면 다음을 설정하십시오. BslSerialRxSource 파라메터 SerialTx.
그러면 루프백이 생성됩니다. Serial 입력이 내부적으로 Serial 출력에 연결되므로 카메라가 전송한 내용을 그대로 수신합니다.
데이터 송수신#
Serial Communication을 구성한 후 외부 장치로 데이터를 전송하고 외부 장치로부터 데이터를 수신할 수 있습니다.
정보
자세한 내용은 pylon API Documentation의 ParametrizeCamera_SerialCommunication (C++) 코드 샘플을 참조하십시오.
송신 및 수신 파라미터#
데이터 송신 및 수신 과정에는 다음 파라미터가 관여합니다.
BslSerialTransferBuffer: 전송 버퍼에는 전송할 데이터와 수신된 데이터가 저장됩니다. 최대 16개의 심볼을 저장할 수 있습니다. 심볼은 설정에 따라BslSerialNumberOfDataBits7비트 또는 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: 외부 장치에 직렬 브레이크(serial break) 신호를 보냅니다. 이 파라미터가true(으)로 설정된 경우, 카메라는 브레이크 신호를 알리기 위해 직렬 출력을 로우 레벨(space)로 설정합니다. 이 파라미터가false(으)로 설정된 경우, 카메라는 직렬 출력을 하이(mark)로 재설정합니다.
수신 파라미터#
데이터 수신 과정에는 다음 파라미터가 관여합니다.
BslSerialReceive: 이 명령을 실행하여 직렬 입력 라인을 통해 데이터를 수신합니다. 트랜잭션이 완료되면BslSerialTransferBuffer파라미터에는 수신된 데이터가 포함되며,BslSerialTransferLength파라미터는 수신된 유효한 심볼 수를 나타냅니다. 또한 명령을 실행하면BslSerialRxFifoOverflow,BslSerialRxParityError및BslSerialRxStopBitError파라미터의 상태가 업데이트됩니다. 아래 내용을 참조하십시오.BslSerialRxFifoOverflow: 수신 FIFO 오버플로 발생 여부를 나타냅니다. 이전 데이터가 전송 버퍼로 이동하여 호스트로 전송되기 전에 외부 장치로부터 새로운 데이터가 더 빠르게 도착하는 경우, 즉BslSerialReceive명령을 너무 느리게 실행하는 경우 오버플로가 발생합니다. 오버플로 중에 수신된 데이터는 손실됩니다.BslSerialRxParityError: 카메라가 수신 FIFO 데이터에서 패리티 오류를 감지했는지 여부를 나타냅니다. 오류가 감지되면 파라미터는 계속 유지됩니다.true수신 FIFO를 비울 때까지BslSerialReceivecommand.BslSerialRxStopBitError: 카메라가 수신 FIFO 데이터에서 정지 비트 오류를 감지했는지 여부를 나타냅니다. 오류가 감지되면 매개변수는 계속true수신 FIFO를 비울 때까지BslSerialReceivecommand.BslSerialRxBreak: 외부 장치가 직렬 브레이크(serial break) 신호를 보냈는지 여부를 나타냅니다. 직렬 입력이 12비트 주기 이상 동안 로우(스페이스) 상태를 유지하면, 카메라는 브레이크를 감지하고 매개변수를true(으)로 설정합니다. 카메라는 브레이크 신호가 얼마나 지속될지 "알" 수 없으므로, 매개변수 값은 계속true상태로 유지됩니다. 이를false(으)로 재설정하려면 외부 장치가 브레이크 전송을 완료했는지 확인한 다음BslSerialRxBreakResetcommand.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를 사용하여 파라미터를 손쉽게 설정할 수도 있습니다.