/// <summary> /// Загрузка шаблона в таблицу /// </summary> private void LoadTemplateBin(string _TemplateName) { string path = Application.StartupPath + "\\templates\\" + _TemplateName + ".bin"; DGV.DataSource = null; lblPointsCount.Text = ""; ApplyMeasConfig(); try { using (BinaryReader reader = new BinaryReader(File.Open(path, FileMode.Open))) { MeasConfigurator.ClearPoints(); while (reader.BaseStream.Length != reader.BaseStream.Position) { MeasConfigurator.AddPoint(reader.ReadInt64(), reader.ReadInt32(), reader.ReadInt32(), (InstrBands)reader.ReadInt32()); } } } catch (Exception) { } MeasConfigurator.m_StartPoint = 0; MeasConfigurator.m_StopPoint = MeasConfigurator.PointsCount - 1; UpdatePointsCountLbl(); this.Update(); SetDGV(MeasConfigurator.GetTable()); SetMeasRange(); }
/// <summary> /// Генерация таблицы /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnGenerateMeasure_Click(object sender, EventArgs e) { Int64 iStartFreq = 0; Int64 iStopFreq = 0; float fAmpl = 0; float fTime = 0; int iSteps = 0; //количество проходов на точку int iPointsCount = (int)nudPointsCount.Value; float fDecCount; //количество декад double tmpDouble; Int64 iTempFreq; try { iStartFreq = Int64.Parse(txtStartFreq.Text) * (Int64)Math.Pow(1000, cmbxStartFreqUnits.SelectedIndex); // / 1000000; iStopFreq = Int64.Parse(txtStopFreq.Text) * (Int64)Math.Pow(1000, cmbxStopFreqUnits.SelectedIndex); // / 1000000; fAmpl = float.Parse(txtAmplitude.Text); fTime = float.Parse(txtTime.Text) * (float)Math.Pow(1000, cmbxTimeUnits.SelectedIndex); iSteps = (int)nudPointsCount.Value; } catch { MessageBox.Show(this, "Ошибка при вводе параметров.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (fAmpl > 0) { MessageBox.Show(this, "Заданная мощность сигнала превышает 0dBm!\nПри использовании усилителя превышение излучаемой\nмощности 0dBm запрещено!"); } SetMinMaxFreq(); if (iStartFreq > m_MaxFreq - 1) { MessageBox.Show(this, "Введено слишком большое значение начальной частоты"); return; } if (iStartFreq < m_MinFreq) { MessageBox.Show(this, "Введено слишком маленькое значение начальной частоты"); return; } if (iStopFreq > m_MaxFreq) { MessageBox.Show(this, "Введено слишком большое значение конечной частоты"); return; } if (iStopFreq < m_MinFreq + 1) { MessageBox.Show(this, "Введено слишком маленькое значение конечной частоты"); return; } if (iStartFreq >= iStopFreq) { MessageBox.Show(this, "Конечное значение частоты должно быть больше начального"); return; } if (fTime < 0.001) { MessageBox.Show(this, "Введено слишком маленькое значение времени"); return; } if (fTime > 4000000) { MessageBox.Show(this, "Введено слишком большое значение времени"); return; } if (fAmpl > 20) { MessageBox.Show(this, "Введено слишком большое значение амплитуды сигнала"); return; } if (fAmpl < -40) { MessageBox.Show(this, "Введено слишком маленькое значение амплитуды сигнала"); return; } fDecCount = (float)Math.Ceiling(Math.Log10(iStopFreq / iStartFreq)); MeasConfigurator.ClearPoints(); int time_ms = 0; if (cmbxTimeUnits.SelectedIndex > 0) { time_ms = int.Parse(txtTime.Text) * 1000; } else { time_ms = int.Parse(txtTime.Text); } int amplitude = 0; int.TryParse(txtAmplitude.Text, out amplitude); ApplyMeasConfig(); if (rbFixedPoints.Checked) //Фиксированное количество точек на декаду { MeasConfigurator.AddPoint(iStartFreq, amplitude, time_ms, InstrBands.NAN); for (int i = 0; i < fDecCount; i++) { iTempFreq = iStartFreq * (Int64)Math.Pow(10, i); for (int j = 1; j < iPointsCount; j++) { if (rbStepLog.Checked) { tmpDouble = (Math.Ceiling(iTempFreq * Math.Pow(10, ((double)j / (iPointsCount - 1))))); } else { tmpDouble = iTempFreq + iTempFreq * 9 * j / (iPointsCount - 1); } MeasConfigurator.AddPoint((long)tmpDouble, amplitude, time_ms, InstrBands.NAN); } } } else if (rbMoreThenPoints.Checked)//Количество точек не меньше заданного { int i = 0; double step = (double)(10 * iStartFreq - iStartFreq) / (iPointsCount - 1); tmpDouble = iStartFreq; while (tmpDouble < iStopFreq) { tmpDouble = iStartFreq + step * i; MeasConfigurator.AddPoint((long)tmpDouble, amplitude, time_ms, InstrBands.NAN); i++; } MeasConfigurator.EditPoint(MeasConfigurator.PointsCount - 1, iStopFreq, amplitude, time_ms, InstrBands.NAN); } else//Количество точек на диапазон { for (int i = 0; i < iPointsCount; i++) { if (rbStepLog.Checked) { tmpDouble = (iStartFreq * Math.Pow(10, i * Math.Log10(iStopFreq / iStartFreq) / (iPointsCount - 1))); } else { tmpDouble = (iStartFreq + (iStopFreq - iStartFreq) * i / (iPointsCount - 1)); } MeasConfigurator.AddPoint((long)tmpDouble, amplitude, time_ms, InstrBands.NAN); } } UpdatePointsCountLbl(); this.Update(); SetDGV(MeasConfigurator.GetTable()); SetMeasRange(); UpdatePointsCountLbl(); }