Beispiel #1
0
        private void btnCancellAllFilters_Click(object sender, RoutedEventArgs e)
        {
            //Фильтр по достоверности
            lock (_flagSyncLock)
            {
                _filterFlag = VALUES_FLAG_DB.None;
            }

            //Фильтр по объектам
            List <TSlaveChecked> filterSource = null;
            var filterPopup = PopupFilterSelected.Child as MonitoringFilterSelected_Popup;

            if (filterPopup != null)
            {
                filterSource = filterPopup.FilterSource;
            }

            if (filterSource != null && filterSource.Count > 0)
            {
                foreach (var ch in filterSource)
                {
                    ch.IsChecked = true;
                }
            }

            //Сброс настроек грида
            _grid.ClearColumnFilter();


            //this.Dispatcher.BeginInvoke(DispatcherPriority.ApplicationIdle, new Action(delegate()
            //{
            //    VisualEx.SetGridSettings(grid, "MONIT_GRID_IGOR");
            //}));
        }
Beispiel #2
0
 void applyFilter(VALUES_FLAG_DB filterFlag)
 {
     lock (_flagSyncLock)
     {
         _filterFlag = filterFlag;
     }
 }
Beispiel #3
0
        // <summary>
        /// Выявляем максимально недостоверный статус, добавляем остальные неаварийные статусы
        /// </summary>
        /// <param name="F_FLAG">Флаг который меняем</param>
        /// <param name="F_FLAG1">Флаг с которым сравниваем</param>
        public static VALUES_FLAG_DB CompareAndReturnMostBadStatus(this VALUES_FLAG_DB F_FLAG, VALUES_FLAG_DB F_FLAG1)
        {
            //Если отсутствует канал измерения
            //if (F_FLAG.CheckFlag(VALUES_FLAG_DB.IsChannelAbsented) || F_FLAG1.CheckFlag(VALUES_FLAG_DB.IsChannelAbsented)) return VALUES_FLAG_DB.IsChannelAbsented;

            F_FLAG = F_FLAG | (F_FLAG1 & VALUES_FLAG_DB.AllMainStatuses) | (F_FLAG1 & VALUES_FLAG_DB.AllWarningStatuses);

            return(F_FLAG);
        }
Beispiel #4
0
        public static VALUES_FLAG_DB CompareAndReturnMostBadStatus(this IEnumerable <VALUES_FLAG_DB> F_list)
        {
            VALUES_FLAG_DB flag = VALUES_FLAG_DB.None;

            foreach (var f in F_list)
            {
                flag = flag.CompareAndReturnMostBadStatus(f);
            }

            return(flag);
        }
        internal void Accamulate(double currValue, VALUES_FLAG_DB currFlag,
                                 enumClientFormulaTPType fFlag = enumClientFormulaTPType.None)
        {
            if (_isSumm)
            {
                _flagValues |= currFlag;  //Накапливаем состояние
                _dValue     += currValue; //Накапливаем сумму
                _fFlag      |= fFlag;
            }
            else
            {
                _dValue = (_dValue * _stepOfReadHalfHours + currValue) / (_stepOfReadHalfHours + 1);
            }

            if (_stepOfReadHalfHours == _numbersHalfHoursInOurPeriod) //Если закрыли период дискретизации
            {
                if (_unitDigit.HasValue)
                {
                    _dValue *= (double)_unitDigit.Value;
                }

                var fVal = new TVALUES_DB(_flagValues, _dValue, _fFlag);

                _result.Add(fVal);


                if (_intervalTimeList != null)
                {
                    if (++_numbersOurDiscreteInOurPeriod >= _intervalTimeList.Count)
                    {
                        return;                                                              //Вышли за наш предел
                    }
                    _numbersHalfHoursInOurPeriod = _intervalTimeList[_numbersOurDiscreteInOurPeriod];
                }

                #region -------------Обнуляем значения-----------------------

                _stepOfReadHalfHours = 0;
                _flagValues          = VALUES_FLAG_DB.None;
                _fFlag  = enumClientFormulaTPType.None;
                _dValue = 0;

                #endregion
            }
            else
            {
                _stepOfReadHalfHours++; //Наращиваем до нужного периода дискретизации
            }
        }
Beispiel #6
0
 public void GetValueAndCumulateFlag(ref VALUES_FLAG_DB _flag, ref FunctionArgumentList _value,
                                     ref int index)
 {
     if (StringValue != null)
     {
         _flag         = _flag.CompareAndReturnMostBadStatus(flag);
         _value[index] = new StringFunctionArgument()
         {
             ArgumentValue = StringValue, flag = _flag
         };
     }
     else
     {
         _flag         = _flag.CompareAndReturnMostBadStatus(flag);
         _value[index] = new DoubleFunctionArgumnet()
         {
             ArgumentValue = m_value, flag = _flag
         };
     }
 }
Beispiel #7
0
        public void Operate(OutEvalStringValue operand, Operations operation)
        {
            flag = flag.CompareAndReturnMostBadStatus(operand.flag);
            switch (operation)
            {
            case Operations.adding:
                m_value = (m_value + operand.Value);
                break;

            case Operations.division:
                if (operand.Value == 0)
                {
                    m_value = 0;
                    flag    = VALUES_FLAG_DB.DivideByZero;
                }
                else
                {
                    m_value = (m_value / operand.Value);
                }
                break;

            case Operations.multiplication:
                m_value = (m_value * operand.Value);
                break;

            case Operations.subtraction:
                m_value = (m_value - operand.Value);
                break;

            case Operations.func_devider:
                return;     // ничего делать с разделителем не надо

            default:
                throw new Exception("Выражение некорректно!");
            }
        }
Beispiel #8
0
        private void MakePrecalculateBooleanFunction(ref int eval_index, Function func,
                                                     WorkedPeriodVariable precalcVariable, int halfHourIndx)
        {
            if (func == null)
            {
                throw new Exception("Ошибка обработки функции ");
            }

            int func_args_start_index = eval_index - 1;

            while (func_args_start_index >= 0 && OutEvalString[func_args_start_index].FunctionDevider == false)
            {
                func_args_start_index--;
            }

            if (func_args_start_index < 0)
            {
                throw new Exception("Ошибка обработки функции " + func.id);
            }

            int args_count = eval_index - func_args_start_index - 1;

            if (func.FuncArgsCount != int.MaxValue && args_count != func.FuncArgsCount)
            {
                throw new Exception(string.Format(" У функции {0} объявлено аргументов {1}, передано в формулу {2}.",
                                                  func.id, func.FuncArgsCount, args_count));
            }
            else if (func.FuncArgsCount == int.MaxValue && args_count == 0)
            {
                throw new Exception("Функция " + func.id +
                                    " объявлена без ограничения числа аргументов, передано в формулу 0.");
            }

            try
            {
                IConvertible arg1, arg2;

                if (args_count > FunctionArgs.Count)
                {
                    FunctionArgs = new FunctionArgumentList(3);
                }

                VALUES_FLAG_DB flag = VALUES_FLAG_DB.None;

                for (int i = 0; i < args_count; i++)
                {
                    OutEvalString[i + func_args_start_index + 1]
                    .GetValueAndCumulateFlag(ref flag, ref FunctionArgs, ref i);
                }

                arg1 = FunctionArgs[0].ArgumentValue;
                arg2 = FunctionArgs[1].ArgumentValue;

                OutEvalString[func_args_start_index].SetValue(flag, (double)
                                                              ((func.FuncDlgt == null)
                    ? func.Value
                    : func.FuncBoolDlgt(this, precalcVariable, arg1, arg2, halfHourIndx)));
            }
            catch (Exception exc)
            {
                throw new Exception("Ошибка обработки функции " + func.id, exc);
            }

            eval_index -= args_count;
        }
Beispiel #9
0
        private void MakeFunction(ref int eval_index, Function func, DateTime startDateTime, DateTime endDateTime, int HalfHourIndex, enumTimeDiscreteType DiscreteType)
        {
            if (func == null)
            {
                throw new Exception("Ошибка обработки функции ");
            }

            int func_args_start_index = eval_index - 1;

            while (func_args_start_index >= 0 && OutEvalString[func_args_start_index].FunctionDevider == false)
            {
                func_args_start_index--;
            }

            if (func_args_start_index < 0)
            {
                throw new Exception("Ошибка обработки функции " + func.id);
            }

            int args_count = eval_index - func_args_start_index - 1;

            if (func.FuncArgsCount != int.MaxValue && args_count != func.FuncArgsCount)
            {
                throw new Exception(string.Format(" У функции {0} объявлено аргументов {1}, передано в формулу {2}.",
                                                  func.id, func.FuncArgsCount, args_count));
            }
            else if (func.FuncArgsCount == int.MaxValue && args_count == 0)
            {
                throw new Exception("Функция " + func.id +
                                    " объявлена без ограничения числа аргументов, передано в формулу 0.");
            }

            try
            {
                if (args_count > FunctionArgs.Count)
                {
                    FunctionArgs = new FunctionArgumentList(args_count)
                    {
                        StartDateTime = startDateTime, EndDateTime = endDateTime, HalfHourIndex = HalfHourIndex
                    }
                }
                ;
                FunctionArgs.HalfHourIndex = HalfHourIndex;
                FunctionArgs.DiscreteType  = DiscreteType;
                VALUES_FLAG_DB flag = VALUES_FLAG_DB.None;


                for (int i = 0; i < args_count; i++)
                {
                    OutEvalString[i + func_args_start_index + 1]
                    .GetValueAndCumulateFlag(ref flag, ref FunctionArgs, ref i);
                }

                OutEvalString[func_args_start_index].SetValue(flag,
                                                              ((func.FuncDlgt == null)
                        ? func.Value
                        : func.FuncDlgt(this, func,
                                        FunctionArgs, 0, args_count).ToDouble(null)));
            }
            catch (Exception exc)
            {
                if (exc.InnerException != null)
                {
                    throw new Exception("Ошибка обработки функции " + func.id + ":" + exc.InnerException.ToString(),
                                        exc);
                }
                else
                {
                    throw new Exception("Ошибка обработки функции " + func.id + ":" + exc.ToString(),
                                        exc);
                }
            }

            eval_index -= args_count;
        }
Beispiel #10
0
 public void GetValueAndCumulateFlag(ref VALUES_FLAG_DB _flag, ref double _value)
 {
     _value = m_value;
     _flag  = _flag.CompareAndReturnMostBadStatus(flag);
 }
Beispiel #11
0
 public void SetValue(VALUES_FLAG_DB _flag, double _value)
 {
     m_value         = _value;
     FunctionDevider = false;
     flag            = _flag;
 }
        /// <summary>
        /// Наполнение списка архива отсутствующими значений
        /// </summary>
        /// <param name="discreteType">Период дискретизации</param>
        /// <param name="archivesList">Архивы, которые наполняем</param>
        public void FillVoidHalfHours(List <TVALUES_DB> archivesList, enumTimeDiscreteType discreteType,
                                      VALUES_FLAG_DB mask, ref VALUES_FLAG_DB totalPrimaryFlag)
        {
            var totalFlag          = totalPrimaryFlag;
            var totalHalfhourIndex = 0;

            foreach (var numbersHalfHoursInOurPeriod in _intervalTimeList)
            {
                var periodFlag  = VALUES_FLAG_DB.None;
                var periodValue = 0.0;

                for (var hhIndex = 0; hhIndex <= numbersHalfHoursInOurPeriod; hhIndex++)
                {
                    VALUES_FLAG_DB flag;
                    double         value;

                    var isNotWorkedHalfHour = _isExistsNotWorkedPeriod && _notWorkedRange.Any(r =>
                                                                                              (hhIndex >= r.Item1) && (!r.Item2.HasValue || hhIndex <= r.Item2));
                    if (isNotWorkedHalfHour)
                    {
                        flag  = VALUES_FLAG_DB.IsNotWorkedPeriod;
                        value = 0;
                    }
                    else
                    {
                        flag = VALUES_FLAG_DB.DataNotFull | mask;

                        #region Акт недоучета, обработка ручного ввода КА

                        //Прибавляем по акту недоучета
                        if (_isActUndercountExists)
                        {
                            IPeriodBase <double> currentCoeff       = null;
                            IPeriodBase <double> currentLossesCoeff = null;

                            if (_calculateCoeffs)
                            {
                                #region Коэфф. трансформации

                                IPeriodBase <bool> isDisabledPeriod;
                                var haveDisabledPeriod =
                                    _coeffTransformationDisabledWorker.TryGetCurrentPeriodOrFindForTotalIndexHh(totalHalfhourIndex,
                                                                                                                out isDisabledPeriod);

                                if ((!haveDisabledPeriod && !_isCoeffTransformationDisabledByDefault) ||
                                    (haveDisabledPeriod && !isDisabledPeriod.PeriodValue.Value)
                                    ) //Если нет заблокированного периода, или период разрешен
                                {
                                    //Не нашли один коэфф для данного часа или нет общего коэфф, значит ищем по каждой получасовке
                                    _coeffTranformationWorker.TryGetCurrentPeriodOrFindForTotalIndexHh(totalHalfhourIndex,
                                                                                                       out currentCoeff);
                                }

                                #endregion

                                #region Коэфф. потерь

                                if (_useLossesCoeff)
                                {
                                    _coeffLossesWorker.TryGetCurrentPeriodOrFindForHalfhour(totalHalfhourIndex,
                                                                                            out currentLossesCoeff);
                                }

                                #endregion
                            }


                            EnumActMode actMode;
                            var         av = _actUndercountValues.CalculateUndercountValues(totalHalfhourIndex, out actMode, currentCoeff, currentLossesCoeff);
                            if (av.HasValue)
                            {
                                value = Math.Round(av.Value, 8) / _unitDigit;

                                if (actMode == EnumActMode.Замещение)
                                {
                                    flag &= ~(VALUES_FLAG_DB.DataNotFull | VALUES_FLAG_DB.NotCorrect |
                                              VALUES_FLAG_DB.DataNotComplete);
                                }

                                flag |= VALUES_FLAG_DB.ActUndercountExists;
                            }
                            else
                            {
                                value = 0;
                            }
                        }
                        else
                        {
                            value = 0;
                        }

                        #endregion
                    }

                    periodValue += value;
                    periodFlag  |= flag;
                    totalHalfhourIndex++;
                }

                totalFlag |= periodFlag;
                archivesList.Add(new Servers.Calculation.DBAccess.Interface.Data.TVALUES_DB(periodFlag, periodValue));
            }

            totalPrimaryFlag = totalFlag;
        }