コード例 #1
0
        public FlowMeasureViewModel()
        {
            //恢复配置参数
            SystemParamManager = SystemParamManager.GetInstance();
            SampleTime         = SystemParamManager.SystemParam.FlowMeasureParams.SampleTime;
            UpdateHardware();

            IsAdmin = false;
        }
コード例 #2
0
        public PNVoltageMeasurementViewModel()
        {
            //恢复配置参数
            SystemParamManager = SystemParamManager.GetInstance();

            CriticalPressure = SystemParamManager.SystemParam.PNVoltageMeasureParams.CriticalPressure;
            VoltageInterval  = SystemParamManager.SystemParam.PNVoltageMeasureParams.VoltageInterval;
            MinVoltage       = SystemParamManager.SystemParam.PNVoltageMeasureParams.MinVoltage;
            MaxVoltage       = SystemParamManager.SystemParam.PNVoltageMeasureParams.MaxVoltage;
            SampleTime       = SystemParamManager.SystemParam.PNVoltageMeasureParams.SampleTime;
        }
コード例 #3
0
        public BurnInTestViewModel()
        {
            //恢复配置参数
            SystemParamManager = SystemParamManager.GetInstance();
            Frequency          = SystemParamManager.SystemParam.BurnInTestParams.Frequency;
            PLCCount           = SystemParamManager.SystemParam.BurnInTestParams.PLCCount;

            MeasurementInfos = new ObservableCollection <BurnInTestInfo>();

            UpdateHardware();

            IsAdmin = false;
        }
コード例 #4
0
        /// <summary>
        /// 创建InputOutputMeasurementViewModel新实例
        /// </summary>
        public InputOutputMeasurementViewModel()
        {
            //恢复配置参数
            SystemParamManager = SystemParamManager.GetInstance();

            VoltageTable    = new ObservableCollection <VoltageTable>(SystemParamManager.SystemParam.InputOutputMeasureParams.VoltageTable);
            OutputType      = SystemParamManager.SystemParam.InputOutputMeasureParams.OutputType;
            VoltageInterval = SystemParamManager.SystemParam.InputOutputMeasureParams.VoltageInterval;
            MinVoltage      = SystemParamManager.SystemParam.InputOutputMeasureParams.MinVoltage;
            MaxVoltage      = SystemParamManager.SystemParam.InputOutputMeasureParams.MaxVoltage;
            SampleTime      = SystemParamManager.SystemParam.InputOutputMeasureParams.SampleTime;

            //更新硬件状态
            UpdateHardware();
        }
コード例 #5
0
        public FrequencyMeasurementViewModel()
        {
            //恢复配置参数
            SystemParamManager = SystemParamManager.GetInstance();
            MinPressure        = SystemParamManager.SystemParam.FrequencyMeasureParams.MinPressure;
            MaxPressure        = SystemParamManager.SystemParam.FrequencyMeasureParams.MaxPressure;
            FrequencyErrLimit  = SystemParamManager.SystemParam.FrequencyMeasureParams.FrequencyErrLimit;

            OutputVoltage      = SystemParamManager.SystemParam.FrequencyMeasureParams.OutputVoltage;
            DutyRatio          = SystemParamManager.SystemParam.FrequencyMeasureParams.DutyRatio;
            VoltageFilterCount = SystemParamManager.SystemParam.FrequencyMeasureParams.VoltageFilterCount;

            if ((SystemParamManager.SystemParam.FrequencyMeasureParams.TestDatas == null) || (SystemParamManager.SystemParam.FrequencyMeasureParams.TestDatas.Count == 0))
            {
                SystemParamManager.SystemParam.FrequencyMeasureParams.TestDatas = new ObservableCollection <FrequencyTestData>
                {
                    new FrequencyTestData(5, 1000),
                    new FrequencyTestData(10, 500),
                    new FrequencyTestData(15, 500),
                    new FrequencyTestData(20, 500),
                    new FrequencyTestData(25, 500),
                    new FrequencyTestData(30, 500),
                    new FrequencyTestData(35, 300),
                    new FrequencyTestData(40, 300),
                    new FrequencyTestData(45, 300),
                    new FrequencyTestData(50, 300),
                    new FrequencyTestData(55, 200),
                    new FrequencyTestData(60, 200),
                    new FrequencyTestData(65, 200),
                    new FrequencyTestData(70, 200),
                    new FrequencyTestData(75, 200),
                    new FrequencyTestData(80, 200),
                    new FrequencyTestData(85, 100),
                    new FrequencyTestData(90, 100),
                    new FrequencyTestData(95, 100),
                    new FrequencyTestData(100, 100),
                };
            }
            TestDatas = SystemParamManager.SystemParam.FrequencyMeasureParams.TestDatas;

            MeasurementInfos = new ObservableCollection <FrequencyMeasurementInfo>();

            UpdateHardware();

            IsAdmin = false;
        }
コード例 #6
0
        /// <summary>
        /// 删除测试数据
        /// </summary>
        public void DeleteTableItem()
        {
            lock (lockObject)
            {
                if (IsMeasuring)
                {
                    return;
                }
            }

            if (TalbleIndex < 0)
            {
                return;
            }

            VoltageTable.RemoveAt(TalbleIndex);

            SystemParamManager.SystemParam.InputOutputMeasureParams.VoltageTable = new ObservableCollection <VoltageTable>(VoltageTable);
            SystemParamManager.SaveParams();
        }
コード例 #7
0
        /// <summary>
        /// 插入测试数据
        /// </summary>
        public void InsertTableItem()
        {
            lock (lockObject)
            {
                if (IsMeasuring)
                {
                    return;
                }
            }

            if (TalbleIndex < 0)
            {
                return;
            }

            VoltageTable.Insert(TalbleIndex, new AnalogSignalAnalysisWpf.VoltageTable());

            SystemParamManager.SystemParam.InputOutputMeasureParams.VoltageTable = new ObservableCollection <VoltageTable>(VoltageTable);
            SystemParamManager.SaveParams();
        }
コード例 #8
0
        /// <summary>
        /// 创建ThroughputMeasurementViewModel新实例
        /// </summary>
        public ThroughputMeasurementViewModel()
        {
            //恢复配置参数
            SystemParamManager = SystemParamManager.GetInstance();
            MeasureType        = SystemParamManager.SystemParam.ThroughputMeasureParams.MeasureType;

            PressureK           = SystemParamManager.SystemParam.ThroughputMeasureParams.PressureK;
            MinVoltageThreshold = SystemParamManager.SystemParam.ThroughputMeasureParams.MinVoltageThreshold;
            MaxVoltageThreshold = SystemParamManager.SystemParam.ThroughputMeasureParams.MaxVoltageThreshold;

            DeadZone      = SystemParamManager.SystemParam.ThroughputMeasureParams.DeadZone;
            CriticalValue = SystemParamManager.SystemParam.ThroughputMeasureParams.CriticalValue;

            OutputVoltage = SystemParamManager.SystemParam.ThroughputMeasureParams.OutputVoltage;
            OutputDelay   = SystemParamManager.SystemParam.ThroughputMeasureParams.OutputDelay;
            SampleTime    = SystemParamManager.SystemParam.ThroughputMeasureParams.SampleTime;

            VoltageFilterCount       = SystemParamManager.SystemParam.ThroughputMeasureParams.VoltageFilterCount;
            DerivativeK              = SystemParamManager.SystemParam.ThroughputMeasureParams.DerivativeK;
            IsEnableDerivativeFilter = SystemParamManager.SystemParam.ThroughputMeasureParams.IsEnableDerivativeFilter;
            DerivativeFilterCount    = SystemParamManager.SystemParam.ThroughputMeasureParams.DerivativeFilterCount;
        }
コード例 #9
0
        /// <summary>
        /// 启动
        /// </summary>
        public void Start()
        {
            lock (lockObject)
            {
                if (IsMeasuring)
                {
                    return;
                }
            }

            if ((TestDatas == null) || (TestDatas.Count == 0))
            {
                RunningStatus = "运行数据无效";
                return;
            }

            if (!IsHardwareValid)
            {
                RunningStatus = "硬件无效";
                return;
            }

            RunningStatus = "运行中";

            SystemParamManager.SystemParam.FrequencyMeasureParams.TestDatas = TestDatas;
            SystemParamManager.SaveParams();

            //复位示波器设置
            Scope.Disconnect();
            Scope.Connect();
            Scope.CHAScale      = SystemParamManager.SystemParam.GlobalParam.Scale;
            Scope.SampleRate    = SystemParamManager.SystemParam.GlobalParam.SampleRate;
            Scope.CHAVoltageDIV = SystemParamManager.SystemParam.GlobalParam.VoltageDIV;

            PLC.PWMSwitch  = true;
            PLC.FlowSwitch = false;
            Thread.Sleep(SystemParamManager.SystemParam.GlobalParam.PowerCommonDelay);
            MeasurementInfos = new ObservableCollection <FrequencyMeasurementInfo>();

            OnMeasurementStarted();

            measureThread = new Thread(() =>
            {
                lock (lockObject)
                {
                    IsMeasuring = true;
                }

                MaxFrequency      = -1;
                int lastFrequency = -1;

                //设置频率
                PWM.Frequency = 0;
                PWM.DutyRatio = DutyRatio;

                //使能Power输出
                Power.Voltage        = OutputVoltage;
                Power.IsEnableOutput = true;

                foreach (var item in TestDatas)
                {
                    //设置PWM频率
                    PWM.Frequency = item.Frequency;
                    Thread.Sleep(SystemParamManager.SystemParam.GlobalParam.PowerCommonDelay);

                    //设置Scope采集时长
                    Scope.SampleTime = item.SampleTime;

                    //读取Scope数据
                    double[] originalData;
                    Scope.ReadDataBlock(0, out originalData);

                    if ((originalData == null) || (originalData.Length == 0))
                    {
                        //测试失败
                        OnMessageRaised(MessageLevel.Warning, $"F: ReadDataBlock Fail");
                        OnMeasurementCompleted(new FrequencyMeasurementCompletedEventArgs(false));
                        return;
                    }

                    //数据滤波
                    double[] filterData;
                    Analysis.MeanFilter(originalData, VoltageFilterCount, out filterData);

                    //电压转气压
                    double[] pressureData = filterData.ToList().ConvertAll(x => VoltageToPressure(x)).ToArray();

                    //阈值查找边沿
                    List <int> edgeIndexs;
                    DigitEdgeType digitEdgeType;
                    Analysis.FindEdgeByThreshold(pressureData, MinPressure, MaxPressure, out edgeIndexs, out digitEdgeType);

                    //显示波形
                    ShowEdgeData(pressureData, edgeIndexs, digitEdgeType);

                    //分析脉冲数据
                    List <double> pulseFrequencies;
                    List <double> dutyRatios;
                    Analysis.AnalysePulseData(edgeIndexs, digitEdgeType, (int)Scope.SampleRate, out pulseFrequencies, out dutyRatios);

                    //显示分析结果
                    CurrentInputFrequency = item.Frequency;
                    CurrentSampleTime     = item.SampleTime;

                    //显示测量信息
                    ShowMeasureInfos(CurrentInputFrequency, CurrentSampleTime, pulseFrequencies, ScopeCHACollection, ScopeCHAEdgeCollection);

                    if (pulseFrequencies.Count > 0)
                    {
                        //检测脉冲是否异常
                        double minFrequency = item.Frequency * (1 - FrequencyErrLimit);
                        double maxFrequency = item.Frequency * (1 + FrequencyErrLimit);
                        if (!Analysis.CheckFrequency(pulseFrequencies, minFrequency, maxFrequency, 0))
                        {
                            if (lastFrequency != -1)
                            {
                                //测试完成
                                OnMessageRaised(MessageLevel.Message, $"F: Success, max = {lastFrequency}");
                                OnMeasurementCompleted(new FrequencyMeasurementCompletedEventArgs(true, lastFrequency));
                            }
                            else
                            {
                                //测试失败
                                OnMessageRaised(MessageLevel.Warning, $"F: Fail");
                                OnMeasurementCompleted(new FrequencyMeasurementCompletedEventArgs(false));
                            }
                            return;
                        }
                        else
                        {
                            lastFrequency = item.Frequency;
                        }
                    }
                    else
                    {
                        if (lastFrequency != -1)
                        {
                            //测试完成
                            OnMessageRaised(MessageLevel.Message, $"F: Success, max = {lastFrequency}");
                            OnMeasurementCompleted(new FrequencyMeasurementCompletedEventArgs(true, lastFrequency));
                        }
                        else
                        {
                            //测试失败
                            OnMessageRaised(MessageLevel.Warning, $"F: Fail");
                            OnMeasurementCompleted(new FrequencyMeasurementCompletedEventArgs(false));
                        }
                        return;
                    }
                }

                if (lastFrequency != -1)
                {
                    //测试完成
                    OnMessageRaised(MessageLevel.Message, $"F: Success, max = {lastFrequency}");
                    OnMeasurementCompleted(new FrequencyMeasurementCompletedEventArgs(true, lastFrequency));
                }
                else
                {
                    //测试失败
                    OnMessageRaised(MessageLevel.Warning, $"F: Fail");
                    OnMeasurementCompleted(new FrequencyMeasurementCompletedEventArgs(false));
                }
            });

            measureThread.Start();
        }
コード例 #10
0
 /// <summary>
 /// 保存测试数据
 /// </summary>
 public void SaveTestDatas()
 {
     SystemParamManager.SystemParam.FrequencyMeasureParams.TestDatas = TestDatas;
     SystemParamManager.SaveParams();
 }
コード例 #11
0
 /// <summary>
 /// 保存测试数据
 /// </summary>
 public void SaveTable()
 {
     SystemParamManager.SystemParam.InputOutputMeasureParams.VoltageTable = new ObservableCollection <VoltageTable>(VoltageTable);
     SystemParamManager.SaveParams();
 }