Exemple #1
0
        /// <summary>
        /// Reads the next sample from the device.
        /// </summary>
        private void DoSample(string locale, float deadband)
        {
            if (!m_active)
            {
                return;
            }

            // read latest value from device.
            ItemValueResult currentValue = m_cache.Read(m_itemID, locale, m_reqType, 0);

            // check if value has changed.
            bool changed = true;

            // always return for error.
            if (m_latestValue != null)
            {
                // compare value to last returned value if sampling has not started yet.
                if (m_samples.Count == 0)
                {
                    changed = HasChanged(currentValue, m_latestValue, deadband);
                }

                // compare to previous sample if sampling has started.
                else if (m_bufferEnabled)
                {
                    changed = HasChanged(currentValue, (ItemValueResult)m_samples[m_samples.Count - 1], 0);
                }
            }

            // add changed value to the buffer.
            if (changed)
            {
                // clear buffer.
                if (!m_bufferEnabled)
                {
                    m_samples.Clear();
                }

                // check if buffer length is exceeded.
                if (m_samples.Count >= MAX_BUFFER_LENGTH)
                {
                    if (currentValue.ResultID == ResultID.S_OK)
                    {
                        currentValue.ResultID = ResultID.Da.S_DATAQUEUEOVERFLOW;
                    }

                    m_samples.RemoveAt(0);
                    m_overflow = true;
                }

                // add new sample to buffer.
                m_samples.Add(currentValue);
            }
        }