private void merajEnergyScanCyklus()
        {
            cisloKroku = 0;
            double krok = (Parameters.EnergyScan.StartPoint); //ziskame zaciatocny krok = start point pre TEM
            //teplomer a tlakomery chceme citat iba kazdych n sekund;
            ADPrevodnik.setAnalogOutput(krok);
            voltmeter.read();
            ampermeter.read();
            Thread.Sleep(500);
            voltmeter.read();
            ampermeter.read();
            Thread.Sleep(50);

            tlak256.read();
            tlak256.startReading();
            teplomer.read();
            teplomer.startReading();

            while (cisloKroku <= Parameters.NumberOfSteps)
            {
                if (abortStatus)
                {
                    break;
                }
                KrokMerania = new KrokMerania();
                ADPrevodnik.setAnalogOutput(krok);//.setPoint(krok);   //posle na TEM vypocitany bod

                ADThread = new Thread(ADPrevodnik.CounterStart); //novy thread ad prevodnika
                ADThread.IsBackground = true;
                ADPrevodnik.setAnalogOutput(krok);
                ADThread.Start();  //nastartovanie prevodnika
                //precitaj zatial vsetky ostatne pristroje

                voltmeter.read();
                ampermeter.read();

                ADThread.Join();   //cakas na skoncenie ADThreadu
                //vieme, ze AD prevodnik uz zapisal novu hodnotu intenzity
                KrokMerania.Intensity = ADPrevodnik.Intensity;
                KrokMerania.Current = ampermeter.LastValue;
                KrokMerania.X = voltmeter.LastValue;
                KrokMerania.Y = Parameters.EnergyScan.Constant;
                KrokMerania.Temperature = teplomer.readNext();
                KrokMerania.Capillar = tlak256.readNext();
                KrokMerania.Chamber = 0;
                KrokMerania.StepNumber = cisloKroku+1;

                //zaznamenat
                aktualnyCyklus.KrokyMerania.Add(KrokMerania);
                lock (Graf)
                {
                    if (showCurrent)
                    {
                        Graf.addDataPoint(KrokMerania.X, KrokMerania.Y, KrokMerania.Intensity, currentCycleNum - 1);

                    }
                }
                mainForm.setCurrentStep((cisloKroku+1).ToString() + "/" + (Parameters.NumberOfSteps + 1).ToString());
                cisloKroku++;
                krok = (Parameters.EnergyScan.StartPoint)+cisloKroku*Parameters.EnergyScan.KrokNapatia;
            }
        }
Esempio n. 2
0
        public static Meranie loadMeranie(int headerId)
        {
            DbCommunication d=new DbCommunication();
            DataRow header=d.header(headerId).Tables[0].Rows[0];

            MeasurementParameters parametre =
                new MeasurementParameters(
                    header["name"].ToString(),
                    header["ion_type"].ToString().Equals("true"),
                    header["note"].ToString(),
                    (int)header["cycles"]);

            string x = "";
            string y = "";
            if (header["type_name"].Equals("Energy Scan"))
            {
                EnergyScanParameters pp=new EnergyScanParameters();

                pp.StartPoint= (double)header["start_point"];
                pp.EndPoint= (double)header["end_point"];
                pp.Constant= Convert.ToInt32(header["constant"]);

                pp.StepTime= (double)header["steptime"];
                pp.NumberOfSteps=(int)header["pocet_krokov"];

                parametre.EnergyScan=pp;
                parametre.Typ = "Energy Scan";
                x = "Electron energy";
                y = "m/z";
            }
            else if (header["type_name"].Equals("Mass Scan"))
            {
                MassScanParameters mp = new MassScanParameters();

                mp.StartPoint = (int)header["start_point"];
                mp.EndPoint = (int)header["end_point"];
                mp.Constant = (double)header["constant"];

                mp.TimePerAmu = (double)header["time_for_amu"];
                mp.Density = (double)header["density"];
                parametre.MassScan = mp;
                parametre.Typ = "Mass Scan";
                x = "m/z";
                y = "Electron energy";

            }
            else if (header["type_name"].Equals("2D Scan")){
                EnergyScanParameters ep = new EnergyScanParameters();

                ep.StartPoint = (double)header["e_start_point"];
                ep.EndPoint = (double)header["e_end_point"];
                ep.StepTime = (double)header["e_steptime"];
                ep.NumberOfSteps = (int)header["pocet_krokov"];
                parametre.EnergyScan = ep;

                MassScanParameters mp = new MassScanParameters();

                mp.StartPoint = (int)header["m_start_point"];
                mp.EndPoint = (int)header["m_end_point"];
                mp.TimePerAmu = (double)header["time_for_amu"];
                mp.Density = (double)header["density"];
                parametre.Typ = "2D Scan";
                parametre.MassScan = mp;
                x = "m/z";
                y = "Electron energy";
            }

            Meranie m=new Meranie(parametre);
            m.cykly = new List<CyklusMerania>();
            for (int c = 0; c < (int)header["cycles"]; c++)
            {
                CyklusMerania cyklus = new CyklusMerania(c);
                cyklus.KrokyMerania = new List<KrokMerania>();
                DataTable data=d.meranie(headerId,c).Tables[0];
                for (int i=0;i<data.Rows.Count ;i++ )
                {

                    KrokMerania krok = new KrokMerania();
                    krok.Intensity= (ulong)data.Rows[i]["Intensity"];
                    krok.Temperature = (double)data.Rows[i]["Temperature"];
                    krok.Chamber = (double)data.Rows[i]["Chamber pressure"];
                    krok.Capillar = (double)data.Rows[i]["Capillar pressure"];
                    krok.X = (double)data.Rows[i][x];
                    krok.Y = (double)data.Rows[i][y];

                    cyklus.KrokyMerania.Add(krok);
                }

                m.cykly.Add(cyklus);
            }

            return m;
        }
        private void collectData()
        {
            for (int j = 0; j < Parameters.NumberOfCycles; j++)
            {

                for (int i = 0; i < Parameters.NumberOfSteps + 1; i++)
                {
                    CyklusMerania c = new CyklusMerania(j+1);
                    KrokMerania k = new KrokMerania();
                    k.X = Parameters.MassScan.StartPoint + i * Parameters.MassScan.Step;
                    k.Y = Parameters.MassScan.Constant;
                    k.Chamber = 0;
                    k.Capillar = tlak256.readNext();
                    k.Temperature = teplomer.readNext();
                    k.Intensity = intensities[i];
                    c.KrokyMerania.Add(k);

                    CurrentMeasurement.cykly.Add(c);
                }
            }
            db.open();
            db.addMeranie(CurrentMeasurement);
            db.close();
        }