public Chart GenerateChart(SensorChart chartData, string xAxisTitle, string yAxisTitle) { Chart c = new Chart(); c.AntiAliasing = AntiAliasingStyles.All; c.TextAntiAliasingQuality = TextAntiAliasingQuality.High; ChartArea ca = new ChartArea(); ca.BackColor = Color.FromArgb(248, 248, 248); ca.BackSecondaryColor = Color.FromArgb(255, 255, 255); ca.BackGradientStyle = GradientStyle.TopBottom; ca.AxisY.IsMarksNextToAxis = true; ca.AxisY.Title = yAxisTitle; ca.AxisY.LineColor = Color.FromArgb(157, 157, 157); ca.AxisY.LabelStyle.Enabled = true; ca.AxisY.MajorTickMark.Enabled = false; ca.AxisY.MajorGrid.LineColor = Color.FromArgb(234, 234, 234); ca.AxisY.Minimum = 0; ca.AxisY.Maximum = 1023; ca.AxisY.Interval = 100; ca.AxisX.IsMarksNextToAxis = true; ca.AxisX.Title = xAxisTitle; ca.AxisX.LineColor = Color.FromArgb(157, 157, 157); ca.AxisX.MajorTickMark.LineColor = Color.White; ca.AxisX.MajorGrid.LineColor = Color.FromArgb(234, 234, 234); ca.AxisX.Minimum = 1; ca.AxisX.Maximum = 2500; ca.AxisX.LabelStyle.Enabled = true; c.ChartAreas.Add(ca); GenerateSeries(c, chartData); return(c); }
public void GenerateSeries(Chart chart, SensorChart sensorChart) { if (sensorChart.FrontLeftSensor != null) { Series s = new Series() { ChartType = SeriesChartType.Line }; s.Font = new Font("Lucida Sans Unicode", 6f); s.Color = Color.FromArgb(215, 47, 6); s.BorderColor = Color.FromName(sensorChart.FrontLeftSensor.LineColor); //Color.FromArgb(159, 27, 13); s.BackSecondaryColor = Color.FromArgb(173, 32, 11); s.BackGradientStyle = GradientStyle.LeftRight; s.XValueType = ChartValueType.Int32; s.IsXValueIndexed = true; s.Points.DataBind(sensorChart.FrontLeftSensor.SensorData, sensorChart.FrontLeftSensor.XField, sensorChart.FrontLeftSensor.YField, ""); chart.Series.Add(s); } if (sensorChart.FrontRightSensor != null) { Series s = new Series() { ChartType = SeriesChartType.Line }; s.Font = new Font("Lucida Sans Unicode", 6f); s.Color = Color.FromName(sensorChart.FrontRightSensor.LineColor); s.BorderColor = Color.FromArgb(159, 27, 13); s.BackSecondaryColor = Color.FromArgb(173, 32, 11); s.BackGradientStyle = GradientStyle.LeftRight; s.XValueType = ChartValueType.Int32; s.IsXValueIndexed = true; s.Points.DataBind(sensorChart.FrontRightSensor.SensorData, sensorChart.FrontRightSensor.XField, sensorChart.FrontRightSensor.YField, ""); chart.Series.Add(s); } }
public ActionResult Index() { ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application."; //List<SensorLog> log = _sensorService.GetSensorLog(1); //List<SensorLog> log2 = _sensorService.GetSensorLog(2); List <SensorLog> log = new List <SensorLog>(); List <SensorLog> log2 = new List <SensorLog>(); string dataFile = Server.MapPath("~/Data/datalog.txt"); // Read the file and display it line by line. string line; System.IO.StreamReader file = new System.IO.StreamReader(dataFile); while ((line = file.ReadLine()) != null) { string[] row = line.Split(':'); int microSecond = int.Parse(row[0]); string[] values = row[1].Split(';'); int pot1 = int.Parse(values[0]); int pot2 = int.Parse(values[1]); int pot3 = int.Parse(values[2]); SensorLog logRecord = new SensorLog(); logRecord.SensorId = 1; logRecord.MicroSecond = microSecond; logRecord.Value = pot1; log.Add(logRecord); SensorLog logRecord2 = new SensorLog(); logRecord2.SensorId = 2; logRecord2.MicroSecond = microSecond; logRecord2.Value = pot2; log2.Add(logRecord2); } file.Close(); SensorChart chart = new SensorChart(); SensorSeries fl = new SensorSeries(); fl.SensorData = log; fl.XField = "MicroSecond"; fl.YField = "Value"; fl.LineColor = "Red"; chart.FrontLeftSensor = fl; SensorSeries fr = new SensorSeries(); fr.SensorData = log2; fr.XField = "MicroSecond"; fr.YField = "Value"; fr.LineColor = "Blue"; chart.FrontRightSensor = fr; ChartGenerator chartGenerator = new ChartGenerator(); string imagePath = Server.MapPath("~/images/charts/sensorLog.png"); chartGenerator.GenerateChart(imagePath, chart, "Milli Seconds", "Sensor Value"); return(View()); }
private void Controller_Sensor2ValueReceived(object sender, SensorValueEventArgs e) { DateTime time = DateTime.Now; Sensor2Data.AsyncInvoke(x => { x.Rows.Add(new object[] { time, e.Status, e.Before.Sensor1, e.Before.Sensor2, e.After == null ? 0f : e.After.Value.Sensor1, e.After == null ? 0f : e.After.Value.Sensor2, e.Delta == null ? 0f : e.Delta.Value.Sensor1, e.Delta == null ? 0f : e.Delta.Value.Sensor2 }); }); SensorChart.AsyncInvoke(x => { if (!x.IsDisposed) { x.Series["Sensor1Before"].Points.AddXY(time, e.Before.Sensor1); x.Series["Sensor1After"].Points.AddXY(time, e.After == null ? 0f : e.After.Value.Sensor1); x.Series["Sensor1MaxPlus"].Points.AddXY(time, 3.5f); x.Series["Sensor1MaxMinus"].Points.AddXY(time, -3.5f); x.Series["Sensor1MinPlus"].Points.AddXY(time, 0.75f); x.Series["Sensor1MinMinus"].Points.AddXY(time, -0.75f); x.Series["Sensor2Before"].Points.AddXY(time, e.Before.Sensor2); x.Series["Sensor2After"].Points.AddXY(time, e.After == null ? 0f : e.After.Value.Sensor2); x.Series["Sensor2MaxPlus"].Points.AddXY(time, 3.5f); x.Series["Sensor2MaxMinus"].Points.AddXY(time, -3.5f); x.Series["Sensor2MinPlus"].Points.AddXY(time, 0.75f); x.Series["Sensor2MinMinus"].Points.AddXY(time, -0.75f); x.Series["Sensor1Delta"].Points.AddXY(time, e.Delta == null ? 0f : e.Delta.Value.Sensor1); x.Series["Sensor2Delta"].Points.AddXY(time, e.Delta == null ? 0f : e.Delta.Value.Sensor2); } }); switch (e.Status) { case StatusCode.PASS: { Stats1.AsyncInvoke(x => { if (!x.IsDisposed) { if (x.Series["Passed"].Points.Count > 0) { x.Series["Passed"].Points[0].SetValueXY("Passed", x.Series["Passed"].Points[0].GetValueByName("Y") + 1); x.ResetAutoValues(); } else { x.Series["Passed"].Points.AddXY("Passed", 1); } } }); break; } case StatusCode.FAILED: { Stats1.AsyncInvoke(x => { if (!x.IsDisposed) { if (x.Series["Failed"].Points.Count > 0) { x.Series["Failed"].Points[0].SetValueXY("Failed", x.Series["Failed"].Points[0].GetValueByName("Y") + 1); x.ResetAutoValues(); } else { x.Series["Failed"].Points.AddXY("Failed", 1); } } }); break; } case StatusCode.FIRST_BENDED: { Stats2.AsyncInvoke(x => { if (!x.IsDisposed) { if (x.Series["FirstBended"].Points.Count > 0) { x.Series["FirstBended"].Points[0].SetValueXY("FirstBended", x.Series["FirstBended"].Points[0].GetValueByName("Y") + 1); x.ResetAutoValues(); } else { x.Series["FirstBended"].Points.AddXY("FirstBended", 1); } } }); break; } case StatusCode.SECOND_BENDED: { Stats2.AsyncInvoke(x => { if (!x.IsDisposed) { if (x.Series["SecondBended"].Points.Count > 0) { x.Series["SecondBended"].Points[0].SetValueXY("SecondBended", x.Series["SecondBended"].Points[0].GetValueByName("Y") + 1); x.ResetAutoValues(); } else { x.Series["SecondBended"].Points.AddXY("SecondBended", 1); } } }); break; } } }