Forum: PC-Programmierung C# Serielle Schnittstelle - Auswertung der Daten


von Georg Franz (Gast)


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

von Klaus Kehrer (Gast)


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

von Georg Franz (Gast)


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

von Helmi (Gast)


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

von Klaus Kehrer (Gast)


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

von Klaus Kehrer (Gast)


Lesenswert?

Hi Helmi,
geht
1
CString data = serialPort1.ReadExisting();
in Cshape überhaupt ?

Soviel ich weiß ist das c++ syntax.

Bye
Klaus

von Helmi (Gast)


Lesenswert?

Ich habe kein C# aber probiers einfach mal aus aber warum sollte die 
Klasse CString dort nicht exestieren ?

von Klaus Kehrer (Gast)


Lesenswert?

Hi Helmi,
es gibt keine "Klasse CString" in C#.

Ergo kann ich sie auch nicht verwenden.

Bye
Klaus

von Gaston (Gast)


Lesenswert?

Versuch es doch mal mit

char[] array = data.ToCharArray();

funktioniert so zumindest in .net 2.0

Ist zwar ein char-Array aber das ist ja dann kein Problem mehr.

MfG

von Klaus Kehrer (Gast)


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

von Slowflyer (Gast)


Lesenswert?

Schau dir mal die Fkt. serialPort1.Read(...) an

Gruß, Slowflyer

von Klaus Kehrer (Gast)


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

von Georg Franz (Gast)


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!

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.