Example #1
0
        /// <summary>Записать отчет.</summary>
        /// <param name="liveTEP">Текущие данные.</param>
        public void DataWrite(LiveTEP liveTEP)
        {
            using (var connection = new SqlConnection(this.connStrAlSuite))
            {
                var format_date = "yyyyMMdd HH:mm:ss";

                var query = "INSERT INTO dbo.Report (DATA, Data1, Data2, Data3, Data4, Data5, Data6, Data7, Data8, Data9, Data10, Data11, Data12, Data13) VALUES (@Data, @Data1, @Data2, @Data3, @Data4, @Data5, @Data6, @Data7, @Data8, @Data9, @Data10, @Data11, @Data12, @Data13)";

                using (var cmd = new SqlCommand(query, connection))
                {
                    cmd.Parameters.AddWithValue("@Data", DateTime.Now.ToString(format_date));
                    cmd.Parameters.AddWithValue("@Data1", Math.Round(liveTEP.SQLw_Data1, 7).ToString(CultureInfo.InvariantCulture));
                    cmd.Parameters.AddWithValue("@Data2", Math.Round(liveTEP.SQLw_Data2, 7).ToString(CultureInfo.InvariantCulture));
                    cmd.Parameters.AddWithValue("@Data3", Math.Round(liveTEP.SQLw_Data3, 7).ToString(CultureInfo.InvariantCulture));
                    cmd.Parameters.AddWithValue("@Data4", Math.Round(liveTEP.SQLw_Data4, 7).ToString(CultureInfo.InvariantCulture));
                    cmd.Parameters.AddWithValue("@Data5", Math.Round(liveTEP.SQLw_Data5, 7).ToString(CultureInfo.InvariantCulture));
                    cmd.Parameters.AddWithValue("@Data6", Math.Round(liveTEP.SQLw_Data6, 7).ToString(CultureInfo.InvariantCulture));
                    cmd.Parameters.AddWithValue("@Data7", Math.Round(liveTEP.SQLw_Data7, 7).ToString(CultureInfo.InvariantCulture));
                    cmd.Parameters.AddWithValue("@Data8", Math.Round(liveTEP.SQLw_Data8, 7).ToString(CultureInfo.InvariantCulture));
                    cmd.Parameters.AddWithValue("@Data9", Math.Round(liveTEP.SQLw_Data9, 7).ToString(CultureInfo.InvariantCulture));
                    cmd.Parameters.AddWithValue("@Data10", Math.Round(liveTEP.SQLw_Data10, 7).ToString(CultureInfo.InvariantCulture));
                    cmd.Parameters.AddWithValue("@Data11", Math.Round(liveTEP.SQLw_Data11, 7).ToString(CultureInfo.InvariantCulture));
                    cmd.Parameters.AddWithValue("@Data12", Math.Round(liveTEP.SQLw_Data12, 7).ToString(CultureInfo.InvariantCulture));
                    cmd.Parameters.AddWithValue("@Data13", Math.Round(liveTEP.SQLw_Data13, 7).ToString(CultureInfo.InvariantCulture));

                    connection.Open();
                    cmd.ExecuteNonQuery();
                }

                connection.Close();
            }

            this.logger.Info("Записан 2-х часовой отчет TEP");
        }
Example #2
0
        /// <summary>Записать ТЭП.</summary>
        /// <param name="liveTEP">Текущие значения.</param>
        public void TEPWrite(LiveTEP liveTEP)
        {
            const string FormatDate = "yyyy-MM-dd HH:mm:ss.fff";

            using (var connection = new SQLiteConnection(this.Connstring()))
            {
                connection.Open();

                var command = new SQLiteCommand($"INSERT INTO 'TEP' ('DateTime', 'SQLw_Data1', 'SQLw_Data2', 'SQLw_Data3', 'SQLw_Data4', 'SQLw_Data5', 'SQLw_Data6', 'SQLw_Data7', 'SQLw_Data8', 'SQLw_Data9', 'SQLw_Data10', 'SQLw_Data11', 'SQLw_Data12', 'SQLw_Data13') VALUES ('{DateTime.Now.ToString(FormatDate)}', '{Convert.ToString(liveTEP.SQLw_Data1)}', '{Convert.ToString(liveTEP.SQLw_Data2)}', '{Convert.ToString(liveTEP.SQLw_Data3)}', '{Convert.ToString(liveTEP.SQLw_Data4)}', '{Convert.ToString(liveTEP.SQLw_Data5)}', '{Convert.ToString(liveTEP.SQLw_Data6)}', '{Convert.ToString(liveTEP.SQLw_Data7)}', '{Convert.ToString(liveTEP.SQLw_Data8)}', '{Convert.ToString(liveTEP.SQLw_Data9)}', '{Convert.ToString(liveTEP.SQLw_Data10)}', '{Convert.ToString(liveTEP.SQLw_Data11)}', '{Convert.ToString(liveTEP.SQLw_Data12)}', '{Convert.ToString(liveTEP.SQLw_Data13)}');", connection);

                command.ExecuteNonQuery();
                connection.Close();
            }

            this.logger.Info("Записан 2-х часовой отчет TEP");
        }
Example #3
0
        /// <summary>Расчет.</summary>
        /// <param name="liveTEP">Текущие значения.</param>
        /// <param name="runtimeModel">Модель параметров.</param>
        /// <param name="coeffModel">Модель Коэффициентов.</param>
        /// <returns>Расчитанные значения.</returns>
        public LiveTEP Calculate(LiveTEP liveTEP, ObservableCollection <RuntimeModel> runtimeModel, ObservableCollection <CoeffModel> coeffModel)
        {
            int indx, indx2, indx3, indx4, indx5, indx6, indx7;

            // -1---------------------------------------------------------------------------
            // К1 - Fгаза [м3] 1-FI501
            liveTEP.SQLw_Data1 += runtimeModel[this.IndexCalc("K4_Qg", runtimeModel)].Value * 0.1;

            // -2---------------------------------------------------------------------------
            // К2 - Fгаза [м3] 2-FI501
            liveTEP.SQLw_Data2 += runtimeModel[this.IndexCalc("K5_Qg", runtimeModel)].Value * 0.1;

            // -3---------------------------------------------------------------------------
            // К3 - Fгаза [м3] 3-FI501
            liveTEP.SQLw_Data3 += runtimeModel[this.IndexCalc("K1_V10040", runtimeModel)].Value * 0.1;

            // -4---------------------------------------------------------------------------
            // К3 - Fводы [нм3] 3-FI502
            liveTEP.SQLw_Data4 += runtimeModel[this.IndexCalc("K1_Fsv", runtimeModel)].Value / 600;

            // -5---------------------------------------------------------------------------
            // Fпара от котлов [т/ч] FI502
            double paramFI502_P = runtimeModel[this.IndexCalc("OK_AI1004", runtimeModel)].Value + coeffModel[this.IndexCalc2("Pbar", coeffModel)].Value;

            // { Плотность насыщенного водяного пара в кг/м3 }
            var paramFI502_Ro = (1.6585 * Math.Pow(10, -7) * Math.Pow(paramFI502_P, 5)) +
                                (-1.2976 * Math.Pow(10, -5) * Math.Pow(paramFI502_P, 4)) +
                                (4.1981 * Math.Pow(10, -4) * Math.Pow(paramFI502_P, 3)) +
                                (-6.9431 * Math.Pow(10, -3) * Math.Pow(paramFI502_P, 2)) +
                                (0.5382 * paramFI502_P) + 0.0567;

            // { Коэф. расширения }
            double paramFI502_Betta = coeffModel[this.IndexCalc2("FI502_d", coeffModel)].Value / coeffModel[this.IndexCalc2("FI502_Dt", coeffModel)].Value;

            indx  = this.IndexCalc("OK_AI1102", runtimeModel);
            indx2 = this.IndexCalc2("FI502_Ksi", coeffModel);
            var paramFI502_Eps = 1 - ((0.41 + (0.35 * Math.Pow(paramFI502_Betta, 4))) * runtimeModel[indx].Value * 100 / (10000 * paramFI502_P * coeffModel[indx2].Value));

            // { Массовый расход т/ч (основная формула) }
            indx  = this.IndexCalc2("FI502_Alfa", coeffModel);
            indx2 = this.IndexCalc2("FI502_d20", coeffModel);
            indx3 = this.IndexCalc2("FI502_K0", coeffModel);
            indx4 = this.IndexCalc2("FI502_Kp", coeffModel);
            indx5 = this.IndexCalc2("FI502_Ksh", coeffModel);
            indx6 = this.IndexCalc("OK_AI1102", runtimeModel);

            var paramFI502_Qm = 0.012522 * coeffModel[indx].Value * paramFI502_Eps * Math.Pow(coeffModel[indx2].Value, 2) * Math.Pow(coeffModel[indx3].Value, 2) *
                                coeffModel[indx4].Value * coeffModel[indx5].Value * Math.Sqrt(runtimeModel[indx6].Value * 100 * paramFI502_Ro) / 1000;

            liveTEP.SQLw_Data5 += paramFI502_Qm / 600;

            // -6---------------------------------------------------------------------------
            // Eтепла от котлов [Гкал]
            // { Удельная энтальпия сухого насыщенного пара в кДж/кг }
            var paramFI502_h = (-1.8395 * Math.Pow(10, -3) * Math.Pow(paramFI502_P, 4)) + (0.1079 * Math.Pow(paramFI502_P, 3)) + (-2.4192 * Math.Pow(paramFI502_P, 2)) + (26.7095 * paramFI502_P) + 2661.85;

            // { Тепловая энергия в Гкал/ч }
            var paramFI502_Etta = 0.23885 * Math.Pow(10, -6) * paramFI502_Qm * 1000 * paramFI502_h;

            var data6 = paramFI502_Etta / 600;

            liveTEP.SQLw_Data6 = liveTEP.SQLw_Data6 + data6;

            // -7---------------------------------------------------------------------------
            // Fпара на установку [т/ч] FI507
            indx  = this.IndexCalc("OK_AI1601", runtimeModel);
            indx2 = this.IndexCalc2("Pbar", coeffModel);
            double paramFI507_P = runtimeModel[indx].Value + coeffModel[indx2].Value;

            // { Плотность насыщенного водяного пара в кг/м3 }
            var paramFI507_Ro = (1.6585 * Math.Pow(10, -7) * Math.Pow(paramFI507_P, 5)) +
                                (-1.2976 * Math.Pow(10, -5) * Math.Pow(paramFI507_P, 4)) +
                                (4.1981 * Math.Pow(10, -4) * Math.Pow(paramFI507_P, 3)) +
                                (-6.9431 * Math.Pow(10, -3) * Math.Pow(paramFI507_P, 2)) +
                                (0.5382 * paramFI507_P) + 0.0567;

            // { Коэф. расширения }
            indx  = this.IndexCalc2("FI507_d", coeffModel);
            indx2 = this.IndexCalc2("FI507_Dt", coeffModel);
            double paramFI507_Betta = coeffModel[indx].Value / coeffModel[indx2].Value;

            indx  = this.IndexCalc("OK_AI1602", runtimeModel);
            indx2 = this.IndexCalc2("FI507_Ksi", coeffModel);
            var paramFI507_Eps = 1 - ((0.41 + (0.35 * Math.Pow(paramFI507_Betta, 4))) * runtimeModel[indx].Value * 100 / (10000 * paramFI507_P * coeffModel[indx2].Value));

            // { Массовый расход т/ч (основная формула) }
            indx  = this.IndexCalc2("FI507_Alfa", coeffModel);
            indx2 = this.IndexCalc2("FI507_d20", coeffModel);
            indx3 = this.IndexCalc2("FI507_K0", coeffModel);
            indx4 = this.IndexCalc2("FI507_Kp", coeffModel);
            indx5 = this.IndexCalc2("FI507_Ksh", coeffModel);
            indx6 = this.IndexCalc("OK_AI1602", runtimeModel);

            var paramFI507_Qm = 0.012522 * coeffModel[indx].Value * paramFI507_Eps * Math.Pow(coeffModel[indx2].Value, 2) * Math.Pow(coeffModel[indx3].Value, 2) *
                                coeffModel[indx4].Value * coeffModel[indx5].Value * Math.Sqrt(runtimeModel[indx6].Value * 100 * paramFI507_Ro) / 1000;

            liveTEP.SQLw_Data7 += paramFI507_Qm / 600;

            // -8---------------------------------------------------------------------------
            // Eтепла на установку [Гкал]
            // { Удельная энтальпия сухого насыщенного пара в кДж/кг }
            var paramFI507_h = (-1.8395 * Math.Pow(10, -3) * Math.Pow(paramFI507_P, 4)) + (0.1079 * Math.Pow(paramFI507_P, 3)) + (-2.4192 * Math.Pow(paramFI507_P, 2)) + (26.7095 * paramFI507_P) + 2661.85;

            // { Тепловая энергия в Гкал/ч }
            var paramFI507_Etta = 0.23885 * Math.Pow(10, -6) * paramFI507_Qm * 1000 * paramFI507_h;

            liveTEP.SQLw_Data8 += paramFI507_Etta / 600;

            // -9---------------------------------------------------------------------------
            // Fводы на подпитку [нм3] FI503
            // { Плотность воды кг/м3 }
            indx = this.IndexCalc("OK_AI1603", runtimeModel);

            var paramFI503_Ro = Math.Pow(10, 9) / (998792.53 + (95.33246 * runtimeModel[indx].Value * 98.0665) + (3.4743522 * Math.Pow(runtimeModel[indx].Value * 98.0665, 2)));

            // { Массовый расход т/ч (основная формула) }
            indx  = this.IndexCalc2("FI503_Alfa", coeffModel);
            indx2 = this.IndexCalc2("FI503_d20", coeffModel);
            indx3 = this.IndexCalc2("FI503_K0", coeffModel);
            indx4 = this.IndexCalc2("FI503_Kp", coeffModel);
            indx5 = this.IndexCalc2("FI503_Ksh", coeffModel);
            indx6 = this.IndexCalc("OK_AI1103", runtimeModel);

            var paramFI503_Qm = 0.012522 * coeffModel[indx].Value * Math.Pow(coeffModel[indx2].Value, 2) * Math.Pow(coeffModel[indx3].Value, 2) *
                                coeffModel[indx4].Value * coeffModel[indx5].Value * Math.Sqrt(runtimeModel[indx6].Value * 100 * paramFI503_Ro) / 1000;

            liveTEP.SQLw_Data9 += paramFI503_Qm / 600;

            // -10--------------------------------------------------------------------------
            // Fводы прямой сетевой [нм3] FI504
            // { Плотность воды кг/м3 }
            indx = this.IndexCalc("OK_AI1001", runtimeModel);

            var paramFI504_Ro = Math.Pow(10, 9) / (998792.53 + (95.33246 * runtimeModel[indx].Value * 98.0665) + (3.4743522 * Math.Pow(runtimeModel[indx].Value * 98.0665, 2)));

            // { Массовый расход т/ч (основная формула) }
            indx  = this.IndexCalc2("FI504_Alfa", coeffModel);
            indx2 = this.IndexCalc2("FI504_d20", coeffModel);
            indx3 = this.IndexCalc2("FI504_K0", coeffModel);
            indx4 = this.IndexCalc2("FI504_Kp", coeffModel);
            indx5 = this.IndexCalc2("FI504_Ksh", coeffModel);
            indx6 = this.IndexCalc("OK_AI1104", runtimeModel);

            var paramFI504_Qm = 0.012522 * coeffModel[indx].Value * Math.Pow(coeffModel[indx2].Value, 2) * Math.Pow(coeffModel[indx3].Value, 2) *
                                coeffModel[indx4].Value * coeffModel[indx5].Value * Math.Sqrt(runtimeModel[indx6].Value * 100 * paramFI504_Ro) / 1000;

            liveTEP.SQLw_Data10 += paramFI504_Qm / 600;

            // -11--------------------------------------------------------------------------
            // Fгаза на вх. в котельн. [нм3] FI505
            indx  = this.IndexCalc("OK_AI1106", runtimeModel);
            indx2 = this.IndexCalc2("Pbar", coeffModel);
            double paramFI505_P = (runtimeModel[indx].Value / 100) + coeffModel[indx2].Value;

            // { Плотность газа кг/м3 }
            indx  = this.IndexCalc2("FI505_Roc", coeffModel);
            indx2 = this.IndexCalc("OK_AI1105", runtimeModel);
            indx3 = this.IndexCalc2("FI505_K", coeffModel);
            var paramFI505_Ro = 283.73 * coeffModel[indx].Value * paramFI505_P / ((runtimeModel[indx2].Value + 273.15) * coeffModel[indx3].Value);

            // { Коэф. расширения топливного газа }
            indx  = this.IndexCalc2("FI505_d", coeffModel);
            indx2 = this.IndexCalc2("FI505_Dt", coeffModel);
            double paramFI505_Betta = coeffModel[indx].Value / coeffModel[indx2].Value;

            indx  = this.IndexCalc("OK_AI1107", runtimeModel);
            indx2 = this.IndexCalc2("FI505_Ksi", coeffModel);
            var paramFI505_Eps = 1 - ((0.41 + (0.35 * Math.Pow(paramFI505_Betta, 4))) * runtimeModel[indx].Value * 100 / (10000 * paramFI505_P * coeffModel[indx2].Value));

            // { Объемный расход нм3/ч }
            indx  = this.IndexCalc2("FI505_Alfa", coeffModel);
            indx2 = this.IndexCalc2("FI505_d20", coeffModel);
            indx3 = this.IndexCalc2("FI505_K0", coeffModel);
            indx4 = this.IndexCalc2("FI505_Kp", coeffModel);
            indx5 = this.IndexCalc2("FI505_Ksh", coeffModel);
            indx6 = this.IndexCalc("OK_AI1107", runtimeModel);
            indx7 = this.IndexCalc2("FI505_Roc", coeffModel);

            var paramFI505_Qc = 0.012522 * coeffModel[indx].Value * paramFI505_Eps * Math.Pow(coeffModel[indx2].Value, 2) * Math.Pow(coeffModel[indx3].Value, 2) *
                                coeffModel[indx4].Value * coeffModel[indx5].Value * Math.Sqrt(runtimeModel[indx6].Value * 100 * paramFI505_Ro) / coeffModel[indx7].Value;

            liveTEP.SQLw_Data11 += paramFI505_Qc / 600;

            // -12--------------------------------------------------------------------------
            // Eтепла 3-го котла
            indx  = this.IndexCalc("K1_Fsv", runtimeModel);
            indx2 = this.IndexCalc("K1_Tsv_out", runtimeModel);
            indx3 = this.IndexCalc("K1_Tsv_in", runtimeModel);
            double paramEt_K3 = runtimeModel[indx].Value * (runtimeModel[indx2].Value - runtimeModel[indx3].Value) / 1000;

            liveTEP.SQLw_Data12 += paramEt_K3 / 600;

            // -13--------------------------------------------------------------------------
            // Количество газа УВП [тыс. нм3]
            indx = this.IndexCalc("OK_UVP_Q", runtimeModel);

            if (liveTEP.OK_UVP_Q_old == 0)
            {
                liveTEP.OK_UVP_Q_old = runtimeModel[indx].Value;
            }

            if (runtimeModel[indx].Value < liveTEP.OK_UVP_Q_old)
            {
                liveTEP.OK_UVP_Q_old = runtimeModel[indx].Value;
            }

            liveTEP.SQLw_Data13 += runtimeModel[indx].Value - liveTEP.OK_UVP_Q_old;

            return(liveTEP);
        }