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.
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
Du sendest den Text 1B73 &H1B &H73 ist die richtige Zeichenfolge
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".
Teste es mal so:
1 | Dim bytes() As Byte = { &H1B, &H73 } |
2 | SerialPort1.Write(bytes, 0, bytes.Length) |
:
Bearbeitet durch User
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.