Hallo liebes Forum, ich möchte Werte erfassen (es sind insgesamt 32 Byte), die jede Sekunde an den PC gesendet werden. Dazu schreibe ich gerade eine Windows Forms-Anwendung in C#. Mein Problem ist, dass eigentlich Zahlen dargestellt werden sollten, allerdings gibt mir die TextBox irgendwelche Zeichen aus (siehe Bild im Anhang). Ich weiß nicht genau woran es liegt. Erkennt jemand von euch einen Fehler in meinem Programm? Der Code in C# lautet: public Form1() { InitializeComponent(); } private void timer1_Tick(object sender, EventArgs e) { string A = serialPort1.ReadExisting(); if (A != "") { richTextBox1.AppendText(A); } } private void button1_Click(object sender, EventArgs e) { //Werte einlesen nach dem "Start" geklickt wurde try { serialPort1.PortName = comboBox1.Text; //ausgewählte Port soll geöffnet werden serialPort1.BaudRate = Convert.ToInt32(comboBox2.Text); //ausgewählte Baudrate serialPort1.Open(); if (serialPort1.IsOpen) { button1einlesen.Enabled = false; button2ausschalten.Enabled = true; } timer1.Start(); } catch { MessageBox.Show("COMPORT ist geschlossen"); } }
Wo kommen die Daten her? Wie sind die Daten kodiert? Stimmt die Baudrate und die anderen Parameter der UART-Einstellung beider Teilnehmer überein? Dabei dürfen die Baudraten nur wenige Prozent voneinander abweichen. Gruß Dietrich
Sendest du die Zahlen als ASCII Zeichen oder direkt als Zahl ? Gruß JackFrost
Eventuell fehlt auch nur die richtige Codierung. serialPort.BaudRate = 9600; // 115200; // Sonst Zeichenmurks serialPort.Encoding = Encoding.GetEncoding(28591); serialPort.DataBits = 8; serialPort.Parity = Parity.None;
Dietrich L. schrieb: > Wo kommen die Daten her? Wie sind die Daten kodiert? Daten kommen vom uC und werden über RS485 transferiert. > Stimmt die Baudrate und die anderen Parameter der UART-Einstellung beider Teilnehmer überein? Baudraten-Einstellung sollte passen Bastian Werner schrieb: > Sendest du die Zahlen als ASCII Zeichen oder direkt als Zahl ? Sie werden direkt als Zahl gesendet Felix Adam schrieb: > Eventuell fehlt auch nur die richtige Codierung Habe deinen Code hinzugefügt, aber leider bleibt mein Problem weiterhin vorhanden! Danke für eure bisherigen Antworten!
Wenn deine Zeichen direkt als Zahl gesendet werden, z. B. so: a = 17 b = 243 uartSend(a,b); dann musst du auf dem PC natürlich aus den Zeichen, die da ankommen, wieder Zahlen machen. Ich mache das so: // Bytearray für die Daten anlegen Byte[] data_received = new Byte[20]; // Daten lesen data_received_bytes = (Byte)serialPort.BytesToRead; serialPort.Read(data_received, 0, data_received_bytes); // String mit der konvertierten Zahl füllen (hier wird ein byte in einen //String gewandelt. string A = Convert.ToString((Byte)data_received[2]); Hier steht in A jetzt z. B. eine "123" statt "{". (Und ja, ich weiß, es gibt hier keine Fehlererkennung bezüglich der Datenlänge. Ist auch nur ein Beispiel.) Ach ja, lasse den Code von mir bei dir drin. Sonst wandelt das Programm manche Bytes einfach in andere um, weil da eine andere Codierung standardmßig drauf läuft.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.