/// <summary> /// Функция расчета /// </summary> /// <param name="values">Объект со значениями компонента ТЭЦ - входные данные</param> /// <param name="bPmin">Признак использования в алгоритме ветви с использованием "Мощность минимальная"</param> /// <param name="err">Признак ошибки при выполнении расчета</param> /// <returns>Строка - результат (для отображения)</returns> public string Calculate(TecView.values values, bool bPmin, out int err) { string strRes = string.Empty; //Строка - результат double valuesBaseCalculate = -1F; //Основная величина по которой производится расчет double[] dblRel = new double[] { 0F, 0F } , dbl2AbsPercentControl = new double[] { -1F, 3F }; double delta = -1.0; int iReverse = 0 //Признак направления отклонения (по умолчанию - нет) , indxReason = -1; bool bAbs = false; //Признак абсолютного значения (по умолчанию - нет) //Проверить наличие внешней команды if (values.valuesForeignCommand == true) {//Есть внешняя команда valuesBaseCalculate = values.valuesUDGe; //Установить признак отклонения "вверх" iReverse = 1; //Установить признак абсолютного значения bAbs = true; } else {//Нет внешней команды if (values.valuesPBR == values.valuesPmax) { valuesBaseCalculate = values.valuesPBR; iReverse = 1; //bAbs = true; //??? } else //Проверить признак использования ветви "Мощность минимальная" if (bPmin == true) { //Использовать ветвь "Мощность минимальная" if (values.valuesPBR == values.valuesPmin) { //Установить значение величины-основания valuesBaseCalculate = values.valuesPBR; //Установить признак отклонения "вниз" iReverse = -1; } else { ; } } else { ; } } //Проверить установлена ли величина-основание if (valuesBaseCalculate > 1) { //Произвести расчет по величине-основании strRes += @"Уров=" + valuesBaseCalculate.ToString(@"F2"); strRes += @"; ПБР=" + values.valuesPBR.ToString(@"F2") + @"; Pmax=" + values.valuesPmax.ToString(@"F2"); //Проверить признак использования ветви "Мощность минимальная" if (bPmin == true) { strRes += @"; Pmin=" + values.valuesPmin.ToString(@"F2"); } else { ; } //Проверить признак наличия значения за крайнюю минуту часа if (values.valuesLastMinutesTM > 1) { //Проверить признак направления отклонения if (!(iReverse == 0)) {//Есть признак отклонения delta = iReverse * (valuesBaseCalculate - values.valuesLastMinutesTM); //Проверить признак абсолютного значения if (bAbs == true) { delta = Math.Abs(delta); } else { ; } } else { ; } dbl2AbsPercentControl[0] = valuesBaseCalculate / 100 * 2; if (dbl2AbsPercentControl[0] < 1) { dbl2AbsPercentControl[0] = 1; } else { ; } if (valuesBaseCalculate > 1) { dblRel[0] = delta - dbl2AbsPercentControl[0]; } else { ; } if (!(iReverse == 0)) { for (indxReason = 0; indxReason < dblRel.Length; indxReason++) { if (dblRel[indxReason] > 0) { break; } else { ; } } if (indxReason < dblRel.Length) { err = 1; } else { indxReason = 0; err = 0; } } else { indxReason = 0; err = 0; } strRes += @"; Откл=" + (dbl2AbsPercentControl[indxReason] + dblRel[indxReason]).ToString(@"F1") + @"(" + (((dbl2AbsPercentControl[indxReason] + dblRel[indxReason]) / valuesBaseCalculate) * 100).ToString(@"F1") + @"%)"; } else { err = 0; strRes += @";Откл=" + 0.ToString(@"F1") + @"(" + 0.ToString(@"F1") + @"%)"; } } else { err = 0; strRes += @"Уров=---.-"; strRes += @"; ПБР=" + values.valuesPBR.ToString(@"F2") + @"; Pmax=" + values.valuesPmax.ToString(@"F2"); if (bPmin == true) { strRes += @"; Pmin=" + values.valuesPmin.ToString(@"F2"); } else { ; } strRes += @"; Откл=--(--%)"; } return(strRes); }
/// <summary> /// Функция расчета /// </summary> /// <param name="values">Объект со значениями компонента ТЭЦ - входные данные</param> /// <param name="bPmin">Признак использования в алгоритме ветви с использованием "Мощность минимальная"</param> /// <param name="err">Признак ошибки при выполнении расчета</param> /// <returns>Строка - результат (для отображения)</returns> public string Calculate(TecView.values values, bool bPmin, out int err) { string strRes = string.Empty; //Строка - результат double valuesBaseCalculate = -1F; //Основная величина по которой производится расчет VALUE_RULE[] valuesRule = new VALUE_RULE[] { new VALUE_RULE() { Use = true, Reper = -1F, Relative = -1F } , new VALUE_RULE() { Use = true, Reper = 3F, Relative = -1F } }; double delta = -1.0; int iReverse = 0; //Признак направления отклонения (по умолчанию - нет) INDEX_RULE indxRule = INDEX_RULE.PERCENT2; bool bAbs = false; //Признак абсолютного значения (по умолчанию - нет) //Проверить наличие внешней команды if (values.valuesForeignCommand == true) {//Есть внешняя команда valuesBaseCalculate = values.valuesUDGe; //Установить признак отклонения "вверх" iReverse = 1; //Установить признак абсолютного значения bAbs = true; } else {//Нет внешней команды if (values.valuesPBR == values.valuesPmax) { valuesBaseCalculate = values.valuesPBR; iReverse = 1; } else //Проверить признак использования ветви "Мощность минимальная" if (bPmin == true) { //Использовать ветвь "Мощность минимальная" if (values.valuesPBR == values.valuesPmin) {//Установить значение величины-основания valuesBaseCalculate = values.valuesPBR; //Установить признак отклонения "вниз" iReverse = -1; } else { ; } } else { ; } } //Проверить установлена ли величина-основание if (valuesBaseCalculate > 1) { //Произвести расчет по величине-основании strRes += @"Уров=" + valuesBaseCalculate.ToString(@"F2"); strRes += @"; ПБР=" + values.valuesPBR.ToString(@"F2") + @"; Pmax=" + values.valuesPmax.ToString(@"F2"); //Проверить признак использования ветви "Мощность минимальная" if (bPmin == true) { strRes += @"; Pmin=" + values.valuesPmin.ToString(@"F2"); } else { ; } //Проверить признак наличия значения за крайнюю минуту часа if (values.valuesLastMinutesTM > 1) { //Проверить признак направления отклонения if (!(iReverse == 0)) {//Есть признак отклонения delta = iReverse * (valuesBaseCalculate - values.valuesLastMinutesTM); //Проверить признак абсолютного значения if (bAbs == true) { delta = Math.Abs(delta); } else { ; } } else { ; } //Определить реперную точку для 1-го правила (2%) valuesRule[(int)INDEX_RULE.PERCENT2].Reper = valuesBaseCalculate / 100 * 2; if (valuesRule[(int)INDEX_RULE.PERCENT2].Reper < 1) { valuesRule[(int)INDEX_RULE.PERCENT2].Reper = 1; } else { ; } //!!!Реперная точка для 2-го правила - константа if (valuesBaseCalculate > 1) { for (indxRule = INDEX_RULE.PERCENT2; indxRule < (INDEX_RULE)Enum.GetValues(typeof(INDEX_RULE)).Length; indxRule++) { if (valuesRule[(int)indxRule].Use == true) { valuesRule[(int)indxRule].Relative = delta - valuesRule[(int)indxRule].Reper; } else { continue; } } } else { ; } if (!(iReverse == 0)) { for (indxRule = INDEX_RULE.PERCENT2; indxRule < (INDEX_RULE)Enum.GetValues(typeof(INDEX_RULE)).Length; indxRule++) { if ((valuesRule[(int)indxRule].Use == true) && (valuesRule[(int)indxRule].Relative > 0)) { break; } else { ; } } if (indxRule < (INDEX_RULE)Enum.GetValues(typeof(INDEX_RULE)).Length) { err = 1; } else { indxRule = INDEX_RULE.PERCENT2; err = 0; } } else { indxRule = INDEX_RULE.PERCENT2; err = 0; } strRes += @"; Откл=" + valuesRule[(int)indxRule].Deviation.ToString(@"F1"); strRes += string.Format(@"({0}%", ((valuesRule[(int)INDEX_RULE.PERCENT2].Deviation / valuesBaseCalculate) * 100).ToString(@"F1")); if (valuesRule[(int)INDEX_RULE.POWER3MWt].Use == true) { strRes += string.Format(@",{0}{1}МВт" , (valuesRule[(int)INDEX_RULE.POWER3MWt].Relative > 0) ? @">" : @"<" , valuesRule[(int)INDEX_RULE.POWER3MWt].Reper.ToString(@"F0")); } else { ; } strRes += @")"; } else { err = 0; strRes += @";Откл=" + 0.ToString(@"F1") + @"(" + 0.ToString(@"F1") + @"%)"; } } else { err = 0; strRes += @"Уров=---.-"; strRes += @"; ПБР=" + values.valuesPBR.ToString(@"F2") + @"; Pmax=" + values.valuesPmax.ToString(@"F2"); if (bPmin == true) { strRes += @"; Pmin=" + values.valuesPmin.ToString(@"F2"); } else { ; } strRes += @"; Откл=--(--%)"; } return(strRes); }