Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

String empfangen mit dem Mscomm32.ocx

Empfohlene Antworten

Veröffentlicht

Hallo,

wenn ich über die serielle Schnittstelle mit dem Mscomm Steuerelement einen String zu einem Gerät versende, sendet mir das Gerät seinen Betriebsstatus zurück.

Diesen Betriebsstatus empfange ich mit nachfolgendem Quellcode:


Private Sub MSComm1_OnComm()

  Select Case MSComm1.CommEvent

    Case comOverrun:   MsgBox "Datenverlust!"

    Case comRxOver:    MsgBox "Datenverlust!"

    Case comEvReceive: Me.Text1 = Me.Text1 + MSComm1.Input

  End Select

End Sub

Das funktioniert auch soweit.

Der empfangene String wird mir im Text1 angezeigt.

Merkwürdig ist aber die Darstellung im Text1.

Angezeigt wird nachfolgendes:

|0001|000

Ich erwarte laut Schnittstellenbeschreibung aber nachfolgendes:

<STX>0000001<ETX>

Ich denke mal das "|" Zeichen entspricht dem Start oder dem Stopzeichen.

Aber warum werden die Ascii Zeichen nicht in der richtigen Reihenfolge im Text angezeigt ?

Wenn ich mit der Freeware "Herkules" den String empfange, wird alles richtig

angezeigt.

Hat jemand eine Idee, was ich in VB6 an dem MScomm oder an den Text1 einstellen muss, damit der empfangene String richtig angezeigt wird ?

Gruß

Eleu

  • Autor

Hallo,

ich habe ein kleines Erfolgserlebnis.

Mit dem Anwendungsstart übergebe ich dem mscomm1.ocx nachfolgende Parameter:


MSComm1.CommPort = 1

MSComm1.Settings = "9600,N,8,1"

MSComm1.PortOpen = True

MSComm1.RThreshold = 1

MSComm1.SThreshold = 1

MSComm1.InputLen = 0

Wenn ich jetzt die Eigenschaft "MSComm1.InputLen" von "0" auf "1" ändere wird mir im Text1 nachfolgendes angezeigt:

|1000000|

Wenn ich es in der App. in Hex Zahlen umwandele ergibt das nachfolgende Zahlen:

3 31 30 30 30 30 30 30 2

Es wird jetzt im Text 1 also genau fasch herum angezeigt :confused:

Zuerst wird das ETX und zum Schluss STX angezeigt.

Wie bekomme ich meinen Text dazu, dass er nachfolgendes anzeigt:

|0000001|

Das entspricht in HEX:

2 30 30 30 30 30 30 31 3

Also wenn ich das Textfeld auf den Kopf stellen würde, würde es passen :)

Welche Eigenschaft am MScomm1 muss ich wie ändern, damit es korrekt angezeigt wird.

Gruß

Eleu

Moin,

Also wenn ich das Textfeld auf den Kopf stellen würde, würde es passen :)

wer oder was hindert dich denn daran, den String auf den Kopf zu stellen, wenn es dann passt?


function AufDenKopfGestellt (Textaufdenfüssen as string) as string

    dim i as long

    AufDenKopfGestellt = ""

    for i = len(Textaufdenfüssen) to 1 step -1

        AufDenKopfGestellt = AufDenKopfGestellt & mid(Textaufdenfüssen, i, 1)

    next i

end function


Me.Text1 = AufDenKopfGestellt (Me.Text1)

wie immer und aus Prinzip ungetestet und ohne Gewährleistung.

Reinhold

  • Autor

Danke Reinhold für den Code.

Das werde ich dann auch wohl so machen, wenn es keine andere Lösung gibt.

Ich glaube mittlerweile, dass das MCcomm korrekt arbeitet.

Andere ich die Eigenschaft "MSComm1.InputLen" auf 0 zurück, werden mir die empfangenen Daten vom Gerät, insofern sie kein Start und Stop Zeichen beinhalten, korrekt im Text 1 angezeigt.

Sobald das Gerät aber Daten sendet, die Steuerzeichen enthalten, bekomme ich Murks im Text 1 angezeigt.

Mittlerweile vermute ich, dass das MScomm die Daten korrekt empfängt, aber der Text 1 es einfach nicht korrekt darstellen kann.

Ich bin da nicht so firm, aber muss ich vielleicht die empfangenen Daten von Unicode String zu ASCII String konvertieren, bevor ich sie im Text 1 anzeige ????

Und wenn ja, wie macht man das ?

Mittlerweile vermute ich, dass das MScomm die Daten korrekt empfängt, aber der Text 1 es einfach nicht korrekt darstellen kann.
Das denke ich auch. Was du empfängst, ist schlicht und einfach kein Text, es sind Binärdaten. Wenn du das als Text anzeigen willst, musst du diese Steuerzeichen entfernen oder durch einen Text ersetzen.

Ich bin da nicht so firm, aber muss ich vielleicht die empfangenen Daten von Unicode String zu ASCII String konvertieren, bevor ich sie im Text 1 anzeige ????
Nein. Die empfangenen Daten sind ja offensichtlich nicht als Unicode codiert.
  • Autor

Hallo Klotzkopp,

Danke für die Info.

Die Lösung ist so einfach....:upps

Man muss am Text 1 lediglich die Eigenschaft "Font" auf "Arial Unicode MS"

einstellen, dann wird alles korrekt angezeigt.

Dank an Euch allen.

Gruß

Eleu

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.