Пример #1
0
        public override ClockResult ExecuteCommand()
        {
            Result = new ClockResult();
            StendDLLCommands stend = new StendDLLCommands();

            try
            {
                stend.ErrorClear(StendSettings.ComPort);

                stend.AdjustUI(Phase, Rated_Volt, Rated_Curr, Rated_Freq, PhaseSrequence, IsRevers, Volt_Per, Curr_Per, IABC, CosP, StendSettings.SModel, StendSettings.ComPort);

                for (int j = 0; j < StendSettings.ActivePlaces.Count; j++)
                {
                    //По идее эта команда тут не обязательна, но на всякий случай
                    stend.setPulseChannel(StendSettings.ActivePlaces[j], (byte)(2 * (IsActiveEnergy == 1 ? 0 : 1) + IsRevers), StendSettings.ComPort);
                    Result[StendSettings.ActivePlaces[j]] = "";
                }

                stend.SetRefClockStend(1, StendSettings.ComPort);

                for (int k = 0; k < Amount; k++)
                {
                    for (int j = 0; j < StendSettings.ActivePlaces.Count; j++)
                    {
                        stend.ClockErrorStart(StendSettings.ActivePlaces[j], Frequency, Impulse, StendSettings.ComPort);
                    }

                    Stopwatch sw = new Stopwatch();

                    //Время одного измерения
                    double timeMeasurement = (Frequency * Impulse + Frequency) * 1000;

                    sw.Start();

                    //Для приращения прогресс бара и ожидания когда, компаратор получит все импульсы от счётчика для подсчета
                    while (sw.ElapsedMilliseconds < (int)timeMeasurement && !Cancel)
                    {
                        Progress = ProgressMaxValue * (sw.ElapsedMilliseconds + timeMeasurement * k) / (int)(timeMeasurement * Amount);
                        Thread.Sleep(100);
                    }

                    //Получение результатов с компаратора
                    for (int j = 0; j < StendSettings.ActivePlaces.Count && !Cancel; j++)
                    {
                        string result = "";
                        stend.ClockErrorRead(ref result, Frequency, 0, StendSettings.ActivePlaces[j], StendSettings.ComPort);
                        result = string.Format("{0:f7}", (double.Parse(result) - Frequency));
                        Result[StendSettings.ActivePlaces[j]] += result + '\n';
                    }
                }

                Progress = ProgressMaxValue;
            }
            catch
            {
                Progress = ProgressMinValue;
                throw;
            }
            finally
            {
                try {
                    stend.ErrorClear(StendSettings.ComPort);
                    stend.PowerOff(StendSettings.ComPort);
                    //Если ошибка связана с COM портом, то просто игнорю т.к. первая ошибка на это укажет
                }catch (StendConnectionException) {}
            }

            return(Result);
        }