VB - Serielle Datenübertragung

PingOfDeath1983

Grünschnabel
Hallo,

ich habe noch ein Problem in einem Projekt von mir. Und zwar müssen Zeichen wie Ö,ä usw. (mehrere) in einen bestimmten Hex-Wert umgewandelt werden bevor sie seriell gesendet werden.

Hier mal der Code:

Code:
    Function LED_Zeichensatz(ByVal sText As String) As String

        Dim sRepWhat$, sRepWith$, sTemp$, iWhere$
        Dim cnt As Integer

        'System.Text.Encoding.

        'sText = System.Text.Encoding.GetEncoding(850).GetString(System.Text.Encoding.Default.GetBytes(sText))

        sRepWhat = "C3.C2.C1.C0.C4.C5.C6.DF.C7.D0.C9.CA.C8.CB.CD.CC.CE.CF.D1.D3.D4.D2.D6.D5.D8.DE.DA.D9.DB.DC.BE.DD.E3.E2.E1.E0.E4.E5.E6.E7.E9.EA.E8.EB.ED.EC.EE.EF.F1.F3.F4.F2.F6.F5.F8.FE.FA.F9.FB.FC.FF.FD.A5.A3.A4.0A.0D" '"falsche" Werte
        sRepWith = "7F.80.81.82.83.84.85.86.87.88.89.8A.8B.8C.8D.8E.8F.90.91.92.93.94.95.96.97.98.99.9A.9B.9C.9D.9E.9F.A0.A1.A2.A3.A4.A5.A6.A7.A8.A9.AA.AB.AC.AD.AE.AF.B0.B1.B2.B3.B4.B5.B6.B7.B8.B9.BA.BB.BC.BD.BE.BF.20.20"
        'sRepWith = "7F.80.81.82.83.84.85.86.87.88.89.8A.8B.8C.8D.8E.8F.90.91.92.93.94.95.96.97.98.99.9A.9B.9C.9D.9E.9F.A0.A1.A2.A3.A4.A5.A6.A7.A8.A9.AA.AB.AC.AD.AE.AF.B0.B1.B2.B3.B4.B5.B6.B7.B8.B9.BA.BB.BC.BD.BE.BF.20.20" 'richtige Werte laut Perl

        For cnt = 1 To Len(sText) 'Gehe alle Buchstaben des Textes durch

            sTemp = Hex(Asc(Mid(sText, cnt, 1)))  'Extrahiere den nächsten Buchstaben
            iWhere = InStr(sRepWhat, sTemp) 'Wenn gefunden

            If iWhere > 0 Then

                sTemp = Mid(sRepWith, iWhere, 2) 'und finde sein Äquivalent in der Codetabelle
                Mid(sText, cnt, 1) = Chr(Val("&H" & sTemp)) 'Dann noch im Text ersetzen

            End If
        Next cnt

        Form1.Label3.Text = sText

        'sText = System.Text.Encoding.ASCII.GetString(System.Text.Encoding.Default.GetBytes(sText))
        'sText = System.Text.Encoding.GetEncoding(850).GetString(System.Text.Encoding.Default.GetBytes(sText))

        Form1.Label4.Text = sText
        Return sText
    End Function


......


Code:
    Sub SendSerialData(ByVal data As String)

        If strComport = "COM ?" Then
            Form1.ComboBoxCOM.Enabled = True
            Form1.credits.Enabled = False
            Form1.credit_timer = 0
        Else

            Using com As IO.Ports.SerialPort = _
                My.Computer.Ports.OpenSerialPort(strComport, 9600, IO.Ports.Parity.None, 8, IO.Ports.StopBits.One)

                com.Encoding = System.Text.Encoding.ASCII 'GetEncoding(850)

                'portName ,baudRate ,parity ,dataBits ,stopBits

                'com.Encoding.CodePage()
                com.Encoding = System.Text.Encoding.UTF8

                com.WriteLine(data)

                Form1.Label5.Text = data

            End Using

        End If
    End Sub

Leider geht dabei etwas schief - was weiss ich auch nicht!
Es ist jedenfalls so, dass wenn ich den vom VB-Programm gesendeten String im HyperTerminal auslese nur ein "Kästchen" ankommt und nicht das gewünschte Zeichen. Das passiert NUR bei Zeichen die das 8te Bit nutzen .... also Umlaute/Sonderzeichen.

Jemand eine Idee?

Gruß, PingOfDeath1983
 
Das sieht mir aus wie VB .NET. Dies ist hier aber das Forum für VB6. Du solltest Deinen Post im separaten .Net-Forum neu posten.

Grüsse
ronaldh
 

Neue Beiträge

Zurück