请看我下面的代码,这是应用程序的一部分,其目的是根据通过串口接收的数据绘制在线图表。这部分代码负责接收和绘制:
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
rx_str = serialPort1.ReadTo("\r\n");
//rx_str = serialPort1.ReadExisting();
serialPort1.DiscardInBuffer();
this.Invoke(new EventHandler(rx_parse));
}
private void rx_parse(object sender, EventArgs e)
{
Match mch = Regex.Match(rx_str, ex_reg);
data.Add(Convert.ToInt16(mch.Value.ToString());
chart1.Series["Series1"].Points.AddY(Convert.ToDouble(data[tab_size]));
tab_size++;
}之前创建的已使用变量:
rx_str -字符串
数据-双打数据列表
tab_size -整型
ex_reg -使用的正则表达式模式
在这种情况下,我在同步从缓冲区接收的数据时遇到了真正的问题。为了测试它,我通过微控制器中的ADC测量了一些东西,并将其作为字符串发送到PC。
让我们举这样的例子-接收到的数据可能如下所示: 373\r\n
我使用正则表达式从接收到的字符串中只获取数字。通常,数据从缓冲区获取字符串rx_str,例如: 73\r \n3,3,\n37,\n3等,而不是每个周期中的373\r\n。因此,我处理顺序错误的数据,这会导致图表中出现错误的结果。
请给我一个建议,当我从缓冲区获得数据时,我如何同步它,以便每次接收相同顺序的符号。我的意思是获得相同形式的接收数据。我补充说,我已经通过终端检查过了,一切正常,每次都是相同的数据格式。对于这个例子- 373\r\n
发布于 2017-05-13 04:32:17
问题是您丢弃了输入缓冲区中的数据。输入缓冲区可以包含373\r\n37您读取到的\r\n,缓冲区中只剩下37。然后使用下面的代码行丢弃in buffer
serialPort1.DiscardInBuffer();这将删除37,下一次阅读时将得到3\r\n
去掉这一行,它应该是可预测的。
https://stackoverflow.com/questions/43945260
复制相似问题