2016-04-26 8 views
1

Ich lese Daten von der seriellen Schnittstelle in Textbox, dann speichere ich es in einer Textdatei.Wie erhalten Sie Textzeilen gleicher Größe im Textfeld beim Lesen von Daten aus dem Serialport?

  1. wenn ich RxString = serialPort1.ReadLine(); verwende ich bekommen Textrows ungleichmäßiger Größe in Textbox und sogar Größe Textrows in der gespeicherten Textdatei.
  2. Wenn ich RxString = serialPort1.ReadExisting(); verwende, bekomme ich Textrows von gleicher Größe in Textfeld und ungleichmäßige Größe Textrows in der gespeicherten Textdatei.
  3. Mein Code sieht wie folgt aus:

    private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) 
    { 
        RxString = serialPort1.ReadLine(); 
        // RxString = serialPort1.ReadExisting(); 
        this.Invoke(new EventHandler(DisplayText)); 
    
    } 
    

Meine Daten sollte wie folgt aussehen:

150101 02:30:30,7 0030;0000;00;00;00;00;0000;0000;80;10;E008 

150101 02:30:30,8 0030;0000;00;00;00;00;0000;0000;00;10;E008 

150101 02:30:30,7 0030;0000;00;00;00;00;0000;0000;80;10;E008 

150101 02:30:30,8 0030;0000;00;00;00;00;0000;0000;00;10;E008 

und diese nicht mögen:

150101 03:06:32,8 0030;0000;00;00;00;00;0000; 

    0000;80;10;E008150101 03:06:32,9 

    0030;0000;00;00;00;00;0000;0000;00;10;E008 

    150101 03:06:32,0 0030;0000;00;00;00;00;0000;0000; 
        00;10;E008150101 03:06:33,1 

    0030;0000;00;00;00;00;0000;0000;00;10;E008 

Ich hoffe jemand versteht, mein Problem und Hilfe.

Antwort

0

Verwenden ReadTo() Methode

Siehe MSDN description here.

Diese Methode einen String liest auf den angegebenen Wert auf. Während die zurückgegebene Zeichenfolge den Wert nicht enthält, wird der Wert aus dem Eingabepuffer entfernt.

Dies sollte auch sein:

RxString = serialPort1.ReadTo("E008"); 

Es passiert manchmal, wenn die Daten sehr schnell zu Serialport senden sind, können Sie auch versuchen SerialPort.ReceivedBytesThreshold zu setzen, wenn die Länge der Zeichenfolge ist immer gleich.

serialPort1.ReceivedBytesThreshold = 62; 
Verwandte Themen