/// <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); } }