800xa OPC connection fails with third party clients (OPCSurrugate)
In our plant we are running 800xa V6.0.1 we did an upgrade from 5.1D, total we have 8 PM866 PLC's running. We have setup up 2 Connectivity servers on top off that we have 2 OPC servers ( Application Servers).
We connect our third party clients to the Application servers (OPCSurrugate), connection is stable but after a couple off days (about every 5 days). The OPCSurrogate stops communicating and OPC connection is lost.
The only thing that works is to kill the OPCSurrogate service and reconnect. We have setup some OPC logs and the following error occurs:
COpcGroup::NewValues_2_0: ERROR: Fire_OnDataChange failed, Result: 0x800706bf.
Sometimes the OPCSurrogate seems to resolve this but after a while the complete OPC connection is down: ( See the log for more information )
Hopefully someone can help us with this problem.
Thanks in advance,
Answers
Advise() is the call that transforms a synchronous client into an asynchronous client (it may still opt for making synchronous calls though). Do you use the method below (as suggested to me by Stefan Stromqvist for another case). It may (or may not) be relevant in your case:
Calls "disturbing" the OPC server (forcing it to make a full roundtrip with the controller):
- ReadSync() from device
- ReadAsync()
Calls not causing any extra roundtrips:
- ReadSync() from cache
Most efficient method to subscribe:
AddGroup() active
AddItem() active
Advise()
Source: Stefan Stromqvist
Is there a setting in these products that can help ?
Thanks for your answer and quick reply

Based on this, the following Microsoft document may help.
https://social.technet.microsoft.com/...
Regards,
Geof Ledin
Does the surrogate or client increase and eventually run out of memory?
Deploy Windows Performance Monitor Counter Logs to keep a watch on the "Virtual Bytes" counter on these processes.
Thanks for your answer, i have spoken to our vendor and he comes with the following investigation.
ANALYZE LOGS
2019-02-11 20:19:25,036 90 ERROR MEScontrol.DataCenter.Server.DataConnection - Data connection failed to send write sequence to data source
MEScontrol.DataCenter.Server.DataExchangeException: Failed do exchange data with data source
---> Opc.ResultIDException: E_OUTOFMEMORY
IOPCItemMgt.AddItems
at OpcCom.Da20.Server.AddItems(Item[] items)
at OpcCom.Da20.Server.Write(ItemValue[] items)
at Opc.Da.Server.Write(ItemValue[] items)
2019-02-11 20:57:26,945 'PLC_ABB' OpcDataConnection worker thread ERROR MEScontrol.DataCenter.Server.DataConnection - SendSubscriptionData error: MEScontrol.DataCenter.Server.DataExchangeException: Failed do exchange data with data source ---> System.Runtime.InteropServices.COMException: Error HRESULT E_FAIL has been returned from a call to a COM component.
at OpcRcw.Comn.IOPCCommon.GetLocaleID(Int32& pdwLcid)
at OpcCom.Da20.Server.AddItems(Item[] items)
at OpcCom.Da20.Server.Read(Item[] items)
at Opc.Da.Server.Read(Item[] items)
UIT TE ZOEKEN
De E_OUTOFMEMORY fout lig waarschijnlijk aan de bron van de problemen ?
OPC server execute the following sequence:
(Connection is made, for reads a fixed OPC group)
IOPCCommon.GetLocaleID
IOPCGroupStateMgt.SetState set group inactive
IOPCItemMgt.AddItems voegt de items toe (This fails with the following error E_OUTOFMEMORY)
IOpcItemMgt.SetActiveState zet alle items actief voor alle items waar er een MaxAge is en de MaxAge nog niet bereikt is
IOpcSyncIO.Read voor deze items – de read from OPC server with the following flag “from cache” ()
IOpcSyncIO.Read voor alle andere items;
IOPcItemMgt.RemoveItems voor alle items – de read wordt aan de OPC server gevraagd met de vlag “uit device” (zelfde opmerking)
AddItems en RemoveItems zitten in een try-finally block
Does the errort E_OUTOFMEMORY comes from the OPC Server?
Maybe you see some strange things ? Maybe an error or strange behaviour, looks like the some Error but what can we do about the OUTOFMEMORY error.
Hopefully you can help us with this.
Thanks in advance,
Add new comment