12-08-2006 10:20 AM
12-08-2006 09:06 PM
Patrick,
I think the 2048 bytes per camera option would actually work, but it would depend on your application. Do you need to have the images taken sequentially, or would simultaneous be okay? Does it matter which image is taken first? Do you have to wait until after an event is complete (alignment, etc.) before taking the pictures?
When the cameras are running continuously and simultaneously, you can read either the last image taken (0 ms delay) or the next image acquired (up to 80 ms, probably less. Should average 40 ms). Worst case, if you have to make sure the image is taken after the event is complete, you need to wait an additional 80 ms after the event. Still, your maximum total delay is between 80 and 160 msec with an expected average of 120 msec. If you can setup the cameras to reset on a digital signal, you could get the wait down to 80 msec. The key thought here is that you can process both cameras in parallel, which cuts your delay time in half.
Bruce
12-11-2006 02:43 PM
Patrick
All acquisitions, single shot or continous, go through the exact same configuration. Most of the time in configuration is spent programming the camera. In order to program a FireWire camera the driver reads and writes several register on the camera. For historical reasons each register access is artificially delayed for 5ms. While most modern FireWire cameras can handle quick sucession of register accesses, some older FireWire cameras would lock up under these conditions. The good news is that you can remove this artificial delay if you are using a modern FireWire camera. Navigate to the registry key listed below and change the AsyncTransferDelay value from 5 to 0. Reboot the machine and the configuration time should go down.
For NI-IMAQ for IEEE 1394 2.0.x
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\imaq1394k\Parameters
AsyncTransferDelay = 0
For NI-IMAQdx 3.0
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\niimaqdxk\Parameters
AsyncTransferDelay = 0
While this should significantly speed up your configuration, I would not recommend that you perform configuration in a loop. Typically you should configure your resources once and then simply grab buffers as you need them. I would configure a continuous grab acquisition for each camera. If you only have one FireWire card, then divide the resources so that each camera uses 2048 bytes (when using 2 cameras). If you need to use the entire 4096 bytes per camera, then simply add a second FireWire card and dedicate each camera to a single FireWire card. With all your cameras programmed and acquisitions resources allocated, simple call GetImage inside the loop to get images from the different cameras.
Hope this helps,
Johann
12-13-2006 07:59 AM
Hi
Thanks for responses.
With my allignment applications 3 or 4 images are taken from each camera each cycle (which last 800ms), after each movement an image has to be read-out with the
current position, it should look something like: movement -> image1/2 -> movement -> image1/2 -> movement etc....
I've tried the suggestions but regradably this doesn't sattisfy me yet.
- Using two card instead of one: should do the thing in theory -> Problem; I have to sync with the next image cost avg 20ms, but secondly and even worse I
had a lot of distortions in the images.
- AsyncTransferDelay to 0 -> this speeds up the application pretty well, still stopping/clearing a grab cost approx 43ms, this is too much.
06-14-2007 08:59 AM
Hi,
One addition, for the ones using the Marlin F131 camera (probaly also the rest of the family), don´t put the discriped registry values to 0, but set them to 1. Otherwise you will have some problems writing the camera register every now and then.
Regards,
Patrick van den Akker