tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von JensG
ERLEDIGT
JA
ANTWORTEN
3
ZUGRIFFE
3147
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    PingOfDeath1983 PingOfDeath1983 ist offline Mitglied
    Registriert seit
    Apr 2007
    Beiträge
    16
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    
        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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    
        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
     

  2. #2
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    Hi

    Entweder du nutzt ein anderes Encoding oder du ersetzt vor dem Codieren die Zeichen durch ein entsprechendes Äquivalent (ä durch ae, ö durch oe, usw).

    Grund: Im ASCII - Zeichensatz gibt es keine Umlaute
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  3. #3
    PingOfDeath1983 PingOfDeath1983 ist offline Mitglied
    Registriert seit
    Apr 2007
    Beiträge
    16
    Das Problem ist, dass das Zielgerät (Lunartec LED-Lauflichtleiste) ä; ö; ü zwar kann, aber es steht nirgends geschrieben wie ich diese Zeichen übertragen muss.
    Die Codierung bei der HEX-Umwandlung habe ich aus einem anderen Programm (daher weiss ich erst wie ich die Zeichen ändern muss).
    Bei dem Gerät gab es noch ein Programm dazu welches die Zeichen übertragen kann - über Hyperterminal kommen sie auch richtig an, nur über den VB-Code leider nicht ....

    Um überhaupt erstmal weiter zu kommen: Wo müsste/muss ich denn eine Codierung einstellen - beim übertragen oder beim umwandeln - oder muss ich überhaupt nicht encodieren da ich die Zeichen schon getauscht habe - ich brauche einen Ansatzpunkt da ich überhaupt nicht mehr aus dem Ausprobieren mehr raus komme

    PS: ä --> ae usw. existiert schon aus "Notfallfunktion" ... aber deswegen klappts mit ä trotzdem nicht ...

    Gruß, PingOfDeath1983
     

  4. #4
    Avatar von JensG
    JensG JensG ist offline Mitglied Platin
    Registriert seit
    Jun 2004
    Ort
    Gera (Thüringen)
    Beiträge
    517
    Hallo,

    gibt es keine Dokumentation des Protokolls zu diesem Gerät ?
    Eventuell hilft auch ein Schnittstellen-Analyser...

    Schau dir mal dieses Beispiel hier an:
    www.gssg.de -> Visual Basic -> VB.net
    -> Serial Port (RS232) Chat

    Vielleicht findest du da Ansatzpunkte.

    Gruß
    Jens
    vault-tec bedankt sich. 

Ähnliche Themen

  1. Datenübertragung mit SSH
    Von Bobody im Forum Java
    Antworten: 3
    Letzter Beitrag: 15.09.10, 14:06
  2. Serielle Datenübertragung
    Von neo_polo im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 27.03.08, 16:41
  3. Datenübertragung
    Von blubbbla im Forum VisualStudio & MFC
    Antworten: 0
    Letzter Beitrag: 31.10.07, 13:37
  4. VB - Serielle Datenübertragung
    Von PingOfDeath1983 im Forum Visual Basic 6.0
    Antworten: 1
    Letzter Beitrag: 18.06.07, 10:44
  5. Datenübertragung******
    Von igfas im Forum PHP
    Antworten: 1
    Letzter Beitrag: 02.03.03, 13:47