/// <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(); }
/// <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(); }
/// <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(); }
/// <summary> /// 保存测试数据 /// </summary> public void SaveTestDatas() { SystemParamManager.SystemParam.FrequencyMeasureParams.TestDatas = TestDatas; SystemParamManager.SaveParams(); }
/// <summary> /// 保存测试数据 /// </summary> public void SaveTable() { SystemParamManager.SystemParam.InputOutputMeasureParams.VoltageTable = new ObservableCollection <VoltageTable>(VoltageTable); SystemParamManager.SaveParams(); }