Forum: PC-Programmierung Datenübertragung über serielle Schnittstelle


von Bernd (meyer)


Lesenswert?

Hallo,

ich hoffe, daß man mir bei folgendem Problem auf die Sprünge helfen 
kann.

Ich habe eine Waage mit einer seriellen Schnittstelle. Mit hilfe eines 
Schalters an der Waage kann man das aktuelle Gewicht auf einen PC 
übertragen lassen. Dazu habe ich in Visual Basic mit dem Visual Studio 
ein kleines Programm erstellt, bei dem man sich das übertragene Gewicht 
in einem Textfeld anzeigen lassen kann. Diese Übertragung von der Waage 
zum PC funktioniert und es werden die korrekten Werte im Textfeld 
angezeigt.

Nunmehr kann man auch an der Waage zum Beispiel die Wiegeeinheit ändern 
(kg/g/oz usw.) und zwar in der Art, dass man an die Waage bestimmte 
Befehle über die serielle Schnittstelle sendet (Befehl als ASCII-Zeichen 
mit (ESC s) oder als HEX-Code (1B 73))

Im Programm habe ich definiert, dass beim betätigen des Button 2 die 
Daten übertragen werden sollen und damit der Wiegeeinheitenwechsel 
durchgeführt wird.

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles 
Button2.Click

        Dim Sende1 As String = "1B73"

        SerialPort1.Write(Sende1 & vbCrLf)

    End Sub

Leider wird der Einheitenwechsel nicht durchgeführt. Eine 
Datenübertragung über die Schnittstelle findet jedoch statt, da dies 
mittels LED am Schnittstellenstecker angezeigt wird. Offensichtlich wird 
der Befehl nicht korrekt übertragen.

Im Visual Studio gibt es den "Seriellen Monitor". Wenn ich über diesen 
Monitor den Befehl 1B73 senden, wird der Einheitenwechsel an der Waage 
vollzogen.

von Patrick (dereine)


Lesenswert?

Moin,

ich bin in VBA nicht bewandert, aber was hier vermutlich passiert ist, 
dass dein String "1B73" als Hex 0x31 0x42 0x37 0x33 + Nullterminator für 
den String übertragen wird.

Vermutlich wirst du deine 0x1B 0x73 einzeln als Bytes übertragen müssen.
Aber hier gibts mit Sicherheit den ein oder anderen Spezi, der sich da 
besser auskennt. Vielleicht hilft es ja trotzdem.

Grüße

von Heiner B. (karadur)


Lesenswert?

Du sendest den Text 1B73

&H1B &H73 ist die richtige Zeichenfolge

von Adam P. (adamap)


Lesenswert?

Also entweder sendest du ASCII oder HEX.
Aber du sendest die HEX Werte als ASCII String, dass ist nicht das 
gleiche.

Bsp.:
ASCII String "abc" wäre in HEX [0x61, 0x62, 0x63]

Jedoch musst du dann die HEX Werte "binär" übertragen und nicht als 
String "616263".

von Adam P. (adamap)


Lesenswert?

Teste es mal so:
1
Dim bytes() As Byte = { &H1B, &H73 }
2
SerialPort1.Write(bytes, 0, bytes.Length)

: Bearbeitet durch User
von Bernd (meyer)


Lesenswert?

Hallo,

vielen Dank für die Hinweise. Die Befehlsübermittlung und das Umschalten 
der Wiegeeinheiten funktioniert jetzt mit:

Dim bytes() As Byte = { &H1B, &H73 }

SerialPort1.Write(bytes, 0, bytes.Length)

: Bearbeitet durch User
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.