// Update real time sensor data grid view private void UpdateDataGridView(string sensorName, SensorDataVO data) { if (gridViewList.ContainsKey(sensorName)) { int index = -1; for (int i = 0; i < sensorNames.Length; ++i) { if (sensorNames[i].Equals(sensorName)) { index = i; break; } } string extraName = dataReaders[index].ToString(); Action updateAction = () => { gridViewList[sensorName].Rows.Insert(0, new string[] { extraName, data.CurTime.ToString("MM월 dd일 HH:mm:ss"), data.Data.ToString() }); if (gridViewList[sensorName].Rows.Count > 30) { int gridIndex = gridViewList[sensorName].Rows.Count - 1; gridViewList[sensorName].Rows.Remove(gridViewList[sensorName].Rows[gridIndex]); } }; gridViewList[sensorName].BeginInvoke(updateAction); } }
// Read current sensor data private void timer1_Tick(object sender, EventArgs e) { var curData = new List <SensorData>(); // Update chart try { chart1.Series.SuspendUpdates(); foreach (string sensor in checkeredList) { if (chart1.Series.IndexOf(sensor) != -1) { int index = -1; for (int i = 0; i < sensorNames.Length; ++i) { if (sensorNames[i].Equals(sensor)) { index = i; break; } } SensorDataVO readData = dataReaders[index].ReadSensorData(); if (readData.Type == SensorType.None) { continue; } SensorData addData = new SensorData() { Data = readData.Data, Time = readData.CurTime, SensorConfigId = configs[index].Id }; curData.Add(addData); AddDataToChart(sensor, readData); } } if (chart1.Series[0] != null && chart1.Series[0].Points.Count > 0) { chart1.ChartAreas[0].AxisX.Minimum = chart1.Series[0].Points[0].XValue; chart1.ChartAreas[0].AxisX.Maximum = DateTime.FromOADate(chart1.Series[0].Points[0].XValue).AddSeconds(12).ToOADate(); } chart1.Series.ResumeUpdates(); } catch (Exception) { return; } // DB transaction try { dbManager.dc.SensorDatas.InsertAllOnSubmit(curData); dbManager.dc.SubmitChanges(); } catch (Exception) { } }
// Add real time data to chart public void AddDataToChart(string sensorName, SensorDataVO curData) { lock (this.chart1){ DateTime timeStamp = DateTime.Now; if (chart1.Series.IndexOf(sensorName) != -1) { Series series = chart1.Series[sensorName]; AddDataToSeries(series, timeStamp, curData.CurTime, curData.Data); UpdateDataGridView(sensorName, curData); } } }
public override SensorDataVO ReadSensorData() { lock (this.dataQueue) { if (this.dataQueue.Count < 1) { return(new SensorDataVO(0, DateTime.Now, SensorType.None)); } ExtractData data = this.dataQueue.Dequeue(); SensorDataVO vo = new SensorDataVO( data.Data, data.Time, SensorType.Omap); return(vo); } }