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