【问题标题】:C#, mssing some data from serial port?C#,从串口丢失一些数据?
【发布时间】:2015-11-07 16:21:43
【问题描述】:

我正在使用以下代码从串口接收数据,但我得到的数据有时会丢失 som 值,例如当我通过 Realterm 程序将 ascii“123456”发送到串口时,它应该总是给我:

buffer[0]:49
buffer[1]:50
buffer[2]:51
buffer[3]:52
buffer[4]:53
buffer[5]:54

但有时我得到:

buffer[0]:51
buffer[1]:52
buffer[2]:53
buffer[3]:54

或:

buffer[0]:50

即使我以非常慢的顺序发送数据也会发生这种情况?

    public Form1()
    {
        InitializeComponent();
        cmdClose.Enabled = false;
        foreach (String s in System.IO.Ports.SerialPort.GetPortNames())
        {
            txtPort.Items.Add(s);
        }
        txtPort.SelectedItem = "COM5";
        cmbbaudrate.SelectedItem = "115200";
        cmbparity.SelectedItem = "None";
        cmbdatabits.SelectedItem = "8";
        cmbstopbits.SelectedItem = "One";
    }

    public System.IO.Ports.SerialPort SP;
    public void serialport_connect(String port, int baudrate, Parity parity, int databits, StopBits stopbits)
    {
        DateTime dt = DateTime.Now;
        SP = new System.IO.Ports.SerialPort(port, baudrate, parity, databits, stopbits);

        try
        {
            SP.Open();
            SP.DataReceived += new SerialDataReceivedEventHandler(sport_DataReceived);
        }
        catch (Exception ex) { MessageBox.Show(ex.ToString(), "Error"); }
    }


    private void sport_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        TextBox.CheckForIllegalCrossThreadCalls = false;
        byte[] buffer = new byte[SP.BytesToRead];
        SP.Read(buffer, 0, buffer.Length);

        for (int i = 0; i < buffer.Length; i++)
        {
            Console.WriteLine("buffer[" +i +"]:" +buffer[i]);
            txtReceive.AppendText("buffer[" + i + "]:" + buffer[i] +"\n");
        }

    }

【问题讨论】:

    标签: c# serial-port buffer


    【解决方案1】:

    您可能想看看 ReadExisting 方法。

    "SerialPort 类缓冲数据,但流对象包含在 SerialPort.BaseStream 属性没有。因此,串行端口 对象和流对象的字节数可能不同 可供阅读。当字节缓冲到 SerialPort 对象,BytesToRead 属性在其值中包含这些字节; 但是,包含的流可能无法访问这些字节 在 BaseStream 属性中"

    https://msdn.microsoft.com/en-us/library/system.io.ports.serialport.readexisting(v=vs.110).aspx

    希望对你有所帮助! :)

    【讨论】:

      猜你喜欢
      • 2011-06-01
      • 2018-01-06
      • 1970-01-01
      • 1970-01-01
      • 2017-07-17
      • 2018-08-06
      • 2021-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多