簡體   English   中英

C#,從串口發送一些數據?

[英]C#, mssing some data from serial port?

我使用以下代碼從串口接收數據,但我得到的數據有一段時間錯過了一些值,例如當我通過 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");
        }

    }

您可能想看看 ReadExisting 方法。

“SerialPort 類緩沖數據,但包含在 SerialPort.BaseStream 屬性中的流對象沒有。因此,SerialPort 對象和流對象可能在可讀取的字節數上有所不同。當字節緩沖到 SerialPort 時對象,BytesToRead 屬性在其值中包含這些字節;但是,BaseStream 屬性中包含的流可能無法訪問這些字節”

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

我希望它有點幫助! :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM