//Прочитать значения за период, возвращает количество прочитанных значений public ValuesCount ReadChanges(DateTime beg, DateTime en) { int n = 0; try { CsData m = new CsData(); var dbeg = beg.TimeToKvint(); var den = en.TimeToKvint(); if (CsApi.FindFirst(_handler, ref m, dbeg)) { n += AddValue(m); while (true) { if (!CsApi.FindNext(_handler, ref m) || m.Time >= den) { break; } n += AddValue(m); } } } catch (Exception ex) { Provider.Logger.AddError("Ошибка при чтении значений", ex, _marka + "." + _paramName); } return(new ValuesCount(n, n, VcStatus.Success)); }
//Добавить значение в список private int AddValue(CsData m) { DateTime t = m.Time.KvintToTime(); double d = m.Value; int e = m.ErrorCode; return(AddMom(ValueSignal, t, d, e == 0 ? null : new MomErr(e.ToString(), 2, e, MomErrType.Source))); }
//Прочитать срез значений public ValuesCount ReadCut(DateTime beg) { CsData m = new CsData(); var dbeg = beg.TimeToKvint(); int n = CsApi.FindFirst(_handler, ref m, dbeg, -1) ? AddValue(m) : 0; return(new ValuesCount(n, n, VcStatus.Success)); }
public static extern bool ReadData(int handle, //handle параметра ref CsData data); //Возвращаемое значение
public static extern bool FindNext(int handle, //handle параметра ref CsData data, //возвращаемые данные int direction = 1); //1
public static extern bool FindFirst(int handle, //handle параметра ref CsData data, //возвращаемые данные double time, //указанное время int direction = 1); //1 (направление поиска)