コード例 #1
0
            private DataTable resultToTable(P_ALG pAlg)
            {
                DataTable tableRes = new DataTable();

                tableRes.Columns.AddRange(new DataColumn[] {
                    new DataColumn(@"ID", typeof(int))
                    , new DataColumn(@"QUALITY", typeof(short))
                    , new DataColumn(@"VALUE", typeof(float))
                });

                foreach (P_ALG.P_PUT pPut in pAlg.Values)
                {
                    foreach (P_ALG.P_PUT.P_VAL val in pPut.Values)
                    {
                        tableRes.Rows.Add(new object[]
                        {
                            val.m_iId        //ID_PUT
                            , val.m_sQuality //QUALITY
                            , val.value      //VALUE
                        });
                    }
                }

                return(tableRes);
            }
コード例 #2
0
ファイル: TaskCalculate.cs プロジェクト: ChrisNovoselic/Tep32
            /// <summary>
            /// Преобразование словаря с результатом в таблицу для БД
            /// </summary>
            /// <param name="pAlg">Словарь с результатами расчета</param>
            /// <returns>Таблица для БД с результатами расчета</returns>
            protected static DataTable resultToTable(P_ALG pAlg)
            {
                DataTable tableRes = new DataTable();

                tableRes.Columns.AddRange(new DataColumn[] {
                    new DataColumn(@"ID", typeof(int))
                    , new DataColumn(@"QUALITY", typeof(short))
                    , new DataColumn(@"VALUE", typeof(float))
                });

                foreach (P_ALG.P_PUT pPut in pAlg.Values)
                {
                    foreach (P_ALG.P_PUT.P_VALUE val in pPut.Values)
                    {
                        tableRes.Rows.Add(new object[]
                        {
                            val.m_iId        //ID_PUT
                            , val.m_sQuality //QUALITY
                            //VALUE
                            , ((double.IsNaN(val.value) == false) && (double.IsInfinity(val.value) == false)) ? val.value : -1F
                        });
                    }
                }

                return(tableRes);
            }
コード例 #3
0
ファイル: TaskCalculate.cs プロジェクト: ChrisNovoselic/Tep32
            /// <summary>
            /// Преоразовать результаты расчетов в список со значениями для дальнейшей обработки(отображения)
            /// </summary>
            /// <param name="pAlg">Словарь с данными для расчетов или результатов расчетов</param>
            /// <returns>Список со значениями для отображения</returns>
            protected static IEnumerable <VALUE> resultToListValue(P_ALG pAlg)
            {
                List <VALUE> listRes = new List <VALUE>();

                foreach (P_ALG.P_PUT pPut in pAlg.Values)
                {
                    foreach (KeyValuePair <P_ALG.KEY_P_VALUE, P_ALG.P_PUT.P_VALUE> pair in pPut)
                    {
                        if (listRes.FindIndex(item => { return((item.m_IdPut == pair.Value.m_iId) && (item.stamp_value == pair.Key.Stamp)); }) < 0)
                        {
                            listRes.Add(
                                new VALUE()
                            {
                                m_IdPut       = pair.Value.m_iId
                                , m_iQuality  = pair.Value.m_sQuality
                                , value       = pair.Value.value
                                , stamp_value = pair.Key.Stamp
                                , stamp_write = DateTime.MinValue
                            }
                                );
                        }
                        else
                        {
                            Logging.Logg().Error(string.Format(@"TaskCalculate::resultToListValue () - дублирование при преобразовании резудьтатов расчетов...")
                                                 , Logging.INDEX_MESSAGE.NOT_SET);
                        }
                    }
                }

                return(listRes);
            }
コード例 #4
0
            /// <summary>
            /// Конструктор - основной (без параметров)
            /// </summary>
            public TaskTepCalculate() : base()
            {
                m_indxCompRealTime = INDX_COMP.UNKNOWN;

                In   = new P_ALG();
                Norm = new P_ALG();
                Out  = new P_ALG();

                fTable = new FTable();
            }
コード例 #5
0
ファイル: TaskCalculate.cs プロジェクト: ChrisNovoselic/Tep32
            /// <summary>
            /// Конструктор основной (с параметром)
            /// </summary>
            /// <param name="type">Тип расчета</param>
            public TaskCalculate(TYPE types
                                 , IEnumerable <HandlerDbTaskCalculate.NALG_PARAMETER> listNAlg
                                 , IEnumerable <HandlerDbTaskCalculate.PUT_PARAMETER> listPutPar
                                 , Dictionary <KEY_VALUES, List <VALUE> > dictValues)
            //public TaskCalculate(TYPE types, ListDATATABLE listDataTables)
            {
                _types = types;

                In  = new P_ALG();
                Out = new P_ALG();

                _dictPAlg = new Dictionary <TYPE, P_ALG>()
                {
                    { TYPE.IN_VALUES, In }
                    , { TYPE.OUT_VALUES, Out }
                };

                if ((types & TYPE.OUT_TEP_NORM_VALUES) == TYPE.OUT_TEP_NORM_VALUES)
                {
                    Norm = new P_ALG();
                    _dictPAlg.Add(TYPE.OUT_TEP_NORM_VALUES, Norm);
                }
                else
                {
                    ;
                }

                if (initValues(listNAlg, listPutPar, dictValues) < 0)
                {
                    Logging.Logg().Error(string.Format(@"TaskCalculate::ctor () - вызов 'initValues ()' ...")
                                         , Logging.INDEX_MESSAGE.NOT_SET);
                }
                else
                {
                    ;
                }
            }
コード例 #6
0
            /// <summary>
            /// Преобразование входных для расчета значений в структуры, пригодные для производства расчетов
            /// </summary>
            /// <param name="pAlg">Объект - словарь структур для расчета</param>
            /// <param name="tablePar">Таблица с параметрами</param>
            /// <param name="tableVal">Таблица со значениями</param>
            protected int initValues(P_ALG pAlg, DataTable tablePar, DataTable tableVal)
            {
                int iRes = 0; //Предположение, что ошибки нет

                DataRow[] rVal  = null;
                int       idPut = -1
                , idComponent   = -1;
                string strNAlg  = string.Empty;

                pAlg.Clear();

                // цикл по всем параметрам расчета
                foreach (DataRow rPar in tablePar.Rows)
                {
                    // найти соответствие параметра в алгоритме расчета и значения для него
                    idPut = (int)rPar[@"ID"];
                    // идентификатор параметра в алгоритме расчета - ключ для словаря с его характеристиками
                    strNAlg = ((string)rPar[@"N_ALG"]).Trim();
                    rVal    = tableVal.Select(@"ID_PUT=" + idPut);
                    // проверить успешность нахождения соответствия
                    if (rVal.Length == 1)
                    {
                        if (pAlg.ContainsKey(strNAlg) == false)
                        {// добавить параметр в алгоритме расчета
                            pAlg.Add(strNAlg, new P_ALG.P_PUT());

                            pAlg[strNAlg].m_sAVG  = (Int16)rPar[@"AVG"];
                            pAlg[strNAlg].m_bDeny = false;
                        }
                        else
                        {
                            ;
                        }
                        // идентификатор компонента станции - ключ для словаря со значением и характеристиками для него
                        idComponent = (int)rPar[@"ID_COMP"];

                        if (pAlg[strNAlg].ContainsKey(idComponent) == false)
                        {
                            pAlg[strNAlg].Add(idComponent, new P_ALG.P_PUT.P_VAL()
                                              // добавить параметр компонента в алгоритме расчета
                            {
                                m_iId = idPut
                                        //, m_iIdComponent = idComponent
                                ,
                                m_bDeny = false
                                ,
                                value = (float)(double)rVal[0][@"VALUE"]
                                ,
                                m_sQuality = ID_QUALITY_VALUE.DEFAULT // не рассчитывался
                                ,
                                m_idRatio = (int)rPar[@"ID_RATIO"]
                                ,
                                m_fMinValue = (rPar[@"MINVALUE"] is DBNull) ? 0 : (float)rPar[@"MINVALUE"] //??? - ошибка д.б. float
                                ,
                                m_fMaxValue = (rPar[@"MAXVALUE"] is DBNull) ? 0 : (float)rPar[@"MAXVALUE"] //??? - ошибка д.б. float
                            });
                        }
                        else
                        {
                            ;
                        }
                    }
                    else
                    {// ошибка - не найдено соответствие параметр-значение
                        iRes = -1;

                        Logging.Logg().Error(@"TaskCalculate::initValues (ID_PUT=" + idPut + @") - не найдено соответствие параметра и значения...", Logging.INDEX_MESSAGE.NOT_SET);
                    }
                }

                return(iRes);
            }
コード例 #7
0
ファイル: TaskCalculate.cs プロジェクト: ChrisNovoselic/Tep32
            protected int initValues(P_ALG pAlg
                                     , IEnumerable <HandlerDbTaskCalculate.NALG_PARAMETER> listNAlg
                                     , IEnumerable <HandlerDbTaskCalculate.PUT_PARAMETER> listPutPar
                                     , IEnumerable <VALUE> values)
            {
                int iRes = 0;

                NALG_PARAMETER      nAlg;
                IEnumerable <VALUE> putValues;

                //VALUE value;
                P_ALG.KEY_P_VALUE keyPValue;

                foreach (PUT_PARAMETER putPar in listPutPar)
                {
                    if (putPar.IsNaN == false)
                    {
                        nAlg      = listNAlg.FirstOrDefault(item => { return(item.m_Id == putPar.m_idNAlg); });
                        putValues = values.Where(item => { return(item.m_IdPut == putPar.m_Id); });

                        if (!(nAlg == null))
                        {
                            if (!(nAlg.m_Id < 0))
                            {
                                foreach (VALUE value in putValues)
                                {
                                    if ((value.m_IdPut > 0)
                                        /*&& (((value.stamp_value.Equals(DateTime.MinValue) == false)))*/)
                                    {
                                        if (pAlg.ContainsKey(nAlg.m_nAlg) == false)
                                        {
                                            pAlg.Add(nAlg.m_nAlg, new P_ALG.P_PUT(nAlg.m_Id, !nAlg.m_bEnabled, nAlg.m_sAverage));
                                        }
                                        else
                                        {
                                            ;
                                        }

                                        keyPValue = new P_ALG.KEY_P_VALUE()
                                        {
                                            Id = putPar.IdComponent, Stamp = value.stamp_value
                                        };

                                        if (pAlg[nAlg.m_nAlg].ContainsKey(keyPValue) == false)
                                        {
                                            pAlg[nAlg.m_nAlg].Add(keyPValue
                                                                  , new P_ALG.P_PUT.P_VALUE()
                                            {
                                                m_iId         = putPar.m_Id
                                                , m_bDeny     = !putPar.IsEnabled
                                                , m_idRatio   = putPar.m_prjRatio
                                                , m_sQuality  = (value.stamp_value.Equals(DateTime.MinValue) == false) ? value.m_iQuality : ID_QUALITY_VALUE.NOT_REC
                                                , value       = (value.stamp_value.Equals(DateTime.MinValue) == false) ? value.value : 0F
                                                , m_fMinValue = putPar.m_fltMinValue
                                                , m_fMaxValue = putPar.m_fltMaxValue
                                            });
                                        }
                                        else
                                        {
                                            // для параметра 1-го порядка уже содержится значение параметра 2-го порядка
                                            ;
                                        }
                                    }
                                    else
                                    {
                                        // некорректный параметр расчета 2-го порядка
                                        ;
                                    }
                                }
                            }
                            else
                            {
                                // не найден либо параметр 1-го порядка, либо значение для параметра 2-го порядка
                                ;
                            }
                        }
                        else
                        {
                            // не найден параметр 1-го порядка (не ошибка - возможно putPar для другого типа расчета)
                            ;
                        }
                    }
                    else
                    {
                        // параметр 2-го порядка не достоверен
                        ;
                    }
                }

                return(iRes);
            }