Asynchroniczny Odczyt z SerialPort

0

Witam

Na com pojawia mi się 20 bajtów co jakiś czas. Każdy bajt zawiera ciąg znaków kończocy się \r\n
Potrzebuję opracować odczyt do bufora.
Zacząłem kodować ale to moja pierwsza przygoda z serialPort.

 
 Byte[] bTab = new Byte[20];
 delegate void SetTextCallback(string text);

w zdarzeniu

port_DataReceived_1 
     private void port_DataReceived_1(object sender, SerialDataReceivedEventArgs e)
        {
           port.Read(bTab, 0, (int)bTab.Length);
           SetText(System.Text.Encoding.Unicode.GetString(bTab));
        }
        private void SetText(string text)
        {
            {
                SetTextCallback d = new SetTextCallback(SetText);
                this.Invoke(d, new object[] { text });
            }
            else { this.txtIn.Text += text; }
        }

jeśli tak to realizuję w kontrolce pojawiają się śmieci - na pewno nie to co zwraca com.
bo jeśli zdefiniuję sobie

string InputData = String.Empty; 

oraz zamienię

port.Read(bTab, 0, (int)bTab.Length);
SetText(System.Text.Encoding.Unicode.GetString(bTab));

na

 InputData = port.ReadLine();
SetText(InputData)

to w kontrolce pojawiają się prawidłowe odczyty - jednak nie w paczkach po 20 a przypadkowo.

Reasumując - potrzebuję aby apl. czekała aż bufor wypełni się danymi i dopiero wtedy go przekazywała dalej do parsowania.

0

Nie jestem ekspertem jeśli chodzi o komunikację ze sprzętem, ale czy w bajtach nie lecą znaki ASCII? A metoda System.Text.Encoding.Unicode.GetString(bTab) próbuje z bajtów konwertować na Unicode, który "zlepia" bajty nie tak jak trzeba i dlatego wydaje Ci się, że są to śmieci? Nie mam pewności, ale jakoś to mi nie leży.

1 użytkowników online, w tym zalogowanych: 0, gości: 1