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); } }
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(); }
public bool AddLine(LineCurve line) { this.lines.Add(line); line.LineArea = this; return true; }
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(); }