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.
