GenICam Plugin: Issue with Mikrotron EoSens 4CXP with Active Silicon FireBird CoaXPress Frame Grabber (Quad CXP-6)

Issue #8 resolved
Moritz Straub created an issue

I want to use a Mikrotron EoSens 4CXP with an Active Silicon FireBird CoaXPress Frame Grabber (Quad CXP-6).

ITOM 4.0.0 (same as with 3.2.1 and 3.2.0) doesn’t seem to work. When e.g. executing the attached ‘itom_example.py’, I get a ‘timeout occurred' error, see 'itom_console_4.0.0.txt’ for the output of the console.

I discovered, that I can use my hardware setup with ITOM 3.1.0. When using this version, I get an image from executing the same script as above, see 'itom_console_3.1.0.txt’ for the output of the console.

Unfortunately, I cannot see the exact reason for this issue, but when looking into the commits I can identify the commit 'afa9a19' as the first non-working. This seems rather strange to me, since this commit states 'GenICam: first running version for CoaXPress cameras' and even adds my hardware as tested (This plugin has been tested with the following cameras: … Mikrotron (CoaXPress) with Active Silicon Framegrabber (FireBird) …).

Comments (9)

  1. M. Gronle

    Hi Moritz,

    Thanks for writing this issue. I will try to figure some things out but might probably need a little bit of help from you since I don't have access to a Mikrotron camera. I adapted the Genicam for CoaXPress cameras (which is much more complicated than USB or GigE) with the help of a student from another university a couple of years ago.

    However I guess that I cannot start analyzing the problem within the next two weeks, since I am on holidays with limited internet access.

    Best regards

    Marc Gronle

  2. Moritz Straub reporter

    Hi Marc,

    Thank you for the quick response. I’ll assist you if possible. Since 3.1.0 is working as a workaround, the issue is not urgent and thus no need to hurry.

    Best regards

    Moritz Straub

  3. M. Gronle

    Hi Moritz,

    if you have time, could you please check the values of the following parameters, e.g. using print(getParam(“xxx”)) before you start with startDevice:

    • AcquisitionMode
    • TriggerMode
    • TriggerSource

    Please modify your script and explicitily set AcquisitionMode to either Continuous or SingleFrame (I hope that both are possible, else one of these).

    Please add a print-statement in python before acquire, startDevice and copyVal, such that I can better identify these commands in your log file.

    Then please try the following combinations of the parameters above:

    AcquisitionMode=Continuous, TriggerMode=Off, TriggerSource=Software

    AcquisitionMode=Continuous, TriggerMode=On, TriggerSource=Software

    AcquisitionMode=SingleFrame, TriggerMode=Off, TriggerSource=Software

    AcquisitionMode=SingleFrame, TriggerMode=On, TriggerSource=Software

    If you would provide the log files for these configurations, I hope to get more information. It would be sufficient to get the logs from the first setParam command on, e.g. by

    cam = dataIO('GenICam', GenTLProducer='Active Silicon', verbose=3)
    clc()  # clear the command line
    cam.setParam('integration_time', 0.019998)
    cam.setParam('TriggerMode', 'Off')
    cam.setParam('AcquisitionFrameRate', 50)
    cam.setParam('numBuffers', 5)
    
    img = dataObject()
    print("startDevice")
    cam.startDevice()
    print("acquire")
    cam.acquire()
    print("copyVal")
    cam.copyVal(img)
    plot(img)
    

    Cheers

    Marc

  4. Moritz Straub reporter

    Hi Marc,

    it seem like the setParam command sets the correct values. I can only choose Continuous as the AcquisitionMode, SingleFrame does not exist for my setup. As for the TriggerMode , I tried both options resulting in the same error (see itom_4.0.0_triggermode_off.txt and itom_4.0.0_triggermode_on.txt). The text files contain the console output for verbose level 5. Are there any other log files I could provide?

    Here is the code I used:

    cam = dataIO('GenICam', GenTLProducer='Active Silicon', verbose=5)
    clc()
    cam.setParam('integration_time', 0.019998)
    cam.setParam('AcquisitionFrameRate', 50)
    cam.setParam('numBuffers', 5)
    
    cam.setParam('AcquisitionMode', 'Continuous') # Continuous | SingleFrame
    print(cam.getParam('AcquisitionMode'))
    cam.setParam('TriggerMode', 'Off') # On | Off
    print(cam.getParam('TriggerMode'))
    cam.setParam('TriggerSource', 'Software')
    print(cam.getParam('TriggerSource'))
    
    img = dataObject()
    print('startDevice')
    cam.startDevice()
    print('acquire')
    cam.acquire()
    print('copyVal')
    cam.copyVal(img)
    plot(img)
    cam.stopDevice()
    del cam
    

    Best regards

    Moritz

  5. M. Gronle

    Intermediate results:

    • The problem seems to be the command

      m_stream->flushBuffers(GenTL::ACQ_QUEUE_ALL_TO_INPUT);

      in the startDevice(…) method.

    • If this command is removed, the denoted camera from Mikrotron with an ActiveSilicon framegrabber seems to work.

    • However, this command has been added in commit 58531b66 in order to support this “old” camera: Allied Vision, Goldeye G-008 SWIR (GigE)
    • Cameras from Ximea, Baumer, other Allied Vision cameras, cameras from Vistek… seem to work without this command

    Question:

    The same command is also called if a timeout occurs when waiting for new buffers. How to handle this there?

    This has to be tested a little bit more. Intermediate solution:
    Make an additional init parameter to enable / disable this specific flush command in both startDevice() and waitForNewestBuffer(). Default: disabled.

    Todo: Test this with other cameras, especially the Goldeye G-008 SWIR.

  6. Log in to comment