如何缓冲传入的串行端口值。 C#

时间:2017-03-22 18:33:48

标签: c# serial-port buffer

你好,有人能说出在串口上缓冲传入值的最佳方法是什么?因为我遇到的问题是,当写入textBox时,某些值会被破坏。我在下面的问题中已经问过这个问题:Why do I get partly strange values from serial port in C#有人告诉我这是因为我没有缓冲它们。当我将从串口获得的字符串写入文本文件时,我得到了这个:

      12.5 g   

      12.5
 g   


 12.5 g   

      12.
5 g   

      12.5 g   

      12.5 g   

      12.5 g   

      1
2.5 g   


    12.5 g   


12.5 g   

      12.5 g   

      12.5 g   


      12.5 g   


 12.5 g   

      12.5 g   


  12.5 g   

      12.5 g   

希望有人可以帮助我。

2 个答案:

答案 0 :(得分:1)

接近它的最佳方法是使用'g'标记字符串的结尾:

string leftOver = "";

// Read the data like you have

string str = leftOver + Encoding.UTF8.GetString(data);
int index = str.IndexOf('g');
if (index == -1)
{
    leftOver += str;
}
else
{
    leftOver = str.Substring(index + 1);
    str = str.Substring(0, index + 1);
}

答案 1 :(得分:1)

好的,我现在明白了!

我必须首先在文件中缓冲通过串口传输的值。 不知道为什么,但是单个值的形式是正确的,可以在没有问题的情况下读出。

private void SerialPortOnDataReceived(object sender, SerialDataReceivedEventArgs serialDataReceivedEventArgs)
{

    if (InvokeRequired)     //<-- Makes sure the function is invoked to work properly in the UI-Thread
        BeginInvoke(new Closure(() => { SerialPortOnDataReceived(sender, serialDataReceivedEventArgs); }));     //<-- Function invokes itself
    else
    {
        int dataLength = _serialPort.BytesToRead;                

        byte[] data = new byte[dataLength];
        int nbrDataRead = _serialPort.Read(data, 0, dataLength);
        if (nbrDataRead == 0)
            return;
        string str = Encoding.UTF8.GetString(data);


        //Buffer Values in a text file at first!
        File.AppendAllText("buffer1.txt", str);
        string strnew = File.ReadLines("buffer1.txt").Last();

        textBox5.Text = strnew;

我的下一个问题是如何将缓冲区文件保持在适当的大小。