/// <summary>
        /// Creates the monitored item collection.
        /// </summary>
        /// <param name="configuredMeasurements">The configured measurements.</param>
        /// <param name="opcRefreshRate">The OPC refresh rate in milliseconds.</param>
        /// <returns>
        /// The collection of monitored items. <see cref="MonitoredItems"/>.
        /// </returns>
        public MonitoredItems Create(ConfiguredMeasurements configuredMeasurements, int opcRefreshRate)
        {
            var monitoredItems = new MonitoredItems(opcRefreshRate);

            // Loop on the configured measurements.
            for (var i = 0; i < configuredMeasurements.Count; i++)
            {
                var configuredMeasurement = configuredMeasurements[i];

                ProcessProperty(
                    configuredMeasurement.Quality, i, FieldTypes.Quality, monitoredItems);
                ProcessProperty(
                    configuredMeasurement.Timestamp, i, FieldTypes.Timestamp, monitoredItems);
                ProcessProperty(
                    configuredMeasurement.Unit, i, FieldTypes.Unit, monitoredItems);
                ProcessProperty(
                    configuredMeasurement.Value, i, FieldTypes.Value, monitoredItems);
            }

            return(monitoredItems);
        }
        /// <summary>
        /// Processes a property to see whether to add a monitored item.
        /// </summary>
        /// <param name="configuredMeasurementItem">The configured measurement item.</param>
        /// <param name="index">The index.</param>
        /// <param name="fieldType">The field Type.</param>
        /// <param name="monitoredItems">The monitored items.</param>
        private static void ProcessProperty(ConfiguredMeasurementItem configuredMeasurementItem, int index, FieldTypes fieldType, MonitoredItems monitoredItems)
        {
            // Continue only if it is a OPC mapping type.
            if (configuredMeasurementItem.MappingType > 0)
            {
                string serverClass;
                string itemId;

                if (ParseItemDescriptor(configuredMeasurementItem.Value, out serverClass, out itemId))
                {
                    monitoredItems.Add(
                        new MonitoredItemReference(index, fieldType, configuredMeasurementItem.MappingType),
                        serverClass,
                        itemId);
                }
            }
        }