Problemy z klasą SerialPort

Mam wiele problemów podczas próby uzyskania portu szeregowego, aby otrzymać prawidłowy komunikat. Ciągle obcina wiadomości. Oto mój kod i postaram się rozwinąć po kodzie.

public SerialComms(SerialPort sp)
{
   this.sp = sp;
   this.sp.Open();
   this.sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);

   do
   {
      Console.WriteLine("port open waiting message");
      Console.ReadKey();
   } while(!_terminate);

   this.sp.Close();
}

void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
   string dataReceived;
   StringComparer strComp = StringComparer.OrdinalIgnoreCase;
   SerialPort sp = (SerialPort)sender;
   int i = sp.BytesToRead;
   byte[] _byte = new byte[i];
   char[] _char = new char[i];
   sp.read(_byte, 0, i);
   dataReceived = Encoding.UTF8.GetString(_byte);
   //dataReceived = new string(_char);
   //dataReceived = sp.ReadExisting();

   if (strComp.Equals("00000000000000"), dataReceived))
      _terminate = true;

   Console.WriteLine(dataReceived);
}

Teraz mam projekt testowy, którego używamy do testowania naszych seryjnych komunikatów w produkcji za pomocą starszego oprogramowania - wiem, że działa dobrze. Do portu podłączyłem monitor szeregowy, a wiadomość przechodzi przez transmisje bez żadnych problemów. Kiedy wysyłam wiadomość, taką jak 012345678901234, po raz pierwszy przechodzi ona zwykle dobrze, a po stronie odbiorcy monitor pokazuje to, co nadchodzi; jednak po wydrukowaniu na konsoli zostaje obcięty po pierwszej wiadomości. Dołączam zrzuty ekranowe wiadomości przechodzącej przez monitor portu i wyjście konsoli (pojawiająca się buźka i serce to konwertowane przedrostki bajtów - dlaczego to serce i buźka nie mam pojęcia)

Ok, więc nie mogę opublikować obrazu, ponieważ nie mam wystarczającej reputacji, aby to zrobić. Napiszę, jak wygląda wyjście na konsoli poniżej (w tym przypadku z jakiegoś powodu obcięło również pierwszą wiadomość :()

Na monitorze portu szeregowego przesyłana wiadomość jest następująca (wysłałem ją trzy razy z kilkoma sekundami „opóźnienia” między wysłaniem każdej wiadomości):
02 31 32 33 34 35 36 37 38 39 30 31 32 33 34 03 .12345678901234.
02 31 32 33 34 35 36 37 38 39 30 31 32 33 34 03 .12345678901234.
02 31 32 33 34 35 36 37 38 39 30 31 32 33 34 03 .12345678901234.

Na konsoli otrzymałem następujące (znaki ☺ i ♥ to 02 i 03, są to komunikaty STX i ETX, które są standardowe dla naszych transmisji):
45123456
78901234 ♥

123
456
7890
123
4 ♥

123
456
7890
123
4 ♥

Ten problem doprowadza mnie do szału !!! Proszę pomóż! Dziedzictwo używa przestarzałego MSCommLib i przechodzimy do .Net 4

questionAnswers(2)

yourAnswerToTheQuestion