Я использую следующий код для получения данных из последовательного порта, но данные, которые я получил некоторое время, пропускают значения som, например, когда я отправляю ascii «123456» программой Realterm на последовательный порт, он должен всегда давать мне:C#, mssing некоторые данные из последовательного порта?
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");
}
}