Skocz do zawartości

Aplikacja C# - komunikacja PC z robotem


simba92

Pomocna odpowiedź

Witam!

Odgrzebie trochę stary temat tzn. port szeregowy - interfejs usart i zapytam forumowiczów, a najlepiej autora  GAndaLF w jaki sposób dodać funkcjonalność w terminalu, która będzie wypisywać odebrane ciągi znaków w nowych liniach oraz wpisze wszystkie znaki do zadeklarowanej tablicy znaków.

Kod odpowiedzialny za wypisywanie znaków do kontrolki typu richTextBox jest następujący 

delegate void Delegat1(); //deklaracja delegata
Delegat1 moj_del1;
moj_del1 = new Delegat1(WpiszOdebrane); //inicjalizacja delegata z funkcją : WpiszOdebrane() 

private void WpiszOdebrane() //funkcja wypisujaca bajty danych z portu COM do richTextBox' a z wywołaniem podfunkcji : DodajKolorowy()
{ 
	DodajKolorowy(rtbTerminal, port.ReadByte().ToString("X") + " ", System.Drawing.Color.Blue); 
}

private void DataRecievedHandler(object sender, SerialDataReceivedEventArgs e) //najważniejsza funkcja, event na odbierane dane z portu COM z delegatem
{ 
            rtbTerminal.Invoke(moj_del1); 
}

private void DodajKolorowy(System.Windows.Forms.RichTextBox RichTextBox, string Text, System.Drawing.Color Color) // wypisywanie do richTexBox'a 
{ 
	var StartIndex = RichTextBox.TextLength; 
    RichTextBox.AppendText(Text); 
    var EndIndex = RichTextBox.TextLength; 
    RichTextBox.Select(StartIndex, EndIndex - StartIndex); 
    RichTextBox.SelectionColor = Color; 
 }

Jestem laikiem jeśli chodzi o programowanie w C#,  przeszukuje dokumentacje microsoftu i coś tam próbuje zrobić sam ale różnie wychodzi : gubią się np. znaki z wysyłanego ciągu znaków, gdy próbowałem zmieniać kod wypisywaniem do nowej linii kolejnych ramek tekst "test[spacja]\r\n" . Na poniższym obrazku rezultat działania programu z forum bez modyfikacji i prawidłową ramką "test \r\n" :

 

Terminal z widoczną ramką znaków wysyłanych z robota : "test \r\n" = 74 65 73 74 20 D A w HEX

W internecie znalazłem linijkę  kodu przesuwającą wpisywaną ramkę do nowej linii w richTextBox' ie

myRichTextBox.Text += Environment.NewLine;  //gdzie myRichTextBox to mój obiekt typu richTextBox

Proszę o pomoc, w jaki sposób : 

1) wypisywać ramki danych w kolejnych nowych liniach w richTextBox' ie

2) wpisać odebrane bajty z portu COM do tablicy np. charów ze znajomością długości ramki tj. stringa zakończonego \r\n

Z góry dziękuje za wszelką pomoc i uwagi 🙂

 

 

 

 

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.