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"); //})); }
void applyFilter(VALUES_FLAG_DB filterFlag) { lock (_flagSyncLock) { _filterFlag = filterFlag; } }
// <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); }
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++; //Наращиваем до нужного периода дискретизации } }
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 }; } }
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("Выражение некорректно!"); } }
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; }
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; }
public void GetValueAndCumulateFlag(ref VALUES_FLAG_DB _flag, ref double _value) { _value = m_value; _flag = _flag.CompareAndReturnMostBadStatus(flag); }
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; }