//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); } }
//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); } }
/// <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); }