예제 #1
0
        uint FUN_INTERVAL_CALC(CRabcickl a)
        {
            uint INTERVAL;

            INTERVAL = (a.Tblank1 + a.Ti + a.Tblank2 + a.Tp) * a.N_cikl;//расчитали длительность цикла
            return(INTERVAL);
        }
예제 #2
0
        private void button1_Copy1_Click(object sender, RoutedEventArgs e)
        {
            CRabcickl c0 = new CRabcickl();

            c0.Amplitude0 = Convert.ToInt16(textBox_AMP0.Text);
            c0.Amplitude1 = Convert.ToInt16(textBox_AMP1.Text);
            c0.Amplitude2 = Convert.ToInt16(textBox_AMP2.Text);
            c0.Amplitude3 = Convert.ToInt16(textBox_AMP3.Text);

            c0.Calibrovka = Convert.ToInt16(checkBox_Calibrovka.IsChecked);
            c0.Coherent   = Convert.ToInt16(checkBox_Coherent.IsChecked);

            c0.DELAY0 = Convert.ToInt16(textBox_DELAY0.Text);
            c0.DELAY1 = Convert.ToInt16(textBox_DELAY1.Text);
            c0.DELAY2 = Convert.ToInt16(textBox_DELAY2.Text);
            c0.DELAY3 = Convert.ToInt16(textBox_DELAY3.Text);

            c0.deviation = Convert.ToInt64(textBox_dev_FREQ.Text);

            c0.FREQ      = Convert.ToUInt64(textBox_FREQ.Text);
            c0.FREQ_STEP = Convert.ToInt64(textBox_FREQ_STEP.Text);
            c0.FREQ_RATE = Convert.ToUInt32(textBox_FREQ_RATE.Text);

            c0.N_cikl        = Convert.ToUInt16(textBox_N_intervals.Text);//число интервалов в цикле
            c0.NUMBER_RECORD = Convert.ToInt32(textBox_Number_record.Text);

            c0.PHASE0 = Convert.ToInt16(textBox_PHASE0.Text);
            c0.PHASE1 = Convert.ToInt16(textBox_PHASE1.Text);
            c0.PHASE2 = Convert.ToInt16(textBox_PHASE2.Text);
            c0.PHASE3 = Convert.ToInt16(textBox_PHASE3.Text);

            c0.Tblank1 = Convert.ToUInt32(textBox_Tdop_iz.Text);
            c0.Tblank2 = Convert.ToUInt32(textBox_Tdop_pr.Text);

            c0.Ti = Convert.ToUInt32(textBox_Ti.Text);
            c0.Tp = Convert.ToUInt32(textBox_Tp.Text);

            //     c0.TIME_START=Convert.ToInt64(textBox_TIME_START.Text);
            if (list.Count > 0)
            {
                if (c0.TIME_START < list[(list.Count - 1)].TIME_END)
                {
                    c0.TIME_START = list[(list.Count - 1)].TIME_END;
                }
            }
            else
            {
                c0.TIME_START = Convert.ToUInt64(textBox_TIME_START.Text);
            }

            c0.TYPE = 0;

            textBox_Dlitelnost_cikl.Text = (FUN_INTERVAL_CALC(c0)).ToString();//рассчитываем длительность текущего цикла
            c0.TIME_END      = Convert.ToUInt64(textBox_Dlitelnost_cikl.Text) + c0.TIME_START;
            c0.NUMBER_RECORD = list.Count;

            list.Add(c0);
            textBox_N_cikl.Text        = (list.Count).ToString();        //считаем общее количество циклов
            textBox_Number_record.Text = (c0.NUMBER_RECORD).ToString();  //номер текущего цикла
        }
예제 #3
0
        public WSP_test16(MainWindow m, string name)
        {
            CRabcickl z = new CRabcickl();

            InitializeComponent();
            this.name       = name;
            this.Title      = name.ToUpper();
            init            = 1;
            MASTER          = m;
            Timer1.Tick    += new EventHandler(Timer1_Tick);
            Timer1.Interval = new TimeSpan(0, 0, 0, 0, 100);
            Timer1.Stop();//останавливаю таймер

            //----------выключаем сигнал на тестере и DUT-----------------
            MASTER.FILTR_SMOOTH = 4;
            CMD_REALTIME_SETUP(ref z, 435000000); //
            z.Calibrovka = 0;                     //приём ведём на интервале приёма (в данном тесте вообще не ведём приём)
            z.Amplitude0 = 100;                   //давим сигнал излучения
            z.Amplitude1 = 100;
            z.Amplitude2 = 100;
            z.Amplitude3 = 100;
            z.N_cikl     = 1;
            z.Tblank1    = 100;
            z.Tblank2    = 100;
            z.Ti         = 1000;//
            z.Tp         = 1000;
            CMD_REALTIME_UPDATE(ref z);
            MASTER.panel_Sint.FUNC_LIST_UPDATE_v2(z, "DUT");
            MASTER.panel_Sint.FUNC_LIST_UPDATE_v2(z, "TESTER");
        }
예제 #4
0
//Этот метод сосздаёт структуру команды реального времени из внешних данных
        public void FUNC_LIST_UPDATE(CRabcickl c0)
        {
            list.Clear();
            c0.NUMBER_RECORD = list.Count;
            var tmp1 = FUN_INTERVAL_CALC(c0).ToString(); //рассчитываем длительность текущего цикла

            //   Console.WriteLine("Длительность цикла:"+tmp1);
            list.Insert(0, c0);//
            CMD_LIST_FORM("DUT");
        }
예제 #5
0
        //Этот метод сосздаёт структуру команды реального времени из внешних данных
        public void FUNC_LIST_UPDATE_v2(CRabcickl c0, string n)
        {
            list.Clear();
            c0.NUMBER_RECORD = list.Count;
            var tmp1 = FUN_INTERVAL_CALC(c0).ToString();//рассчитываем длительность текущего цикла

            //     Console.WriteLine("Длительность цикла:"+tmp1);
            c0.TYPE = (ushort)(((c0.Calibrovka & 1) << 1) + (c0.Coherent & 1));

            list.Insert(0, c0);//
            CMD_LIST_FORM(n);
        }
예제 #6
0
        private CRabcickl CMD_REALTIME_UPDATE(int frq)
        {
            CRabcickl a = new CRabcickl();

            a.Amplitude0 = DDS_ATT;
            a.Amplitude1 = DDS_ATT;
            a.Amplitude2 = DDS_ATT;
            a.Amplitude3 = DDS_ATT;

            if (FLAG_MAX_ZS == 1)
            {
                MASTER.b072.I_DAC0 = 15;//
                MASTER.b072.I_DAC0 = 15;
                MASTER.b072.I_DAC1 = 15;
                MASTER.b072.I_DAC1 = 15;
            }

            a.Att0 = 0;
            a.Att1 = 0;
            a.Att2 = 0;
            a.Att3 = 0;

            a.SYSREF = 0;//включаем sysref

            a.Calibrovka = 1;
            a.Coherent   = 0;
            a.DELAY0     = 0;
            a.DELAY1     = 0;
            a.DELAY2     = 0;
            a.DELAY3     = 0;
            a.deviation  = 0;//

            a.FREQ          = frq;
            a.FREQ_RATE     = 0;
            a.FREQ_STEP     = 0;
            a.NUMBER_RECORD = 1;
            a.N_cikl        = 10000;
            a.PHASE0        = 0;
            a.PHASE1        = 0;
            a.PHASE2        = 0;
            a.PHASE3        = 0;
            a.Tblank1       = 100;
            a.Tblank2       = 100;
            a.Ti            = 59000000;
            a.Tp            = 100;
            a.TIME_END      = 0;
            a.TIME_START    = 10000;
            a.TYPE          = (ushort)(((a.Calibrovka & 1) << 1) + (a.Coherent & 1));

            return(a);
        }
예제 #7
0
        private void CMD_REALTIME_UPDATE(ref CRabcickl a)
        {
            double step     = 0;
            double rate     = 1.0 / 96.0;
            double Timp     = Convert.ToDouble(a.Ti);
            double FREQ_DEV = Convert.ToDouble(a.deviation);
            double N_step   = Math.Round(Timp / rate);//расчитываем число шагов для DDS

            // Console.WriteLine("Timp:"+Timp);
            // Console.WriteLine("FREQ_DEV:"+FREQ_DEV);
            // Console.WriteLine("N_step:"+N_step);
            step        = FREQ_DEV / N_step;//расчитываем длинну шага в Гц
            rate        = Math.Round(rate * 1000.0);
            a.FREQ_RATE = (uint)rate;
            a.FREQ_STEP = step;
            a.TYPE      = (ushort)(((a.Calibrovka & 1) << 1) + (a.Coherent & 1));
        }
예제 #8
0
        private CRabcickl CMD_REALTIME_UPDATE(int frq)
        {
            CRabcickl a = new CRabcickl();

            //  double lvl = 16 - LEVEL;

            a.Amplitude0 = 16 - LEVEL;//величена ослабления выходного сигнала ЦАП к 16 Дбм
            a.Amplitude1 = 16 - LEVEL;
            a.Amplitude2 = 16 - LEVEL;
            a.Amplitude3 = 16 - LEVEL;

            a.Att0 = 0;
            a.Att1 = 0;
            a.Att2 = 0;
            a.Att3 = 0;

            a.SYSREF = 0;//включаем sysref чтобы не было спур

            a.Calibrovka = 1;
            a.Coherent   = 0;
            a.DELAY0     = 0;
            a.DELAY1     = 0;
            a.DELAY2     = 0;
            a.DELAY3     = 0;
            a.deviation  = 0;//
            //   Console.WriteLine("frq="+frq);
            a.FREQ          = frq;
            a.FREQ_RATE     = 0;
            a.FREQ_STEP     = 0;
            a.NUMBER_RECORD = 1;
            a.N_cikl        = 1;
            a.PHASE0        = 0;
            a.PHASE1        = 0;
            a.PHASE2        = 0;
            a.PHASE3        = 0;
            a.Tblank1       = 100;
            a.Tblank2       = 100;
            a.Ti            = 20000000;
            a.Tp            = 100;
            a.TIME_END      = 0;
            a.TIME_START    = 10000;
            a.TYPE          = (ushort)(((a.Calibrovka & 1) << 1) + (a.Coherent & 1));

            return(a);
        }
예제 #9
0
        private CRabcickl CMD_REALTIME_UPDATE(int frq)
        {
            CRabcickl a = new CRabcickl();

            a.Amplitude0 = 100;//давим сигнал излучения, чтобы не мешал приёму
            a.Amplitude1 = 100;
            a.Amplitude2 = 100;
            a.Amplitude3 = 100;

            a.Att0       = 0;
            a.Att1       = 0;
            a.Att2       = 0;
            a.Att3       = 0;
            a.SYSREF     = 0; //включаем sysref чтобы не было спур
            a.Calibrovka = 1; //приём ведём на интервале приёма
            a.Coherent   = 0;
            a.DELAY0     = 0;
            a.DELAY1     = 0;
            a.DELAY2     = 0;
            a.DELAY3     = 0;
            a.deviation  = 0; //
                              //   Console.WriteLine("frq="+frq);
            a.FREQ          = 425000000;
            a.FREQ_RATE     = 0;
            a.FREQ_STEP     = 0;
            a.NUMBER_RECORD = 1;
            a.N_cikl        = 32000;
            a.PHASE0        = 0;
            a.PHASE1        = 0;
            a.PHASE2        = 0;
            a.PHASE3        = 0;
            a.Tblank1       = 100;
            a.Tblank2       = 100;
            a.Ti            = 100;
            a.Tp            = 59000000;
            a.TIME_END      = 0;
            a.TIME_START    = 10000;
            a.TYPE          = (ushort)(((a.Calibrovka & 1) << 1) + (a.Coherent & 1));

            return(a);
        }
예제 #10
0
        private CRabcickl CMD_REALTIME_UPDATE(int frq)
        {
            CRabcickl a = new CRabcickl();

            a.Amplitude0 = DDS_ATT;//давим сигнал излучения, чтобы не мешал приёму
            a.Amplitude1 = DDS_ATT;
            a.Amplitude2 = DDS_ATT;
            a.Amplitude3 = DDS_ATT;

            a.Att0       = 0;
            a.Att1       = 0;
            a.Att2       = 0;
            a.Att3       = 0;
            a.SYSREF     = 0; //включена синхронизация SYSREF!
            a.Calibrovka = 0; //приём ведём на интервале излучения
            a.Coherent   = 0;
            a.DELAY0     = 0;
            a.DELAY1     = 0;
            a.DELAY2     = 0;
            a.DELAY3     = 0;
            a.deviation  = 0;//
            Console.WriteLine("frq=" + frq);
            a.FREQ          = frq;
            a.FREQ_RATE     = 0;
            a.FREQ_STEP     = 0;
            a.NUMBER_RECORD = 1;
            a.N_cikl        = 32000;
            a.PHASE0        = 0;
            a.PHASE1        = 0;
            a.PHASE2        = 0;
            a.PHASE3        = 0;
            a.Tblank1       = 100;
            a.Tblank2       = 100;
            a.Ti            = 59000000;//важно отследить этот момент!!!
            a.Tp            = 100;
            a.TIME_END      = 0;
            a.TIME_START    = 100000;
            a.TYPE          = (ushort)(((a.Calibrovka & 1) << 1) + (a.Coherent & 1));

            return(a);
        }
예제 #11
0
        private void CMD_REALTIME_SETUP(ref CRabcickl a, int frq, int dev, int timp, double duty)
        {
            double tmp = 0;

            a.Amplitude0 = 0; //давим сигнал излучения, чтобы не мешал приёму
            a.Amplitude1 = 0; //
            a.Amplitude2 = 0; //
            a.Amplitude3 = 0; //

            a.Att0          = 0;
            a.Att1          = 0;
            a.Att2          = 0;
            a.Att3          = 0;
            a.SYSREF        = 0; //включаем sysref чтобы не было спур
            a.Calibrovka    = 0; //приём ведём на интервале излучения
            a.Coherent      = 0;
            a.DELAY0        = 0;
            a.DELAY1        = 0;
            a.DELAY2        = 0;
            a.DELAY3        = 0;
            a.deviation     = dev;//
            a.FREQ          = frq;
            a.FREQ_RATE     = 0;
            a.FREQ_STEP     = 0;
            a.NUMBER_RECORD = 1;
            a.N_cikl        = 63000;
            a.PHASE0        = 0;
            a.PHASE1        = 0;
            a.PHASE2        = 0;
            a.PHASE3        = 0;
            a.Tblank1       = 1;
            a.Tblank2       = 1;
            a.Ti            = (uint)timp;//
            tmp             = (((double)timp * duty) - a.Tblank1 - a.Tblank2 - timp);
            a.Tp            = (uint)tmp;
            a.TIME_END      = 0;
            a.TIME_START    = 10000;
            a.TYPE          = (ushort)(((a.Calibrovka & 1) << 1) + (a.Coherent & 1));
        }
예제 #12
0
        private void CMD_REALTIME_SETUP(ref CRabcickl a, int frq)
        {
            a.Amplitude0 = DDS_ATT; //давим сигнал излучения, чтобы не мешал приёму
            a.Amplitude1 = DDS_ATT; //
            a.Amplitude2 = DDS_ATT; //
            a.Amplitude3 = DDS_ATT; //

            a.Att0 = 0;
            a.Att1 = 0;
            a.Att2 = 0;
            a.Att3 = 0;

            a.Calibrovka    = 0;//приём ведём на интервале излучения
            a.Coherent      = 0;
            a.DELAY0        = 0;
            a.DELAY1        = 0;
            a.DELAY2        = 0;
            a.DELAY3        = 0;
            a.deviation     = 0;//
            a.FREQ          = frq;
            a.FREQ_RATE     = 0;
            a.FREQ_STEP     = 0;
            a.NUMBER_RECORD = 1;
            a.N_cikl        = 32000;
            a.PHASE0        = 0;
            a.PHASE1        = 0;
            a.PHASE2        = 0;
            a.PHASE3        = 0;
            a.Tblank1       = 100;
            a.Tblank2       = 100;
            a.Ti            = 59000000;//
            a.Tp            = 100;
            a.TIME_END      = 0;
            a.TIME_START    = 100000;
            a.TYPE          = (ushort)(((a.Calibrovka & 1) << 1) + (a.Coherent & 1));
        }
예제 #13
0
 private void CMD_REALTIME_UPDATE(ref CRabcickl a)
 {
     a.TYPE = (ushort)(((a.Calibrovka & 1) << 1) + (a.Coherent & 1));
 }
예제 #14
0
        private CRabcickl CMD_REALTIME_UPDATE(int frq)
        {
            CRabcickl a = new CRabcickl();

            //--------Считаем параметры девиации если надо----------
            int    FLAG_COGERENT = 0;
            double step;
            double rate   = 1.0 / 96.0;
            double N_step = Math.Round(Timp / rate);//расчитываем число шагов для DDS

            //         Console.WriteLine("Timp:"+Timp);
            //         Console.WriteLine("FREQ_DEV:"+FREQ_DEV);
            //         Console.WriteLine("N_step:"+N_step);
            step = FREQ_DEV / N_step;//расчитываем длинну шага в Гц
            rate = Math.Round(rate * 1000.0);
            //------------------------------------------------------
            //------расчитываем начальную частоту и точки измерений-
            var tmp0 = FREQ_DEV / 2;

            FREQ_START = FREQ - tmp0;

            fx1.min = FREQ - delta_fx1 - tmp0;
            fx1.max = FREQ + delta_fx1 + tmp0;

            fx2.min = FREQ - delta_fx2 - tmp0;
            fx2.max = FREQ + delta_fx2 + tmp0;

            fx3.min = FREQ - delta_fx3 - tmp0;
            fx3.max = FREQ + delta_fx3 + tmp0;

            fx4.min = FREQ - delta_fx4 - tmp0;
            fx4.max = FREQ + delta_fx4 + tmp0;

            fx5.min = FREQ - delta_fx5 - tmp0;
            fx5.max = FREQ + delta_fx5 + tmp0;

            fx6.min = FREQ - delta_fx6 - tmp0;
            fx6.max = FREQ + delta_fx6 + tmp0;
            //------------------------------------------------------

            a.Amplitude0 = 15 - LEVEL;
            a.Amplitude1 = 15 - LEVEL;
            a.Amplitude2 = 15 - LEVEL;
            a.Amplitude3 = 15 - LEVEL;

            a.Att0          = 0;
            a.Att1          = 0;
            a.Att2          = 0;
            a.Att3          = 0;
            a.SYSREF        = 0;//включаем sysref чтобы не было спур
            a.Calibrovka    = 1;
            a.Coherent      = 0;
            a.DELAY0        = 0;
            a.DELAY1        = 0;
            a.DELAY2        = 0;
            a.DELAY3        = 0;
            a.deviation     = 0;//
            a.FREQ          = FREQ_START;
            a.FREQ_RATE     = Convert.ToUInt32(rate);
            a.FREQ_STEP     = step;
            a.NUMBER_RECORD = 1;
            a.N_cikl        = 59000;
            a.PHASE0        = 0;
            a.PHASE1        = 0;
            a.PHASE2        = 0;
            a.PHASE3        = 0;
            a.Tblank1       = 10;
            a.Tblank2       = 10;
            a.Ti            = Convert.ToUInt32(Timp);
            a.Tp            = 100;
            a.TIME_END      = 0;
            a.TIME_START    = 10000;
            a.TYPE          = (ushort)(((a.Calibrovka & 1) << 1) + (a.Coherent & 1));

            return(a);
        }
예제 #15
0
        public void STATE_NEXT()
        {
            CRabcickl z = new CRabcickl();

            switch (st)
            {
            case STATE.START:
                TIMER_DELAY = 100;
                ERROR_MSG  += "Тест №16\r\n";
                ERROR_MSG  += "Проверяем общую функциональность\r\n";
                ERROR_MSG  += STATE_CONTROL_TESTER();
                ERROR_MSG  += STATE_CONTROL();
                st          = st + 1;
                FLAG_END    = false;
                PROGRESS    = 20;
                break;

            case STATE.ST1:
                ERROR_MSG += "Выключаем ключ в положение - Рабочее\r\n";
                SWITCH_DUT(false);    //false
                SWITCH_TESTER(false);
                TIMER_DELAY = 100;
                st          = st + 1;
                PROGRESS    = 30;
                break;

            case STATE.ST2:
                ERROR_MSG += "Включаем аттенюатор Тестера и DUT\r\n";
                ATT_CONTROL_TESTER(ATTEN); //выключаем аттенюаторы   (ATTEN ставить не на максимум!!! так как будет ещё поправка +0..4 Дб)
                ATT_CONTROL_DUT(ATTEN);    //выключаем аттенюаторы
                TIMER_DELAY = 100;         //
                st          = st + 1;
                PROGRESS    = 40;
                break;

            case STATE.ST3:
                //----------TESTER----------------
                CMD_REALTIME_SETUP(ref z, DDS_ATT, FREQ, DEV, Timp, duty_cycle); //
                z.FREQ       = FREQ;
                z.Calibrovka = 1;                                                //
                CMD_REALTIME_UPDATE(ref z);
                MASTER.panel_Sint.FUNC_LIST_UPDATE_v2(z, "TESTER");
                //----------DUT------------------
                CMD_REALTIME_SETUP(ref z, DDS_ATT, FREQ, DEV, Timp, duty_cycle); //
                z.Calibrovka = 1;                                                //приём на интервале приёма
                z.Amplitude0 = 100;                                              //давим свой сигнал излучения
                z.Amplitude1 = 100;
                z.Amplitude2 = 100;
                z.Amplitude3 = 100;
                z.Tblank1    = 100;
                z.Tblank2    = 25000;
                z.Ti         = 1000;//важно отследить этот момент!!!
                z.Tp         = 1000;
                CMD_REALTIME_UPDATE(ref z);
                MASTER.panel_Sint.FUNC_LIST_UPDATE_v2(z, "DUT");
                //--------------------------------
                TIMER_DELAY = 400;    //
                st          = st + 1;
                PROGRESS    = 50;
                break;

            case STATE.ST4:
                MASTER.FILTR_SMOOTH = 3;
                TIMER_DELAY         = 100;//
                st       = st + 1;
                PROGRESS = 70;
                break;

            case STATE.ST5:
                FLAG_END    = true;
                st          = STATE.END;
                TIMER_DELAY = 100;    //
                PROGRESS    = 100;
                break;
            }
        }
예제 #16
0
        public void STATE_NEXT()
        {
            CRabcickl z      = new CRabcickl();
            string    error  = "";
            string    msg    = "";
            int       CHANAL = 0;

            switch (st)
            {
            case STATE.START:
                error += STATE_CONTROL();

                if (error != "")
                {
                    FLAG_END = true;
                    st       = STATE.END;
                    MessageBox.Show("Проблема с тестируемой ячейкой!");
                    break;
                }

                SSA_START();
                SWITCH_DUT(false);    //Включаем ключ в положение - Рабочее

                textBox_att.Text  = TST_Amp_ATT.ToString();
                textBox_Dev.Text  = TST_DEV.ToString();
                textBox_duty.Text = TST_duty_cycle.ToString();
                textBox_freq.Text = TST_FREQ.ToString();
                textBox_timp.Text = TST_Timp.ToString();

                TIMER_DELAY = 400;
                st          = st + 1;
                FLAG_END    = false;
                break;

            case STATE.ST1:
                CMD_REALTIME_SETUP(ref z, TST_FREQ, TST_DEV, TST_Timp, TST_duty_cycle); //

                z.Calibrovka = 1;                                                       //приём ведём на интервале приёма (в данном ТЕСТе вообще не ведём приём)
                z.Amplitude0 = TST_Amp_ATT;
                z.Amplitude1 = TST_Amp_ATT;
                z.Amplitude2 = TST_Amp_ATT;
                z.Amplitude3 = TST_Amp_ATT;

                CMD_REALTIME_UPDATE(ref z);
                MASTER.panel_Sint.FUNC_LIST_UPDATE_v2(z, "DUT");

                TIMER_DELAY = 400;
                st          = st + 1;
                break;

            case STATE.ST2:
                SSA.REQ("INIT:CONT OFF;\r\n");
                SSA.MRK1_POSITION(MKR1_f);
                SSA.MRK2_POSITION(MKR2_f);
                SSA.MRK3_POSITION(MKR3_f);
                TIMER_DELAY = 10;    //500
                st          = st + 1;
                break;

            case STATE.ST3:
                TIMER_DELAY = 10;    //
                st          = st + 1;
                break;

            case STATE.ST4:
                TIMER_DELAY = 10;    //
                st          = st + 1;
                break;

            case STATE.ST5:
                TIMER_DELAY = 10;    //
                st          = st + 1;
                break;

            case STATE.ST6:
                TIMER_DELAY = 10;    //
                st          = st + 1;
                break;

            case STATE.Calc:
                FLAG_END = true;
                st       = STATE.END;
                break;
            }
        }
예제 #17
0
//этот метод заполняет структуру команды реального времени из данных с панели управления
        void FUN_LIST_UPDATE(int a)
        {
            CRabcickl c0 = new CRabcickl();

            //--------Считаем параметры девиации если надо----------
            int    FLAG_COGERENT = 0;
            double step          = 0;
            double rate          = 1.0 / 96.0;

            // double rate = (double)c0.FREQ_RATE; //(в мкс)

            double Timp     = Convert.ToDouble(textBox_Ti.Text);
            double FREQ_DEV = Convert.ToDouble(textBox_dev_FREQ.Text);
            double N_step   = Math.Round(Timp / rate);//расчитываем число шагов для DDS

            // Console.WriteLine("Timp:"+Timp);
            // Console.WriteLine("FREQ_DEV:"+FREQ_DEV);
            // Console.WriteLine("N_step:"+N_step);
            step = FREQ_DEV / N_step;//расчитываем длинну шага в Гц

            rate = Math.Round(rate * 1000.0);
            textBox_FREQ_STEP.Text = step.ToString();
            textBox_FREQ_RATE.Text = rate.ToString();
            //------------------------------------------------------
            c0.FREQ_RATE  = Convert.ToUInt32(textBox_FREQ_RATE.Text);
            c0.Amplitude0 = Convert.ToDouble(textBox_AMP0.Text);
            c0.Amplitude1 = Convert.ToDouble(textBox_AMP1.Text);
            c0.Amplitude2 = Convert.ToDouble(textBox_AMP2.Text);
            c0.Amplitude3 = Convert.ToDouble(textBox_AMP3.Text);

            c0.I0 = MASTER.b072.I_DAC0;
            c0.I1 = MASTER.b072.I_DAC0;
            c0.I2 = MASTER.b072.I_DAC1;
            c0.I3 = MASTER.b072.I_DAC1;

            if (checkBox_Calibrovka.IsChecked == true)
            {
                c0.Calibrovka = 0;
            }
            else
            {
                c0.Calibrovka = 1;
            }
            if (checkBox_Coherent.IsChecked == true)
            {
                c0.Coherent = 1;
            }
            else
            {
                c0.Coherent = 0;
            }
            if (checkBox_SYSREF.IsChecked == true)
            {
                c0.SYSREF = 0;
            }
            else
            {
                c0.SYSREF = 1;                                                                    //0 - включена синхронизация SYSREF!
            }
            c0.DELAY0 = Convert.ToInt16(textBox_DELAY0.Text);
            c0.DELAY1 = Convert.ToInt16(textBox_DELAY1.Text);
            c0.DELAY2 = Convert.ToInt16(textBox_DELAY2.Text);
            c0.DELAY3 = Convert.ToInt16(textBox_DELAY3.Text);

            c0.deviation = Convert.ToInt64(textBox_dev_FREQ.Text);

            c0.FREQ      = Convert.ToDouble(textBox_FREQ.Text);
            c0.FREQ_STEP = Convert.ToDouble(textBox_FREQ_STEP.Text);

            c0.N_cikl        = Convert.ToUInt16(textBox_N_intervals.Text);//число интервалов в цикле
            c0.NUMBER_RECORD = Convert.ToInt32(textBox_Number_record.Text);

            c0.PHASE0 = Convert.ToInt16(textBox_PHASE0.Text);
            c0.PHASE1 = Convert.ToInt16(textBox_PHASE1.Text);
            c0.PHASE2 = Convert.ToInt16(textBox_PHASE2.Text);
            c0.PHASE3 = Convert.ToInt16(textBox_PHASE3.Text);

            c0.Tblank1 = Convert.ToUInt32(textBox_Tdop_iz.Text);
            c0.Tblank2 = Convert.ToUInt32(textBox_Tdop_pr.Text);

            c0.Ti = Convert.ToUInt32(textBox_Ti.Text);
            c0.Tp = Convert.ToUInt32(textBox_Tp.Text);

            if (FLAG_DUTY_CHANGE == 1)
            {
                var duty   = Convert.ToDouble(textBox_Duty.Text);
                var period = duty * c0.Ti;
                c0.Tp            = (uint)(period - (double)c0.Tblank1 - (double)c0.Tblank2);
                textBox_Tp.Text  = c0.Tp.ToString();
                FLAG_DUTY_CHANGE = 0;
            }
            else
            {
                var period = (double)(c0.Ti + c0.Tp + c0.Tblank1 + c0.Tblank2);
                var duty   = Math.Round(period / ((double)(c0.Ti)), 2);
                textBox_Duty.Text = duty.ToString();
            }

            c0.TIME_START = Convert.ToUInt64(textBox_TIME_START.Text);

            //    Console.WriteLine("c0.Calibrovka:" + c0.Calibrovka);

            c0.TYPE = (ushort)(((c0.Calibrovka & 1) << 1) + (c0.Coherent & 1));

            //     Console.WriteLine("c0.TYPE:" + c0.TYPE);

            c0.NUMBER_RECORD             = list.Count;
            textBox_Dlitelnost_cikl.Text = FUN_INTERVAL_CALC(c0).ToString();//рассчитываем длительность текущего цикла

            if (list.Count > 0)
            {
                if (textBox_Number_record.Text != "0")
                {
                    if (c0.TIME_START < list[(a - 1)].TIME_END)
                    {
                        c0.TIME_START = list[(a - 1)].TIME_END;
                    }
                    //   Console.WriteLine("a                    : " + a);
                    //   Console.WriteLine("c0.TIME_START        : " + c0.TIME_START);
                    //   Console.WriteLine("list[(a-1)].TIME_END :" + list[(a - 1)].TIME_END);
                }
            }
            else
            {
                c0.TIME_START = Convert.ToUInt64(textBox_TIME_START.Text);
            }

            c0.TIME_END = c0.TIME_START + Convert.ToUInt64(textBox_Dlitelnost_cikl.Text);

            if (list.Count != 0)//проверяем что в списке есть элементы
            {
                list.RemoveAt(a);
                list.Insert(a, c0);
            }

            textBox_TIME_END.Text   = c0.TIME_END.ToString();
            textBox_TIME_START.Text = c0.TIME_START.ToString();
        }