예제 #1
0
        /// <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();
        }
예제 #2
0
        /// <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();
        }