Forum: PC-Programmierung NET Compact Framework RS232 senden


von likos1 (Gast)


Lesenswert?

Abend zusammen,

ich fasse mich kurz:

Ich soll eine Software in VB.net für einen Ein-Platinen-PC (Toradex 
Colibri) schreiben, auf dem Windows CE läuft, daher muss ich das ganze 
im Compact Framework machen, und die letzte Visual Studio Version 
nutzen, die das unterstützt (2008).

Die Software soll nur mit einem anderen Gerät per RS232 kommunizieren, 
eigentlich was ganz einfaches.

So, nun erwartet dieses Gerät die Daten im HEX Format, und so liegen sie 
mir auch zum einbauen vor.

Nach einigen erfolglosen Versuchen habe ich festgestellt, dass nur wie 
folgt die Daten tatsächlich im HEX Format ankommen, und das andere Gerät 
dann auch reagiert. Einfach
1
"SerialPort1.WriteLine ("11 aa bb")"
sorgt dafür dass das Gerät nicht reagiert.

Hingegen funktioniert es mit folgender Methode einwandfrei:
1
Dim DieDaten() As Byte = {&H00, &Haa, &Hbb}
2
3
 SerialPort1.Write(DieDaten, 0, 2


Nun ist es aber so, dass die Befehle an das Gerät, die ich aus einer 
Textdatei für die einzelnen Buttons der Software übernehmen muss, 
teilweise sehr lang sind. Und dann einzeln immer alles hinter "&Hxx" 
hängen, ist sehr aufwendig. Noch dazu Muss beim ".Write" immer "0, xy", 
also beginne mit null, sende bis zum Schluss dazu, heißt es muss gezählt 
werden, wie viele "&Hxx" es nun tatsächlich gibt.

Während
1
SerialPort1.Write(data, 0, data.Length)
 bei VS2019 / "normalem" Framework funktioniert, kommt VS2008 / Compact 
Framework damit nicht zurecht, und ich muss "zählen".

Gibt es eine Lösung um die zu sendenden Daten einfach per Copy-Paste 
einzfügen, ohne "&Hxx"? Wie gesagt, wenn ich die zu sendenden Daten 
einfach mit
1
"SerialPort1.WriteLine ("11 aa bb")"
 sende, werden sie scheinbar falsch formatiert o.ä. und das Gerät 
reagiert nicht darauf.

Ich kann leider nicht ändern dass mit Compact Framework und Visual 
Studio 2008 gearbeitet werden muss.

Vielleicht hat ja jemand eine Idee

MFG

von bluppdidupp (Gast)


Lesenswert?

.WriteLine() nimmt die Zeichenkette die man ihm übergibt und wandelt sie 
entsprechend der .Encoding-Eigenschaft in entsprechende Bytes um und 
sendet dann die Bytes raus.
D.h. wenn z.B. .Encoding z.B. auf Encoding.GetEncoding(1252); gesetzt 
wird, würden die Zeichen entsprechend der Zeichensatz-Tabelle zum 
Zeichensatz 1252 
(https://en.wikipedia.org/wiki/Windows-1252#Character_set) konvertiert. 
D.h. "11 aa bb" würde als {&H31,&H31,&H20,&H61,usw...} raus gesendet und 
die "11" nicht als &H11.

.Write() sendet dagegen direkt die Bytes, die es als Byte-Array 
übergeben bekommt raus und wandelt gar nichts um.

Wenn du die Bytes in Form eines Hex-Strings statt direkt als Binärdaten 
hast, wirst du sie über irgendeine Funktion in ein Byte-Array umwandeln 
und das über .Write() raus senden müssen.
Ab .NET 5 gäbe es dafür Convert.FromHexString(). Das wird beim Compact 
Framework vermutlich nicht verfügbar sein, aber bei z.B. stackoverflow 
dürfte sich wohl eine allgemein brauchbare Alternative finden lassen, 
wenn man sich da nichts selbst bauen will.
Alternativ könnte man ggf. auch die Textdateien mit den Hex-Strings 
vorab einfach in Binärdateien umwandeln und dann die statt Textdateien 
mit Hex-Strings nehmen und direkt 1:1 raus senden über .Write()

von c-hater (Gast)


Lesenswert?

likos1 schrieb:

> Gibt es eine Lösung um die zu sendenden Daten einfach per Copy-Paste
> einzfügen, ohne "&Hxx"?

Man schreibt sich eine passende Konvertierungsfunktion, wenn das 
Framework keine bietet.

Sowas nennt man Programmieren!

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.