Im Folgenden werden alle Funktionen und Parameter aufgeführt, die für den Memory-Modus einer GigE uEye Kamera benötigt werden. Der Memory-Modus wird über die Funktion is_Transfer() aktiviert.
is_Transfer() |
|
|---|---|
TRANSFER_CMD_GET_IMAGE_DESTINATION_CAPABILITIES |
Gibt zurück, welchen Memory-Modus die Kamera unterstützt: •IS_TRANSFER_DESTINATION_DEVICE_MEMORY = 1 •IS_TRANSFER_DESTINATION_USER_MEMORY = 2 |
TRANSFER_CMD_SET_IMAGE_DESTINATION |
Setzt den aktuellen Zielspeicher |
TRANSFER_CMD_GET_IMAGE_DESTINATION |
Gibt den aktuellen Zielspeicher zurück |
Beispiel
INT nRet = IS_SUCCESS;
/* Check if camera memory is supported */
UINT nCaps = 0;
nRet = is_Transfer(hCam, TRANSFER_CMD_GET_IMAGE_DESTINATION_CAPABILITIES, (void*)&nCaps, sizeof(nCaps));
if ((nRet == IS_SUCCESS) && ((nCaps & IS_TRANSFER_DESTINATION_DEVICE_MEMORY) != 0))
{
/* Enable camera memory mode */
TRANSFER_TARGET transferTarget = IS_TRANSFER_DESTINATION_DEVICE_MEMORY;
nRet = is_Transfer(hCam, TRANSFER_CMD_SET_IMAGE_DESTINATION, (void*)&transferTarget , sizeof(transferTarget ));
}
Für den Memory-Modus existieren vier Trigger-Modi (je 2 im Pre- und Post-Trigger-Modus), die über die Funktion is_SetExternalTrigger() gesetzt werden müssen, bevor der Memory-Modus verwendet werden kann. Zwei dieser vier Trigger-Modi wurden mit Version 4.20 eingeführt und funktionieren nur in Verbindung mit dem Memory-Modus. Daher führt die Verwendung der Trigger-Modi IS_SET_TRIGGER_PRE_HI_LO und IS_SET_TRIGGER_PRE_LO_HI ohne Aktivierung des Memory-Modus zu einem Fehler beim Aufruf von is_CaptureVideo().
is_SetExternalTrigger() |
|
|---|---|
IS_SET_TRIGGER_HI_LO |
Aktiviert im Memory-Modus den Post-Trigger (fallende Flanke) |
IS_SET_TRIGGER_HI_LO |
Aktiviert im Memory-Modus den Post-Trigger (steigende Flanke) |
IS_SET_TRIGGER_PRE_HI_LO |
Aktiviert im Memory-Modus den Pre-Trigger (fallende Flanke) |
IS_SET_TRIGGER_PRE_LO_HI |
Aktiviert im Memory-Modus den Pre-Trigger (steigende Flanke) |
Zusätzlich kann über is_Trigger() die Triggerburst-Größe angegeben werden. Diese wirkt sich abhängig vom eingestellten Trigger-Modus unterschiedlich aus. Im Post-Trigger-Modus gibt der Trigger-Burst die Anzahl Bilder an, die nach dem Triggersignal neu vom Sensor angefordert werden (Snapshot-Betrieb, d.h. "getriggerte Aufnahme"). Im Pre-Trigger-Modus läuft die Kamera im "Freerun" bis ein Triggersignal kommt. Dann werden noch n Bilder aufgenommen, wobei n die Triggerburst-Größe ist. Der Defaultwert für die Triggerburst-Größe ist im Post-Trigger-Modus 1 und im Pre-Trigger-Modus 0.
is_Trigger() |
|
|---|---|
IS_TRIGGER_CMD_GET_BURST_SIZE_SUPPORTED |
Gibt zurück, die Kamera den Burst-Triggermodus unterstützt (aktuell nur GigE uEye Kameras) |
IS_TRIGGER_CMD_GET_BURST_SIZE_RANGE |
Gibt den Wertebereich, den Standardwert und das Inkrement für die Anzahl der Bilder in einem Burst zurück. |
IS_TRIGGER_CMD_GET_BURST_SIZE |
Gibt die aktuell eingestellte Anzahl der Bilder in einem Burst zurück. |
IS_TRIGGER_CMD_SET_BURST_SIZE |
Setzt die Anzahl der Bilder in einem Burst. |
Beispiel
INT nRet = IS_SUCCESS;
/* Enable pre-trigger mode */
nRet = is_SetExternalTrigger(hCam, IS_SET_TRIGGER_PRE_HI_LO);
/* Set trigger burst size to 5 */
UINT nBurstSize = 5;
nRet = is_Trigger(hCam, IS_TRIGGER_CMD_SET_BURST_SIZE, (void*)&nBurstSize, sizeof(nBurstSize));
Die Aufnahme wird über is_CaptureVideo() gestartet. In diesem Zustand wird kontinuierlich auf ein Triggersignal gewartet. Jedes Triggersignal löst eine "Iteration" aus. Wurde eine Iteration beendet, wird das Event IS_SET_EVENT_CAMERA_MEMORY bzw. die Windows-Message IS_CAMERA_MEMORY gesendet (sofern diese zuvor aktiviert wurden). Sobald der Kameraspeicher voll ist, wird keine Iteration mehr ausgelöst und die Anzahl der Fehltrigger wird inkrementiert. Sobald eine Iteration gelöscht wird, ist wieder Platz im Kameraspeicher und die Kamera reagiert wieder auf das Triggersignal.
|
Achtung: Derzeit kann das kontinuierliche Warten auf Triggersignale nicht durch is_StopLiveVideo() unterbrochen werden, da dann der Zugriff auf den Kameraspeicher nicht mehr möglich ist. Auch is_FreezeVideo() ist nicht möglich, d.h. es kann nicht auf ein einzelnes Tirggersignal gewartet werden, da dieses Verhalten technisch dem von is_StopLiveVideo() entspricht. In einer kommenden Version soll dies aber möglich sein. |
Der Zugriff auf den Kameraspeicher erfolgt über die Funktion is_ImageBuffer().
is_ImageBuffer() |
|
|---|---|
IS_IMGBUF_DEVMEM_CMD_GET_AVAILABLE_ITERATIONS |
Gibt die Anzahl der Iterationen zurück, die momentan im Kameraspeicher vorhanden sind. |
IS_IMGBUF_DEVMEM_CMD_GET_ITERATION_INFO |
Gibt Informationen über eine spezielle Iteration zurück, z. B. die Anzahl der enthaltenen Bilder. |
IS_IMGBUF_DEVMEM_CMD_TRANSFER_IMAGE |
Überträgt ein Bild aus einer Iteration im Kameraspeicher in den Benutzerpuffer im PC. |
IS_IMGBUF_DEVMEM_CMD_RELEASE_ITERATIONS |
Gibt alle Iterationen bis zur angegebenen ID im Kameraspeicher frei. |
Beispiel
INT nRet = IS_SUCCESS;
ID_RANGE iterationRange;
/* Get range of all available iterations */
nRet = is_ImageBuffer(hCam, IS_IMGBUF_DEVMEM_CMD_GET_AVAILABLE_ITERATIONS, &iterationRange,
sizeof(iterationRange));
if (nRet == IS_SUCCESS)
{
UINT u32FirstIterationID = iterationRange.u32First;
UINT u32LastIterationID = iterationRange.u32Last;
/* Get infos about the first iteration */
IMGBUF_ITERATION_INFO iterationInfo;
iterationInfo.u32IterationID = u32FirstIterationID;
INT nRet = is_ImageBuffer(hCam, IS_IMGBUF_DEVMEM_CMD_GET_ITERATION_INFO, &iterationInfo,
sizeof(iterationInfo));
if (nRet == IS_SUCCESS)
{
UINT u32FirstImageID = iterationInfo.rangeImageID.u32First;
UINT u32LastImageID = iterationInfo.rangeImageID.u32Last;
/* Transfer last image to active user buffer */
IMGBUF_ITEM bufferItem;
bufferItem.u32ImageID = u32LastImageID;
bufferItem.u32IterationID = u32FirstIterationID;
nRet = is_ImageBuffer(hCam, IS_IMGBUF_DEVMEM_CMD_TRANSFER_IMAGE, (void*)&bufferItem,
sizeof(bufferItem));
}
/* Release all iterations up to the last available iteration */
nRet = is_ImageBuffer(hCam, IS_IMGBUF_DEVMEM_CMD_RELEASE_ITERATIONS, (void*)
&iterationRange.u32Last, sizeof(iterationRange.u32Last));
}
Pre-Trigger-Modus (die Kamera läuft im "Freerun")
is_CaptureVideo(): Die Kamera wartet kontinuierlich auf Triggersignale. Jedes Triggersgnal erzeugt eine weitere Iteration. Wenn der Kameraspeicher voll ist, werden weitere Triggersignale ignoriert und es kommt zu Fehl-Triggern. Im Treiber 4.20 ist nach is_StopLiveVideo() kein Zugriff auf den Kameraspeicher mehr möglich. Im Pre-Trigger-Modus kann auch auf Bilder zugegriffen werden, die vor dem Triggersignal im Kameraspeicher gespeichert wurden.
•m: Triggerburst-Größe
•nx: Aufgenommene Bilder seit der letzten Iteration oder seit dem Start. Die Anzahl der Bilder kann über dwImageBuffers bzw. dwImageBuffersInUse in der Struktur UEYEIMAGEINFO (siehe is_GetImageInfo()) erfragt werden.

Abb. 194: Iterationen im Kameraspeicher (Pre-Tigger-Modus)
Post-Trigger-Modus (die Kamera läuft im "Snapshot-Modus")
is_CaptureVideo(): Die Kamera wartet kontinuierlich auf Triggersignale. Jedes Triggersignal erzeugt eine weitere Iteration. Wenn der Kameraspeicher voll ist, werden weitere Triggersignale ignoriert und es kommt zu Fehltriggern. Im Treiber 4.20 ist nach is_StopLiveVideo() kein Zugriff auf den Kameraspeicher mehr möglich.
•m: Triggerburst-Größe

Abb. 195: Iterationen im Kameraspeicher (Post-Tigger-Modus)