예제 #1
0
        public void Read(OpcValue value)
        {
            var       node      = ExpandedNodeId.ToNodeId(value.ExpandedNodeId, session.NamespaceUris);
            DataValue nodeValue = this.session.ReadValue(node);

            value.Value = nodeValue.Value as double?;
        }
예제 #2
0
        public void SetValue(OpcValue value)
        {
            var node = ExpandedNodeId.ToNodeId(value.ExpandedNodeId, session.NamespaceUris);

            var header = new RequestHeader();

            var collection = new List <WriteValue>
            {
                new WriteValue
                {
                    NodeId      = node,
                    AttributeId = Attributes.Value,
                    Value       = new DataValue(new Variant(value.Value))
                }
            };

            var nodesToWrite = new WriteValueCollection(collection);

            StatusCodeCollection     results         = null;
            DiagnosticInfoCollection diagnosticInfos = null;

            var response = this.session.Write(header, nodesToWrite, out results, out diagnosticInfos);
        }
예제 #3
0
        public void ExpandTree(OpcObject parent)
        {
            NodeId nodeId;

            if (parent.IsExtended)
            {
                return;
            }

            if (parent.Key != "$")
            {
                nodeId = ExpandedNodeId.ToNodeId(parent.ExpandedNodeId, this.session.NamespaceUris);
            }
            else
            {
                nodeId = ObjectIds.ObjectsFolder;
            }

            ReferenceDescriptionCollection refs;

            Byte[] cp;

            Browse(
                nodeId,
                (uint)NodeClass.Variable | (uint)NodeClass.Object,
                out refs,
                out cp);

            foreach (var rd in refs)
            {
                ReferenceDescriptionCollection nextRefs;
                byte[] nextCp;

                if (rd.NodeClass == NodeClass.Object)
                {
                    Browse(
                        ExpandedNodeId.ToNodeId(rd.NodeId, session.NamespaceUris),
                        (uint)NodeClass.Object,
                        out nextRefs,
                        out nextCp);

                    var obj = new OpcObject
                    {
                        Key            = rd.DisplayName.ToString(),
                        ExpandedNodeId = rd.NodeId,
                    };

                    if (!nextRefs.Any())
                    {
                        obj.HasChildren = false;
                    }

                    parent.Children.Add(obj);
                }
                else
                {
                    var       node      = ExpandedNodeId.ToNodeId(rd.NodeId, session.NamespaceUris);
                    DataValue nodeValue = this.session.ReadValue(node);

                    var obj = new OpcValue
                    {
                        Key            = rd.DisplayName.ToString(),
                        Value          = nodeValue.Value as double?,
                        ExpandedNodeId = rd.NodeId,
                    };

                    parent.Values.Add(obj);
                }
            }

            parent.IsExtended = true;
        }