Entwickler-Ecke

IO, XML und Registry - Bytes über Serielle Schnittstelle senden


Eggae - Mi 07.12.11 16:31
Titel: Bytes über Serielle Schnittstelle senden
Hallo Miteinander,

ich soll ein Programmierbares Netzteil über ein C# Programm steuern.
Hierzu muss ich einen Befehl (z.B. AA0FA0h) über den COM-Port senden.
Dies funktioniert auch ohne Probleme.

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
netzteil.Open();
byte[] test = new byte[3];
test[0] = 0xaa;
test[1] = 0x0f;
test[2] = 0xa0;
netzteil.Write(test,0,1);
netzteil.Close();

FA0 steht für die Ausgangsspannung, auf die sich das Netzteil einstellen soll (hier 40.00V).
Nun möchte ich gerne die Ausgangsspannung in eine TextBox eingeben und mein Programm soll nun den eingegebenen Wert in ein Byte umwandeln und an die Serielle Schnittstelle senden.
Nun ist hier das Problem, dass die ersten 1,5 Bytes fest sind (hier die AA0) und die nächsten 1,5Bytes legen dann die Ausgangsspannung fest.
Ich kann den eingegebenen Wert auch in Hex umrechnen lassen. (aus 4000 in der Textbox wird nun fa0(string))
Jetzt muss ich diesen String zerteilen, da das f ja in das Byte test[1] und das a0 in das Byte test[2] muss. -> auch kein Problem
Nur wie Convertiere ich nun diese Strings in ein Byte um, damit ich diese in dem Byte-Array speichern und über die Serielle Schnittstelle senden kann???
Ich habe google schon 5 Stunden lang durchsucht, jedoch noch keine passende Lösung gefunden.
Ich hoffe ihr könnt mir dabei helfen.

Gruß

Moderiert von user profile iconTh69: C#-Tags hinzugefügt


ujr - Mi 07.12.11 17:47

user profile iconEggae hat folgendes geschrieben Zum zitierten Posting springen:

Nun ist hier das Problem, dass die ersten 1,5 Bytes fest sind (hier die AA0) und die nächsten 1,5Bytes legen dann die Ausgangsspannung fest.
Ich kann den eingegebenen Wert auch in Hex umrechnen lassen. (aus 4000 in der Textbox wird nun fa0(string))


Wie kommst Du darauf? Vermutung?

Ist es nicht eher so, dass 0xaa ein "Kommando" ist und 0x0fa0 der zugehörige Parameter (0x0fa0 == 0xfa0)?


Ralf Jansen - Mi 07.12.11 17:56

Zitat:
Nur wie Convertiere ich nun diese Strings in ein Byte um, damit ich diese in dem Byte-Array speichern und über die Serielle Schnittstelle senden kann???



C#-Quelltext
1:
2:
3:
4:
5:
6:
Int16 value = Int16.Parse("4000");

byte[] test = new byte[3];
test[0] = 0xaa;
test[1] = (byte)(value >> 8);
test[2] = (byte)(value);


Als Anregung. Im richtigen Code solltest du Parse durch TryParse ersetzen und prüfen das man nur irgendwas zwischen 0 und 4095 eingibt.
12bit Parameter sind tatsächlich merkwürdig.