public void BrowsingAnOpcDaServerLocally()
        {
            Uri url = UrlBuilder.Build("Matrikon.OPC.Simulation.1");

            using (var server = new OpcDaServer(url))
            {
                // Connect to the server first.
                server.Connect();

                // Browse elements.
                var browser = new OpcDaBrowserAuto(server);
                BrowseChildren(browser);

                // The output should be like the following:
                // #MonitorACLFile (ItemId: #MonitorACLFile, IsHint: False, IsItem: True, HasChildren: False)
                // @Clients (ItemId: @Clients, IsHint: False, IsItem: True, HasChildren: False)
                // Configured Aliases (ItemId: Configured Aliases, IsHint: False, IsItem: False, HasChildren: True)
                // Simulation Items (ItemId: Simulation Items, IsHint: False, IsItem: False, HasChildren: True)
                //   Bucket Brigade (ItemId: Bucket Brigade, IsHint: False, IsItem: False, HasChildren: True)
                //     ArrayOfReal8 (ItemId: Bucket Brigade.ArrayOfReal8, IsHint: False, IsItem: True, HasChildren: False)
                //     ArrayOfString (ItemId: Bucket Brigade.ArrayOfString, IsHint: False, IsItem: True, HasChildren: False)
                //     Boolean (ItemId: Bucket Brigade.Boolean, IsHint: False, IsItem: True, HasChildren: False)
                //     Int1 (ItemId: Bucket Brigade.Int1, IsHint: False, IsItem: True, HasChildren: False)
                //     Int2 (ItemId: Bucket Brigade.Int2, IsHint: False, IsItem: True, HasChildren: False)
                //     Int4 (ItemId: Bucket Brigade.Int4, IsHint: False, IsItem: True, HasChildren: False)
                // ...
            }
        }
        public List <string> getAllTags()
        {
            Console.Write("this.server.ComObject");
            Console.Write(this.server.ComObject);

            // Connect to the this.server first.
            this.server.Connect();
            var browser = new OpcDaBrowserAuto(this.server);

            //busca tags presentes e adiciona a lista
            return(this.BrowseChildren(browser));
        }
示例#3
0
        //Reads Data from OPC. Fills the Nodelist from PLC
        internal IEnumerable <OpcDaBrowseElement> ReadDataToNodeList(string _subStringFromTagName) //e.g. "_CAP - for Capacity tag"
        {
            //Читаем список переменных из OCP-сервера. Фильтруем переменные-ветви и отбираем те, в именах которых содержится _subStringFromTagName (например "_CAP")
            var opcDaElementFilter = new OpcDaElementFilter()
            {
                ElementType = OpcDaBrowseFilter.Branches
            };
            var browser = new OpcDaBrowserAuto(_opcServer);

            var items = from s in browser.GetElements(_parentNodeDescriptor, opcDaElementFilter)
                        where s.Name.Contains(_subStringFromTagName)
                        select s;

            return(items);
        }
示例#4
0
 public static OpcInitialData GetInitialData(string opcServerUrl, bool valuesOnly)
 {
     lock (GetLockObject(opcServerUrl))
     {
         OpcDaServer server  = GetOrCreateServer(opcServerUrl);
         var         browser = new OpcDaBrowserAuto(server);
         OpcDaGroup  group   = server.AddGroup("DecisionsDataTypeGroup");
         OpcNode[]   nodes   = GetNodesRecursive(browser, group, null);
         //now that group has all tags, read all initial values at once:
         OpcDaItemValue[] values = group.Read(group.Items, OpcDaDataSource.Device);
         server.RemoveGroup(group);
         return(new OpcInitialData {
             Nodes = valuesOnly ? null : nodes, Values = ConvertToBaseTagValues(values)
         });
     }
 }
示例#5
0
        private static OpcNode[] GetNodesRecursive(OpcDaBrowserAuto browser, OpcDaGroup group, OpcNode parentNode)
        {
            OpcDaBrowseElement[] elements = browser.GetElements(parentNode?.FullPath); // fetches from root if null

            OpcNode[] results = elements.Select(x => new OpcNode
            {
                Name     = x.Name,
                FullPath = x.ItemId,
                ItemId   = x.IsItem ? x.ItemId : null
            }).ToArray();

            foreach (OpcNode node in results)
            {
                GetNodesRecursive(browser, group, node);
            }

            if (parentNode != null)
            {
                parentNode.Children = results;

                if (!string.IsNullOrEmpty(parentNode.ItemId)) // fetch data types for tags
                {
                    var def = new OpcDaItemDefinition
                    {
                        ItemId = parentNode.ItemId
                    };
                    OpcDaItemResult[] groupAddResults = group.AddItems(new OpcDaItemDefinition[] { def });

                    foreach (OpcDaItemResult addResult in groupAddResults)
                    {
                        if (addResult.Error.Failed)
                        {
                            throw new Exception($"Could not fetch type data for {parentNode.ItemId}");
                        }
                    }

                    OpcDaItem item = group.Items.FirstOrDefault(x => x.ItemId == parentNode.ItemId);
                    if (item != null)
                    {
                        parentNode.TypeName = item.CanonicalDataType.FullName;
                    }
                }
            }

            return(results);
        }
示例#6
0
        public static TreeNode GetTreeNodes(OpcDaService server)
        {
            TreeNode hostNode    = GetNode(Key(opcdaNode.FullPath + "/" + server.Host));
            TreeNode serviceNode = GetNode(Key(hostNode.FullPath + "/" + server.ServiceId));

            try
            {
                OpcDaBrowserAuto browserAuto = new OpcDaBrowserAuto(server.Service);
                BrowseChildren(browserAuto, serviceNode);
            }
            catch (Exception)
            {
                return(serviceNode);
            }

            return(serviceNode);
        }