public static IList <OpcDaItemProperty> GetItemProperties(this OpcItemProperties opcItemProperties, string itemId,
                                                                  IList <OpcDaItemProperty> properties)
        {
            HRESULT[] ppErrors;
            var       propertyIds = GetPropertyIds(properties);
            var       ppvData     = opcItemProperties.GetItemProperties(itemId, propertyIds, out ppErrors);


            for (var i = 0; i < properties.Count; i++)
            {
                var property = properties[i];
                property.Value   = ppvData[i];
                property.ErrorId = ppErrors[i];
                properties[i]    = property;
            }

            return(properties);
        }
        public static IList <OpcDaItemProperty> LookupItemIDs(this OpcItemProperties opcItemProperties, string itemId,
                                                              IList <OpcDaItemProperty> properties)
        {
            var propertyIds = GetPropertyIds(properties);

            HRESULT[] ppErrors;

            var ppszNewItemIDs = opcItemProperties.LookupItemIDs(itemId, propertyIds, out ppErrors);

            for (var i = 0; i < properties.Count; i++)
            {
                var property = properties[i];
                property.ItemId  = ppszNewItemIDs[i];
                property.ErrorId = ppErrors[i];
            }

            return(properties);
        }
        public static OpcDaItemProperty[] LookupItemIDs(this OpcItemProperties opcItemProperties, string itemId,
                                                        IList <int> propertyIds)
        {
            HRESULT[] ppErrors;
            var       ppszNewItemIDs = opcItemProperties.LookupItemIDs(itemId, propertyIds.ToArray(), out ppErrors);

            var properties = new OpcDaItemProperty[propertyIds.Count];

            for (var i = 0; i < propertyIds.Count; i++)
            {
                var property = new OpcDaItemProperty
                {
                    PropertyId = propertyIds[i],
                    ItemId     = ppszNewItemIDs[i],
                    ErrorId    = ppErrors[i]
                };
                properties[i] = property;
            }

            return(properties);
        }
        /// <summary>
        /// Gets properties of items by specified item identifiers.
        /// </summary>
        /// <param name="itemIds">The item identifiers.</param>
        /// <param name="propertiesQuery">The properties query.</param>
        /// <returns>
        /// Array of properties of items.
        /// </returns>
        /// <exception cref="System.InvalidOperationException">Interface IOPCItemProperties not supported.</exception>
        public OpcDaItemProperties[] GetProperties(IList <string> itemIds, OpcDaPropertiesQuery propertiesQuery = null)
        {
            if (OpcItemProperties == null)
            {
                throw new InvalidOperationException("Interface IOPCItemProperties not supported.");
            }

            if (propertiesQuery == null)
            {
                propertiesQuery = new OpcDaPropertiesQuery();
            }

            var result = new OpcDaItemProperties[itemIds.Count];

            for (var i = 0; i < result.Length; i++)
            {
                var itemId = itemIds[i];
                try
                {
                    OpcDaItemProperties itemProperties = OpcItemProperties.QueryAvailableProperties(itemId);
                    if (!propertiesQuery.AllProperties) // filter properties
                    {
                        itemProperties.IntersectProperties(propertiesQuery.PropertyIds);
                    }
                    if (propertiesQuery.ReturnValues) // read property values
                    {
                        OpcItemProperties.GetItemProperties(itemId, itemProperties);
                    }
                    OpcItemProperties.LookupItemIDs(itemId, itemProperties);
                    result[i] = itemProperties;
                }
                catch (Exception ex)
                {
                    Log.ErrorFormat("Cannot get properties for item '{0}'.", ex, itemId);
                    result[i] = OpcDaItemProperties.CreateEmpty();
                }
            }

            return(result);
        }
        public static OpcDaItemProperty[] GetItemProperties(this OpcItemProperties opcItemProperties, string itemId,
                                                            IList <int> propertyIds)
        {
            HRESULT[] ppErrors;
            var       ppvData = opcItemProperties.GetItemProperties(itemId, propertyIds.ToArray(), out ppErrors);


            var properties = new OpcDaItemProperty[ppvData.Length];

            for (var i = 0; i < properties.Length; i++)
            {
                var property = new OpcDaItemProperty
                {
                    PropertyId = propertyIds[i],
                    Value      = ppvData[i],
                    ErrorId    = ppErrors[i]
                };
                properties[i] = property;
            }

            return(properties);
        }
        public static OpcDaItemProperties QueryAvailableProperties(this OpcItemProperties opcItemProperties,
                                                                   string itemId)
        {
            string[]  ppDescriptions;
            VarEnum[] ppvtDataTypes;
            var       pdwPropertyIDs = opcItemProperties.QueryAvailableProperties(itemId, out ppDescriptions,
                                                                                  out ppvtDataTypes);

            var props = new OpcDaItemProperties {
                Properties = new OpcDaItemProperty[pdwPropertyIDs.Length]
            };

            for (var i = 0; i < pdwPropertyIDs.Length; i++)
            {
                var property = new OpcDaItemProperty
                {
                    PropertyId  = pdwPropertyIDs[i],
                    Description = ppDescriptions[i],
                    DataType    = TypeConverter.FromVarEnum(ppvtDataTypes[i])
                };
                props.Properties[i] = property;
            }
            return(props);
        }
 public static OpcDaItemProperties GetItemProperties(this OpcItemProperties opcItemProperties, string itemId,
                                                     OpcDaItemProperties properties)
 {
     opcItemProperties.GetItemProperties(itemId, properties.Properties);
     return(properties);
 }
 public static OpcDaItemProperties LookupItemIDs(this OpcItemProperties opcItemProperties, string itemId,
                                                 OpcDaItemProperties properties)
 {
     opcItemProperties.LookupItemIDs(itemId, properties.Properties);
     return(properties);
 }