/// <summary> /// Принять команду от SCADA-Сервера /// </summary> private void ReceiveFromServer() { if (serverComm != null) { Command cmd; while (serverComm.ReceiveCommand(out cmd)) { log.WriteAction((Localization.UseRussian ? "Получена команда от SCADA-Сервера: " : "The command is received from SCADA-Server: ") + GetCmdShortDescr(cmd)); mngr.PassCmd(cmd); } } }
/// <summary> /// Приём команд, метод вызывается в отдельном потоке /// </summary> private void Execute() { while (true) { try { // приём команд от SCADA-Сервера if (serverComm != null) { Command cmd; while (serverComm.ReceiveCommand(out cmd)) { log.WriteAction(string.Format(Localization.UseRussian ? "Получена команда от SCADA-Сервера. Тип: {0}, КП: {1}, номер: {2}" : "The command is received from SCADA-Server. Type: {0}, device: {1}, number: {2}", cmd.GetCmdTypeCode(), cmd.KPNum, cmd.CmdNum), Log.ActTypes.Action); mngr.PassCmd(cmd); } } // приём команд из файлов if (Directory.Exists(cmdDir)) { DirectoryInfo dirInfo = new DirectoryInfo(cmdDir); FileInfo[] fileInfoAr = dirInfo.GetFiles("cmd*.dat", SearchOption.TopDirectoryOnly); foreach (FileInfo fileInfo in fileInfoAr) { string cmdType; Dictionary <string, string> cmdParams; Command kpCmd; if (LoadCmdFromFile(fileInfo.FullName, out cmdType, out cmdParams, out kpCmd)) { if (kpCmd == null) { // команда не относится к КП string lineNumStr; int lineNum; if ((cmdType == "startline" || cmdType == "stopline" || cmdType == "restartline") && cmdParams.TryGetValue("linenum", out lineNumStr) && int.TryParse(lineNumStr, out lineNum)) { // запуск или остановка линии связи if (cmdType == "startline") { mngr.StartCommLine(lineNum); } else if (cmdType == "stopline") { mngr.StopCommLine(lineNum); } else { mngr.RestartCommLine(lineNum); } } else { log.WriteAction(Localization.UseRussian ? "Некорректные данные команды" : "Incorrect command data", Log.ActTypes.Error); } } else { // передача команды КП mngr.PassCmd(kpCmd); } } } } Thread.Sleep(ScadaUtils.ThreadDelay); } catch (ThreadAbortException) { log.WriteAction(Localization.UseRussian ? "Прерывание приёма команд" : "Receiving commands aborted", Log.ActTypes.Action); } catch (Exception ex) { log.WriteAction((Localization.UseRussian ? "Ошибка при приёме команд: " : "Error receiving commands: ") + ex.Message, Log.ActTypes.Exception); } } }