public void LoadFromBinary() { try { for (int i = 0; i < Channal.Count; i++)//перебор каналов { SChanal ch = Channal[i]; if (!File.Exists(ch.FileNameArchiv)) { continue; } BinaryReader reader = new BinaryReader(File.Open(ch.FileNameArchiv, FileMode.Open)); if (reader != null) { ch.FactoryNumber = reader.ReadInt32(); ch.ChannalNummber = reader.ReadInt32(); int Count = reader.ReadInt32(); for (int j = 0; j < Count; j++)//перебор точек измерения для датчика { SPoint point; point.Datetime = DateTime.FromBinary(reader.ReadInt64()); point.Temperature = reader.ReadDouble(); point.Diapazon = reader.ReadInt32(); point.Pressure = reader.ReadDouble(); point.OutVoltage = reader.ReadDouble(); point.OutVoltage = reader.ReadDouble(); point.Resistance = reader.ReadDouble(); point.Deviation = reader.ReadDouble(); ch.Points.Add(point); } Count = reader.ReadInt32(); for (int c = 0; c < Count - 1; c++) { ch.Coefficient[c] = reader.ReadSingle(); } reader.Close(); Program.txtlog.WriteLineLog("CH:Архив данных характеризации загружен из файла: " + ch.FileNameArchiv, 0); } else { Program.txtlog.WriteLineLog("CH:Ошибка доступа к архиву данных характеризации: " + ch.FileNameArchiv, 1); } } } catch { Program.txtlog.WriteLineLog("CH:Критическая ошибка чтения архива характеризации!", 1); } }
//создаем файл архива на диске private StreamWriter CreateFileArhiv(SChanal ch) { StreamWriter writer = null; writer = File.CreateText(ch.FileNameArchiv);//создаем файл БД if (writer != null) { writer.WriteLine(string.Format("Архив данных характеризации датчика")); writer.WriteLine(string.Format("Канал:{0}; Заводской номер:{1}; Тип:{2}; Модель:{3}", ch.ChannalNummber, ch.FactoryNumber, ch.GetSensorType(), ch.GetSensorModel())); writer.WriteLine("-----------------------------------------------------------------------------------------------"); writer.WriteLine(HeaderString); writer.WriteLine("-----------------------------------------------------------------------------------------------"); } return(writer); }
//конструктор класса //вход: число каналов и заводской номер датчика в каждом канале public СResultCH(int ChannalCount, int[] FN, int CoefCount, byte[] Type, string[] Model) { StreamWriter fs; for (int i = 0; i < ChannalCount; i++) { SChanal ch = new SChanal(i + 1, FN[i], CoefCount, Type[i], Model[i]); Channal.Add(ch); Directory.CreateDirectory("CH"); Directory.CreateDirectory("Archiv"); Directory.CreateDirectory("Archiv/CH"); string filename = string.Format("CH/CH_Result{0}.txt", ch.ChannalNummber); fs = File.CreateText(filename);//создаем файл канала //fs.WriteLine(string.Format("Результаты характеризации датчика в канале {0}, заводской номер {1}", ch.ChannalNummber, ch.FactoryNumber)); fs.WriteLine(string.Format("Результаты характеризации датчика в канале:{0}; Заводской номер:{1}; Тип:{2}; Модель:{3}", ch.ChannalNummber, ch.FactoryNumber, ch.GetSensorType(), ch.GetSensorModel())); fs.WriteLine(HeaderString); fs.Flush(); FileStream.Add(fs); } }
//пересоздаем архив для датчика в канале i public void SaveToBinary(int i) { if ((Channal.Count <= 0) || (i >= Channal.Count)) { Program.txtlog.WriteLineLog("CH: Отсутсвуют данные характеризации для датчика в канале: " + i, 1); return; } SChanal ch = Channal[i]; BinaryWriter writer = CreateFileBinary(ch); if (writer != null) { writer.Write(ch.Points.Count); for (int j = 0; j < ch.Points.Count; j++)//перебор точек измерения для датчика { writer.Write(ch.Points[j].Datetime.ToBinary()); writer.Write(ch.Points[j].Temperature); writer.Write(ch.Points[j].Diapazon); writer.Write(ch.Points[j].Pressure); writer.Write(ch.Points[j].OutVoltage); writer.Write(ch.Points[j].Resistance); writer.Write(ch.Points[j].Deviation); } if (ch.Coefficient[0] != 0)//если коэффициенты подсчитаны { writer.Write(ch.CCount); for (int c = 0; c < ch.CCount - 1; c++) { writer.Write(ch.Coefficient[c]); } } writer.Close(); writer = null; Program.txtlog.WriteLineLog("CH: Данные характеризации успешно перезаписаны.", 0); } else { Program.txtlog.WriteLineLog("CH: Ошибка записи в архив характеризации: " + ch.FileNameArchiv, 1); } }
//Чтение архивов из файлов public void LoadFromFile() { StreamReader reader; try { for (int i = 0; i < Channal.Count; i++)//перебор каналов { SChanal ch = Channal[i]; if (!File.Exists(ch.FileNameArchiv)) { continue; } else { reader = new StreamReader(ch.FileNameArchiv);//открываем файл БД } if (reader != null) { string str = reader.ReadLine(); str = reader.ReadLine(); str = reader.ReadLine(); str = reader.ReadLine(); str = reader.ReadLine(); do { str = reader.ReadLine(); if (str == "-----------------------------------------------------------------------------------------------") { break; //конец раздела } string[] strarr = str.Split('|'); SPoint point; if (strarr.Length > 5) { point.Datetime = Convert.ToDateTime(strarr[0]); point.Temperature = double.Parse(strarr[1].Replace(",", CultureInfo.InvariantCulture.NumberFormat.NumberDecimalSeparator), CultureInfo.InvariantCulture); point.Diapazon = Convert.ToInt32(strarr[2]); point.Pressure = double.Parse(strarr[3].Replace(",", CultureInfo.InvariantCulture.NumberFormat.NumberDecimalSeparator), CultureInfo.InvariantCulture); point.OutVoltage = double.Parse(strarr[4].Replace(",", CultureInfo.InvariantCulture.NumberFormat.NumberDecimalSeparator), CultureInfo.InvariantCulture); point.Resistance = double.Parse(strarr[5].Replace(",", CultureInfo.InvariantCulture.NumberFormat.NumberDecimalSeparator), CultureInfo.InvariantCulture); if (strarr.Length > 6) { point.Deviation = double.Parse(strarr[6].Replace(",", CultureInfo.InvariantCulture.NumberFormat.NumberDecimalSeparator), CultureInfo.InvariantCulture); } else { point.Deviation = 0; } ch.Points.Add(point); } } while (!reader.EndOfStream); Program.txtlog.WriteLineLog("CH:Архив данных характеризации загружен из файла: " + ch.FileNameArchiv, 0); reader.Close(); reader = null; } else { Program.txtlog.WriteLineLog("CH:Ошибка доступа к архиву данных характеризации: " + ch.FileNameArchiv, 1); continue; } } } catch { Program.txtlog.WriteLineLog("CH:Критическая ошибка чтения архива характеризации!", 1); } }