Hej,
Z zewnętrznego urządzenia wysyłam na komputer dane, które w terminalu Putty wyglądają następująco:
Są to ramki o stałej długości, zakończone znakiem "\r\n". Parametry transmisji: 9600, 8 bitów danych, 1 bit stopu, brak parzystości.
Chciałbym odebrać taką ramkę w aplikacji napisanej w języku C#. Korzystam z VS Community 2017.
Robię to tak:
System.IO.Ports.SerialPort port;
delegate void Delegate1(byte[] buffer);
Delegate1 my_del1;
....
public tutorialCOM()
{
InitializeComponent();
port = new SerialPort();
port.ReadTimeout = 5000;
port.WriteTimeout = 5000;
//port.ReadBufferSize = 10000;
port.Handshake = Handshake.None;
port.ReceivedBytesThreshold = 1;
port.DataReceived += new SerialDataReceivedEventHandler(DataRecievedHandler);
my_del1 = new Delegate1(DisplayData);
}
private void DataRecievedHandler(object sender, SerialDataReceivedEventArgs e)
{
int count = port.BytesToRead;
if (count == 0) return;
byte[] buffer = new byte[count];
int data = port.Read(buffer, 0, count);
if (data == 0) return;
textBox1.Invoke(my_del1, new object[] { buffer });
}
private void DisplayData(byte[] buffer)
{
textBox1.AppendText(System.Text.Encoding.UTF8.GetString(buffer));
}
Niestety, tak wygląda to co otrzymuję w textBox1:
Jak widać, gubione jest kilka pierwszych bajtów. Nie mam pojęcia co może być źle. Dodam, że próbowałem metod takich jak ReadExisting, ReadLine i podobnych, jednakże zawsze z podobnym skutkiem.
Jeżeli ktoś jest wstanie pomóc, byłbym wdzięczny.
Pozdrawiam