2009-07-24 5 views
2

Ich mag den Serialport com1C#: Serialport-Kommunikation

Das ist der Befehl für die Initialisierung schreiben ..

Wenn ich einen char-Array oder Byte-Array schreiben

c[0] = (char)01;// 
c[1] = (char)00; 
c[2] = (char)00; 
c[3] = (char)02; 
c[4] = (char)37; 
c[5] = (char)30; 
c[6] = (char)04; 
serialPort 1.Write(c, 0, c.Length); 

byte[] bb1 = System.Text.Encoding.Default.GetBytes(c); 

ich in dem seriellen Port Monitor angezeigt wird: 01 00 00 02 25 1E 04 offensichtlich 37-25 umgewandelt wird und 30 bis 1E ... Wie gehe ich 37 und 30 und nicht Hexwerte ... i verschiedene Weise versucht, ...

Antwort

0

Wenn Sie 37 in hex Verwendung 0x37 statt 37.

+1

„Wie gehe ich 37 und 30 und * nicht * hex Werte " – samoz

+2

Ja, ich habe es bemerkt. Ich dachte jedoch, dass es vielleicht möglich ist, dass die gewünschte Eingabe in hex gegeben wird und Kal das nicht bemerkt. – maciejkow

+2

Grundsätzlich das gleiche wie die meisten anderen Antworten, warum die Downvotes? –

1

Sie sind übergeben möchten Passing 37 und 30, nicht Hex-Werte.

Sprechen Sie über Anzeige hex Werte?

Wenn dies der Fall ist, was verwenden Sie, um die Ausgabe des seriellen Ports anzuzeigen? Wenn es nicht etwas ist, das du geschrieben hast, könnte das die Art sein, wie sich das Programm verhält.

2

Das Problem hier ist, dass Sie die Werte angegeben haben, die im Dezimalformat gesendet werden, und sie in hexadezimaler Darstellung anzeigen. Offensichtlich wird es Unterschiede geben.

Um dies zu beheben, den Code ändern, um die Werte in hexadezimal durch das Vorsetzen jeden Wert mit 0x stattdessen angeben, wie folgt aus:

c[0] = (char)0x01;// 
c[1] = (char)0x00; 
c[2] = (char)0x00; 
c[3] = (char)0x02; 
c[4] = (char)0x37; 
c[5] = (char)0x30; 
c[6] = (char)0x04; 
serialPort1.Write(c, 0, c.Length); 

Dann werden Sie die gleichen Werte in der Ausgabe als diejenigen sehen, die Sie erwarten.

Siehe auch @Guffa s answer, die eine bessere Möglichkeit zum Initialisieren eines Arrays zeigt, zumindest wenn Sie C# 3.5 verwenden.

+0

Initialisierung eines Arrays funktioniert bereits in C# 2, in C# 3 können Sie den Teil "new byte []" weglassen. – Guffa

7

Der Monitor für den seriellen Anschluss zeigt die Werte in hexadezimaler Form an, sodass sie genau mit den Werten übereinstimmen, die Sie senden. Es findet keine Konvertierung statt, der Dezimalwert 37 ist hexadezimal 25, und der Dezimalwert 30 ist hexadezimal 1E.

Verwenden hexadezimale Notation (0x) für die Literalwerte, wenn Sie das Array zu erstellen, dann sehen Sie, dass die Werte kommen wie in den seriellen Port Monitor erwartet:

byte[] c = new byte[] { 
    0x01, 
    0x00, 
    0x00, 
    0x02, 
    0x37, 
    0x30, 
    0x04 
}; 

serialPort 1.Write(c, 0, c.Length);