private List <SlicePeriod> GetValidationSlices(DateTime globalStart, DateTime globalEnd, int trainPeriod, int validationPeriod) { bool isFirstSlice = true; var slices = new List <SlicePeriod>(); while (!slices.Any(slice => DateTime.Compare(slice.ValidationPeriod.LocalEnd, globalEnd) > 0)) { if (isFirstSlice) { var firstSlice = new SlicePeriod(); firstSlice.TrainPeriod.LocalStart = globalStart; firstSlice.TrainPeriod.LocalEnd = globalStart.AddDays(-1 + trainPeriod * 7); firstSlice.ValidationPeriod.LocalStart = firstSlice.TrainPeriod.LocalEnd.AddDays(1); firstSlice.ValidationPeriod.LocalEnd = firstSlice.ValidationPeriod.LocalStart.AddDays(-1 + validationPeriod * 7); slices.Add(firstSlice); isFirstSlice = false; } else { var slice = new SlicePeriod(); slice.TrainPeriod.LocalEnd = slices[slices.Count() - 1].ValidationPeriod.LocalEnd; slice.TrainPeriod.LocalStart = slice.TrainPeriod.LocalEnd.AddDays(-7 * trainPeriod + 1); slice.ValidationPeriod.LocalStart = slice.TrainPeriod.LocalEnd.AddDays(1); slice.ValidationPeriod.LocalEnd = slice.ValidationPeriod.LocalStart.AddDays(-1 + validationPeriod * 7); slices.Add(slice); } } return(slices); }
public int AddValueDescriptor(uint id, uint addr, uint channel, SlicePeriod period) { addresses.Add(addr); identificators.Add(id); channels.Add(channel); values.Add(0); statuses.Add(false); this.period = period; return(value_counter++); }
public bool GetValueDescriptor(uint index, ref uint id, ref uint addr, ref uint channel, ref SlicePeriod period) { if (index < value_counter) { id = identificators[(int)index]; addr = addresses[(int)index]; channel = channels[(int)index]; period = this.period; return(true); } else { return(false); } }
public bool ReadPowerSlice(ref List <SliceDescriptor> sliceUniversalList, DateTime dt_end, SlicePeriod period) { return(false); }
public bool ReadPowerSlice(ref List<SliceDescriptor> sliceUniversalList, DateTime dt_end, SlicePeriod period) { return false; }
public bool ReadPowerSlice(ref List<SliceDescriptor> sliceDesriptorList, DateTime dt_end, SlicePeriod period) { //определим внутренний адрес параметра в зависимости от периода ushort paramNumber; switch (period) { case SlicePeriod.Hour: { //номер параметра, соответствующий часовым архивам paramNumber = 65530; break; } default: { WriteToLog("ReadPowerSlice: заданный период среза не поддерживается "); return false; } } //определим структуру архива List<ParamInfo> archStructure = null; if (!readArchivesStructure(paramNumber, ref archStructure)) { WriteToLog("ReadPowerSlice: невозможно прочитать структуру архива"); return false; } //лист дескрипторов со значениями List<SliceDescriptor> sdList = new List<SliceDescriptor>(); foreach (SliceDescriptor sd in sliceDesriptorList) { //пусть дата начала - дата которая передана вместе с описанием среза DateTime dt_begin = new DateTime(sd.Date.Ticks); //определим дату, с которой будем читать (прочитаем ) DateTime start_dt = new DateTime(); ArchiveRow arch = new ArchiveRow(); if (ReadArchiveRow(paramNumber, dt_begin.AddYears(-2000), archStructure, ref arch)) { DateTime dt_nearest = arch.DateNearest; if (dt_nearest == dt_begin) start_dt = dt_begin; else if (dt_nearest < dt_begin) start_dt = dt_begin.AddMinutes((double)period); else start_dt = dt_nearest; } else { string msg = String.Format("ReadPowerSlice: ошибка получения дат: ук2 {0}, ук3 {1}, ук4 {2}", dt_begin.ToString(), arch.DateNearest.ToString(), arch.DateNearestInThePast.ToString()); WriteToLog(msg); return false; } DateTime tempDt = new DateTime(start_dt.Ticks); while (tempDt <= dt_end) { SliceDescriptor localSD = new SliceDescriptor(tempDt); ArchiveRow archR = new ArchiveRow(); if (ReadArchiveRow(paramNumber, tempDt.AddYears(-2000), archStructure, ref archR)) { List<uint> addresses = sd.GetAddressList(); for (int i = 0; i < addresses.Count; i++) { uint addr = addresses[i]; ParamInfo pi = archR.Params[(int)addr]; uint ivalid = 0, ivalchannel = 0; sd.GetValueId((uint)i, ref ivalid); sd.GetValueChannel((uint)i, ref ivalchannel); localSD.AddValueDescriptor(ivalid, addr, ivalchannel, sd.Period); if (!localSD.InsertValue((uint)i, pi.val, true)) { WriteToLog("ReadPowerSlice: неудалось вставить значение " + i); continue; } } sdList.Add(localSD); } else { string msg = String.Format("ReadPowerSlice: Строка архива за дату {0} не прочитана", tempDt); WriteToLog(msg); } tempDt = tempDt.AddMinutes((double)period); } } if (sdList.Count > 0) { sliceDesriptorList = sdList; return true; } else { WriteToLog("В итоговый список не было добавлено элементов"); return false; } }
public bool GetValueDescriptor(uint index, ref uint id, ref uint addr, ref uint channel, ref SlicePeriod period) { if (index < value_counter) { id = identificators[(int)index]; addr = addresses[(int)index]; channel = channels[(int)index]; period = this.period; return true; } else { return false; } }
public int AddValueDescriptor(uint id, uint addr, uint channel, SlicePeriod period) { addresses.Add(addr); identificators.Add(id); channels.Add(channel); values.Add(0); statuses.Add(false); this.period = period; return value_counter++; }