Exemple #1
0
        /// <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);
        }
Exemple #2
0
        /// <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);
        }