I’m finding that sometimes after doing a factory reset in code, the camera doesn’t appear to be ‘ready’ for the next command, and I get an exception. The reason why I think this may be a timing issue is that if I step through the code, it doesn’t happen.
var nodeMap = device.NodeMaps[NodeMapNames.Device];
//Reset to factory defaults
nodeMap.Set("Cust::fastReadoutMode", "Off"); //Exception here
The Exception is:
Stemmer.Cvb.CvbException: 'EnumerationNode[Cust::fastReadoutMode]: WriteMem
returned error: TL Error: -1001, WriteReg failed'
Is there a better way to do this (I don’t want to do Thread.Sleep!)
I think the issue here is that the camera need more time for loading the UserSet then the average node. This will probably also trigger read / write timeouts if you use this feature in the GenICam Browser. The GigE-Vision Standard does provide a so called PENDING_ACK message as a solution for this dilemma. This Pending Acknowledge can be used by the camera to share the information that the current task will take some time and can change the timeout for this specific task.
However, the camera you are using is probably not supporting this feature and therefore I do not know if we can figure out when exactly the camera is ready for new commands.
I will discuss this with my colleagues here and check if we can find a good solution for you.
Of course an alternative would be to set the Power-up configuration to Factory settings…
Yes, loading the factory settings as Power-up configuration would be the best solution I would say. We can not think of a workaround for this as this behavior is triggered by the camera, which clearly does not behave as it should.
That’s what I ended up doing. It doesn’t cover the case where someone has messed with the settings between two Opens, but I’ll live with that…