private void BTN_RECORD_Click(object sender, EventArgs e) { if (isRunning) { //Stop the Running and Save RdgEndTime = Convert.ToDouble(DB.GetTimeMs()) / 1000; SW.Stop(); lbl_status.Text = "Stopped..."; BTN_RECORD.Text = "Record"; isRunning = false; cmb_sampleHz.Enabled = true; SW.Reset(); //Ask User to Store the Data SaveFileDialog saveFileDialog1 = new SaveFileDialog(); saveFileDialog1.Filter = "csv files (*.csv)|*.csv"; saveFileDialog1.FilterIndex = 2; saveFileDialog1.RestoreDirectory = true; if (saveFileDialog1.ShowDialog() == DialogResult.OK) { Single sampleHz = Single.Parse(cmb_sampleHz.Text); Single sampleRt = 1 / sampleHz; bool result = DB.storeCSV(saveFileDialog1.FileName, Convert.ToSingle(RdgStartTime), Convert.ToSingle(RdgEndTime), sampleRt); if (!result) { MessageBox.Show("Error Writing Output. Data May be Corrupted"); } } } else { RdgStartTime = Convert.ToDouble(DB.GetTimeMs()) / 1000; SW.Start(); lbl_status.Text = "Running..."; BTN_RECORD.Text = "Stop and Save"; cmb_sampleHz.Enabled = false; isRunning = true; } }
/**Plotting Stuff************************************************************/ private void Update(Object stateInfo) { if (!(btn_PauseRun.Checked)) { if (this.IsDisposed) { return; } int Lock = DB.requestLock(); if (Lock >= 0) { for (int rw = 0; rw < dgvplots.Rows.Count; rw++) { DataGridViewCheckBoxCell visibleCell = (DataGridViewCheckBoxCell)dgvplots.Rows[rw].Cells[0]; DataGridViewComboBoxCell paramNameCell = (DataGridViewComboBoxCell)dgvplots.Rows[rw].Cells[1]; if (!(paramNameCell.Value == null) && (DB.Signals().Contains(paramNameCell.Value.ToString()))) { if ((bool)visibleCell.EditedFormattedValue) { //Find the series which goes with this rw. LineSeries Ser = null; foreach (LineSeries CSer in DataPlot.Series) { if (CSer.Tag.Equals(rw)) { Ser = CSer; break; } } //If Series is still void, its not being plotted to add a new series to plot if (Ser == null) { Ser = new LineSeries(); Ser.Title = paramNameCell.Value.ToString().Trim(); Ser.Tag = rw; AddChartSeries(Ser); //Ser = new Series(rw.ToString()); //Ser.ChartType = SeriesChartType.FastLine; //Ser.ChartArea = Chart.ChartAreas[0].Name; //Ser.BorderWidth = 2; //Ser.LegendText = paramNameCell.Value.ToString(); if (!(this.Plot.IsDisposed)) { if (this.Plot.InvokeRequired) { addSeriesDelegate d = new addSeriesDelegate(AddChartSeries); this.Invoke(d, new object[] { Ser }); } else { AddChartSeries(Ser); } } } else { if (!(Ser.Tag.Equals(rw))) { LineSeries Ser2 = new LineSeries(); Ser2.Title = paramNameCell.Value.ToString(); Ser2.Tag = rw; if (!(this.Plot.IsDisposed)) { if (this.Plot.InvokeRequired) { removeSeriesDelegate d_rem = new removeSeriesDelegate(RemovedChartSeries); this.Invoke(d_rem, new object[] { Ser }); addSeriesDelegate d_add = new addSeriesDelegate(AddChartSeries); this.Invoke(d_add, new object[] { Ser2 }); } else { RemovedChartSeries(Ser); AddChartSeries(Ser2); } } } } if (!(this.Plot.IsDisposed)) { if (this.Plot.InvokeRequired) { updateChartDelegate d = new updateChartDelegate(UpdateSeriesData); try { this.Invoke(d, new object[] { Ser, DB.Read(paramNameCell.Value.ToString(), Convert.ToSingle(DB.GetTimeMs() / 1000 - XAxisLength - 10), Convert.ToSingle(DB.GetTimeMs() / 1000)) }); } catch (Exception ex) { } } else { String SignalName = paramNameCell.Value.ToString(); UpdateSeriesData(Ser, DB.Read(SignalName, Convert.ToSingle(DB.GetTimeMs() / 1000 - XAxisLength - 10), Convert.ToSingle(DB.GetTimeMs() / 1000))); } } } else { //Find the series which goes with this rw. LineSeries Ser = null; foreach (LineSeries CSer in DataPlot.Series) { if (CSer.Tag.Equals(rw)) { Ser = CSer; break; } } if (!(Ser == null)) { if (!(this.Plot.IsDisposed)) { if (this.Plot.InvokeRequired) { removeSeriesDelegate d_rem = new removeSeriesDelegate(RemovedChartSeries); this.Invoke(d_rem, new object[] { Ser }); } else { RemovedChartSeries(Ser); } } } } } } } DB.returnLock(Lock); } }