2017-07-23 3 views
0

Ich versuche Dezimalwert von der seriellen Schnittstelle zu lesen, die mir 1000 sendet, aber meine Funktion empfängt nur 232. Ich kann Werte bis 127 richtig empfangen Alle String-Werte korrekt empfangen.serielle Schnittstelle, die den Dezimalwert 1000 sendet, aber stattdessen 232 empfängt C#

private void mySerialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) 
    { 
     int bytes = 255; 
     byte[] buffer = new byte[bytes]; 
     int i = 0; 

     do 
     { 
      bytes = mySerialPort.BytesToRead; 
      mySerialPort.Read(buffer, i, bytes); 
      i++; 
      Thread.Sleep(100); 
     } while (mySerialPort.BytesToRead != 0); 
     rxInt = BitConverter.ToInt32(buffer, 0); 
     this.Invoke(new EventHandler(displayDecimal)); 
    } 
+1

Was ist die Implementierung von displayDecimal? –

+0

Sie müssen den Sendecode anzeigen, der die Nummer codiert, sowie weitere Details des Empfängers, z. B. wie Daten dekodiert/angezeigt werden. – barny

+0

displayDecimal Funktion hängt die empfangenen Daten in einer Textbox txt_temp, private int rxInt; private void displayDecimal (Objekt 0, EventArgs e) { txt_temp.AppendText (rxInt.ToString()); } –

Antwort

0

Lassen Sie uns zunächst, dass merkwürdiges Ergebnis erklären:

Der Wert 1000 ist zu groß in einem Byte zu passen. Der Hexadezimalwert von Dezimal 1000 ist 0x3E8. Da die serielle Schnittstelle immer nur ein Byte senden kann, wird der untere Teil 0xE8 übertragen. Der Dezimalwert von 0xE8 ist ... 232. Damit wird die scheinbar seltsame Transformation von 1000 zu 232 vollständig erklärt.

Was kann ich dagegen tun? Unter dem Strich können Sie keinen Wert größer als 255 in einer C# -Byte-Struktur stopfen (oder -128 bis 127 für SByte). Sie haben nicht erwähnt, was die Daten sendet, daher kann ich Ihnen nicht dazu raten, aber Sie müssen Ihre Daten in Bytes für die serielle Übertragung zerlegen oder senden Sie es als eine Zeichenfolge (die Sie bereits kommentiert hat, die funktioniert). Es gibt eine Menge Hilfe hier auf SO und im Internet insgesamt, wie man das macht.

+0

danke für die Hilfe, versuchte jeden möglichen Weg, um vorzeichenlose Ganzzahl größer als 255 zu erhalten, aber vergeblich, entschied ich mich schließlich, die Nummer als String von der Senderseite zu senden. Es funktioniert jetzt gut. –

+0

@AmitSingh Gern geschehen! Ich lade Sie ein, Ihren Dank zu zeigen, indem Sie auf das graue Symbol "Akzeptieren" klicken, um meine Antwort zu akzeptieren. Akzeptierte Antworten werden in Zukunft wahrscheinlich eher von anderen Nutzern gefunden - und werden wahrscheinlich eher dazu beitragen. – TomServo

Verwandte Themen