/// <summary> /// Requests input channel data from Server. /// </summary> private static Trend GetTrend(DateTime date, int cnlNum, bool chekHours) { string tableName = chekHours ? SrezAdapter.BuildHourTableName(date) : SrezAdapter.BuildMinTableName(date); Trend trend = new Trend(cnlNum); bool dataReceived = serverComm.ReceiveTrend(tableName, date, trend); serverComm.Close(); if (dataReceived) { trend.LastFillTime = DateTime.UtcNow; } else { Log.WriteError("Unable to receive trend."); } return(trend); }
/// <summary> /// Остановить потоки линий связи и поток обмена данными со SCADA-Сервером /// </summary> private void StopThreads() { try { // остановка потока записи информации о работе приложения if (infoThread != null) { infoThread.Abort(); infoThread = null; } // остановка потока приёма команд if (commandReader != null) { commandReader.StopThread(); } if (linesStarted) { AppLog.WriteAction(Localization.UseRussian ? "Остановка линий связи" : "Stop communication lines", Log.ActTypes.Action); linesStarted = false; // далее lock (commLines) не требуется // выполнение команд завершения работы линий связи foreach (CommLine commLine in commLines) { commLine.Terminate(); } // ожидание завершения работы линий связи DateTime nowDT = DateTime.Now; DateTime t0 = nowDT; DateTime t1 = nowDT.AddMilliseconds(Settings.Params.WaitForStop); bool running; // есть линия связи, продолжающая работу do { running = false; foreach (CommLine commLine in commLines) { if (!commLine.Terminated) { running = true; Thread.Sleep(ScadaUtils.ThreadDelay); break; } } nowDT = DateTime.Now; }while (t0 <= nowDT && nowDT <= t1 && running); // прерывание работы линий связи if (running) { foreach (CommLine commLine in commLines) { commLine.Abort(); } } } // завершение работы со SCADA-Сервером if (ServerComm != null) { ServerComm.Close(); ServerComm = null; } // пауза для повышения вероятности полной остановки потоков Thread.Sleep(ScadaUtils.ThreadDelay); // запись информации о работе программы workState = WorkStateNames.Stopped; WriteInfo(); } catch (Exception ex) { AppLog.WriteAction((Localization.UseRussian ? "Ошибка при остановке линий связи: " : "Error stop communication lines: ") + ex.Message, Log.ActTypes.Exception); } }