Пример #1
0
        //private TecViewAlarm getTecView (int id)
        //{
        //    foreach (TecViewAlarm tv in m_listTecView)
        //        if (tv.m_tec.m_id == id)
        //            return tv;
        //        else
        //            ;

        //    throw new Exception(@"AdminAlarm::getTecView (id_tec=" + id + @") - не найден объект 'TecView' ...");
        //}

        //private int OnEventAlarmRegistred_TecView(int id_tec, int curHour, int curMinute)
        //{
        //    int iRes = -1;
        //    TecView tecView = getTecView (id_tec);

        //    return iRes;
        //}
        /// <summary>
        /// Изменить состояние ТГ (вкл./выкл.)
        /// </summary>
        /// <param name="id_tg">Идентификатор ТГ</param>
        private void tgConfirm(int id_tg, StatisticCommon.TG.INDEX_TURNOnOff state)
        {
            TECComponent tc = null;

            if (!(state == TG.INDEX_TURNOnOff.UNKNOWN))
            {
                foreach (TecView tv in m_listTecView)
                {
                    tc = tv.FindTECComponent(id_tg);

                    if ((!(tc == null)) &&
                        (tc.IsTG == true))
                    {
                        if (!((tc.m_listLowPointDev[0] as TG).m_TurnOnOff == state))
                        {
                            (tc.m_listLowPointDev[0] as TG).m_TurnOnOff = state;
                            Logging.Logg().Action(@"AdminAlarm::tgConfirm (id=" + id_tg + @") - ТГ состояние=" + state.ToString(), Logging.INDEX_MESSAGE.NOT_SET);
                        }
                        else
                        {
                            Logging.Logg().Warning(@"AdminAlarm::tgConfirm (id=" + id_tg + @") - попытка подтвердить ТО ЖЕ состояние ТГ...", Logging.INDEX_MESSAGE.NOT_SET);
                        }
                    }
                    else
                    {
                        ;
                    }
                }
            }
            else
            {
                Logging.Logg().Error(@"AdminAlarm::tgConfirm (id=" + id_tg + @") - попытка подтвердить состояние ТГ как НЕИЗВЕСТНОЕ...", Logging.INDEX_MESSAGE.NOT_SET);
            }
        }
Пример #2
0
        //private TecViewAlarm getTecView (int id)
        //{
        //    foreach (TecViewAlarm tv in m_listTecView)
        //        if (tv.m_tec.m_id == id)
        //            return tv;
        //        else
        //            ;

        //    throw new Exception(@"AdminAlarm::getTecView (id_tec=" + id + @") - не найден объект 'TecView' ...");
        //}

        //private int OnEventAlarmRegistred_TecView(int id_tec, int curHour, int curMinute)
        //{
        //    int iRes = -1;
        //    TecView tecView = getTecView (id_tec);

        //    return iRes;
        //}
        /// <summary>
        /// Изменить состояние ТГ (вкл./выкл.)
        /// </summary>
        /// <param name="id_tg">Идентификатор ТГ</param>
        private void tgConfirm(int id_tg, StatisticCommon.TG.INDEX_TURNOnOff state)
        {
            TECComponent tc = null;

            if (!(state == TG.INDEX_TURNOnOff.UNKNOWN))
            {
                foreach (TecView tv in m_listTecView)
                {
                    tc = tv.FindTECComponent(id_tg);

                    if ((!(tc == null)) &&
                        (tc.IsTG == true))
                    {
                        if (!(tc.m_listTG[0].m_TurnOnOff == state))
                        {
                            tc.m_listTG[0].m_TurnOnOff = state;
                        }
                        else
                        {
                            ;
                        }
                    }
                    else
                    {
                        ;
                    }
                }
            }
            else
            {
                Logging.Logg().Error(@"AdminAlarm::tgConfirm (id=" + id_tg + @") - попытка зафиксировать состояние ТГ как НЕИЗВЕСТНОЕ...", Logging.INDEX_MESSAGE.NOT_SET);
            }
        }
Пример #3
0
        /// <summary>
        /// Функция проверки выполнения условий сигнализаций (для одного ГТП)
        /// </summary>
        /// <param name="curHour">Текущий час</param>
        /// <param name="curMinute">Текущий интервал (1-мин) - текущая минута указанного часа</param>
        /// <returns>Признак выполнения функции</returns>
        public int AlarmRegistred(int curHour, int curMinute)
        {
            //return EventAlarmDetect(m_tec.m_id, curHour, curMinute);

            //Признак выполнения функции
            int iRes            = (int)HHandler.INDEX_WAITHANDLE_REASON.SUCCESS
            , iDebug            = -1                                                          //-1 - нет отладки, 0 - раб./отладка, 1 - имитирование
            , cntTGTurnOn       = 0                                                           // кол-во вкл. ТГ
            , cntTGTurnUnknown  = allTECComponents[indxTECComponents].m_listLowPointDev.Count // кол-во ТГ с неизвестным состоянием
            , cntPower_TMValues = 0;                                                          //Счетчик кол-ва значений тек./мощн. ТГ в общем значении мощности для ГТП
            //Константы
            double TGTURNONOFF_VALUE = -1F                                                    //Значения для сигнализации "ТГ вкл./откл."
            , NOT_VALUE = -2F                                                                 //НЕТ значения
            , power_TM  = NOT_VALUE;

            //Признак состояния для сигнализации "ТГ вкл./откл." - исходный
            StatisticCommon.TG.INDEX_TURNOnOff curTurnOnOff = StatisticCommon.TG.INDEX_TURNOnOff.UNKNOWN;
            //Список объектов, детализирующих событие сигнализации
            List <TecViewAlarm.AlarmTecViewEventArgs.EventDetail> listEventDetail = new List <TecViewAlarm.AlarmTecViewEventArgs.EventDetail>();

            #region Код для отладки
            if (!(iDebug < 0))
            {
                Console.WriteLine(@" - curHour=" + curHour.ToString() + @"; curMinute=" + curMinute.ToString());
            }
            else
            {
                ;
            }
            #endregion Окончание блока кода для отладки

            //if (((lastHour == 24) || (lastHourError == true)) || ((lastMin == 0) || (lastMinError == true)))
            if (((curHour == 24) || (m_markWarning.IsMarked((int)INDEX_WARNING.LAST_HOUR) == true)) ||
                ((curMinute == 0) || (m_markWarning.IsMarked((int)INDEX_WARNING.LAST_MIN) == true)))
            {
                Logging.Logg().Error(@"TecView::AlarmEventRegistred (" + m_tec.name_shr + @"[ID_COMPONENT=" + m_ID + @"])"
                                     + @" - curHour=" + curHour + @"; curMinute=" + curMinute, Logging.INDEX_MESSAGE.NOT_SET);
            }
            else
            {
                foreach (StatisticCommon.TG tg in allTECComponents[indxTECComponents].m_listLowPointDev)
                {
                    curTurnOnOff = StatisticCommon.TG.INDEX_TURNOnOff.UNKNOWN;

                    #region Код для отладки
                    if (!(iDebug < 0))
                    {
                        Console.Write(tg.m_id_owner_gtp + @":" + tg.m_id + @"=" + m_dictValuesLowPointDev[tg.m_id].m_powerCurrent_TM);
                    }
                    else
                    {
                        ;
                    }
                    #endregion Окончание блока кода для отладки

                    if (m_dictValuesLowPointDev[tg.m_id].m_powerCurrent_TM < 1F)
                    {
                        //??? проверять ли значение на '< 0F'
                        if (!(m_dictValuesLowPointDev[tg.m_id].m_powerCurrent_TM < 0F))
                        {
                            curTurnOnOff = StatisticCommon.TG.INDEX_TURNOnOff.OFF;
                        }
                        else
                        {
                            ; //??? неопределенное состояние ТГ
                        }
                    }
                    else
                    {//Больше ИЛИ равно 1F
                        curTurnOnOff = StatisticCommon.TG.INDEX_TURNOnOff.ON;
                        // подготовить значение
                        if (power_TM == NOT_VALUE)
                        {
                            power_TM = 0F;
                        }
                        else
                        {
                            ;
                        }
                        // учесть в общем значении мощности ГТП, текущую мощность ТГ
                        power_TM += m_dictValuesLowPointDev[tg.m_id].m_powerCurrent_TM;
                        // увеличить счетчик
                        cntPower_TMValues++;
                    }
                    //??? неизвестный идентификатор источника значений СОТИАССО (id_tm = -1)
                    listEventDetail.Add(new TecViewAlarm.AlarmTecViewEventArgs.EventDetail()
                    {
                        id                = tg.m_id
                        , value           = m_dictValuesLowPointDev[tg.m_id].m_powerCurrent_TM
                        , last_changed_at = m_dictValuesLowPointDev[tg.m_id].m_dtCurrent_TM
                        , id_tm           = m_dictValuesLowPointDev[tg.m_id].m_id_TM
                    });

                    #region Код для отладки
                    //Имитирование - изменяем состояние
                    if (iDebug == 1)
                    {
                        if (!(tg.m_TurnOnOff == StatisticCommon.TG.INDEX_TURNOnOff.UNKNOWN))
                        {
                            if (curTurnOnOff == StatisticCommon.TG.INDEX_TURNOnOff.ON)
                            {// имитация - ТГ выкл.
                                //Учесть мощность выключенного ТГ в значении для ГТП в целом
                                power_TM -= m_dictValuesLowPointDev[tg.m_id].m_powerCurrent_TM;
                                //Присвоить значение для "отладки" (< 1)
                                m_dictValuesLowPointDev[tg.m_id].m_powerCurrent_TM = 0.666F;
                                //Изменить состояние
                                curTurnOnOff = StatisticCommon.TG.INDEX_TURNOnOff.OFF;
                            }
                            else
                            if (curTurnOnOff == StatisticCommon.TG.INDEX_TURNOnOff.OFF)
                            {
                                //Присвоить значение для "отладки" (> 1)
                                m_dictValuesLowPointDev[tg.m_id].m_powerCurrent_TM = 66.6F;
                                //Изменить состояние
                                curTurnOnOff = StatisticCommon.TG.INDEX_TURNOnOff.ON;
                            }
                            else
                            {
                                ;
                            }

                            Console.Write(Environment.NewLine + @"Отладка:: "
                                          + tg.m_id_owner_gtp + @":" + tg.m_id + @"="
                                          + m_dictValuesLowPointDev[tg.m_id].m_powerCurrent_TM
                                          + Environment.NewLine);
                        }
                        else
                        {
                            ;
                        }
                    }
                    else
                    {
                        ;
                    }
                    #endregion Окончание блока кода для отладки

                    if (!(curTurnOnOff == StatisticCommon.TG.INDEX_TURNOnOff.UNKNOWN))
                    {
                        if (tg.m_TurnOnOff == StatisticCommon.TG.INDEX_TURNOnOff.UNKNOWN)
                        {
                            tg.m_TurnOnOff = curTurnOnOff;
                        }
                        else
                        if (!(tg.m_TurnOnOff == curTurnOnOff))
                        {
                            //
                            EventReg(new TecViewAlarm.AlarmTecViewEventArgs(tg.m_id, new AlarmNotifyEventArgs.EventReason()
                            {
                                value   = listEventDetail[listEventDetail.Count - 1].value
                                , UDGe  = m_valuesHours[curHour].valuesUDGe
                                , koeff = TECComponentCurrent.m_dcKoeffAlarmPcur
                            }
                                                                            , DateTime.UtcNow
                                                                            , (int)curTurnOnOff
                                                                            , listEventDetail));

                            //Прекращаем текущий цикл...
                            //Признак досрочного прерывания цикла для сигн. "Текущая P"
                            power_TM = TGTURNONOFF_VALUE;

                            break;
                        }
                        else
                        {
                            ;     //Состояние ТГ не изменилось
                        }
                    }
                    else
                    {
                        //Текущее состояние ТГ не удалось определить
                        Logging.Logg().Warning(@"TecViewAlarm::AlarmRegistred (id_tg=" + tg.m_id + @") - Detail: "
                                               + listEventDetail[listEventDetail.Count - 1].ValuesToString()
                                               , Logging.INDEX_MESSAGE.NOT_SET);
                    }

                    if (!(tg.m_TurnOnOff == StatisticCommon.TG.INDEX_TURNOnOff.UNKNOWN))
                    {
                        cntTGTurnUnknown--;

                        if (tg.m_TurnOnOff == StatisticCommon.TG.INDEX_TURNOnOff.ON)
                        {
                            cntTGTurnOn++;
                        }
                        else
                        {
                            ;
                        }
                    }
                    else
                    {
                        ;
                    }

                    #region Код для отладки
                    if (!(iDebug < 0))
                    {
                        if ((TECComponentCurrent.m_listLowPointDev.IndexOf(tg) + 1) < TECComponentCurrent.m_listLowPointDev.Count)
                        {
                            Console.Write(@", ");
                        }
                        else
                        {
                            ;
                        }
                    }
                    else
                    {
                        ;
                    }
                    #endregion Окончание блока кода для отладки
                }

                if (!(power_TM == TGTURNONOFF_VALUE))
                {
                    if ((!(power_TM == NOT_VALUE)) && (!(power_TM < 1)))
                    {
                        int situation = 0;

                        #region Код для отладки
                        if (!(iDebug < 0))
                        {
                            situation = HMath.GetRandomNumber() % 2 == 1 ? -1 : 1;
                            EventReg(new TecViewAlarm.AlarmTecViewEventArgs(TECComponentCurrent.m_id
                                                                            , new AlarmNotifyEventArgs.EventReason()
                            {
                                value   = listEventDetail[0].value
                                , UDGe  = m_valuesHours[curHour].valuesUDGe
                                , koeff = TECComponentCurrent.m_dcKoeffAlarmPcur
                            }
                                                                            , DateTime.UtcNow
                                                                            , situation
                                                                            , listEventDetail)); //Меньше
                            Console.WriteLine(@"; ::AlarmEventRegistred () - EventReg [ID=" + TECComponentCurrent.m_id + @"] ...");
                        }
                        else
                        #endregion Окончание блока кода для отладки
                        {
                            if ((cntTGTurnUnknown == 0) && // кол-во ТГ с неизвестным состоянием = 0
                                (cntTGTurnOn == cntPower_TMValues))    // кол-во ТГ, учтенных для подсчета общего знач. тек./мощн. ГТП = кол-ву вкл. ТГ
                            {
                                double absDiff = Math.Abs(power_TM - m_valuesHours[curHour].valuesUDGe)
                                , lim          = m_valuesHours[curHour].valuesUDGe * ((double)TECComponentCurrent.m_dcKoeffAlarmPcur / 100);
                                if (absDiff > lim)
                                {
                                    //EventReg(allTECComponents[indxTECComponents].m_id, -1);
                                    if (power_TM < m_valuesHours[curHour].valuesUDGe)
                                    {
                                        situation = -1; //Меньше
                                    }
                                    else
                                    {
                                        situation = 1; //Больше
                                    }
                                    EventReg(new TecViewAlarm.AlarmTecViewEventArgs(TECComponentCurrent.m_id
                                                                                    , new AlarmNotifyEventArgs.EventReason()
                                    {
                                        value   = power_TM
                                        , UDGe  = m_valuesHours[curHour].valuesUDGe
                                        , koeff = TECComponentCurrent.m_dcKoeffAlarmPcur
                                    }
                                                                                    , DateTime.UtcNow
                                                                                    , situation
                                                                                    , listEventDetail));
                                }
                                else
                                {
                                    ; //EventUnReg...
                                }
                            }
                            else
                            {
                                // обработаны не все значения тек./мощности ТГ_в_работе из состава ГТП
                                Logging.Logg().Warning(@"TecViewAlarm::AlarmRegistred (id=" + m_ID + @") - обработаны не все значения тек./мощности ТГ_в_работе из состава ГТП", Logging.INDEX_MESSAGE.NOT_SET);
                            }
                        }
                    }
                    else
                    {
                        ; //Нет значений ИЛИ значения ограничены 1 МВт
                    }
                }
                else
                {
                    iRes = -102; //(int)INDEX_WAITHANDLE_REASON.BREAK;
                }
                #region Код для отладки
                if (!(iDebug < 0))
                {
                    Console.WriteLine();
                }
                else
                {
                    ;
                }

                ////Отладка
                //for (int i = 0; i < m_valuesHours.valuesFact.Length; i ++)
                //    Console.WriteLine(@"valuesFact[" + i.ToString() + @"]=" + m_valuesHours.valuesFact[i]);
                #endregion Окончание блока кода для отладки
            }

            return(iRes);
        }