/// <summary> /// Prepares the logic processing. /// </summary> private void PrepareProcessing() { terminated = false; utcStartDT = DateTime.UtcNow; startDT = utcStartDT.ToLocalTime(); serviceStatus = ServiceStatus.Starting; WriteInfo(); BaseDataSet = null; SharedData = new ConcurrentDictionary <string, object>(); commLines = new List <CommLine>(Config.Lines.Count); commLineMap = new Dictionary <int, CommLine>(); deviceMap = new Dictionary <int, DeviceItem>(); commandReader = Config.GeneralOptions.CmdEnabled && Config.GeneralOptions.FileCmdEnabled ? new CommandReader(this) : null; InitDrivers(); InitDataSources(); }
private object lineCmdLock; // объект для синхронизации выполнения команд над линиями связи /// <summary> /// Конструктор /// </summary> public Manager() { kpTypes = new Dictionary <string, Type>(); commLines = new List <CommLine>(); commandReader = null; infoThread = null; infoFileName = ""; startThread = null; startDT = DateTime.MinValue; workState = ""; linesStarted = false; lineCaptions = null; lineCmdLock = new object(); AppDirs = new AppDirs(); Settings = new Settings(); ServerComm = null; AppLog = new Log(Log.Formats.Full) { Encoding = Encoding.UTF8 }; AppDomain.CurrentDomain.UnhandledException += OnUnhandledException; }
/// <summary> /// Prepares the logic processing. /// </summary> private void PrepareProcessing() { terminated = false; utcStartDT = DateTime.UtcNow; startDT = utcStartDT.ToLocalTime(); serviceStatus = ServiceStatus.Starting; WriteInfo(); ConfigDatabase = null; SharedData = new ConcurrentDictionary <string, object>(); commLines = new List <CommLine>(AppConfig.Lines.Count); commLineMap = new Dictionary <int, CommLine>(AppConfig.Lines.Count); deviceMap = new Dictionary <int, DeviceItem>(); if (AppConfig.GeneralOptions.EnableCommands) { appCmdQueue = new Queue <TeleCommand>(); commandReader = AppConfig.GeneralOptions.EnableFileCommands ? new CommandReader(this) : null; } InitDrivers(); InitDataSources(); }
/// <summary> /// Запустить потоки линий связи и поток обмена данными со SCADA-Сервером /// </summary> private bool StartThreads() { // остановка потоков StopThreads(); try { // приём необходимых таблиц базы конфигурации от SCADA-Сервера bool fatalError = false; DataTable tblInCnl; DataTable tblKP; if (Settings.Params.ServerUse) { ServerComm = new ServerCommEx(Settings.Params, AppLog); if (!ReceiveBaseTables(out tblInCnl, out tblKP)) { fatalError = true; AppLog.WriteAction(string.Format(Localization.UseRussian ? "Запуск работы невозможен из-за проблем взаимодействия со SCADA-Сервером.{0}{1}" : "Unable to start operation due to SCADA-Server communication error.{0}{1}", Environment.NewLine, CommPhrases.RetryDelay), Log.ActTypes.Error); ServerComm.Close(); ServerComm = null; } } else { tblInCnl = null; tblKP = null; } if (!fatalError) { // настройка линий связи по базе конфигурации if (Settings.Params.ServerUse) { foreach (CommLine commLine in commLines) { commLine.Tune(tblInCnl, tblKP); } } // запуск потоков линий связи AppLog.WriteAction(Localization.UseRussian ? "Запуск линий связи" : "Start communication lines", Log.ActTypes.Action); lock (commLines) { foreach (CommLine commLine in commLines) { commLine.ServerComm = ServerComm; commLine.Start(); } linesStarted = true; } // запуск приёма команд AppLog.WriteAction(Localization.UseRussian ? "Запуск приёма команд" : "Start receiving commands", Log.ActTypes.Action); commandReader = new CommandReader(this); commandReader.StartThread(); } if (linesStarted) { // запуск потока записи информации о работе приложения infoThread = new Thread(new ThreadStart(WriteInfoExecute)); infoThread.Start(); workState = WorkStateNames.Normal; return(true); } else { workState = WorkStateNames.Error; return(false); } } catch (Exception ex) { AppLog.WriteAction((Localization.UseRussian ? "Ошибка при запуске работы: " : "Error starting operation: ") + ex.Message, Log.ActTypes.Exception); return(false); } finally { if (infoThread == null) { WriteInfo(); } } }