static void BrowseAndReadFromNode([NotNull] string parentItemId) { // Obtain all node elements under parentItemId var browseParameters = new DABrowseParameters(); // no filtering whatsoever DANodeElementCollection nodeElementCollection = Client.BrowseNodes("", ServerClass, parentItemId, browseParameters); // Remark: that BrowseNodes(...) may also throw OpcException; a production code should contain handling for it, here // omitted for brevity. Boolean append = false; if (parentItemId.ToString() == "") { append = false; } else { append = true; } foreach (DANodeElement nodeElement in nodeElementCollection) { Debug.Assert(nodeElement != null); using (StreamWriter opcfile = new System.IO.StreamWriter(@"C:\Users\kiekensk\source\repos\ConsoleAppOPCClient\ConsoleAppOPCClient\dump\Cttmt2008 OPC values.txt", append)) { // If the node is a leaf, it might be possible to read from it if (nodeElement.IsLeaf) { // Determine what the display - either the value read, or exception message in case of failure. string display; try { object value = Client.ReadItemValue("", ServerClass, nodeElement); display = String.Format("{0}", value); } catch (OpcException exception) { display = String.Format("** {0} **", exception.GetBaseException().Message); } Console.WriteLine("{0} -> {1}", nodeElement.ItemId, display); opcfile.WriteLine("{0} -> {1}", nodeElement.ItemId, display); } // If the node is not a leaf, just display its itemId else { Console.WriteLine("{0}", nodeElement.ItemId); opcfile.WriteLine("{0}", nodeElement.ItemId); } } // If the node is a branch, browse recursively into it. if (nodeElement.IsBranch && (nodeElement.ItemId != "SimulateEvents") /* this branch is too big for the purpose of this example */) { BrowseAndReadFromNode(nodeElement); } } }
private static void BrowseFromNode( EasyDAClient client, ServerDescriptor serverDescriptor, DANodeDescriptor parentNodeDescriptor) { Debug.Assert(client != null); Debug.Assert(serverDescriptor != null); Debug.Assert(parentNodeDescriptor != null); Boolean append = false; if (parentNodeDescriptor.ToString() == "") { append = false; } else { append = true; } // Obtain all node elements under parentNodeDescriptor var browseParameters = new DABrowseParameters(); // no filtering whatsoever DANodeElementCollection nodeElementCollection = client.BrowseNodes(serverDescriptor, parentNodeDescriptor, browseParameters); // Remark: that BrowseNodes(...) may also throw OpcException; a production code should contain handling for // it, here omitted for brevity. foreach (DANodeElement nodeElement in nodeElementCollection) { Debug.Assert(nodeElement != null); Console.WriteLine(nodeElement); using (StreamWriter opcfile = new System.IO.StreamWriter(@"C:\Users\kiekensk\source\repos\ConsoleAppOPCClient\ConsoleAppOPCClient\dump\Cttmt2008 OPC dump.txt", append)) { opcfile.WriteLine(nodeElement); } // If the node is a branch, browse recursively into it. if (nodeElement.IsBranch) { _branchCount++; BrowseFromNode(client, serverDescriptor, nodeElement); } else { _leafCount++; } } }
public static void DataTypes() { var easyDAClient = new EasyDAClient(); // Define the list of data types we will be checking for. // Change as needed for your application. // This technique is only usable if there is a known list of // data types you are interested in. If you are interested in // all leaves, even those that are of data types not explicitly // listed, always include VarTypes.Empty as the first data type. // The leaves of "unlisted" data types will have VarTypes.Empty // associated with them. var dataTypes = new VarType[] { VarTypes.Empty, VarTypes.I2, VarTypes.R4 }; // For each leaf found, this dictionary wil hold its associated data type. var dataTypeDictionary = new Dictionary <DANodeElement, VarType>(); // For each data type, browse for leaves of this data type. foreach (VarType dataType in dataTypes) { var browseParameters = new DABrowseParameters(DABrowseFilter.Leaves, "", "", dataType); DANodeElementCollection nodeElements = easyDAClient.BrowseNodes("", "AutoJet.ACPFileServerDA.1", "Cttmt2008", browseParameters); // Store the leaf information into the dictionary, and // associate the current data type with it. foreach (var nodeElement in nodeElements) { dataTypeDictionary[nodeElement] = dataType; } } // Display each leaf found, and its associated data type. foreach (KeyValuePair <DANodeElement, VarType> pair in dataTypeDictionary) { DANodeElement nodeElement = pair.Key; VarType dataType = pair.Value; Console.WriteLine("{0}: {1}", nodeElement, dataType); } }
public DANodeElementCollection BrowseNodes([NotNull] ServerDescriptor serverDescriptor, [NotNull] DANodeDescriptor parentNodeDescriptor, [NotNull] DABrowseParameters browseParameters) { throw new NotImplementedException(); }