首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C#通过串口同步接收到的数据

C#通过串口同步接收到的数据
EN

Stack Overflow用户
提问于 2017-05-13 03:35:20
回答 2查看 59关注 0票数 1

请看我下面的代码,这是应用程序的一部分,其目的是根据通过串口接收的数据绘制在线图表。这部分代码负责接收和绘制:

代码语言:javascript
运行
复制
   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

EN

Stack Overflow用户

发布于 2017-05-13 04:32:17

问题是您丢弃了输入缓冲区中的数据。输入缓冲区可以包含373\r\n37您读取到的\r\n,缓冲区中只剩下37。然后使用下面的代码行丢弃in buffer

代码语言:javascript
运行
复制
serialPort1.DiscardInBuffer();

这将删除37,下一次阅读时将得到3\r\n

去掉这一行,它应该是可预测的。

票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43945260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档