www.mikrocontroller.net

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


Autor: Helmut (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Variant Variable einfach nur ein Byte-Array enthalten sein.

ein BYTE ARRAY

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

Autor: Helmut (Gast)
Datum:

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

Autor: Jan Krause (jeangonzales)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Helmut (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Jan Krause (jeangonzales)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Amir (Gast)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.