[英]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.