Asynchroniczny Odczyt z SerialPort

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.

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

w zdarzeniu

Kopiuj
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

Kopiuj
string InputData = String.Empty; 

oraz zamienię

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

na

Kopiuj
 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.

Lena(R)
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 4 lata
  • Postów:98
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.