Hello,
I have come across a situation in your EasyOpcUADemo application under QuickOPC 5.3\ExamplesNet that causes a complete freeze of the application. See the attached file for steps to reproduce.
An issue similar to the one discribed above also happens on our HMI. When OPC Logging is disabled it never recovers. When I enable the OPC logging I get the following crash:
System.Threading.LockRecursionException: Recursive read lock acquisitions not allowed in this mode.
at System.Threading.ReaderWriterLockSlim.TryEnterReadLockCore(TimeoutTracker timeout)
at System.Threading.ReaderWriterLockSlim.TryEnterReadLock(TimeoutTracker timeout)
at OpcLabs.EasyOpc.UA.EasyUAClient.DisposeGuard[TResult](Func`1 func)
at OpcLabs.EasyOpc.UA.EasyUAClient.DisposeGuardNotNull[TResult](Func`1 func)
at OpcLabs.EasyOpc.UA.EasyUAClient.WriteMultiple(UAWriteArguments[] writeArgumentsArray)
at OpcLabs.EasyOpc.UA.IEasyUAClientExtension.WriteMultipleValues(IEasyUAClient easyUAClient, UAWriteValueArguments[] writeValueArgumentsArray)
at OpcLabs.EasyOpc.UA.IEasyUAClientExtension.WriteValue(IEasyUAClient easyUAClient, UAWriteValueArguments writeValueArguments)
at OpcLabs.EasyOpc.UA.IEasyUAClientExtension.WriteValue(IEasyUAClient easyUAClient, UAEndpointDescriptor endpointDescriptor, UANodeDescriptor nodeDescriptor, Object value, Type valueType)
at OpcLabs.EasyOpc.UA.IEasyUAClientExtension.WriteValue(IEasyUAClient easyUAClient, UAEndpointDescriptor endpointDescriptor, UANodeDescriptor nodeDescriptor, Object value)
at DGpS.OPC.UAClient.Write(String serverUri, String nodeId, Object value)
at DGpS.OPC.UAClient.Write(Int32 handle, Object value)
at GenericUserControls.UserControls.OpcImageButton.MinPulsDeltatime()
at GenericUserControls.UserControls.OpcImageButton.OnMouseUp(MouseEventArgs e)
at GenericUserControls.UserControls.OpcImageButton.OnLostFocus(EventArgs e)
at System.Windows.Forms.Control.WmKillFocus(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
With the following logs:
File Attachment:
File Name:
HMI.txt
File Size:672 KB
What is happening is that we have a button writing a boolean value of true and then starts a timer, after 100ms it writes false. Just before we press this button we disconnect the network cable to "fake" a connection loss.
We obviously cant have the OPC logger running at all times as it does not use a ring buffer and would just overflow the system with huge logs. (Can I Feature request that?)
Best regards
Erik