.NET串口 - 接收丢失的数据

时间:2016-01-03 17:30:39

标签: c# .net serial-port serial-communication

我正在使用serialport应用程序。而且我无法正确接收数据。我使用ReadExisting()来读取即将到来的数据。 serialport- receiving missing data

这是我的代码。请告知,接收数据的正确方法是什么,以及如果我想检查每条消息的长度和格式的有效性。

public void serialport_connect(String port, int baudrate, Parity parity, int databits, StopBits stopbits)
        {
            DateTime dt = DateTime.Now;
            String dtn = dt.ToShortTimeString();

            sport = new System.IO.Ports.SerialPort(port, baudrate, parity, databits, stopbits);

            try
            {
                sport.Open();
                status.AppendText("[" + dtn + "] " + "Connected\n");
                sport.DataReceived += new SerialDataReceivedEventHandler(sport_DataReceived);
            }
            catch (Exception ex) { MessageBox.Show(ex.ToString(), "Error"); }
        }

        private void sport_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            DateTime dt = DateTime.Now;
            String dtn = dt.ToShortTimeString();
            String comingData = sport.ReadExisting();

            if (comingData != String.Empty)
            {
                Dispatcher.Invoke(new Action(() =>
                {
                    current.AppendText("[" + dtn + "] " + "Received: " + sport.ReadExisting() + "\n");
                }));
            }

        }

谢谢。

1 个答案:

答案 0 :(得分:2)

您的事件循环比以9600波特发送单个字符所需的时间快得多。我建议将收到的字符附加到一个字符串,直到你收到一个终止字符,如" \ n"或者你收到你期望的字符数。

这是一个项目中的例子,我等到收到10个字符:

int datalen = serialPort1.BytesToRead;
label1.Text="Readexisting";
if (datalen >=10)
{
    string data = serialPort1.ReadExisting();
    label1.Text=data;
}