コード例 #1
0
 public static bool IsNull(ExpandedNodeId?nodeId)
 {
     return((nodeId == null) || NodeId.IsNull(nodeId.NodeId));
 }
コード例 #2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="MonitoredItemCollection"/> class.
        /// Attributes found in the given subscription are added to the collection.
        /// </summary>
        /// <param name="subscription">the instance that will be inspected for [MonitoredItem] attributes.</param>
        public MonitoredItemCollection(object subscription)
        {
            var typeInfo = subscription.GetType().GetTypeInfo();

            foreach (var propertyInfo in typeInfo.DeclaredProperties)
            {
                var itemAttribute = propertyInfo.GetCustomAttribute <MonitoredItemAttribute>();
                if (itemAttribute == null || string.IsNullOrEmpty(itemAttribute.NodeId))
                {
                    continue;
                }

                MonitoringFilter filter = null;
                if (itemAttribute.AttributeId == AttributeIds.Value && (itemAttribute.DataChangeTrigger != DataChangeTrigger.StatusValue || itemAttribute.DeadbandType != DeadbandType.None))
                {
                    filter = new DataChangeFilter()
                    {
                        Trigger = itemAttribute.DataChangeTrigger, DeadbandType = (uint)itemAttribute.DeadbandType, DeadbandValue = itemAttribute.DeadbandValue
                    };
                }

                var propType = propertyInfo.PropertyType;
                if (propType == typeof(DataValue))
                {
                    this.Add(new DataValueMonitoredItem(
                                 property: propertyInfo,
                                 nodeId: NodeId.Parse(itemAttribute.NodeId),
                                 indexRange: itemAttribute.IndexRange,
                                 attributeId: itemAttribute.AttributeId,
                                 samplingInterval: itemAttribute.SamplingInterval,
                                 filter: filter,
                                 queueSize: itemAttribute.QueueSize,
                                 discardOldest: itemAttribute.DiscardOldest));
                    continue;
                }

                if (propType == typeof(ObservableQueue <DataValue>))
                {
                    this.Add(new DataValueQueueMonitoredItem(
                                 property: propertyInfo,
                                 nodeId: NodeId.Parse(itemAttribute.NodeId),
                                 indexRange: itemAttribute.IndexRange,
                                 attributeId: itemAttribute.AttributeId,
                                 samplingInterval: itemAttribute.SamplingInterval,
                                 filter: filter,
                                 queueSize: itemAttribute.QueueSize,
                                 discardOldest: itemAttribute.DiscardOldest));
                    continue;
                }

                if (propType == typeof(BaseEvent) || propType.GetTypeInfo().IsSubclassOf(typeof(BaseEvent)))
                {
                    this.Add(new EventMonitoredItem(
                                 property: propertyInfo,
                                 nodeId: NodeId.Parse(itemAttribute.NodeId),
                                 indexRange: itemAttribute.IndexRange,
                                 attributeId: itemAttribute.AttributeId,
                                 samplingInterval: itemAttribute.SamplingInterval,
                                 filter: new EventFilter()
                    {
                        SelectClauses = EventHelper.GetSelectClauses(propType)
                    },
                                 queueSize: itemAttribute.QueueSize,
                                 discardOldest: itemAttribute.DiscardOldest));
                    continue;
                }

                if (propType.IsConstructedGenericType && propType.GetGenericTypeDefinition() == typeof(ObservableQueue <>))
                {
                    var elemType = propType.GenericTypeArguments[0];
                    if (elemType == typeof(BaseEvent) || elemType.GetTypeInfo().IsSubclassOf(typeof(BaseEvent)))
                    {
                        this.Add((MonitoredItemBase)Activator.CreateInstance(
                                     typeof(EventQueueMonitoredItem <>).MakeGenericType(elemType),
                                     propertyInfo,
                                     NodeId.Parse(itemAttribute.NodeId),
                                     itemAttribute.AttributeId,
                                     itemAttribute.IndexRange,
                                     MonitoringMode.Reporting,
                                     itemAttribute.SamplingInterval,
                                     new EventFilter()
                        {
                            SelectClauses = EventHelper.GetSelectClauses(elemType)
                        },
                                     itemAttribute.QueueSize,
                                     itemAttribute.DiscardOldest));
                        continue;
                    }
                }

                this.Add(new ValueMonitoredItem(
                             property: propertyInfo,
                             nodeId: NodeId.Parse(itemAttribute.NodeId),
                             indexRange: itemAttribute.IndexRange,
                             attributeId: itemAttribute.AttributeId,
                             samplingInterval: itemAttribute.SamplingInterval,
                             filter: filter,
                             queueSize: itemAttribute.QueueSize,
                             discardOldest: itemAttribute.DiscardOldest));
            }
        }
コード例 #3
0
 public ExpandedNodeId(NodeId identifier, string?namespaceUri = null, uint serverIndex = 0)
 {
     this.NodeId       = identifier;
     this.NamespaceUri = namespaceUri;
     this.ServerIndex  = serverIndex;
 }
コード例 #4
0
ファイル: Variant.cs プロジェクト: thephez/opc-ua-client
 public Variant(NodeId value)
 {
     this.Value           = value;
     this.Type            = VariantType.NodeId;
     this.ArrayDimensions = null;
 }