VB: MSComm binäre Daten senden

Gast #384991
Lesenswert?

Hallo, ich ( Anfänger) habe eine Frage:
Ich möchte Daten von der Com-Schnittstelle zu einem µ-Controller
verschicken. Allerdings sollen keine Strings verschickt werden, sondern
die Telegramme sollen binär aufgebaut sein, z.b. Byte-Arrays.
Z.B.

Dim i as Variant
i = 500
MSComm1.Output = i

Es sollte eigentlich prinzipiell möglich sein, denn in der Hilfe unter
"output property" steht, wenn kein String verschickt werden soll, muß
in der Variant Variable einfach nur ein Byte-Array enthalten sein.

Wenn ich obiges Programm ausführe, kommt die Fehlermeldung "ungültiger
Eigenschaftswert".

Hat jemand eine Lösung?? Ich verzweifle schon... Vielen Dank
#384994
Lesenswert?

Hallo Helmut,

in der Hilfe steht doch, das entweder ein String oder ein Bytearray
übergeben werden kann. das Literal 5 oder 500 oder wie auch immer ist
aber weder ein String noch ein Bytearray!.

Ich mache immer alles mit Strings (auch binärdaten), das geht am
einfachsten.

Also:

MSComm1.Output = chr(5)

sendet ein Byte mit dem Inhalt 5.

MSComm1.Output = "5"

sendet ein Byte mit dem Inhalt Asc(5) = 53 !

Ich würde aber vorher noch die Eigenschaft InputMode auf Binär setzen:

MSComm1.InputMode = comInputModeBinary


Gruß, Jan
Gast #384995
Lesenswert?

Vielen Dank für die Antwort, klappt.
Dieses Forum ist wirklich das schnellste und beste!!

Habe aber noch weitere Fragen. Angenommen ich hätte eine Byte-Array (
Dim feld(50) as Byte ) und möchte es "binär" verschicken. Dann müßte
ich wahrscheinlich in einer for-Schleife jedes Feld einzeln casten und
verschicken, richtig? Also etwas umständlich...

Aber eine String ist doch letztendlich auch nur ein Array aus Bytes
(pro Zeichen ein Byte), wieso kann ich dann nicht einfach sagen
MSComm.Output = feld ?!

Ich dachte bisher immer dass die Daten besser binär verschickt werden
sollten. Lasse mich aber gerne eines besseren belehren...
#384996
Lesenswert?

Also erstmal hat String oder Array nichts mit binär oder nicht binär zu
tun.
Du kannst genauso einen binären String wie ein "nicht binräres"
byte-Array erstellen.

Binärer String: chr(0) & chr(1) & chr(2) & chr(3)

Dein Byte-Array: Dim feld(50) as Byte
kannst du natürlich direkt an die Output-Eigenschaft des
COMM-Steuerelementes zuweisen. Dann werden alle 51 Bytes (0..50)
gesendet.

Alternativ könntest du aber auch einen 51 Zeichen langen String
erstellen und zuweisen. Folgende Beispiele machen genau dasselbe:

1)
Dim lsBinStr as String, i as Integer
For i = 0 to 50
    lsBinStr = lsBinStr & chr(i)
Next i
MSComm1.Output = lsBinStr

2)
Dim lyBinArray(50) as Byte, i as Integer
For i = 0 to 50
    lyBinArray(i) = i
Next i
MSComm1.Output = lyBinArray


Beide Beispiele senden 51 Bytes, jeweils die Zahlen von 0 bis 50.

Gruß, Jan

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren