09-05-2012 09:10 AM
I am using a RT EVS with two Basler GigE Line-Scan cameras, both connected to one network port with a good switch. I use the FPGA to trigger the cameras' line triggers and frame triggers. The images complete for both cameras at exactly the same time, and the FPGA sets an IRQ for the RT program at that time. If I operate one camera at a time, I can acquire either image within 24ms of the IRQ. However, I have found only one way to get both images within 50ms, and it is a perplexing solution, and other simpler methods don't work. Here is my sequence of IMAQdx operations:
I have found that if I set the frame transmission delay for the first camera to 25ms, and the second camera to 0, then I can read both images properly in about 50ms. However, if I set the camera delays to what I consider a more logical configuration, with the first camera at 0ms, and the seconds camera at 25ms, then the first image comes in properly, but the second Get Image doesn't complete until 300ms, and the second image is scrambed junk. I tried increasing the delay of the second camera to 60ms, with the first camera still at 0, and the results is the same.
My concern is that I have to extend this application to 4 cameras, which trigger in pairs. I can use the transmission delays to ensure that they the camera streams don't interfere, but I have a harder time making sure that I don't call a Get Image for one camera while another is still streaming, and I don't expect to have to manage this. What is happening here?
(Frame transmission delay is actually set in camera ticks, but I converted to ms for simplicity)
09-05-2012 03:03 PM - edited 09-05-2012 03:04 PM
It sounds like you're seeing conflicts between the two cameras competing for the same transmission bandwidth. GigE Vision is all UDP-based and does not have any facility for arbitrating bandwidth automatically. By default, the Basler cameras are going to stream their images at 1000Mbit as soon as it is available. You can certainly arbitrate manually using transmission delays if you can guarantee it aligns with your triggers properly, but an easier way would be to use bandwidth throttling. There is a "Peak bandwidth desired" acquisition attribute that defaults to 1000Mbit. If you set each camera to 500Mbit then they will space out their traffic enough that they'll each only consume half the bandwidth of your single link.
Eric