Macro AcquireMultipleCameras() Test() End Function Test() Variable sidx_status sidx_status = CameraOpen() if (sidx_status != 0) return 0 endif sidx_status = CameraSetUp() if (sidx_status != 0) CameraClose() return 0 endif printf "Starting acquisition. Press the Esc key to terminate the acquisition\r" sidx_status = CameraAcquire() if (sidx_status != 0) CameraClose() return 0 endif CameraClose() End Static Function CameraClose() Variable sidx_status NVAR /Z sidx_acquire_1_local = root:sidx_acquire_1 if (NVAR_Exists(sidx_acquire_1_local)) if (sidx_acquire_1_local != 0) SIDXAcquireClose sidx_acquire_1_local, sidx_status sidx_acquire_1_local = 0 endif endif NVAR /Z sidx_acquire_2_local = root:sidx_acquire_2 if (NVAR_Exists(sidx_acquire_2_local)) if (sidx_acquire_2_local != 0) SIDXAcquireClose sidx_acquire_2_local, sidx_status sidx_acquire_2_local = 0 endif endif NVAR /Z sidx_camera_1_local = root:sidx_camera_1 if (NVAR_Exists(sidx_camera_1_local)) if (sidx_camera_1_local != 0) SIDXCameraClose sidx_camera_1_local, sidx_status sidx_camera_1_local = 0 endif endif NVAR /Z sidx_camera_2_local = root:sidx_camera_2 if (NVAR_Exists(sidx_camera_2_local)) if (sidx_camera_2_local != 0) SIDXCameraClose sidx_camera_2_local, sidx_status sidx_camera_2_local = 0 endif endif NVAR /Z sidx_root_local = root:sidx_root if (NVAR_Exists(sidx_root_local)) if (sidx_root_local != 0) SIDXRootClose sidx_root_local, sidx_status sidx_root_local = 0 endif endif End Static Function CameraOpen() String sidx_camera_name_1 = "PVCAM PM1394Cam00" String sidx_camera_name_2 = "Andor Technology sCMOS 0" Variable sidx_status Variable sidx_root_local String sidx_license = "" SIDXRootOpen sidx_root_local, sidx_license, sidx_status if (sidx_status != 0) printf "SIDXRootOpen failed\r" return sidx_status endif SIDXRootCameraScan sidx_root_local, sidx_status if (sidx_status != 0) ErrorSIDXRoot(sidx_root_local, "SIDXRootCameraScan") SIDXRootClose sidx_root_local, sidx_status return sidx_status endif Variable sidx_camera_1_local SIDXRootCameraOpenName sidx_root_local, sidx_camera_name_1, sidx_camera_1_local, sidx_status if (sidx_status != 0) ErrorSIDXRoot(sidx_root_local, "SIDXRootCameraOpenName") SIDXRootClose sidx_root_local, sidx_status return sidx_status endif printf "Opened camera: %s\r", sidx_camera_name_1 Variable sidx_camera_2_local SIDXRootCameraOpenName sidx_root_local, sidx_camera_name_2, sidx_camera_2_local, sidx_status if (sidx_status != 0) ErrorSIDXRoot(sidx_root_local, "SIDXRootCameraOpenName") SIDXRootClose sidx_root_local, sidx_status return sidx_status endif printf "Opened camera: %s\r", sidx_camera_name_2 Variable/G sidx_root = sidx_root_local Variable/G sidx_camera_1 = sidx_camera_1_local Variable/G sidx_camera_2 = sidx_camera_2_local return sidx_status End Static Function CameraSetUp() Variable sidx_status NVAR sidx_camera_1_local = root:sidx_camera_1 NVAR sidx_camera_2_local = root:sidx_camera_2 SIDXCameraExposeSet sidx_camera_1_local, 0.01, sidx_status if (sidx_status != 0) ErrorSIDXCamera(sidx_camera_1_local, "SIDXCameraExposeSet") return sidx_status endif SIDXCameraAcquireImageSetLimit sidx_camera_1_local, 0, sidx_status if (sidx_status != 0) ErrorSIDXCamera(sidx_camera_1_local, "SIDXCameraAcquireImageSetLimit") return sidx_status endif Variable sidx_acquire_1_local SIDXCameraAcquireOpen sidx_camera_1_local, sidx_acquire_1_local, sidx_status if (sidx_status != 0) ErrorSIDXCamera(sidx_camera_1_local, "SIDXCameraAcquireOpen") return sidx_status endif Variable/G sidx_acquire_1 = sidx_acquire_1_local SIDXCameraExposeSet sidx_camera_2_local, 0.04, sidx_status if (sidx_status != 0) ErrorSIDXCamera(sidx_camera_2_local, "SIDXCameraExposeSet") return sidx_status endif SIDXCameraAcquireImageSetLimit sidx_camera_2_local, 0, sidx_status if (sidx_status != 0) ErrorSIDXCamera(sidx_camera_2_local, "SIDXCameraAcquireImageSetLimit") return sidx_status endif Variable sidx_acquire_2_local SIDXCameraAcquireOpen sidx_camera_2_local, sidx_acquire_2_local, sidx_status if (sidx_status != 0) ErrorSIDXCamera(sidx_camera_2_local, "SIDXCameraAcquireOpen") return sidx_status endif Variable/G sidx_acquire_2 = sidx_acquire_2_local return sidx_status End Static Function CameraAcquire() String sidx_image_name_1 = "PVCAM PM1394Cam00" String sidx_image_name_2 = "Andor Technology sCMOS 0" NVAR sidx_acquire_1_local = root:sidx_acquire_1 NVAR sidx_acquire_2_local = root:sidx_acquire_2 Variable sidx_status SIDXAcquireStart sidx_acquire_1_local, sidx_status if (sidx_status != 0) ErrorSIDXAcquire(sidx_acquire_1_local, "SIDXAcquireStart") return sidx_status endif SIDXAcquireStart sidx_acquire_2_local, sidx_status if (sidx_status != 0) ErrorSIDXAcquire(sidx_acquire_2_local, "SIDXAcquireStart") return sidx_status endif Variable sidx_previous_image_count_1 = 0 Variable sidx_image_count_1 = 0; Variable sidx_acquiring_1 = 1 Variable sidx_previous_image_count_2 = 0 Variable sidx_image_count_2 = 0; Variable sidx_acquiring_2 = 1 do Sleep /T 1 Variable keys = GetKeyState(0) if ((keys & 32) != 0) // The escape key is pressed. Terminate the acquisition break; endif SIDXAcquireGetStatus sidx_acquire_1_local, sidx_acquiring_1, sidx_status if (sidx_status != 0) ErrorSIDXAcquire(sidx_acquire_1_local, "SIDXAcquireGetStatus") break endif SIDXAcquireImageGetCount sidx_acquire_1_local, sidx_image_count_1, sidx_status if (sidx_status != 0) ErrorSIDXAcquire(sidx_acquire_1_local, "SIDXAcquireImageGetCount") break endif Variable sidx_new_image_count = sidx_image_count_1 - sidx_previous_image_count_1 if (sidx_new_image_count > 0) // Read the last image for display SIDXAcquireReadSetPosition sidx_acquire_1_local, sidx_image_count_1 - 1, sidx_status if (sidx_status != 0) ErrorSIDXAcquire(sidx_acquire_1_local, "SIDXAcquireReadSetPosition") break endif SIDXAcquireRead sidx_acquire_1_local, 1, $sidx_image_name_1, sidx_status if (sidx_status != 0) ErrorSIDXAcquire(sidx_acquire_1_local, "SIDXAcquireRead") break endif CheckDisplayed/A $sidx_image_name_1 if (V_flag != 0) DoUpdate else Display; AppendImage $sidx_image_name_1 endif sidx_previous_image_count_1 = sidx_image_count_1 endif SIDXAcquireGetStatus sidx_acquire_2_local, sidx_acquiring_2, sidx_status if (sidx_status != 0) ErrorSIDXAcquire(sidx_acquire_2_local, "SIDXAcquireGetStatus") break endif SIDXAcquireImageGetCount sidx_acquire_2_local, sidx_image_count_2, sidx_status if (sidx_status != 0) ErrorSIDXAcquire(sidx_acquire_2_local, "SIDXAcquireImageGetCount") break endif sidx_new_image_count = sidx_image_count_2 - sidx_previous_image_count_2 if (sidx_new_image_count > 0) // Read the last image for display SIDXAcquireReadSetPosition sidx_acquire_2_local, sidx_image_count_2 - 1, sidx_status if (sidx_status != 0) ErrorSIDXAcquire(sidx_acquire_2_local, "SIDXAcquireReadSetPosition") break endif SIDXAcquireRead sidx_acquire_2_local, 1, $sidx_image_name_2, sidx_status if (sidx_status != 0) ErrorSIDXAcquire(sidx_acquire_2_local, "SIDXAcquireRead") break endif CheckDisplayed/A $sidx_image_name_2 if (V_flag != 0) DoUpdate else Display; AppendImage $sidx_image_name_2 endif sidx_previous_image_count_2 = sidx_image_count_2 endif while (sidx_acquiring_1 && sidx_acquiring_2) SIDXAcquireAbort sidx_acquire_1_local, sidx_status if (sidx_status != 0) ErrorSIDXAcquire(sidx_acquire_1_local, "SIDXAcquireAbort") endif SIDXAcquireAbort sidx_acquire_2_local, sidx_status if (sidx_status != 0) ErrorSIDXAcquire(sidx_acquire_2_local, "SIDXAcquireAbort") endif return sidx_status End Static Function ErrorSIDXRoot(sidx_root_local, function_name) Variable sidx_root_local String function_name String message_root = "" Variable status SIDXRootGetLastError sidx_root_local, message_root printf "%s: %s\r", function_name, message_root SIDXRootClose sidx_root_local, status End Static Function ErrorSIDXCamera(sidx_camera_local, function_name) Variable sidx_camera_local String function_name String message_camera = "" Variable status SIDXCameraGetLastError sidx_camera_local, message_camera printf "%s: %s\r", function_name, message_camera End Static Function ErrorSIDXAcquire(sidx_acquire_local, function_name) Variable sidx_acquire_local String function_name String message_acquire = "" Variable status SIDXAcquireGetLastError sidx_acquire_local, message_acquire printf "%s: %s\r", function_name, message_acquire End