private void ProcessPlan(DataRow dr) { DateTime SrvDate; Boolean DeviceOK; Int16 archType_hour = 3; Int16 archType_day = 4; Int16 archType_moment = 1; Int16 archType_total = 2; Int16 ncall = 0; Int16 nmaxcall = 5; Int16 minrepeat = 5; SequenceErrorCount = 0; try { #region "init" ncall = Convert.ToInt16(dr["ncall"]); nmaxcall = Convert.ToInt16(dr["nmaxcall"]); minrepeat = Convert.ToInt16(dr["minrepeat"]); Int32 id_bdc; bool chour = false, ccurr = false, c24 = false, csum = false; id_bdc = Convert.ToInt32(dr["id_bd"].ToString()); if (dr["chour"].ToString() == "1") chour = true; if (dr["ccurr"].ToString() == "1") ccurr = true; if (dr["c24"].ToString() == "1") c24 = true; if (dr["csum"].ToString() == "1") csum = true; SrvDate = DateTime.Now; try { SrvDate = Convert.ToDateTime(dr["ServerDate"].ToString()); } catch { } //if (chour || ccurr || c24 || csum) //{ TvMain.ClearDuration(); if (TvMain.LockDevice(id_bdc, 60 * 40, false)) { if (TvMain.DeviceInit(id_bdc, "(Любой)", aSocket)) { DeviceOK = true; //TvMain.SaveLog(id_bdc,0,"??",1,"Инициализация транспортного уровня:OK"); } else { bool SkipErr = false; if (TvMain.TVD != null) { if (TvMain.TVD.Transport == 0) { if (TvMain.TVD.ComPort == "") { SkipErr = true; } if (TvMain.PortBusy) { SkipErr = true; } } } if (!SkipErr) { string tError = ""; try { tError = TvMain.ConnectStatus(); } catch (Exception) { tError = ""; } if (tError != "") { TvMain.WriteErrToDB(id_bdc, DateTime.Now, tError); TvMain.SaveLog(id_bdc, 0, "??", 1, tError); } else { if (TvMain.TVD != null) { if (TvMain.TVD.DriverTransport != null) tError = TvMain.TVD.DriverTransport.GetError; } TvMain.WriteErrToDB(id_bdc, DateTime.Now, "Ошибка транспорта. " + tError); TvMain.SaveLog(id_bdc, 0, "??", 1, "Ошибка транспорта. " + tError); } if (ncall + 1 < nmaxcall) { TvMain.SetNCALLToPlanCall(id_bdc.ToString(), ncall + 1); TvMain.SetTimeToPlanCall(id_bdc.ToString(), "dlock", DateTime.Now); } else { TvMain.SetNCALLToPlanCall(id_bdc.ToString(), 0); DateTime ddd = SrvDate; try { ddd = Convert.ToDateTime(dr["dnextcurr"].ToString()); } catch { InfoReport("Прибор ID= " + id_bdc.ToString() + " error converting dnextcurr :" + dr["dnextcurr"].ToString()); } while (ddd < SrvDate) { ddd = ddd.AddHours(1); } ddd = ddd.AddMinutes(-minrepeat); TvMain.SetTimeToPlanCall(id_bdc.ToString(), "dlock", ddd); } try { VIPAnalizer.NodeAnalizer na = new VIPAnalizer.NodeAnalizer(); na.CheckStatus(TvMain, id_bdc, 3, 2); } catch (System.Exception) { } } DeviceOK = false; } } else { TvMain.SaveLog(id_bdc, 0, "??", 1, "Тепловычислитель занят"); DeviceOK = false; } if (DeviceOK) { TvMain.connect(); if (TvMain.isConnected() == false) { string tError = ""; try { tError = TvMain.ConnectStatus(); } catch (Exception) { tError = ""; } if (tError != "") { TvMain.WriteErrToDB(id_bdc, DateTime.Now, tError); TvMain.SaveLog(id_bdc, 0, "??", 1, tError); } else { TvMain.WriteErrToDB(id_bdc, DateTime.Now, "Ошибка соединения. " + tError); TvMain.SaveLog(id_bdc, 0, "??", 1, "Ошибка соединения. " + tError); } if (ncall + 1 < nmaxcall) { TvMain.SetNCALLToPlanCall(id_bdc.ToString(), ncall + 1); TvMain.SetTimeToPlanCall(id_bdc.ToString(), "dlock", DateTime.Now); } else { TvMain.SetNCALLToPlanCall(id_bdc.ToString(), 0); DateTime ddd = SrvDate; try { ddd = Convert.ToDateTime(dr["dnextcurr"].ToString()); } catch { InfoReport("Прибор ID= " + id_bdc.ToString() + " error converting dnextcurr :" + dr["dnextcurr"].ToString()); } while (ddd < SrvDate) { ddd = ddd.AddHours(1); } ddd = ddd.AddMinutes(-minrepeat); TvMain.SetTimeToPlanCall(id_bdc.ToString(), "dlock", ddd); } ErrorReport("Прибор ID " + dr["id_bd"].ToString() + " Counter initialization Error!"); DeviceOK = false; try { VIPAnalizer.NodeAnalizer na = new VIPAnalizer.NodeAnalizer(); na.CheckStatus(TvMain, id_bdc, 3, 2); } catch (System.Exception) { } } else { TvMain.SaveLog(id_bdc, 0, "??", 1, "Соединение с тепловычислителем:OK"); } } if (DeviceOK) { TvMain.SetNCALLToPlanCall(id_bdc.ToString(), 0); TvMain.SetTimeToPlanCall(id_bdc.ToString(), "dlock", DateTime.Now); DateTime ddd; #endregion #region "moment" // moment ddd = SrvDate; try { ddd = Convert.ToDateTime(dr["dnextcurr"].ToString()); } catch { InfoReport("Прибор ID= " + id_bdc.ToString() + " error converting dnextcurr :" + dr["dnextcurr"].ToString()); } if (TvMain.TVD.IsConnected() && ccurr && ddd <= SrvDate) { DateTime tempdate; Double nmin; InfoReport("Прибор ID= " + id_bdc.ToString() + " чтение текущих архивов на " + ddd.ToString()); try { if (TvMain.LockDevice(id_bdc, 400, true)) { TvMain.HoldLine(); String str; TvMain.ClearDuration(); str = TvMain.readmarch(); if (str.Length == 0) { SequenceErrorCount += 1; TvMain.WriteErrToDB(id_bdc, SrvDate, "Ошибка чтения текущего архива"); TvMain.SaveLog(id_bdc, archType_moment, "??", 1, "Ошибка чтения текущего архива"); } else { if (str.Substring(0, 6) != "Ошибка") { if (TvMain.TVD.isMArchToDBWrite) { TvMain.SaveLog(id_bdc, archType_moment, "??", 1, "Текущий архив" + ":OK"); TvMain.WritemArchToDB(); SequenceErrorCount = 0; } //); tempdate = ddd; nmin = Convert.ToDouble(dr["icallcurr"].ToString()); while (tempdate.AddMinutes(nmin) <= SrvDate) { tempdate = tempdate.AddMinutes(nmin); } tempdate = tempdate.AddMinutes(nmin); TvMain.SetTimeToPlanCall(id_bdc.ToString(), "dnextcurr", tempdate); } else { SequenceErrorCount += 1; TvMain.WriteErrToDB(id_bdc, SrvDate, str); TvMain.SaveLog(id_bdc, archType_moment, "??", 1, "Ошибка чтения текущего архива " + str); tempdate = ddd; nmin = Convert.ToDouble(dr["icallcurr"].ToString()); while (tempdate.AddMinutes(nmin) <= SrvDate) { tempdate = tempdate.AddMinutes(nmin); } //tempdate = tempdate.AddMinutes(nmin); TvMain.SetTimeToPlanCall(id_bdc.ToString(), "dnextcurr", tempdate); } } //TvMain.UnLockDevice(id_bdc); } }//try catch (Exception Ex) { TvMain.WriteErrToDB(id_bdc, SrvDate, "Ошибка чтения архива:" + Ex.Message); ErrorReport("Прибор ID " + dr["id_bd"].ToString() + " read arch failed, " + Ex.Message); } }//if (ccurr) #endregion #region "total" // total //if (csum) ddd = SrvDate; try { ddd = Convert.ToDateTime(dr["dnextsum"].ToString()); } catch { InfoReport("Прибор ID= " + id_bdc.ToString() + " error converting dnextsum " + dr["dnextsum"].ToString()); } if (TvMain.TVD.IsConnected() && csum && ddd <= SrvDate) { DateTime tempdate; Double nmin; InfoReport("Прибор ID= " + id_bdc.ToString() + " read total data at " + SrvDate.ToString()); try { String str; if (TvMain.LockDevice(id_bdc, 400, true)) { TvMain.HoldLine(); TvMain.ClearDuration(); str = TvMain.readtarch(); InfoReport("Прибор ID " + id_bdc.ToString() + " -> " + str); if (str.Length == 0) { // oops! TvMain.SaveLog(id_bdc, archType_total, "??", 1, "Ошибка чтения итогового архива "); SequenceErrorCount += 1; } else { if (str.Substring(0, 6) != "Ошибка") { if (TvMain.TVD.isTArchToDBWrite) { TvMain.SaveLog(id_bdc, archType_moment, "??", 1, "Итоговый архив " + ":OK"); TvMain.WriteTArchToDB(); SequenceErrorCount = 0; } tempdate = ddd; nmin = Convert.ToDouble(dr["icallsum"].ToString()); while (tempdate.AddMinutes(nmin) <= SrvDate) { tempdate = tempdate.AddMinutes(nmin); } tempdate = tempdate.AddMinutes(nmin); TvMain.SetTimeToPlanCall(id_bdc.ToString(), "dnextsum", tempdate); //TvMain.AddMinutesToPlanCall(id_bdc.ToString(), "dnextsum", Convert.ToInt32(nmin)); } else { SequenceErrorCount += 1; TvMain.SaveLog(id_bdc, archType_total, "??", 1, "Ошибка чтения итогового архива " + str); } } //TvMain.UnLockDevice(id_bdc); } }//try catch (Exception Ex) { ErrorReport("Прибор ID " + dr["id_bd"].ToString() + " read arch failed, " + Ex.Message); } }//if (ccurr) #endregion #region "hour" ddd = SrvDate; try { ddd = Convert.ToDateTime(dr["dnexthour"].ToString()); } catch { InfoReport("Прибор ID= " + id_bdc.ToString() + " error while convert dnexthour :" + dr["dnexthour"].ToString()); } // hour if (TvMain.TVD.IsConnected() && chour && ddd <= SrvDate) { //DateTime dlasthour, nowhour,tempdate; DateTime tempdate; Int16 numhour; numhour = Convert.ToInt16("0" + dr["numhour"].ToString()); Int16 icall = Convert.ToInt16("0" + dr["icall"].ToString()); if (TvMain.LockDevice(id_bdc, 400 * numhour, true)) { TvMain.HoldLine(); if (ddd.AddHours(numhour) <= SrvDate.AddHours(1)) { // опаздываем, читаем вперед tempdate = ddd; tempdate = tempdate.AddHours(-1); for (int j = 0; j < numhour; j++) { if (SequenceErrorCount > 2) { goto ClosePlan; } if (TvMain.TVD.IsConnected()) { try { tempdate = tempdate.AddHours(1); if (TvMain.CheckForArch(archType_hour, tempdate.Year, tempdate.Month, tempdate.Day, tempdate.Hour, id_bdc) == false) { InfoReport("Прибор ID= " + id_bdc.ToString() + " читаем архив за дату " + tempdate.ToString()); String str; TvMain.ClearDuration(); str = TvMain.readarch(archType_hour, tempdate.Year, tempdate.Month, tempdate.Day, tempdate.Hour); if (str.Length == 0) { WarningReport("Прибор ID: " + dr["id_bd"].ToString() + " не прочтен часовой архив за дату:" + tempdate.ToString()); TvMain.SaveLog(id_bdc, archType_hour, "??", 1, "Ошибка чтения часового архива за дату:" + tempdate.ToString()); SequenceErrorCount += 1; } else { if (str.Substring(0, 6) != "Ошибка") { if (TvMain.TVD.isArchToDBWrite) { SequenceErrorCount = 0; TvMain.SaveLog(id_bdc, archType_hour, "??", 1, "Часовой архив за дату:" + tempdate.ToString() + ":OK"); TvMain.ClearDBArchString(archType_hour, tempdate.Year, tempdate.Month, tempdate.Day, tempdate.Hour, id_bdc); TvMain.WriteArchToDB(); TvMain.SetTimeToPlanCall(id_bdc.ToString(), "dlasthour", tempdate.AddSeconds(-1)); TvMain.SetTimeToPlanCall(id_bdc.ToString(), "dnexthour", tempdate.AddSeconds(-1)); } } else { SequenceErrorCount += 1; TvMain.SaveLog(id_bdc, archType_hour, "??", 1, "Ошибка чтения часового архива за дату:" + tempdate.ToString() + " " + str); WarningReport("Прибор ID: " + dr["id_bd"].ToString() + " не прочтен часовой архив за " + tempdate.ToString() + "\r\n" + str); // при ошибке все равно двигаемся вперед !!! потому как отстаем иначе при отсутствии архивов так и останемся здесь навсегда TvMain.SetTimeToPlanCall(id_bdc.ToString(), "dlasthour", tempdate.AddSeconds(-1)); TvMain.SetTimeToPlanCall(id_bdc.ToString(), "dnexthour", tempdate.AddSeconds(-1)); } } } else { TvMain.SaveLog(id_bdc, archType_hour, "??", 1, "Часовой архив за дату " + tempdate.ToString() + " уже есть в базе"); InfoReport("Прибор ID= " + id_bdc.ToString() + " архив за дату " + tempdate.ToString() + " уже есть в базе"); TvMain.SetTimeToPlanCall(id_bdc.ToString(), "dnexthour", tempdate.AddSeconds(-1)); } } catch (Exception Ex) { SequenceErrorCount += 1; ErrorReport("Прибор ID " + dr["id_bd"].ToString() + " failed, " + Ex.Message); } } }// end for TvMain.SetTimeToPlanCall(id_bdc.ToString(), "dnexthour", ddd.AddHours(numhour)); } else { tempdate = ddd; while (tempdate.AddHours(1) <= SrvDate) { tempdate = tempdate.AddHours(1); } bool ReadHOK; ReadHOK = false; // все по расписанию, читаем архивы назад for (int j = 0; j < numhour; j++) { if (SequenceErrorCount > 2) { goto ClosePlan; } if (TvMain.TVD.IsConnected()) { try { tempdate = tempdate.AddHours(-1); String str; if (TvMain.CheckForArch(archType_hour, tempdate.Year, tempdate.Month, tempdate.Day, tempdate.Hour, id_bdc) == false) { InfoReport("Прибор ID= " + id_bdc.ToString() + " читаем архив за дату " + tempdate.ToString()); TvMain.ClearDuration(); str = TvMain.readarch(archType_hour, tempdate.Year, tempdate.Month, tempdate.Day, tempdate.Hour); if (str.Length == 0) { WarningReport("Прибор ID: " + dr["id_bd"].ToString() + " не прочтен часовой архив за " + tempdate.ToString()); TvMain.SaveLog(id_bdc, archType_hour, "??", 1, "Ошибка чтения часового архива за дату:" + tempdate.ToString()); SequenceErrorCount += 1; } else { if (str.Substring(0, 6) != "Ошибка") { if (TvMain.TVD.isArchToDBWrite) { TvMain.SaveLog(id_bdc, archType_hour, "??", 1, "Часовой архив за дату:" + tempdate.ToString() + ":OK"); TvMain.ClearDBArchString(archType_hour, tempdate.Year, tempdate.Month, tempdate.Day, tempdate.Hour, id_bdc); TvMain.WriteArchToDB(); SequenceErrorCount =0; } if (!ReadHOK) { ReadHOK = true; // фиксируем последний удачный архив TvMain.SetTimeToPlanCall(id_bdc.ToString(), "dlasthour", tempdate.AddSeconds(-1)); } } else { SequenceErrorCount += 1; WarningReport("Прибор ID: " + dr["id_bd"].ToString() + " не прочтен часовой архив за " + tempdate.ToString() + "\r\n" + str); TvMain.SaveLog(id_bdc, archType_hour, "??", 1, "Ошибка чтения часового архива за дату:" + tempdate.ToString() + " " + str); } } } else { TvMain.SaveLog(id_bdc, archType_hour, "??", 1, "Часовой архив за дату " + tempdate.ToString() + " уже есть в базе"); //TvMain.SetTimeToPlanCall(id_bdc.ToString(), "dnexthour", tempdate.AddSeconds(-1)); InfoReport("Прибор ID= " + id_bdc.ToString() + " архив за дату " + tempdate.ToString() + " уже есть в базе"); } } catch (Exception Ex) { ErrorReport("Прибор ID " + dr["id_bd"].ToString() + " failed, " + Ex.Message); } } }// end for // сдвигаем указатель на нужное количество минут if (TvMain.TVD.IsConnected()) { //TvMain.SetTimeToPlanCall(id_bdc.ToString(), "dnexthour", SrvDate); TvMain.AddMinutesToPlanCall(id_bdc.ToString(), "dnexthour", icall); } } //TvMain.UnLockDevice(id_bdc); } // Lock }//if (chour) #endregion #region "day" ddd = SrvDate; try { ddd = Convert.ToDateTime(dr["dnext24"].ToString()); } catch { InfoReport("Прибор ID= " + id_bdc.ToString() + " error while convert dnext24 :" + dr["dnext24"].ToString()); } // day if (TvMain.TVD.IsConnected() && c24 && ddd <= SrvDate) { DateTime tempdate; Int16 num24; num24 = Convert.ToInt16(dr["num24"].ToString()); Int16 icall24 = Convert.ToInt16(dr["icall24"].ToString()); if (ddd.AddDays(num24) <= SrvDate.AddDays(1)) { // если мы сильно отстали от расписания и догоняем tempdate = ddd; tempdate = tempdate.AddDays(-1); try { if (TvMain.LockDevice(id_bdc, 400 * num24, true)) { TvMain.HoldLine(); // двигаемся от последнего прочитанного вперед for (int j = 0; j < num24; j++) { if (SequenceErrorCount > 2) { goto ClosePlan; } if (TvMain.TVD.IsConnected()) { tempdate = tempdate.AddDays(1); if (TvMain.CheckForArch(archType_day, tempdate.Year, tempdate.Month, tempdate.Day, 0, id_bdc) == false) { InfoReport("Прибор ID= " + id_bdc.ToString() + " читаем суточный архив за дату " + tempdate.ToString()); String str; TvMain.ClearDuration(); str = TvMain.readarch(archType_day, tempdate.Year, tempdate.Month, tempdate.Day, tempdate.Hour); if (str.Length == 0) { SequenceErrorCount += 1; WarningReport("Прибор ID: " + dr["id_bd"].ToString() + " не прочтен архив за дату " + tempdate.ToString()); TvMain.SaveLog(id_bdc, archType_day, "??", 1, "Ошибка чтения суточного архива за дату:" + tempdate.ToString()); } else { if (str.Substring(0, 6) != "Ошибка") { if (TvMain.TVD.isArchToDBWrite) { SequenceErrorCount =0; TvMain.SaveLog(id_bdc, archType_day, "??", 1, "Суточный архив за дату:" + tempdate.ToString() + ":OK"); TvMain.ClearDBArchString(archType_day, tempdate.Year, tempdate.Month, tempdate.Day, 0, id_bdc); TvMain.WriteArchToDB(); } // записываем последний удачный TvMain.SetTimeToPlanCall(id_bdc.ToString(), "dlastday", tempdate.AddSeconds(-1)); TvMain.SetTimeToPlanCall(id_bdc.ToString(), "dnext24", tempdate.AddSeconds(-1)); } else { SequenceErrorCount += 1; WarningReport("Прибор ID: " + dr["id_bd"].ToString() + " не прочтен архив за дату " + tempdate.ToString() + "\r\n" + str); TvMain.SaveLog(id_bdc, archType_day, "??", 1, "Ошибка чтения суточного архив за дату:" + tempdate.ToString() + " " + str); // все равно сдвигаемся даже если ошибка, прочтем потом из потерянных архивов TvMain.SetTimeToPlanCall(id_bdc.ToString(), "dlastday", tempdate.AddSeconds(-1)); TvMain.SetTimeToPlanCall(id_bdc.ToString(), "dnext24", tempdate.AddSeconds(-1)); } } } else { TvMain.SaveLog(id_bdc, archType_day, "??", 1, "Суточный архив за дату " + tempdate.ToString() + " уже есть в базе"); InfoReport("Прибор ID= " + id_bdc.ToString() + " суточный архив за дату " + tempdate.ToString() + " уже есть в базе"); TvMain.SetTimeToPlanCall(id_bdc.ToString(), "dnext24", tempdate.AddSeconds(-1)); } } }//end for //TvMain.UnLockDevice(id_bdc); } }//try catch (Exception Ex) { ErrorReport("Прибор ID: " + dr["id_bd"].ToString() + " read day arch failed, " + Ex.Message); } } else { tempdate = ddd; tempdate = tempdate.AddDays(1); bool ReadDOK; ReadDOK = false; try { if (TvMain.LockDevice(id_bdc, 400 * num24, true)) { for (int j = 0; j < num24; j++) { if (SequenceErrorCount > 2) { goto ClosePlan; } if (TvMain.TVD.IsConnected()) { TvMain.HoldLine(); tempdate = tempdate.AddDays(-1); String str; if (TvMain.CheckForArch(archType_day, tempdate.Year, tempdate.Month, tempdate.Day, 0, id_bdc) == false) { InfoReport("Прибор ID= " + id_bdc.ToString() + " читаем суточный архив за дату " + tempdate.ToString()); TvMain.ClearDuration(); str = TvMain.readarch(archType_day, tempdate.Year, tempdate.Month, tempdate.Day, tempdate.Hour); if (str.Length == 0) { SequenceErrorCount += 1; WarningReport("Прибор ID: " + dr["id_bd"].ToString() + " " + str + tempdate.ToString()); TvMain.SaveLog(id_bdc, archType_day, "??", 1, "Ошибка чтения суточного архива за дату:" + tempdate.ToString()); } else { if (str.Substring(0, 6) != "Ошибка") { if (TvMain.TVD.isArchToDBWrite) { SequenceErrorCount =0; TvMain.SaveLog(id_bdc, archType_day, "??", 1, "Суточный архив за дату:" + tempdate.ToString() + ":OK"); TvMain.ClearDBArchString(archType_day, tempdate.Year, tempdate.Month, tempdate.Day, 0, id_bdc); TvMain.WriteArchToDB(); if (!ReadDOK) { ReadDOK = true; TvMain.SetTimeToPlanCall(id_bdc.ToString(), "dlastday", tempdate.AddSeconds(-1)); } } } else { SequenceErrorCount += 1; WarningReport("Прибор ID: " + dr["id_bd"].ToString() + " " + str + tempdate.ToString()); TvMain.SaveLog(id_bdc, archType_day, "??", 1, "Ошибка чтения суточного архива за дату:" + tempdate.ToString() + " " + str); } } } else { TvMain.SaveLog(id_bdc, archType_day, "??", 1, "Суточный архив за дату " + tempdate.ToString() + " уже есть в базе"); InfoReport("Прибор ID= " + id_bdc.ToString() + " суточный архив за дату " + tempdate.ToString() + " уже есть в базе"); } } }//for (int j = 0; j <= razn.Days; j++) if (TvMain.TVD.IsConnected()) { TvMain.AddHourToPlanCall(id_bdc.ToString(), "dnext24", Convert.ToInt32(dr["icall24"].ToString())); } //TvMain.UnLockDevice(id_bdc ); } }//try catch (Exception Ex) { ErrorReport("Прибор ID: " + dr["id_bd"].ToString() + " read day arch failed, " + Ex.Message); } } }//if (c24) #endregion #region "qlist hour" TvMain.SetTimeToPlanCall(id_bdc.ToString(), "dlastcall", SrvDate); // try to load requested hour archives { ddd = SrvDate; try { ddd = Convert.ToDateTime(dr["dnexthour"].ToString()); } catch { } DateTime tempdate; DataTable missing; missing = TvMain.QuerySelect("select QLISTID, QDATE,PROCESSED from QLIST where id_bd=" + id_bdc.ToString() + " and id_PTYPE=3 "); try { if (missing.Rows.Count > 0) TvMain.LockDevice(id_bdc, 400 * missing.Rows.Count, true); for (int j = 0; j < missing.Rows.Count && j < 6; j++) { if (SequenceErrorCount > 2) { goto ClosePlan; } tempdate = (DateTime)(missing.Rows[j]["QDATE"]); if (TvMain.TVD.IsConnected()) { TvMain.HoldLine(); String str; InfoReport("Прибор ID= " + id_bdc.ToString() + " чтение часового архива по запросу " + tempdate.ToString()); TvMain.ClearDuration(); str = TvMain.readarch(archType_hour, tempdate.Year, tempdate.Month, tempdate.Day, tempdate.Hour); if (str.Length == 0) { SequenceErrorCount += 1; WarningReport("Прибор ID= " + dr["id_bd"].ToString() + " " + str + " " + tempdate.ToString()); TvMain.SaveLog(id_bdc, archType_hour, "??", 1, "Ошибка чтения часового архива по запросу за дату:" + tempdate.ToString() + " " + str); if (Convert.ToInt16(missing.Rows[j]["PROCESSED"]) < 9) { TvMain.QueryExec("update QLIST set processed=processed+1 where QLISTID=" + missing.Rows[j]["QLISTID"].ToString()); } else { TvMain.QueryExec("delete from QLIST where QLISTID=" + missing.Rows[j]["QLISTID"].ToString()); } } else { if (str.Substring(0, 6) != "Ошибка") { //if (TvMain.CheckForArch(archType_day, tempdate.Year, tempdate.Month, tempdate.Day, tempdate.Hour, id_bdc) == false) { if (TvMain.TVD.isArchToDBWrite) { TvMain.SaveLog(id_bdc, archType_hour, "??", 1, "Часовой архив по запросу за дату:" + tempdate.ToString() + ":OK"); TvMain.ClearDBArchString(archType_hour, tempdate.Year, tempdate.Month, tempdate.Day, tempdate.Hour, id_bdc); TvMain.WriteArchToDB(); TvMain.QueryExec("delete from QLIST where QLISTID=" + missing.Rows[j]["QLISTID"].ToString()) ; SequenceErrorCount = 0; } } } else { SequenceErrorCount += 1; WarningReport("Прибор ID= " + dr["id_bd"].ToString() + " " + str + tempdate.ToString()); TvMain.SaveLog(id_bdc, archType_hour, "??", 1, "Ошибка чтения часового архива по запросу за дату:" + tempdate.ToString() + " " + str); if (Convert.ToInt16(missing.Rows[j]["PROCESSED"]) < 9) { TvMain.QueryExec("update QLIST set processed=processed+1 where QLISTID=" + missing.Rows[j]["QLISTID"].ToString()); } else { TvMain.QueryExec("delete from QLIST where QLISTID=" + missing.Rows[j]["QLISTID"].ToString()); } } } } } }//try catch (Exception Ex) { SequenceErrorCount += 1; ErrorReport("Прибор ID= " + dr["id_bd"].ToString() + " Ошибка чтения часового архива по запросу, " + Ex.Message); } }// (QLIST hour) #endregion #region "qlist day" TvMain.SetTimeToPlanCall(id_bdc.ToString(), "dlastcall", SrvDate); // try to load requested day archives { ddd = SrvDate; DateTime tempdate; DataTable missing; missing = TvMain.QuerySelect("select QLISTID, QDATE,PROCESSED from QLIST where id_bd=" + id_bdc.ToString() + " and id_PTYPE=4 "); try { if (missing.Rows.Count > 0) TvMain.LockDevice(id_bdc, 400 * missing.Rows.Count, true); for (int j = 0; j < missing.Rows.Count && j < 6; j++) { if (SequenceErrorCount > 2) { goto ClosePlan; } tempdate = (DateTime)(missing.Rows[j]["QDATE"]); if (TvMain.TVD.IsConnected()) { TvMain.HoldLine(); String str; InfoReport("Прибор ID= " + id_bdc.ToString() + " чтение суточного архива по запросу " + tempdate.ToString()); if (tempdate.Hour > 12) { tempdate = tempdate.AddDays(1); tempdate = tempdate.AddHours(- tempdate.Hour ); tempdate = tempdate.AddMinutes(-tempdate.Minute ); } TvMain.ClearDuration(); str = TvMain.readarch(archType_day, tempdate.Year, tempdate.Month, tempdate.Day, 0); if (str.Length == 0) { SequenceErrorCount += 1; WarningReport("Прибор ID= " + dr["id_bd"].ToString() + " " + str + " " + tempdate.ToString()); TvMain.SaveLog(id_bdc, archType_day, "??", 1, "Ошибка чтения суточного архива по запросу за дату:" + tempdate.ToString() + " " + str); if (Convert.ToInt16(missing.Rows[j]["PROCESSED"]) < 9) { TvMain.QueryExec("update QLIST set processed=processed+1 where QLISTID=" + missing.Rows[j]["QLISTID"].ToString()); } else { TvMain.QueryExec("delete from QLIST where QLISTID=" + missing.Rows[j]["QLISTID"].ToString()); } } else { if (str.Substring(0, 6) != "Ошибка") { //if (TvMain.CheckForArch(archType_day, tempdate.Year, tempdate.Month, tempdate.Day, tempdate.Hour, id_bdc) == false) { if (TvMain.TVD.isArchToDBWrite) { TvMain.SaveLog(id_bdc, archType_day, "??", 1, "Суточный архив по запросу за дату:" + tempdate.ToString() + ":OK"); TvMain.ClearDBArchString(archType_day, tempdate.Year, tempdate.Month, tempdate.Day, 0, id_bdc); TvMain.WriteArchToDB(); TvMain.QueryExec("delete from QLIST where QLISTID=" + missing.Rows[j]["QLISTID"].ToString()); SequenceErrorCount = 0; } } } else { SequenceErrorCount += 1; WarningReport("Прибор ID= " + dr["id_bd"].ToString() + " " + str + tempdate.ToString()); TvMain.SaveLog(id_bdc, archType_day, "??", 1, "Ошибка чтения суточного архива по запросу за дату:" + tempdate.ToString() + " " + str); if (Convert.ToInt16(missing.Rows[j]["PROCESSED"]) < 9) { TvMain.QueryExec("update QLIST set processed=processed+1 where QLISTID=" + missing.Rows[j]["QLISTID"].ToString()); } else { TvMain.QueryExec("delete from QLIST where QLISTID=" + missing.Rows[j]["QLISTID"].ToString()); } } } } } }//try catch (Exception Ex) { SequenceErrorCount += 1; ErrorReport("Прибор ID= " + dr["id_bd"].ToString() + " Ошибка чтения суточного архива по запросу, " + Ex.Message); } }// (QLIST day) #endregion #region "missing hour" TvMain.SetTimeToPlanCall(id_bdc.ToString(), "dlastcall", SrvDate); // try to load missing hour archives { ddd = SrvDate; try { ddd = Convert.ToDateTime(dr["dnexthour"].ToString()); } catch { } DateTime tempdate; DataTable missing; Boolean GetRow = false; int GRCount = 0; int TryCount = 0; DataTable missingpass; missing = TvMain.QuerySelect("select ARCHDATE,DEVNAME from missingarch where id_bd=" + id_bdc.ToString() + " and ARCHDATE>SYSDATE-32 and ARCHDATE<SYSDATE-2 / 24 and ARCHDATE<" + TvMain.OracleDate(ddd) + " and DEVNAME like '%Час%' order by archdate desc "); // and devname not like '%Нули%'"); try { if (missing.Rows.Count > 0) TvMain.LockDevice(id_bdc, 400 * missing.Rows.Count, true); for (int j = 0; j < missing.Rows.Count && GRCount < 6; j++) { if (SequenceErrorCount > 2) { goto ClosePlan; } tempdate = (DateTime)(missing.Rows[j]["ARCHDATE"]); GetRow = false; missingpass = TvMain.QuerySelect("select TRYCOUNT from missingpass where id_bd=" + id_bdc.ToString() + " and ARCHDATE=" + TvMain.OracleDate(tempdate) + " and DEVNAME ='" + missing.Rows[j]["DEVNAME"] + "' "); // and devname not like '%Нули%'"); if (missingpass.Rows.Count == 0) { GetRow = true; TryCount = 0; } else { TryCount = int.Parse(missingpass.Rows[0]["TRYCOUNT"].ToString()); if (TryCount < 5) { GetRow = true; } } if (TvMain.TVD.IsConnected()) { TvMain.HoldLine(); if (GetRow) { GRCount++; String str; InfoReport("Прибор ID= " + id_bdc.ToString() + " read missing hour archive for " + tempdate.ToString()); TvMain.ClearDuration(); str = TvMain.readarch(archType_hour, tempdate.Year, tempdate.Month, tempdate.Day, tempdate.Hour); if (str.Length == 0) { SequenceErrorCount += 1; WarningReport("Прибор ID= " + id_bdc.ToString() + " " + str + " " + tempdate.ToString()); TvMain.SaveLog(id_bdc, archType_hour, "??", 1, "Ошибка чтения пропущенного часового архива за дату:" + tempdate.ToString() +" " + str); } else { if (str.Substring(0, 6) != "Ошибка") { //if (TvMain.CheckForArch(archType_day, tempdate.Year, tempdate.Month, tempdate.Day, tempdate.Hour, id_bdc) == false) { if (TvMain.TVD.isArchToDBWrite) { TvMain.SaveLog(id_bdc, archType_hour, "??", 1, "Пропущенный часовой архив за дату:" + tempdate.ToString() + ":OK"); TvMain.ClearDBArchString(archType_hour, tempdate.Year, tempdate.Month, tempdate.Day, tempdate.Hour, id_bdc); TvMain.WriteArchToDB(); SequenceErrorCount =0; } } } else { SequenceErrorCount += 1; WarningReport("Прибор ID= " + id_bdc.ToString() + " " + str + tempdate.ToString()); TvMain.SaveLog(id_bdc, archType_hour, "??", 1, "Ошибка чтения пропущенного часового архива за дату:" + tempdate.ToString()+" " + str); } } String q; if (TryCount == 0) { q = "insert into missingpass(id_bd,archdate,devname,trycount) values(" + id_bdc.ToString() + "," + TvMain.OracleDate(tempdate) + ",'" + missing.Rows[j]["DEVNAME"].ToString() + "'," + (TryCount + 1).ToString() + ")"; } else { q = "update missingpass set trycount=" + (TryCount + 1).ToString() + " where id_bd = " + id_bdc.ToString() + " and archdate=" + TvMain.OracleDate(tempdate) + " and devname ='" + missing.Rows[j]["DEVNAME"].ToString() + "'"; } TvMain.QueryExec(q); } } } }//try catch (Exception Ex) { SequenceErrorCount += 1; ErrorReport("Прибор ID= " + dr["id_bd"].ToString() + " Ошибка чтения пропущенного часового архива, " + Ex.Message); } }// (missing hour) #endregion #region "missing day" // try to load missing day archives { ddd = SrvDate; try { ddd = Convert.ToDateTime(dr["dnext24"].ToString()); } catch { } DateTime tempdate; DataTable missing; Boolean GetRow = false; int GRCount = 0; int TryCount = 0; DataTable missingpass; missing = TvMain.QuerySelect("select ARCHDATE,DEVNAME from missingarch where id_bd=" + id_bdc.ToString() + " and ARCHDATE>SYSDATE-32 and ARCHDATE<" + TvMain.OracleDate(ddd) + " and DEVNAME like '%Суточ%' order by archdate desc "); //and devname not like '%Нули%'"); try { if (missing.Rows.Count > 0) TvMain.LockDevice(id_bdc, 400 * missing.Rows.Count, true); for (int j = 0; j < missing.Rows.Count && GRCount < 6; j++) { if (SequenceErrorCount > 2) { goto ClosePlan; } tempdate = (DateTime)(missing.Rows[j]["ARCHDATE"]); GetRow = false; missingpass = TvMain.QuerySelect("select TRYCOUNT from missingpass where id_bd=" + id_bdc.ToString() + " and ARCHDATE=" + TvMain.OracleDate(tempdate) + " and DEVNAME ='" + missing.Rows[j]["DEVNAME"] + "' "); // and devname not like '%Нули%'"); if (missingpass.Rows.Count == 0) { GetRow = true; TryCount = 0; } else { TryCount = int.Parse(missingpass.Rows[0]["TRYCOUNT"].ToString()); if (TryCount < 5) { GetRow = true; } } if (TvMain.TVD.IsConnected()) { TvMain.HoldLine(); if (GetRow) { GRCount++; String str; InfoReport("Прибор ID= " + id_bdc.ToString() + " чтение пропущенного суточного архива за дату: " + tempdate.ToString()); TvMain.ClearDuration(); str = TvMain.readarch(archType_day, tempdate.Year, tempdate.Month, tempdate.Day, 0); if (str.Length == 0) { SequenceErrorCount += 1; WarningReport("Прибор ID: " + dr["id_bd"].ToString() + " " + str + tempdate.ToString()); TvMain.SaveLog(id_bdc, archType_day, "??", 1, "Ошибка чтения пропущенного суточного архива за дату:" + tempdate.ToString()); } else { if (str.Substring(0, 6) != "Ошибка") { //if (TvMain.CheckForArch(archType_day, tempdate.Year, tempdate.Month, tempdate.Day, 0, id_bdc) == false) { if (TvMain.TVD.isArchToDBWrite) { TvMain.SaveLog(id_bdc, archType_day, "??", 1, "Пропущенный суточный архив за дату:" + tempdate.ToString() + ":OK"); TvMain.ClearDBArchString(archType_day, tempdate.Year, tempdate.Month, tempdate.Day, 0, id_bdc); TvMain.WriteArchToDB(); SequenceErrorCount =0; } } } else { SequenceErrorCount += 1; WarningReport("Прибор ID: " + dr["id_bd"].ToString() + " " + str + tempdate.ToString()); TvMain.SaveLog(id_bdc, archType_day, "??", 1, "Ошибка чтения пропущенного суточного архива за дату:" + tempdate.ToString() + " " + str); } } String q; if (TryCount == 0) { q = "insert into missingpass(id_bd,archdate,devname,trycount) values(" + dr["id_bd"].ToString() + "," + TvMain.OracleDate(tempdate) + ",'" + missing.Rows[j]["DEVNAME"].ToString() + "'," + (TryCount + 1).ToString() + ")"; } else { q = "update missingpass set trycount=" + (TryCount + 1).ToString() + " where id_bd = " + dr["id_bd"].ToString() + " and archdate=" + TvMain.OracleDate(tempdate) + " and devname ='" + missing.Rows[j]["DEVNAME"].ToString() + "'"; } TvMain.QueryExec(q); } } } }//try catch (Exception Ex) { SequenceErrorCount += 1; ErrorReport("Прибор ID= " + dr["id_bd"].ToString() + " Ошибка чтения пропущенного суточного архива, " + Ex.Message); } }// (missing day) #endregion #region "Closing plan process" ClosePlan: TvMain.UnLockDevice(id_bdc); string transpname = ""; if (TvMain.TVD != null) { if (TvMain.TVD.Transport == 0) { transpname = TvMain.TVD.ComPort; } } TvMain.SaveLog(id_bdc, 0, "??", 1, "Закрытие канала. " + transpname); #endregion #region "error handlers" } else { ErrorReport("Прибор ID " + dr["id_bd"].ToString() + " transport initialization Error!"); } //} //else //{ // InfoReport("Прибор ID " + dr["id_bd"].ToString() + " plan is active, but no tasks to process!"); //} } catch (System.Exception threadEx) { ErrorReport("Прибор ID " + dr["id_bd"].ToString() + " thread failed, " + threadEx.Message); } #endregion }
private void AnalizeDevice(DataRow dr) { // finalization Int32 id_bdc; id_bdc = Convert.ToInt32(dr["id_bd"].ToString()); DataTable aCFG = TvMain.QuerySelect("select * from ANALIZER_CFG where ID_BD=" + dr["id_bd"].ToString()); if (aCFG.Rows.Count > 0) { if (int.Parse(aCFG.Rows[0]["ANALIZENODE"].ToString()) != 0) { try { VIPAnalizer.NodeAnalizer na = new VIPAnalizer.NodeAnalizer(); na.AnalizeNode(TvMain, id_bdc, 32,false); TvMain.SaveLog(id_bdc, 0, "??", 1, "Анализ данных"); } catch (System.Exception ex) { TvMain.SaveLog(id_bdc, 0, "??", 1, "Ошибка при Анализе данных: " + ex.Message); } } } }