C# Serielle Schnittstelle - Auswertung der Daten

Gast #701941
Lesenswert?

Moin !
Folgende Sache beschäftigt mich. Ich habe eine Serielle Schnittstelle 
die hardware - und softwäremäßig funktioniert. Nur die Auswertung der 
Daten macht mir etwas zu schaffen.

Ich empfange die Daten folgender Maßen:

private void serialPort1_DataReceived(object sender, 
SerialDataReceivedEventArgs e)
 {
   string data = serialPort1.ReadExisting();
 }

So jetzt habe ich die jeweils anliegenden Daten im String "data" 
gespeichert.


Ich möchte jetzt jedes einzelne Byte was im String "data" mit einer 
switch case Anweisung überprüfen um ggf. Aktionen auszuführen. Das würde 
zwangsläufig bedeuten das die Daten in einen Array gespeichert müssen.

Die Idee ist
switch(data[x])
{
 case 1: {}
 case 2: {}
 case 3: {}
}

Nur leider kann ich bis jetzt die Daten nicht in eine Array umwandeln..

Was muss ich machen, damit ich weiter komme?? Vielleicht muss ich die 
Daten auch nicht in einen String sondern in einem Integer zurück geben.

Bin dankbar für jede Hilfe und gespannt auf Eure Antworten!

Mfg Georg Franz
Gast #701963
Lesenswert?

Hi,
in vb.net mache ich folgendes:
1
Dim aIData() As Byte            ' Buffer für ankommende Daten
2
Dim enc As System.Text.Encoding = System.Text.Encoding.UTF8     ' 8-Bit encoding einastellen
3

4
Dim IncommingData = mRs232.ReadExisting   ' Alle angekommenen Daten einlesen
5
aIData = enc.GetBytes(IncommingData)       ' Byte-Daten herstellen

Vielleicht hilft es Dir.

Bye
Klaus
Gast #701993
Lesenswert?

Hallo Franz,
danke für den Beitrag von Dir.
So ganz verstehe ich das leider nicht was Du das so vor hast...
Ich bin C# Frischling und habe bis jetzt nur in C programmiert!

Mfg Georg Franz
Gast #702006
Lesenswert?

Wie waere es den wenn du statt

 string data = serialPort1.ReadExisting();

das hier versuchen wuerdest

 CString data = serialPort1.ReadExisting();

dann kannst du mit data[x] die zeichen aus dem String holen

Gruss Helmi
Gast #702030
Lesenswert?

Hi,
ich benutze die Methoden, die das System mir bietet.
Z.B. ich möchte einen String (Text) in ein Byte-Array umwandeln.
Dazu biete mir das System die Klasse System.Text.Encoding an.
Mit
1
System.Text.Encoding enc = System.Text.Encoding.UTF8;
erzeuge ich diesen Konverter und stelle ihn gleichzeitig auf 8-Bit ein.
Nebenbei gesagt es gibt noch andere Formate wie z,B. UTF7, ASCII, .. .
Du kannst sie mal ausprobierten ... (Böse Falle) !
1
String IncommingData;                                     // Buffer für die ankommenden Daten
2
Byte[] aIData;                                            // Array für die weiterverarbeitung
3
System.Text.Encoding enc = System.Text.Encoding.UTF8;     // 8-Bit encoding einstellen
4

5
IncommingData = serialPort1.ReadExisting();               // Alle angekommenen Daten einlesen
6
aIData = enc.GetBytes(IncommingData);                     // Daten konvertieren

Das ist eigentlich alles.


Bye
Klaus
Gast #702125
Lesenswert?

Hi Gaston,
währe ne Möglichkeit. Falls mit Byte weitergearbeitet werden soll,
müsste noch eine Umwandlung erfolgen.

Wie dem auch sei. Georg Franz muss sich entscheiden, ob er mit
Byte (= 8-Bit) oder Char (= 16-Bit) arbeiten möchte.

Eine Umwandlungsmöglichkeit ist oben beschrieben.

Bye
Klaus
Gast #702177
Lesenswert?

Hi Slowflyer,

serialPort1.Read(...)  geht auch.
Etwa so
1
int   Offset = 0;                            // Schreibposition
2
int   AnzahlByte = serialPort1.BytesToRead() // Anzahl Bytes, die gelesen 
3
byte[] aInData = new byte[AnzahlByte];       // Lese-Buffer
4

5
werden sollen.
6

7
serialPort1.Read(aInData, Offset, AnzahlByte); // alle angekommen Daten ab Position = 0 einlesen


Bye
Klaus
Gast #702243
Lesenswert?

WOW !
Danke erstmal an Euch für die zahlreichen Beiträge !
Ich werde mich jetzt erstmal das ein und andere ausprobieren. Ich freue 
mich aber über weitere kreative Ideen!

Mfg Georg  Franz

PS: CString gibt es nicht!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren