W.,
There are multiple concepts in play, but in general, the customer is right that there is a central resource that is shared by the calls he is making – even when he is making them from different threads.
Unless chosen otherwise (see further below), the component creates a single connection to each target OPC server (one OPCServer object), and it also minimizes or at least reduces the number of OPC Groups created there.
This is one reason why the results in those threads seem dependent: With a bit of simplification, we can say that there is a single thread that takes care of requests made to each target OPC server. If a function call made to that OPC Server blocks for long time, not only this particular request, but also others that are waiting in queue may time out. It looks like that the TOP Server isn’t responding for some time – maybe they are forcing a sync read from device?
This behavior is by design.
The customer should be able to get around it by setting the Isolated property (
www.opclabs.com/onlinedocs/QuickOpcNet/5.03/Reference/html/P..._EasyDAClientMode_Isolated.htm ) to True (this is a property of
EasyDAClientMode object, contained in ClientMode property of the main EasyDAClientMode object).
This is how it works: By default, Isolated is False everywhere. All calls made on EasyDAClient objects whose ClientMode.Isolated property is False will use a single, shared connection to each target OPC Server.
If you set ClientMode.Isolated to True, calls made while this is in effect will use a connection to target OPC Server that is specific to that instance of EasyDAClient object you are making call on. So, for example, if you set ClientMode.Isolated to True on each EasyDAClient mode object immediately after you create it, each of these objects will then create and maintain its OWN connection to every target OPC Server. The code can also make dynamic changes to ClientMode.Isolated to achieve various results.
I think that the customer can reprogram his application so that they use separate instances of EasyDAClient object (one instance per each thing that should remain independent – such as the device in the TOP Server), and set their ClientMode.Isolated to True after creation.
Best regards,
<span style="font-family: "Arial","sans-serif"; color: #1f497d; font-size: 10pt">Zbynek Zahradnik