Forum: PC-Programmierung C#: Daten über RS232 einlesen: Ascii Problem


von Alexander U. (alexander_u)


Angehängte Dateien:

Lesenswert?

Hallo,

Ich habe hier einen µC, PIC18F4550 (MPLAB+ CCS), über die serielle 
Schnittstelle an meinem PC angeschlossen. Dieser sendet alle paar 
Sekunden sechs Int8-Werte.
So etwa:
1
    
2
       fputc(a,PC);
3
       fputc(value1,PC);
4
       fputc(b,PC);
5
       fputc(value2,PC);
6
       fputc(c,PC);
7
       fputc(v_raw,PC);

Im Terminalprogramm wird dies auch passend angezeigt (siehe Screenshot).

Meine Konsolenapplikation in C# gibt mir allerdings nur die Asciizeichen 
aus (siehe Screenshot).

Hier ein Teil meines Codes:
1
p.ReceivedBytesThreshold = 6;
1
            static void p_DataReceived(object sender, SerialDataReceivedEventArgs e)
2
            {
3
4
                            a = Convert.ToString((sender as SerialPort).ReadExisting());
5
                            Console.WriteLine(a);
6
            }


Hat jemand eine Idee wie ich den String in einzelne Variablen aufteile 
und wieder in Integer-Werte konvertiere?
Um den String aufzuteilen hab ich bereits Split String probiert. 
Allerdings teilt er mir die sechs Asciizeichen vom String nicht exakt 
Zeichen für Zeichen auf.

danke,
mfg alex

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Alexander U. schrieb:
> Im Terminalprogramm wird dies auch passend angezeigt (siehe Screenshot).

Das ist kein Terminalprogramm, sondern ein Schnittstellentest- und 
Analyseprogramm, das bei Dir so konfiguriert ist, daß es jedes 
empfangene Byte als Dezimalwert ausgibt.

Dein Konsolenprogramm gibt jedes empfangene Byte als Zeichen aus, und 
das Resultat ist daher auch vollkommen korrekt.

Wenn Du möchtest, daß die Ausgabe so aussieht wie die des 
Schnittstellentest- und Analsyeprogrammes, dann musst Du jedes 
empfangene Byte als Zahl behandeln und als Dezimalzahl ausgeben, und 
Leerzeichen dazwischen.

Da ich Deine Programmiersprache (irgendein .Net-Dialekt) nicht kenne und 
nutze, kann ich dir nicht genau sagen, welche Funktion Du statt 
ConvertToString verwenden musst.

von Peter II (Gast)


Lesenswert?

a = Convert.ToString((sender as SerialPort).ReadExisting());

warum abeites du auch mit strings. Wenn du bytes sendest, dann musst du 
auch bytes empfangen (und dmait gleich das Problem der Zeihchenkodierung 
umgehen!).

ReadByte ist das was du suchst.

von Alexander U. (alexander_u)


Lesenswert?

Hallo Peter,

Super! Mit Readbyte funktionierts genau so wie ich will und wie ichs 
brauch!

DANKE :D

mfg alex,

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
Noch kein Account? Hier anmelden.