public void DrawCurve() { dayCurveGroup.ClearChartObject(); DateTime time = dateEdit1.DateTime.Date; this.dayCurveGroup.XAxes.SetOrgTime(ChartGraph.DateTime2ChartTime(time), 0); if (selectDev == null) { return; } IList <HHDeviceProperty> listProp = selectDev.DevGroup.AnalogProperties; int colorIndex = -1; DateTime drawTime = DateTime.MinValue; for (int i = 0; i < listProp.Count; i++) { if (listProp[i].Selected == false) { continue; } colorIndex++; HHDeviceProperty devProp = selectDev.GetProperty(listProp[i]); int analogIndex = devProp.Analog.Index; LineArea la = new LineArea(chart, listProp[i].Name, false); la.YAxes.YAxesMin = 0; la.YAxes.YAxesMax = 200; LineCurve lc = new LineCurve(chart, listProp[i].Name, 0); lc.LineColor = colorList[colorIndex % colorList.Length]; la.AddLine(lc); lc.YAxes.Mode = YAxesMode.Manual; lc.YAxes.YAxesMin = devProp.Analog.ADMin; lc.YAxes.YAxesMax = devProp.Analog.ADMax; lc.YAxes.UnitString = listProp[i].Unit; if (devProp.Analog.ADMax < 1) { lc.YAxes.Precision = 2; } else if (devProp.Analog.ADMax < 10) { lc.YAxes.Precision = 1; } List <AnalogRecordGroup> r = DatabaseModule.GetInstance().QueryAnalogHistory(devProp.Analog.Group.Type, analogIndex, time, time.AddDays(1)); r.Sort(); //不考虑回溯 if (r != null && r.Count > 0) { for (int m = 0; m < r.Count; m++) { List <AnalogRecord> records = r[m].Records; for (int j = 0; j < records.Count; j++) { if (drawTime == DateTime.MinValue) { drawTime = records[j].Time; } else if (drawTime > records[j].Time) { drawTime = records[j].Time; } long tm = ChartGraph.DateTime2ChartTime(records[j].Time); lc.AddPoint(new LinePoint(tm, records[j].Value)); } } } dayCurveGroup.AddChartObject(la); } if (drawTime == DateTime.MinValue) { drawTime = time; } this.dayCurveGroup.XAxes.SetOrgTime(ChartGraph.DateTime2ChartTime(drawTime), 0); chart.Draw(); }
private void ProcADSample(object obj) { int channel = (int)obj; ADBlock block = new ADBlock(8000, 4000); this.device.AddADBlock(channel, block); try { while (true) { short[] adData = block.GetAdData(-1); if (adData == null) { continue; } if (listEnable[channel] == false) { continue; } int adMin = int.MaxValue; int adMax = int.MinValue; for (int i = 0; i < adData.Length; i++) { if (adData[i] > adMax) { adMax = adData[i]; } if (adData[i] < adMin) { adMin = adData[i]; } } float adMaxf = adMax + (adMax - adMin) * 0.2f; float adMinf = adMin - (adMax - adMin) * 0.2f; this.Invoke((EventHandler) delegate { ChartGraph chart = listChart[channel]; UltraChart.CurveGroup grp = chart.GroupList[0]; grp.ClearChartObject(); LineArea area = new LineArea(chart, "AD曲线", true); area.IsShowFoldFlag = false; area.IsFold = false; area.YAxes.Mode = YAxesMode.Manual; area.YAxes.YAxesMin = adMinf; area.YAxes.YAxesMax = adMaxf; area.YAxes.Precision = 3; area.YAxes.UnitString = ""; LineCurve lcAmpl = new LineCurve(chart, "原始波形", 0); lcAmpl.LineColor = Color.Lime; area.AddLine(lcAmpl); DateTime timeNow = DateTime.Now; long startTm = ChartGraph.DateTime2ChartTime(timeNow); for (int j = 0; j < adData.Length; j++) { long tm = startTm + j * 1000000L / 8000; // var tm = timeQuery.AddMilliseconds(j / 8.0); lcAmpl.AddPoint(new LinePoint(tm, adData[j])); } grp.AddChartObject(area); grp.XAxes.SetOrgTime(ChartGraph.DateTime2ChartTime(timeNow), 0); chart.AutoSetXScale(); chart.Draw(); }); } } catch (Exception ex) { } finally { this.device.RemoveADBlock(channel, block); } }
private void QueryData() { if (selChannel == null) { return; } int selIndex = comboBoxEdit1.SelectedIndex; if (selIndex < 0) { return; } DateTime timeSel = listTimes[selIndex]; timeQuery = timeSel.AddSeconds((timeEdit1.Time - timeEdit1.Time.Date).TotalSeconds); if (timeQuery < selChannel.File.BeginTime) { MessageBox.Show("查询时间小于记录开始时间!", "查询", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } if (timeQuery > selChannel.File.EndTime) { MessageBox.Show("查询时间大于记录开始时间!", "查询", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } int sec = (int)((timeQuery - selChannel.File.BeginTime).TotalSeconds); trackBarControl1.ValueChanged -= new EventHandler(trackBarControl1_ValueChanged); trackBarControl1.Value = sec; trackBarControl1.ValueChanged += new EventHandler(trackBarControl1_ValueChanged); float[] data = selChannel.File.GetData(selChannel.Channel - 1, timeQuery, secNum); rawCurveGroup.ClearChartObject(); freqCurveGroup.ClearChartObject(); this.rawCurveGroup.XAxes.SetOrgTime(ChartGraph.DateTime2ChartTime(timeQuery), 0); this.freqCurveGroup.XAxes.SetOrgTime(ChartGraph.DateTime2ChartTime(timeQuery), 0); //幅度谱 LineArea laAmpl = new LineArea(chart, "原始波形", false); laAmpl.YAxes.YAxesMin = 0; laAmpl.YAxes.YAxesMax = 200; LineCurve lcAmpl = new LineCurve(chart, "原始波形", 0); lcAmpl.LineColor = Color.Lime; laAmpl.AddLine(lcAmpl); //lc.YAxes.Mode = YAxesMode.Manual; lcAmpl.YAxes.YAxesMin = 0; lcAmpl.YAxes.YAxesMax = 100; if (data != null) { long startTm = ChartGraph.DateTime2ChartTime(timeQuery); for (int j = 0; j < data.Length; j++) { long tm = startTm + j * 1000000L / 8000; // var tm = timeQuery.AddMilliseconds(j / 8.0); lcAmpl.AddPoint(new LinePoint(tm, data[j])); } } //频率谱 LineArea laFreq = new LineArea(chart1, "频率谱", false); laFreq.YAxes.YAxesMin = 0; laFreq.YAxes.YAxesMax = 200; laFreq.XFreqScale = 8000f / (secNum * 1000000); LineCurve lcFreq = new LineCurve(chart1, "频率谱", 0); lcFreq.LineColor = Color.Red; laFreq.AddLine(lcFreq); lcFreq.YAxes.Mode = YAxesMode.Manual; lcFreq.YAxes.YAxesMin = -1; lcFreq.YAxes.YAxesMax = 15; if (data != null) { if (fftPlan.FFTNum != secNum * 8000) { fftPlan.Dispose(); fftPlan = new FFTPlan(secNum * 8000); fftIn = new float[secNum * 16000]; fftOut = new float[secNum * 16000]; } for (int i = 0; i < data.Length; i++) { fftIn[i * 2] = data[i]; fftIn[i * 2 + 1] = 0; } fftPlan.FFTForward(fftIn, fftOut); long startTm = ChartGraph.DateTime2ChartTime(timeQuery); float maxAmpl = 0; for (int j = 0; j < data.Length / 2; j++) { long tm = startTm + j * 1000000L / 8000; // var tm = timeQuery.AddMilliseconds(j / 8.0); float amplVal = 0; if (j > 2) //不显示直流 { amplVal = (float)(Math.Sqrt(fftOut[2 * j] * fftOut[2 * j] + fftOut[2 * j + 1] * fftOut[2 * j + 1]) * 2 / (8000 * secNum)); } if (amplVal > maxAmpl) { maxAmpl = amplVal; } lcFreq.AddPoint(new LinePoint(tm, amplVal)); } lcFreq.YAxes.YAxesMax = maxAmpl * 1.2f; } rawCurveGroup.AddChartObject(laAmpl); freqCurveGroup.AddChartObject(laFreq); chart.Draw(); chart1.Draw(); }
private void DrawCurve() { HHDevice device = comboBoxEdit2.SelectedItem as HHDevice; HHDeviceProperty devProp = comboBoxEdit1.SelectedItem as HHDeviceProperty; DateTime timeSel = DateTime.Now; if (comboBoxEdit3.SelectedIndex >= 0) { timeSel = (DateTime)comboBoxEdit3.SelectedItem; } HHDeviceProperty devBindProp = device.GetProperty(devProp); List <DevCurve> curves = devBindProp.Curves; UltraChart.CurveGroup grp = chart.GroupList[0]; grp.ClearChartObject(); LineArea area = new LineArea(chart, "道岔曲线", true); area.IsShowFoldFlag = false; area.IsFold = false; area.YAxes.Mode = YAxesMode.Manual; area.YAxes.YAxesMin = curves[0].ADMin; area.YAxes.YAxesMax = curves[0].ADMax; area.YAxes.Precision = 3; area.YAxes.UnitString = ""; grp.AddChartObject(area); grp.XAxes.SetOrgTime(ChartGraph.DateTime2ChartTime(timeSel), 0); chart.AutoSetXScale(); List <StationCurve> listCurve = DataStorage.DatabaseModule.GetInstance().QueryCurveHistory(curves[0].Group.Type, curves[0].Index, timeSel); string[][] curveNames = new string[][] { new string[] { "曲线" }, new string[] { "曲线1", "曲线2" }, new string[] { "A相", "B相", "C相" }, }; for (int i = 0; i < curves.Count; i++) { LineCurve line = new LineCurve(chart, curveNames[curves.Count - 1][i], 0); line.LineColor = ColorList[i % ColorList.Length]; area.AddLine(line); if (listCurve != null && listCurve.Count > 0 && listCurve[i] != null) { for (int j = 0; j < listCurve[i].Points.Length; j++) { DateTime time = timeSel.AddMilliseconds(curves[i].TimeInterval * j); //40毫秒 LinePoint point = new LinePoint(); point.Value = listCurve[i].Points[j]; point.Time = ChartGraph.DateTime2ChartTime(time); line.AddPoint(point); } } } chart.AutoSetXScale(); chart.Draw(); }