/// <summary> /// Конструктор /// </summary> public CyclogramFile() { // !_curLine = 0; _wasError = false; _availableCommands = null; _curCommand = new CyclogramLine(); commands = new ObservableCollection<CyclogramLine>(); }
public XsanCyclogramCommands() { CycCommandsAvailable = new CyclogramCommands(); CycCommandsAvailable.AddCommand("IMIT_XSAN", new CyclogramLine("IMIT_XSAN", XsanControlTest, XsanControlExec, String.Empty)); CycCommandsAvailable.AddCommand("IMIT_BUNI", new CyclogramLine("IMIT_BUNI", BuniControlTest, BuniControlExec, String.Empty)); CycCommandsAvailable.AddCommand("UKS", new CyclogramLine("UKS", UksTest, UksExec, String.Empty)); CycCommandsAvailable.AddCommand("POWER", new CyclogramLine("POWER", PowerTest, PowerExec, String.Empty)); CycCommandsAvailable.AddCommand("WRITE_XSAN_DATA", new CyclogramLine("WRITE_XSAN_DATA", WriteXsanDataTest, WriteXsanDataExec, String.Empty)); }
/// <summary> /// загружаем файл циклограмм /// Даже в случае ошибки, команда добавляется в список команд, но выставляется признак наличия ошибки /// </summary> /// <param name="cycFName">Путь к файлу циклограмм</param> /// <param name="availableCommands">Список доступных команд</param> public void TryLoad(string cycFName, CyclogramCommands availableCommands) { Debug.Assert(availableCommands != null, "Список доступных команд циклограммы пуст!"); string cycLine; int curLineNum = 0; _availableCommands = availableCommands; _wasError = false; if (!File.Exists(cycFName)) { _wasError = true; CyclogramParsingException exc = new CyclogramParsingException("Файл " + cycFName + " не существует!"); throw exc; } FileName = cycFName; commands.Clear(); using (StreamReader sr = new StreamReader(cycFName)) { // читам файл по строкам while (sr.Peek() >= 0) { cycLine = sr.ReadLine(); try { TryParseString(cycLine); } catch (CyclogramParsingException e) { _wasError = true; _curCommand.ErrorInCommand += e.Message + "\t"; } catch { _wasError = true; _curCommand.ErrorInCommand += " Общая ошибка проверки команды."; } finally { _curCommand.Line = curLineNum; commands.Add(_curCommand); // начинаем "собирать" новую команду _curCommand = new CyclogramLine(); } curLineNum++; } } }
/// <summary> /// Функция добавляет список команд циклограммы к исходным командам /// </summary> /// <param name="cycCommands"></param> public void AddCycCommands(CyclogramCommands cycCommands) { foreach (KeyValuePair<string, CyclogramLine> cycLine in cycCommands) { _cycCommandsAvailable.AddCommand(cycLine.Key, cycLine.Value); } }
/// <summary> /// Загружаем циклограмму /// В случае ошмибки загрузки циклограммы, генерируем исключение /// </summary> /// <param name="fName">Путь к файлу циклограмм</param> /// <param name="availableCommands">Список доступных команд</param> public void Load(string fName, CyclogramCommands availableCommands) { try { CycFile.TryLoad(fName, availableCommands); if (CycFile.WasError) { CyclogramParsingException exc = new CyclogramParsingException("Ошибки в циклограмме"); throw exc; } else { ChangeState(CurState.csLoaded); CycFile.CalcAbsoluteTime(); _cPos.SetToLine(0, true); } } catch { ChangeState(CurState.csLoadedWithErrors); // throw; } }