Ejemplo n.º 1
0
            /// <summary>
            /// Установить значение для сигнала группы, по ключу, за указанный час
            /// </summary>
            /// <param name="indx">Индекс группы сигналов</param>
            /// <param name="keySgnl">Ключ сигнала</param>
            /// <param name="iHour">Индекс часа в сутках</param>
            /// <param name="value">Устанавливаемое значение</param>
            public void SetValue(INDEX_DATA indx,SIGNAL.KEY keySgnl,int iHour,double value)
            {
                MethodBase methodBase = MethodBase.GetCurrentMethod();
                string     errMsg     = string.Format(@"{0}.{1}::{2} () - ",methodBase.Module,methodBase.DeclaringType,methodBase.Name);

                if (m_dictData.ContainsKey(indx) == true)
                {
                    if (m_dictData[indx].ContainsKey(keySgnl) == true)
                    {
                        m_dictData[indx][keySgnl].m_data[iHour] = value;
                    }
                    else
                    {
                        Logging.Logg().Error(string.Format(@"{0}в словаре c INDEX={1} не инициализирован сигнал key={2}"
                                                           ,errMsg,indx.ToString(),keySgnl.ToString())
                                             ,Logging.INDEX_MESSAGE.NOT_SET);
                    }
                }
                else
                {
                    Logging.Logg().Error(string.Format(@"{0}в словаре не инициализирована группа сигналов INDEX={1}..."
                                                       ,errMsg,indx.ToString())
                                         ,Logging.INDEX_MESSAGE.NOT_SET);
                }
            }
Ejemplo n.º 2
0
        /// <summary>
        /// Привести полученные значения к часовому формату (из полу-часового)
        /// </summary>
        public void parseTableResult(DateTime dtStart,DateTime dtEnd,INDEX_DATA indx,out int err)
        {
            err = 0;

            TableResult         table;
            List <RecordResult> rowsDate;
            VALUES_DATE         valuesDate;

            table = m_arTableResult[(int)indx];

            for (DateTime dtRec = dtStart; dtRec < dtEnd; dtRec += TimeSpan.FromDays(1))
            {
                // = (DateTime)r[@"DATA_DATE"];
                valuesDate = m_listValuesDate.Find(item => { return(item.m_dataDate == dtRec); });
                rowsDate   = table.FindAll(item => { return((item.m_dtRec > dtRec) && (!(item.m_dtRec > dtRec.AddDays(1)))); });

                if (valuesDate.m_dataDate.Equals(DateTime.MinValue) == true)
                {
                    m_listValuesDate.Add(new VALUES_DATE(dtRec,indx,m_arListSgnls[(int)indx],rowsDate));
                }
                else
                {
                    //valuesDate.InitSignals(indx, m_arListSgnls[(int)indx]);

                    valuesDate.SetValues(indx,m_arListSgnls[(int)indx],rowsDate);
                }
            }
        }
Ejemplo n.º 3
0
            /// <summary>
            /// Конструктор - дополнительный (с парметрами)
            /// </summary>
            /// <param name="dt">Дата - метка времени для набора значений</param>
            /// <param name="indx">Индекс группы сигналов</param>
            /// <param name="listRecRes">Список значений в наборе</param>
            public VALUES_DATE(DateTime dt,INDEX_DATA indx,List <SIGNAL> listSgnls,List <RecordResult> listRecRes)
            {
                m_dataDate = dt;

                m_dictData = new Dictionary <INDEX_DATA,VALUES_GROUP>();

                SetValues(indx,listSgnls,listRecRes);
            }
Ejemplo n.º 4
0
 /// <summary>
 /// Инициализировать список доступных сигналов в группе
 ///  не вызывается при отсутствии сигналов
 /// </summary>
 /// <param name="indx">Индекс-идентификатор группы сигналов</param>
 /// <param name="listSgnls">Список доступных сигналов</param>
 private void initSignals(INDEX_DATA indx,List <SIGNAL> listSgnls)
 {
     if (m_dictData.ContainsKey(indx) == false)
     {
         // с VIII-ой группой произойдет вызов только при наличии сигналов
         m_dictData.Add(indx,new VALUES_GROUP(
                            listSgnls
                            ,(!(indx == INDEX_DATA.GRVIII)) ?
                            VALUES_GROUP.MODE.STANDARD :
                            VALUES_GROUP.MODE.EPOTERI));
     }
     else
     {
         m_dictData[indx].InitSignals(listSgnls);
     }
 }
Ejemplo n.º 5
0
        /// <summary>
        /// Очистить значения
        /// </summary>
        /// <param name="dtReq">Дата за которую требуется очистить значения</param>
        /// <param name="indx">Индекс группы сигналов</param>
        public void ClearValues(DateTime dtReq,INDEX_DATA indx)
        {
            VALUES_DATE valuesDate;

            valuesDate = m_listValuesDate.Find(item => { return(item.m_dataDate == dtReq); });
            // проверить успешность поиска объекта
            if ((valuesDate.m_dataDate > DateTime.MinValue) &&
                (!(valuesDate.m_dictData == null)) &&
                (valuesDate.m_dictData.ContainsKey(indx) == true))
            {
                // объект найден и содержит необходимый ключ - индекс группы сигналов
                valuesDate.m_dictData[indx].ClearValues();
            }
            else
            {
                ; // объект не найден
            }
        }
Ejemplo n.º 6
0
            /// <summary>
            /// Установить значения для группы сигналов по индексу группы
            /// </summary>
            /// <param name="indx">Индекс группы сигналов</param>
            /// <param name="listRecRes">Список значений</param>
            public void SetValues(INDEX_DATA indx,List <RecordResult> listRecRes)
            {
                SIGNAL.KEY keySgnl;         // ключ для сигнала
                int        iHour      = -1; // индекс часа
                MethodBase methodBase = MethodBase.GetCurrentMethod();
                string     errMsg     = string.Format(@"{0}.{1}::{2} () - ",methodBase.Module,methodBase.DeclaringType,methodBase.Name);

                if (m_dictData.ContainsKey(indx) == true)
                {
                    foreach (RecordResult r in listRecRes)
                    {
                        keySgnl = new SIGNAL.KEY(r.m_key);

                        if (m_dictData[indx].ContainsKey(keySgnl) == true)
                        {
                            // дата всегда одна и та же за исключением одной записи
                            iHour = r.m_dtRec.Hour > 0 ? r.m_dtRec.Hour - 1 : 23;
                            m_dictData[indx].SetValue(keySgnl,iHour,r.m_value);
                        }
                        else
                        {
                            Logging.Logg().Error(string.Format(@"{0}в словаре c INDEX={1} не инициализирован сигнал key={2}"
                                                               ,errMsg,indx.ToString(),keySgnl.ToString())
                                                 ,Logging.INDEX_MESSAGE.NOT_SET);
                        }
                    }

                    m_dictData[indx].CompleteSetValues();
                }
                else
                {
                    Logging.Logg().Error(string.Format(@"{0}в словаре не инициализирована группа сигналов INDEX={1}..."
                                                       ,errMsg,indx.ToString())
                                         ,Logging.INDEX_MESSAGE.NOT_SET);
                }
            }
Ejemplo n.º 7
0
            /// <summary>
            /// Установить значения для группы сигналов по индексу группы
            /// </summary>
            /// <param name="indx">Индекс группы сигналов</param>
            /// <param name="listSgnls">Список сигналов</param>
            /// <param name="listRecRes">Список значений</param>
            public void SetValues(INDEX_DATA indx,List <SIGNAL> listSgnls,List <RecordResult> listRecRes)
            {
                initSignals(indx,listSgnls);

                SetValues(indx,listRecRes);
            }
Ejemplo n.º 8
0
        /// <summary>
        /// Возвратить строку с идентификаторами сигналов для указанного списка
        /// </summary>
        /// <param name="listSgnls">Список сигналов для которых требуется возвратить строку</param>
        /// <returns>Строка с идентификаторами сигналов</returns>
        private string getSensors(INDEX_DATA indx,List <SIGNAL> listSgnls)
        {
            string strRes = string.Empty;

            List <int>    listIdUSPD  = new List <int>();
            List <string> sensorsUSPD = new List <string>();
            string        strOR       = @" OR ";
            Action <string,Logging.INDEX_MESSAGE,bool> delegateLogging;

            if ((!(listSgnls == null)) &&
                (listSgnls.Count > 0))
            {
                foreach (SIGNAL s in listSgnls)
                {
                    if (listIdUSPD.IndexOf(s.m_key.m_object) < 0)
                    {
                        listIdUSPD.Add(s.m_key.m_object);

                        sensorsUSPD.Add(@"([OBJECT] = " + s.m_key.m_object + @" AND [ITEM] IN (" + s.m_key.m_item);
                    }
                    else
                    {
                        sensorsUSPD[listIdUSPD.IndexOf(s.m_key.m_object)] += (@"," + s.m_key.m_item);
                    }
                }

                foreach (string s in sensorsUSPD)
                {
                    //Добавить завершающие скобки (1-я для IN, 2-я для [OBJECT])
                    strRes += s + @"))";
                    strRes += strOR;
                }

                if (strRes.Equals(string.Empty) == false)
                {
                    strRes = strRes.Substring(0,strRes.Length - strOR.Length);
                }
                else
                {
                    Logging.Logg().Error($"TEC::getSensors () - не распознан ни один сигнал для ТЭЦ ID={m_Id}, группа={indx.ToString ()}..."
                                         ,Logging.INDEX_MESSAGE.NOT_SET);
                }
            }
            else
            {
                if (_requiredSignals[(int)indx] == true)
                {
                    // ошибка только в случае обязательного наличия сигналов
                    delegateLogging = Logging.Logg().Error;
                }
                else
                {
                    // иначе - предупреждение
                    delegateLogging = Logging.Logg().Warning;
                }

                delegateLogging?.Invoke($"TEC::getSensors () - не определен ни один сигнал для ТЭЦ ID={m_Id}, группа={indx.ToString()}..."
                                        ,Logging.INDEX_MESSAGE.NOT_SET,true);
            }

            return(strRes);
        }