Пример #1
0
        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();
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        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();
        }