public void CreateCalibrationTableForTest() { var rowsList = new List <TableRow>(); double curValue = 0; for (var i = 0; i < 10; i++) { var row = new TableRow(i * 100, curValue); rowsList.Add(row); if (i == 0) { _leftBoundValue = row; } else if (i == 9) { _rightBoundValue = row; } curValue += 0.4; } _count = rowsList.Count; _table = new CalibrationTable <TableRow>(rowsList); }
/// <summary> /// Сохраняет таблицу калибровки в указанный eprom /// </summary> /// <param name="table">Таблица калибровки, которую необходимо сохранить</param> /// <param name="eprom">Eprom в который необходимо сохранить таблицу калибровки</param> public void SaveCalibrationTableToFile(CalibrationTable table, Eprom eprom) { int[] Indices = { 0x0400, 0x0430, 0x0460, 0x0490, 0x04C0, 0x04F0, 0x0520, 0x0550 }; foreach (int index in Indices) { if (eprom.GetByte(index) == table.Name) { byte size = (byte)(table.Parameters.Count * 4); eprom.SetByte(index + 3, size); int offset = index + 4; foreach (Parameter parameter in table.Parameters) { eprom.SetByte(offset++, (byte)(parameter.Physical >> 8)); eprom.SetByte(offset++, (byte)parameter.Physical); eprom.SetByte(offset++, (byte)(parameter.Calibrated >> 8)); eprom.SetByte(offset++, (byte)parameter.Calibrated); } if (table.Parameters.Count < 11) { eprom.SetByte(offset++, 0xff); eprom.SetByte(offset++, 0xff); eprom.SetByte(offset++, 0xff); eprom.SetByte(offset++, 0xff); } return; } } }
static void ManyTables() //обработка одной таблицы { string workPath = ""; //рабочая папка (та, где лежат DOC файлы) Console.Clear(); //открыли, прочитали DOC файлы DOCFile doc = new DOCFile( FileEventProcessor, FileEventProcessor); doc.ReadManyFiles(out workPath); if (doc.filePath == null) { return; } CalibrationTable[] CT = new CalibrationTable[0]; for (int i = 0; i < doc.fileId.Length; i++) { CalibrationTable tempCT = new CalibrationTable( doc.fileId[i], CTEventProcessor, CTEventProcessor, CTEventProcessor, CTEventProcessor, CTEventProcessor, CTEventProcessor, CTEventProcessor, CTEventProcessor); if (tempCT.ReadTable(doc.fileData[i])) { tempCT.RepairTable(RepairVolumeInconcictensy); } if (tempCT.Table.Count == 0) { continue; } Array.Resize(ref CT, CT.Length + 1); tempCT.CopyTo(ref CT[CT.Length - 1]); CT[CT.Length - 1].ChangeLevelBase(DefaultLevelBase); } TXTFile txt = new TXTFile( //создали и записали TXT файлы FileEventProcessor, FileEventProcessor, FileEventProcessor, FileEventProcessor); txt.WriteManyFiles(CT, workPath, WriteValcomHeader); ManyTablesMenu(CT, workPath); //вызываем меню для таблиц }
/// <summary> /// Сохраняет тблицу калибровки в файл /// </summary> /// <param name="filePath">Путь к файлу</param> /// <param name="table">Таблица калибровки, которую необходимо сохранить</param> /// <param name="eprom">Eprom в который необходимо сохранить данную таблицу калибровки</param> public void SaveEpromToFile(string filePath, CalibrationTable table, Eprom eprom) { IEFSaver svr = null; svr = platform.GetEFSaver(FileFormat.EF2XML); SaveCalibrationTableToFile(table, eprom); svr.Save(filePath, eprom); }
public void ConstructorTest() { var rowsList = new List <TableRow>(); rowsList.Add(new TableRow(0, 0)); rowsList.Add(new TableRow(1, 1.2)); rowsList.Add(new TableRow(2, 4.2)); var table = new CalibrationTable <TableRow>(rowsList); Assert.IsNotNull(table); }
private void _writeFile( //запись в заданный файл указанных данных StreamWriter File, //заданный файл string FilePath, //путь к файлу CalibrationTable CT, //таблица для записи bool writeValcomHeader = false, //опция: писать ли в файл заголовок Valcom bool Quiet = false) { int VolumeAccuracy = 3; //до какой цифры после запятой писать объем //определим точность записи объемов double tmpVol = CT.Table.ElementAt(0).Value *Math.Pow(10, VolumeAccuracy); tmpVol -= Math.Truncate(tmpVol); while (tmpVol != 0 && VolumeAccuracy <= 10) { VolumeAccuracy++; tmpVol *= 10; tmpVol -= Math.Truncate(tmpVol); } if (writeValcomHeader) //запись заголовка Valcom { File.WriteLine("IndexValue={0}", CT.Table.ElementAt(0).Key); File.WriteLine("ScaleValue=1"); File.Write("StepValue="); switch (CT.levelBase) { case LevelBase.Millimeters: File.WriteLine("10"); break; case LevelBase.Centimeters: File.WriteLine("1"); break; } } foreach (KeyValuePair <int, double> pair in CT.Table) //для каждой пары из таблицы { File.Write(pair.Key); //пишем ключ File.Write(" "); //пишем пробел File.WriteLine(pair.Value.ToString("F" + VolumeAccuracy)); //пишем значение (три знака после запятой) и переходим на новую строку } //генерируем событие if (!Quiet) { int pos = FilePath.LastIndexOf('\\') + 1; OnFileWritten(new FileEventArgs(true, "Записаны данные в файл: " + FilePath.Substring(pos))); } }
static void OneTable() //обработка одной таблицы { Console.Clear(); //открыли, прочитали DOC файл DOCFile doc = new DOCFile( FileEventProcessor, FileEventProcessor); doc.ReadOneFile(); if (doc.filePath == null) { return; } CalibrationTable CT = new CalibrationTable( //создаем градуировочную таблицу doc.fileId[0], CTEventProcessor, CTEventProcessor, CTEventProcessor, CTEventProcessor, CTEventProcessor, CTEventProcessor, CTEventProcessor, CTEventProcessor); if (CT.ReadTable(doc.fileData[0])) { CT.RepairTable(RepairVolumeInconcictensy); } //зададим базу уровней CT.ChangeLevelBase(DefaultLevelBase); //создали, записали TXT файл TXTFile txt = new TXTFile( FileEventProcessor, FileEventProcessor, FileEventProcessor, FileEventProcessor); txt.WriteFile(CT, doc.filePath[0], WriteValcomHeader); OneTableMenu(CT); //вызываем меню для таблицы }
protected internal void WriteFile( //запись одного файла CalibrationTable CT, //данные для записи в файл string path = null, //папка для сохранения файла bool writeValcomHeader = false) { //выделили память //filePath = new string[1]; //fileSW = new StreamWriter[1]; string filePath; StreamWriter fileSW; filePath = _chooseFile(CT.CTid, path); //выбор файла if (_createFile(out fileSW, filePath)) //создали { _writeFile(fileSW, filePath, CT, writeValcomHeader); //записали _saveFile(fileSW, filePath); //сохранили и закрыли } }
/// <summary> /// Вывод таблицы калибровки /// </summary> /// <param name="calibrationTable">Таблица которую необходимо вывести</param> private void ShowCalibrationTableInDataGrid(CalibrationTable calibrationTable) { dataGridViewCalibrationTable.Rows.Clear(); for (int i = 0; i < 11; i++) { DataGridViewRow r = new DataGridViewRow(); if ((i % 2) == 0) { r.DefaultCellStyle.BackColor = Color.WhiteSmoke; } dataGridViewCalibrationTable.Rows.Add(r); } for (int i = 0; i < currentState.SelectedCalibrationTable.CalibrationTable.Parameters.Count; i++) { dataGridViewCalibrationTable[0, i].Value = (ushort)currentState.SelectedCalibrationTable.CalibrationTable.Parameters[i].Physical; dataGridViewCalibrationTable[1, i].Value = (ushort)currentState.SelectedCalibrationTable.CalibrationTable.Parameters[i].Calibrated; } }
/// <summary> /// Возвращяет таблицу калибровки /// </summary> /// <param name="eprom">EPROM устройства из которого необходимо извлеч данные</param> /// <param name="CalibrationParameterName">Имя калибровочного параметра</param> /// <returns>Таблица калибровки</returns> public LastError GetCalibrationTable(Eprom eprom, CalibrationTableHandle calibrationHandle) { int[] Indices = { 0x0400, 0x0430, 0x0460, 0x0490, 0x04C0, 0x04F0, 0x0520, 0x0550 }; foreach (int index in Indices) { if (eprom.GetByte(index) == calibrationHandle.Name) { byte size = eprom.GetByte(index + 3); CalibrationTable table = new CalibrationTable(calibrationHandle.Name, size); int offset = index + 4; // смещение по которому начинаются калибровочные значения if ((size % 4) != 0) { return(LastError.Error); } for (int i = 0; i < size / 4; i++) { byte[] physical = new byte[2]; byte[] calibrated = new byte[2]; physical[1] = eprom.GetByte(offset++); physical[0] = eprom.GetByte(offset++); calibrated[1] = eprom.GetByte(offset++); calibrated[0] = eprom.GetByte(offset++); Parameter param = new Parameter(); param.Physical = (ushort)BitConverter.ToInt16(physical, 0); param.Calibrated = (ushort)BitConverter.ToInt16(calibrated, 0); table.Parameters.Add(param); } calibrationHandle.CalibrationTable = table; return(LastError.Success); } } return(LastError.Error); }
/// <summary> /// Вывод графика на форму /// </summary> /// <param name="calibrationTable">Таблица калибровки которую необходимо показать</param> private void ShowCalibrationTableInGraphics(CalibrationTable calibrationTable) { int k = 0; if (currentState.SelectedCalibrationTable != null) { if (currentState.SelectedCalibrationTable.CalibrationTable != null) { if (checkBoxDoScale.Checked && currentState.SelectedCalibrationTable.CalibrationTable.Parameters.Count > 3) { k = 1; } } } Point[] points = new Point[calibrationTable.Parameters.Count - k]; for (int index = 0; index < calibrationTable.Parameters.Count - k; index++) { points[index] = new Point(calibrationTable.Parameters[index].Physical, calibrationTable.Parameters[index].Calibrated); } gr.InsertPoints(points); }
/// <summary> /// Сохранить таблицу калибровки в файл /// </summary> /// <param name="table">Таблица калибровки, которую необходимо сохранить</param> /// <param name="eprom">Виртуальный eprom устройства</param> public void SaveCalibrationTableToDevice(CalibrationTable table, Eprom eprom) { try { int[] Indices = { 0x0400, 0x0430, 0x0460, 0x0490, 0x04C0, 0x04F0, 0x0520, 0x0550 }; foreach (int index in Indices) { if (eprom.GetByte(index) == table.Name) { string protectStart = "@JOB#000#" + string.Format("{0:X2}", platformIO.Options.Device) + platformIO.Options.ProtectionStart + "$"; platform.SendPacket(new Packet(protectStart, DateTime.Now, null)); for (int line = 0; line < calibrationTableCountLines; line++) { int offset = index + (line * 16); int pageNumber = (int)(offset / 256); int offsetPage = (int)(offset % 256); string data = string.Empty; for (int byteIndex = 0; byteIndex < calibrationLineByteCount; byteIndex++) { data += string.Format("{0:X2}", eprom.GetByte(offset++)); } platformIO.Write(platformIO.Options.Device, pageNumber, offsetPage, 16, data); switch (platformIO.LastOperation) { case ResultOperation.Succes: if (eSaveCompleteReadEpromLine != null) eSaveCompleteReadEpromLine(this, new EventArgs()); break; case ResultOperation.Timeout: if (eSaveTimeoutReadEpromLine != null) eSaveTimeoutReadEpromLine(this, new EventArgs()); return; case ResultOperation.MorePopit: if (eSaveMorePopitReadEpromLine != null) eSaveMorePopitReadEpromLine(this, new EventArgs()); return; default: return; } } } } } finally { string protectEnd = "@JOB#000#" + string.Format("{0:X2}", platformIO.Options.Device) + platformIO.Options.ProtectionEnd + "$"; platform.SendPacket(new Packet(protectEnd, DateTime.Now, null)); } }
/// <summary> /// Возвращяет таблицу калибровки /// </summary> /// <param name="eprom">EPROM устройства из которого необходимо извлеч данные</param> /// <param name="CalibrationParameterName">Имя калибровочного параметра</param> /// <returns>Таблица калибровки</returns> public LastError GetCalibrationTable(Eprom eprom, CalibrationTableHandle calibrationHandle) { int[] Indices = { 0x0400, 0x0430, 0x0460, 0x0490, 0x04C0, 0x04F0, 0x0520, 0x0550 }; foreach (int index in Indices) { if (eprom.GetByte(index) == calibrationHandle.Name) { byte size = eprom.GetByte(index + 3); CalibrationTable table = new CalibrationTable(calibrationHandle.Name, size); int offset = index + 4; // смещение по которому начинаются калибровочные значения if ((size % 4) != 0) return LastError.Error; for (int i = 0; i < size / 4; i++) { byte[] physical = new byte[2]; byte[] calibrated = new byte[2]; physical[1] = eprom.GetByte(offset++); physical[0] = eprom.GetByte(offset++); calibrated[1] = eprom.GetByte(offset++); calibrated[0] = eprom.GetByte(offset++); Parameter param = new Parameter(); param.Physical = (ushort)BitConverter.ToInt16(physical, 0); param.Calibrated = (ushort)BitConverter.ToInt16(calibrated, 0); table.Parameters.Add(param); } calibrationHandle.CalibrationTable = table; return LastError.Success; } } return LastError.Error; }
/// <summary> /// Вывод графика на форму /// </summary> /// <param name="calibrationTable">Таблица калибровки которую необходимо показать</param> private void ShowCalibrationTableInGraphics(CalibrationTable calibrationTable) { int k = 0; if (currentState.SelectedCalibrationTable != null) { if (currentState.SelectedCalibrationTable.CalibrationTable != null) { if (checkBoxDoScale.Checked && currentState.SelectedCalibrationTable.CalibrationTable.Parameters.Count > 3) k = 1; } } Point[] points = new Point[calibrationTable.Parameters.Count - k]; for (int index = 0; index < calibrationTable.Parameters.Count - k; index++) { points[index] = new Point(calibrationTable.Parameters[index].Physical, calibrationTable.Parameters[index].Calibrated); } gr.InsertPoints(points); }
/// <summary> /// Вывод таблицы калибровки /// </summary> /// <param name="calibrationTable">Таблица которую необходимо вывести</param> private void ShowCalibrationTableInDataGrid(CalibrationTable calibrationTable) { dataGridViewCalibrationTable.Rows.Clear(); for (int i = 0; i < 11; i++) { DataGridViewRow r = new DataGridViewRow(); if ((i % 2) == 0) r.DefaultCellStyle.BackColor = Color.WhiteSmoke; dataGridViewCalibrationTable.Rows.Add(r); } for (int i = 0; i < currentState.SelectedCalibrationTable.CalibrationTable.Parameters.Count; i++) { dataGridViewCalibrationTable[0, i].Value = (ushort)currentState.SelectedCalibrationTable.CalibrationTable.Parameters[i].Physical; dataGridViewCalibrationTable[1, i].Value = (ushort)currentState.SelectedCalibrationTable.CalibrationTable.Parameters[i].Calibrated; } }
/// <summary> /// Сохранить таблицу калибровки в файл /// </summary> /// <param name="table">Таблица калибровки, которую необходимо сохранить</param> /// <param name="eprom">Виртуальный eprom устройства</param> public void SaveCalibrationTableToDevice(CalibrationTable table, Eprom eprom) { try { int[] Indices = { 0x0400, 0x0430, 0x0460, 0x0490, 0x04C0, 0x04F0, 0x0520, 0x0550 }; foreach (int index in Indices) { if (eprom.GetByte(index) == table.Name) { string protectStart = "@JOB#000#" + string.Format("{0:X2}", platformIO.Options.Device) + platformIO.Options.ProtectionStart + "$"; platform.SendPacket(new Packet(protectStart, DateTime.Now, null)); for (int line = 0; line < calibrationTableCountLines; line++) { int offset = index + (line * 16); int pageNumber = (int)(offset / 256); int offsetPage = (int)(offset % 256); string data = string.Empty; for (int byteIndex = 0; byteIndex < calibrationLineByteCount; byteIndex++) { data += string.Format("{0:X2}", eprom.GetByte(offset++)); } platformIO.Write(platformIO.Options.Device, pageNumber, offsetPage, 16, data); switch (platformIO.LastOperation) { case ResultOperation.Succes: if (eSaveCompleteReadEpromLine != null) { eSaveCompleteReadEpromLine(this, new EventArgs()); } break; case ResultOperation.Timeout: if (eSaveTimeoutReadEpromLine != null) { eSaveTimeoutReadEpromLine(this, new EventArgs()); } return; case ResultOperation.MorePopit: if (eSaveMorePopitReadEpromLine != null) { eSaveMorePopitReadEpromLine(this, new EventArgs()); } return; default: return; } } } } } finally { string protectEnd = "@JOB#000#" + string.Format("{0:X2}", platformIO.Options.Device) + platformIO.Options.ProtectionEnd + "$"; platform.SendPacket(new Packet(protectEnd, DateTime.Now, null)); } }
static void OneTableMenu(CalibrationTable CT, string path = null, bool ExitIfTrue = true) //меню работы с одной таблицей { int MenuChoice = 0, //выбранное доп. меню ItemChoice = 0; //выбранный пункт меню Menu.DoubleColor[] colorScheme = new Menu.DoubleColor[2]; colorScheme[0] = new Menu.DoubleColor(); colorScheme[1] = new Menu.DoubleColor(ConsoleColor.Yellow); Menu M = new Menu( new string[] { "Таблица: " + CT.CTid, "Опции (<Tab> для перехода)" }, new string[][] { new string[] { }, new string[] { } }, null, 0, colorScheme); do { M.Items = new string[][] { new string[] { "1. Отобразить таблицу", "2. Изменить базу уровней на " + ((CT.levelBase == LevelBase.Centimeters)?"мм":"см"), "3. Правка значений в таблице", "4. Проверить таблицу", "5. Исправить таблицу", "6. Сортировать", "7. Сохранить", "8. " + ((ExitIfTrue)?"Выход":"Назад") }, new string[] { "Исправлять непоследовательность объемов: " + ((RepairVolumeInconcictensy)?"да":"нет"), "Записывать заголовок Valcom: " + ((WriteValcomHeader)?"да":"нет") } }; M.MenuCicle(out MenuChoice, out ItemChoice); switch (MenuChoice) { case -1: //отмена меню break; case 0: switch (ItemChoice) { case 0: //1. Отобразить таблицу CT.ShowTable(); break; case 1: //2. Изменить базу уровней switch (CT.levelBase) { case LevelBase.Millimeters: CT.ChangeLevelBase(LevelBase.Centimeters); break; case LevelBase.Centimeters: CT.ChangeLevelBase(LevelBase.Millimeters); break; } break; case 2: //3. Правка значений в таблице ChangeTableMenu(CT); break; case 3: //3. Проверить таблицу CT.CheckTable(); Console.BackgroundColor = ConsoleColor.Black; Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("\n\nДля продолжения нажмите любую клавишу..."); Console.ReadKey(true); break; case 4: //4. Исправить таблицу CT.RepairTable(RepairVolumeInconcictensy); Console.BackgroundColor = ConsoleColor.Black; Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("\n\nДля продолжения нажмите любую клавишу..."); Console.ReadKey(true); break; case 5: //5. Сортировать CT.SortTable(); Console.BackgroundColor = ConsoleColor.Black; Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("\n\nДля продолжения нажмите любую клавишу..."); Console.ReadKey(true); break; case 6: //6. Сохранить TXTFile tf = new TXTFile( FileEventProcessor, FileEventProcessor, FileEventProcessor, FileEventProcessor); tf.WriteFile(CT, path, WriteValcomHeader); break; case 7: //7. Выход ExitApp = ExitIfTrue; break; default: //ошибка меню Console.Clear(); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Ошибка в работе доп. 0 меню одной таблицы!!!\n\nНажмите любую клавишу для выхода..."); Console.ReadKey(true); ExitApp = true; break; } break; case 1: switch (ItemChoice) { case 0: Menu M4 = new Menu( new string[] { "Исправлять непоследовательность объемов?" }, new string[][] { new string[] { "Да", "Нет" } }, null, 0, new Menu.DoubleColor[] { new Menu.DoubleColor(ConsoleColor.Yellow) }); int MenuChoice4 = 0, ItemChoice4 = 0; M4.MenuCicle(out MenuChoice4, out ItemChoice4); switch (MenuChoice4) { case 0: switch (ItemChoice4) { case 0: //Да RepairVolumeInconcictensy = true; break; case 1: //Нет RepairVolumeInconcictensy = false; break; } break; } break; case 1: Menu M2 = new Menu( new string[] { "Записывать в выходные файлы заголовок Valcom?" }, new string[][] { new string[] { "Да", "Нет" } }, null, 0, new Menu.DoubleColor[] { new Menu.DoubleColor(ConsoleColor.Yellow) }); int MenuChoice2 = 0, ItemChoice2 = 0; int curItem2 = (WriteValcomHeader) ? 0 : 1; M2.MenuCicle(out MenuChoice2, out ItemChoice2, 0, curItem2); switch (MenuChoice2) { case 0: switch (ItemChoice2) { case 0: //Да WriteValcomHeader = true; break; case 1: //Нет WriteValcomHeader = false; break; } break; default: Console.Clear(); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Ошибка в работе меню опций!!!\n\nНажмите любую клавишу для выхода..."); Console.ReadKey(true); ExitApp = true; break; } break; default: Console.Clear(); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Ошибка в работе доп. 1 меню одной таблицы!!!\n\nНажмите любую клавишу для выхода..."); Console.ReadKey(true); ExitApp = true; break; } break; default: Console.Clear(); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Ошибка в работе меню одной таблицы!!!\n\nНажмите любую клавишу для выхода..."); Console.ReadKey(true); ExitApp = true; break; } } while (!(MenuChoice == -1 || MenuChoice == 0 && ItemChoice == 7) && !ExitApp); }
static void ChangeTableMenu(CalibrationTable CT) { int MenuChoice = 0, //выбранное доп. меню ItemChoice = 0; //выбранный пункт меню Menu M = new Menu( new string[] { "Правка таблицы " + CT.CTid }, new string[][] { new string[] { "1. Добавить запись", "2. Изменить запись", "3. Удалить запись", "4. Назад" } }); do { M.MenuCicle(out MenuChoice, out ItemChoice); switch (MenuChoice) { case -1: //отмена меню break; case 0: switch (ItemChoice) { case 0: //1. Добавить запись CT.AddPair(); break; case 1: //2. Изменить запись CT.ChangeVolume(); break; case 2: //3. Удалить запись CT.DeletePair(); break; case 3: //4. Назад break; default: //ошибка меню Console.Clear(); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Ошибка в работе доп. 0 меню правки таблицы!!!\n\nНажмите любую клавишу для выхода..."); Console.ReadKey(true); ExitApp = true; break; } break; default: Console.Clear(); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Ошибка в работе меню правки таблицы!!!\n\nНажмите любую клавишу для выхода..."); Console.ReadKey(true); ExitApp = true; break; } } while (!(MenuChoice == -1 || MenuChoice == 0 && ItemChoice == 3) && !ExitApp); }
public SetCalibrationTableMessage(CalibrationTable table, CalibrationTable.TableType tableType) : base(OPCODE.SET_CALIBRATION_TABLE) { this.table = table; this.tableType = tableType; }