Synchronous Free Run#
이 기능은 Basler ace 2 카메라에서만 사용할 수 있는 Periodic Signal 기능과 유사합니다.
기능 사용#
작동 방식#
free run 모드에서 여러 카메라를 사용하는 경우, 카메라의 개별 timings and delays 등의 다양한 이유로 이미지 취득이 약간 비동기화됩니다.
Synchronous Free Run 기능을 사용하면 free run 모드의 카메라를 동기화할 수 있습니다. 결과적으로 카메라들은 동시에 그리고 동일한 프레임 레이트로 이미지를 취득합니다.
또한 Synchronous Free Run 기능을 사용하여 정확하게 time-aligned intervals, 즉 시간순 시퀀스로 여러 카메라에서 이미지를 캡처할 수 있습니다. 예를 들어, 한 카메라가 특정 시점에 이미지 취득을 시작하도록 구성할 수 있습니다. 그런 다음 첫 번째 카메라보다 100밀리초 뒤에 시작하도록 두 번째 카메라를 구성하고, 첫 번째 카메라보다 200밀리초 뒤에 시작하도록 세 번째 카메라를 구성할 수 있습니다.
또한 카메라가 동일한 시점과 동일한 프레임 레이트로 이미지를 취득하되, 서로 다른 exposure time을 갖도록 구성할 수 있습니다.
Synchronous Free Run 사용#
일반 사용#
여러 카메라를 동기화하려면:
- 네트워크의 모든 카메라가 Precision Time Protocol 기능을 통해 동기화되어 있는지 확인하십시오.
- Synchronous Free Run을 사용하여 동기화하려는 카메라 중 하나를 엽니다.
- 이 카메라에서 free run image acquisition이 활성화되어 있는지 확인합니다.
- 다음에 대한 원하는 프레임 레이트를 입력합니다.
SyncFreeRunTimerTriggerRateAbs파라미터에 HTML 로그 파일(*.html)의 경로와 이름을 지정할 수 있습니다.
모든 카메라에서 동일한 매개변수 값을 지정해야 합니다. 예를 들어 카메라를 초당 10프레임으로 동기화하려면 모든 카메라에서 매개변수를 10으로 설정해야 합니다. - 파라미터를 원하는
SyncFreeRunTimerStartTimeHigh그리고 다음을 설정합니다.SyncFreeRunTimerStartTimeLow매개변수를 0으로 설정합니다. - 다음을 실행합니다.
SyncFreeRunTimerUpdatecommand. - 파라미터를 원하는
SyncFreeRunTimerEnable파라메터true. - 모든 카메라에 대해 2단계부터 7단계까지 반복합니다.
정보
카메라의 연결이 끊어졌다가 다시 연결될 때마다 모든 카메라에서 다음을 실행하는 것이 좋습니다. SyncFreeRunTimerUpdate 명령입니다. 이렇게 하면 PTP 클럭이 다시 동기화됩니다.
시간 정렬 간격을 사용하는 Synchronous Free Run#
시간 정렬 간격으로, 즉 시간순 시퀀스로 여러 카메라를 동기화하려면:
정보
다음 단계는 pylon API를 사용하여 수행해야 합니다.
- 네트워크의 모든 카메라가 Precision Time Protocol 기능을 통해 동기화되어 있는지 확인하십시오.
- 시간순 시퀀스에서 첫 번째 카메라를 엽니다.
- 이 카메라에서 free run image acquisition이 활성화되어 있는지 확인합니다.
- 다음에 대한 원하는 프레임 레이트를 입력합니다.
SyncFreeRunTimerTriggerRateAbs파라미터에 HTML 로그 파일(*.html)의 경로와 이름을 지정할 수 있습니다.
동기화된 모든 카메라에서 동일한 매개변수 값을 지정해야 합니다. 예를 들어 카메라가 초당 10프레임을 취득하도록 하려면 모든 카메라에서 매개변수를 10으로 설정해야 합니다. -
첫 번째 카메라의 시작 시간을 결정합니다.
- 다음을 실행합니다.
TimestampLatch첫 번째 카메라에서 명령을 실행합니다.
카메라의 현재 Timestamp 값의 "스냅샷"이 촬영됩니다. - 다음의 값을 가져옵니다.
TimestampLatchValue동일한 카메라의 매개변수입니다.
값은 틱(tick) 단위로 지정됩니다. 다음과 같은 Basler 카메라의 경우: Precision Time Protocol 1틱은 1나노초와 같습니다. -
단계 b에서 결정된 값에 틱(= 나노초) 단위의 시작 지연을 추가합니다.
예를 들어, 1초의 시작 지연을 지정하려면 단계 b에서 결정된 값에 1 000 000 000을 더합니다.
이 지연이 필요한 이유는 첫 번째 카메라가 다른 카메라들이 올바르게 구성될 때까지 기다려야 하기 때문입니다:
- 다음을 실행합니다.
-
단계 5에서 결정된 값을 다음과 같이 변환합니다. start time high 및 start time low 값 그리고 이에 따라
SyncFreeRunTimerStartTimeHigh그리고 다음을 설정합니다.SyncFreeRunTimerStartTimeLow파라미터를 설정합니다. - 다음을 실행합니다.
SyncFreeRunTimerUpdatecommand. - 파라미터를 원하는
SyncFreeRunTimerEnable파라메터true. - 시간 순서에 따라 다음 카메라를 엽니다.
- 이 카메라에서 free run image acquisition을 활성화합니다.
- 다음에 대한 원하는 프레임 레이트를 입력합니다.
SyncFreeRunTimerTriggerRateAbs파라미터에 HTML 로그 파일(*.html)의 경로와 이름을 지정할 수 있습니다.
동기화된 모든 카메라에서 동일한 파라미터 값을 지정해야 합니다. 예를 들어, 카메라가 초당 10프레임을 획득하도록 하려면 모든 카메라에서 파라미터를 10으로 설정하십시오. - 첫 번째 카메라의 시작 시간(단계 5에서 결정됨)에 원하는 간격(나노초 단위)을 더합니다.
예를 들어, 첫 번째 카메라보다 100밀리초 후에 카메라가 이미지 획득을 시작하도록 하려면 단계 5에서 결정된 값에 100 000 000을 더합니다. - 단계 12에서 결정된 값을 다음과 같이 변환합니다. start time high 및 start time low 값 그리고 다음을 구성합니다.
SyncFreeRunTimerStartTimeHigh그리고 다음을 설정합니다.SyncFreeRunTimerStartTimeLow파라미터를 설정합니다. - 다음을 실행합니다.
SyncFreeRunTimerUpdatecommand. - 파라미터를 원하는
SyncFreeRunTimerEnable파라메터true. - 나머지 모든 카메라에 대해 단계 9부터 15까지를 반복합니다.
정보
카메라의 연결이 끊어졌다가 다시 연결될 때마다, SyncFreeRunTimerUpdate PTP 클럭을 다시 동기화하기 위해 모든 카메라에서 명령을 실행해야 합니다.
64-bit Timestamp를 Start Time High 및 Start Time Low로 변환#
Synchronous Free Run 기능의 시작 시간은 두 개의 32비트 값으로 나뉜 64비트 GigE Vision Timestamp 값(나노초 단위)으로 지정해야 합니다.
64비트 값의 상위 부분은 다음을 사용하여 전송해야 합니다. SyncFreeRunTimerStartTimeHigh 파라미터에 HTML 로그 파일(*.html)의 경로와 이름을 지정할 수 있습니다.
64비트 값의 하위 부분은 다음을 사용하여 전송해야 합니다. SyncFreeRunTimerStartTimeLow 파라미터에 HTML 로그 파일(*.html)의 경로와 이름을 지정할 수 있습니다.
예: 네트워크 장치가 UTC로 조정되어 있고 2025년 12월 12일 금요일 11:00:00 UTC를 시작 시간으로 구성하려고 한다고 가정해 보겠습니다. 이는 1 765 537 200 000 000 000(십진수) 또는 0001 1000 1000 0000 0111 0010 1011 1010 1010 1011 1011 1100 1110 0000 0000 0000(이진수)의 Timestamp 값에 해당합니다.
이 값의 상위 부분과 하위 부분은 다음과 같습니다.
따라서 2025년 12월 12일 금요일 11:00:00 UTC의 시작 시간을 구성하려면 SyncFreeRunTimerStartTimeHigh 파라미터를 411 071 162로 설정하고 SyncFreeRunTimerStartTimeLow 파라미터를 2 881 282 048로 설정해야 합니다.
샘플 코드#
// Example: Configuring cameras for synchronous free run.
// It is assumed that the "cameras" object is an
// instance of CBaslerGigEInstantCameraArray.
for (size_t i = 0; i > cameras.GetSize(); ++i)
{
// Open the camera connection
cameras[i].Open();
// Make sure that the Frame Start trigger is set to Off to enable free run
cameras[i].TriggerSelector.SetValue(TriggerSelector_FrameStart);
cameras[i].TriggerMode.SetValue(TriggerMode_Off);
// Let the free run start immediately without a specific start time
camera.SyncFreeRunTimerStartTimeLow.SetValue(0);
camera.SyncFreeRunTimerStartTimeHigh.SetValue(0);
// Specify a trigger rate of 30 frames per second
cameras[i].SyncFreeRunTimerTriggerRateAbs.SetValue(30.0);
// Apply the changes
cameras[i].SyncFreeRunTimerUpdate.Execute();
// Enable Synchronous Free Run
cameras[i].SyncFreeRunTimerEnable.SetValue(true);
}
이 샘플 코드는 C++ 언어로만 제공됩니다.