Balluff - BVS CA-GX0 / BVS CA-GX2 Technical Documentation
|
The SmartFrameRecall is a new, FPGA based smart feature which takes the data handling of industrial cameras to a new level.
So far, the entire data amount has to transferred to the host PC whereby the packetizer in the camera split the data packages and distributed them to the two Gigabit Ethernet lines. On the host PC, the data was merged again, shrank, and this AOI was possibly processed (Figure 1).
This procedure has several disadvantages:
The SmartFrameRecall is a new data handling approach which buffers the hi-res images in the camera and only transfers thumbnails. You or your software decides on the host PC which AOI should be sent to the host PC (Figure 2).
This approach allows
First of all, clarify if the SmartFrameRecall makes sense to be used in your application:
If you can, your application can do so too, and then SmartFrameRecall is the right framework for you. To use the SmartFrameRecall follow these steps:
#include <mvIMPACT_CPP/mvIMPACT_acquire.h> #include <mvIMPACT_CPP/mvIMPACT_acquire_GenICam.h> ... GenICam::ChunkDataControl cdc( pDev ); cdc.chunkModeActive.write( bTrue ); cdc.chunkSelector.writeS( "Image" ); cdc.chunkEnable.write( bTrue ); cdc.chunkSelector.writeS( "mvCustomIdentifier" ); cdc.chunkEnable.write( bTrue ); ...
It is necessary to activate the chunk data that your application can easily distinguish frames belonging to the normal stream from the ones requested by the host application.
... GenICam::ImageFormatControl ifc( pDev ); ifc.decimationHorizontal.write( 16 ); ifc.decimationVertical.write( 16 ); ...
... GenICam::AcquisitionControl ac( pDev ); ac.mvSmartFrameRecallEnable.write( bTrue ); ...
This will configure the devices internal memory to store each frame (that gets transmitted to the host) in full resolution. These images can be requested by an application when needed. As soon as the memory is full, the oldest one will be removed from the memory whenever a new one becomes ready (FIFO).
... struct ThreadParameter { Device* pDev; GenICam::CustomCommandGenerator ccg; ... } ... unsigned int DMR_CALL liveThread( void* pData ) { ThreadParameter* pThreadParameter = reinterpret_cast<ThreadParameter*>( pData ); ... pThreadParameter->ccg.requestTransmission( pRequest, x, y, w, h, rtmFullResolution, cnt ); ... } ...
The last parameter of requestTransmission will be written into the chunkmvCustomIdentifier and your application can recognize the request.
We provide