Professional OPC
Development Tools

logos

Online Forums

Technical support is provided through Support Forums below. Anybody can view them; you need to Register/Login to our site (see links in upper right corner) in order to Post questions. You do not have to be a licensed user of our product.

Please read Rules for forum posts before reporting your issue or asking a question. OPC Labs team is actively monitoring the forums, and replies as soon as possible. Various technical information can also be found in our Knowledge Base. For your convenience, we have also assembled a Frequently Asked Questions page.

Do not use the Contact page for technical issues.

Failure -1073430509 after several easyDA.ReadMultipleItems

More
09 Oct 2013 18:44 #1465 by support
Hi, thank you for update.

Please Log in or Create an account to join the conversation.

More
09 Oct 2013 18:01 #1463 by Flintstone
Hi,

Thank you for your prompt response.

I am using QuickOPC 5.2. I just purchased the product last week so I believe that I am using the
latest release. I believe that this problem was network related and not an issue with your product.

When the failures were happening, I was developing and testing my code from our corporate domain. The control system on which our OPC server resides is actually a subdomain of the corporate domain. Now that I moved my development PC to the actual control system domain, I am not longer experiencing these issues.

Again, thank you for your quick reply.

Please Log in or Create an account to join the conversation.

More
07 Oct 2013 04:14 #1455 by support
Dear Sir,
there can be two classes of reasons for "read not completed" error:

- The target OPC server takes very long time to complete the read operation, or is somehow blocked or hanged. This is (from or point of view) a legitimate cause for this error, the reason why it exists.
- Some kind of internal error/bug in our component. We have had reports of this in the past, but it always appeared very rarely, only to the customer, and we were not able to reproduce it. It looks like than a background thread that handles the operations in our component may be blocked or terminated, causing the error.

In fact we are currently setting up a stress test system where we aim to trigger such rare failures if they exist - and then fix it. But that will take longer - not be a matter of days.

In your case, I am quite surprised that it is so "easy" to invoke this problem. Either it is truly cause by the target OPC server in this case, or you have (by accident) managed to find the "right" way to cause it.

Would it behave the same if you changed the target OPC server to something else - e.g. our simulation server?

I would be happy to work with you, if you agree, to get the structure of your program over from you, and try to reproduce the problem here. I will be, however, on travel until Wednesday, so can only pick it up then.

Which version and build are you using please?


Best regards

Please Log in or Create an account to join the conversation.

More
07 Oct 2013 01:25 #1454 by Flintstone
I have written several classes with the general format shown below. Most of the DAItemDescriptor[] objects have between 25 and 30 elements. (The one shown below has less for brevity.) I am instantiating these classes and using them as shown at the bottom of the page. I instantiate six different classes, each similar to this one, and return the DAVtqResult[] for each. (These are done consecutively in my program.) The problem that I am having is that after two (2) or three (3)returns of the DAVtqResult[], I start getting failures. (Failure -1073430509 (0xC004C013): Read not completed) Each of these classes work individually, and if I rearrange their order, the first two always work. For example, if I have six classes named Class1, Class2, Class3, Class4, Class5, and Class6, and I call them in the orders shown below, this is how they behave.

Class1 - works
Class2 - works
Class3 - may or may not work - may have some failures and some successes or all failures
Class4 - may or may not work - may have some failures and some successes or all failures
Class5 - may or may not work - may have some failures and some successes or all failures
Class6 - may or may not work - may have some failures and some successes or all failures

or if I call them in this order

Class5 - works
Class6 - works
Class1 - may or may not work - may have some failures and some successes or all failures
Class2 - may or may not work - may have some failures and some successes or all failures
Class3 - may or may not work - may have some failures and some successes or all failures
Class4 - may or may not work - may have some failures and some successes or all failures

or if I call them in this order

Class3 - works
Class4 - works
Class5 - may or may not work - may have some failures and some successes or all failures
Class6 - may or may not work - may have some failures and some successes or all failures
Class1 - may or may not work - may have some failures and some successes or all failures
Class2 - may or may not work - may have some failures and some successes or all failures

Is there something that I am not doing correctly? Thank you for any guidance you can give.

// C# code
using OpcLabs.EasyOpc.DataAccess;

namespace WpfHost
{
class ExtruderExam
{
public DAVtqResult[] AllExtruders;

public ExtruderExam ()
{
AllExtruders = checkExtruders();
}

private DAVtqResult[] checkExtruders()
{
// Create the OPC Client object
EasyDAClient easyDAClient = new EasyDAClient();

// Create an OPC Server object
OpcLabs.EasyOpc.ServerDescriptor opcServer = new OpcLabs.EasyOpc.ServerDescriptor("04PRDP1S", "OPCServer.WinCC.1");

// Create all the items to read
DAItemDescriptor[] allItems = new DAItemDescriptor[4];

allItems[0] = new DAItemDescriptor("L1_OVERVIEW/L1_EXTRUDERS/L1_EXTRUDER1/DRV_EX1/MTR.Fwd#Value");
allItems[1] = new DAItemDescriptor("L1_OVERVIEW/L1_EXTRUDERS/L1_EXTRUDER2/DRV_EX2/MTR.Fwd#Value");
allItems[2] = new DAItemDescriptor("L1_OVERVIEW/L1_EXTRUDERS/L1_EXTRUDER3/DRV_EX3/MTR.Fwd#Value");
allItems[3] = new DAItemDescriptor("L1_OVERVIEW/L1_EXTRUDERS/L1_EXTRUDER4/DRV_EX4/MTR.Fwd#Value");

// Declare the object that will hold all the info for the tags being read
DAVtqResult[] allTags = easyDAClient.ReadMultipleItems(opcServer, allItems);

return allTags;
}
}
}


private List<string> _CurrentExtruderValues = new List<string>();
private string _ExtruderValues = "";

DAVtqResult[] AllExtruders = new ExtruderExam().AllExtruders;

for (int i = 0; i < AllExtruders.Length; i++)
{
_ExtruderValues += (AllExtruders.Vtq.Value).ToString() + ";";
}

_CurrentExtruderValues.Add(_ExtruderValues);

Please Log in or Create an account to join the conversation.

Moderators: support
Time to create page: 0.071 seconds