Forum: PC-Programmierung VB: MSComm binäre Daten senden


von Helmut (Gast)


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

von Wolfram (Gast)


Lesenswert?

>Variant Variable einfach nur ein Byte-Array enthalten sein.

ein BYTE ARRAY

in ein Byte passt nunmal nicht der Wert 500 !!!

von Helmut (Gast)


Lesenswert?

Ok, ich geb zu schlechtes Beispiel.
Der Wert 5 passt leider auch nicht, auch nicht wenn ich ihn direkt
zuweise.

von Jan K. (jeangonzales)


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

von Helmut (Gast)


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...

von Jan K. (jeangonzales)


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

von Amir (Gast)


Lesenswert?

Hallo
Können sie mir erklären,was ein Buff bzw ein buffer ist?

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.