Zum Inhalt springen

String empfangen mit dem Mscomm32.ocx


Eleu

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.
Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...