【发布时间】:2012-02-09 03:31:02
【问题描述】:
我有一个传感器,它通过串行端口向我提供力读数。我向串口输入一个命令,它每次都会给我 1 个读数。我使用计时器每隔一段时间发送一次命令。
private void daqTimerElapsed(object sender, ElapsedEventArgs e)
{
giveCommand("W");
timeCounter += timeBetweenSamples;
}
一旦命令被发送,串行端口的 dataReceived 事件就会触发,这就是强制读取以字符串形式出现的地方。我将字符串转换为双精度并将其放入双精度的 List 中。基本上我正在尝试设置值表,以便我可以在 ZedGraph 中执行实时绘图。每次新数据到达时,将其存储在数组列表中,然后更新图表。
//graphing section from DataReceived event
if (graphFlag == 1)
{
dataReading = Convert.ToDouble(data);
x.Add(timeCounter / 1000);
y.Add(dataReading);
//remake the graph each time a new X Y pair arrives
zedGraphControl1.GraphPane.CurveList.Clear();
spl1 = new PointPairList(x.ToArray(), y.ToArray());
GraphPane myPane = zedGraphControl1.GraphPane;
myCurve1 = myPane.AddCurve(curveTitle, spl1, Color.Orange, SymbolType.None);
zedGraphControl1.AxisChange();
zedGraphControl1.Invalidate();
zedGraphControl1.Invoke(new EventHandler(delegate { zedGraphControl1.Refresh(); }));
numSamples++; }
我得到了它的工作,除了每次阅读,有很多力读数,但我只想要每次阅读 1 个力读数。我的导出到文件方法显示了这一点(时间然后强制):
//export the data to a text file
private void exportToolStripMenuItem_Click(object sender, EventArgs e)
{
Stream myStream;
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.Title = "Save the test results to a text file";
saveFileDialog1.ShowDialog();
if ((myStream = saveFileDialog1.OpenFile()) != null)
{
StreamWriter st = new StreamWriter(myStream);
foreach(double xvalue in x)
{
foreach(double yvalue in y)
{
st.WriteLine(xvalue.ToString() + " " + yvalue.ToString());
}
}
myStream.Close();
}
}
0 -8.11182 0 -7.953495 0 -7.953495 0 -7.939525 0 -7.939525 0 -7.948838 0 -7.981434 0 -7.981434 0 -7.865019 0 -7.865019 0 -7.883646 0 -7.883646 0 -8.041971 0 -8.037314 0 -8.037314 0 -7.841736 0 -7.841736 0.1 -7.874332 0.1 -7.986091 0.1 -7.986091 0.1 -7.934868 0.1 -7.832423 0.1 -7.832423 0.1 -7.832423 0.1 -7.902272 0.1 -7.902272 0.1 -8.023344 0.1 -7.897616 0.1 -7.897616 0.1 -7.869676 0.1 -7.869676
任何人都可以帮助我在 1 次阅读中获得 1 次强制阅读吗?
【问题讨论】:
-
请不要在标题前加上“C# -”之类的前缀。这就是标签的用途。
-
@M.Babcock: 不错 - 及时让我编辑。