Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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++);
        }
Ejemplo n.º 3
0
 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);
     }
 }
Ejemplo n.º 4
0
 public bool ReadPowerSlice(ref List <SliceDescriptor> sliceUniversalList, DateTime dt_end, SlicePeriod period)
 {
     return(false);
 }
Ejemplo n.º 5
0
 public bool ReadPowerSlice(ref List<SliceDescriptor> sliceUniversalList, DateTime dt_end, SlicePeriod period)
 {
     return false;
 }
Ejemplo n.º 6
0
        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;
            }
        }
Ejemplo n.º 7
0
Archivo: IMeter.cs Proyecto: Prizmer/ps
 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;
     }
 }
Ejemplo n.º 8
0
Archivo: IMeter.cs Proyecto: Prizmer/ps
        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++;
        }