-         

Ergebnis 1 bis 5 von 5

Thema: bräuchte Hilfe bei bascom-code

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    10.01.2009
    Beiträge
    8

    bräuchte Hilfe bei bascom-code

    Anzeige

    Hi, bräucht Hilfe bei folgenden Problem:
    Über den UART sollen hex werte eingelesen und verglichen werden.
    Ich mach das bisher wie unten im code. Nun möchte ich aber nicht nur
    die zwei sondern noch viel mehr hexcodes vergleichen.
    Der Verkehr auf dem Bus ist ziemlich groß und die Nachrichten sind unterschiedlich lang...
    Fällt jemanden von euch ne Möglichkeit ein wie ich das einfacher erledigen könnte?


    Code:
    Telefon(1) = "50"                                           'Hexcode für Telefonknopf
    Telefon(2) = "04"
    Telefon(3) = "C8"
    Telefon(4) = "3B"
    Telefon(5) = "80"
    Telefon(6) = "27"
    
    Telefonlos(1) = "50"                                        'Hexcode für Telefonknopf loslassen
    Telefonlos(2) = "04"
    Telefonlos(3) = "C8"
    Telefonlos(4) = "3B"
    Telefonlos(5) = "A0"
    Telefonlos(6) = "07"
    
    
    
    
        If Ischarwaiting() = 1 Then                             'Daten einlesen
            Inputbin Ibusbin
            Ibushex = Hex(ibusbin)                              'in Hex umwandeln
    
            If Ibushex = Telefon(1) Then Telbit = 1             'Start erkennen
            If Ibushex = Telefonlos(1) then tellosbit = 1
    
    
            If Telbit = 1 Then                                  'Tel-button erkennen
                Incr Atel
                If Ibushex = Telefon(atel) Then
                    Matchtel = 1
                Else
                    Telbit = 0
                    Matchtel = 0
                    Atel = 0
                End If
            End If
    
            If Tellosbit = 1 Then                               'Tellos-button erkennen
                Incr Atellos
                If Ibushex = Telefonlos(atellos) Then
                    Matchtellos = 1
                Else
                    Tellosbit = 0
                    Matchtellos = 0
                    Atellos = 0
                End If
            End If
    
    
            If Matchtel = 1 And Atel = 6 Then                   'Wenn Telefonknopfcode erkannt
                Lcd "Telefonknopf"
                    Telbit = 0
                    Matchtel = 0
                    Atel = 0
                    Tellosbit = 0
                    Matchtellos = 0
                    Atellos = 0
    
            End If
    
    
            If Matchtellos = 1 And Atel = 6 Then                'Wenn Telefonknopfcode los erkannt           
               Lcd "Telefonknopf los"
                    Telbit = 0
                    Matchtel = 0
                    Atel = 0
                    Tellosbit = 0
                    Matchtellos = 0
                    Atellos = 0
            End If
    
        End If

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Der Code für die Knöpfe hat doch sicher irgendeine Systematik, die definiert ist.
    Wäre leichter zu helfen, wenn man diese Definition kennt, sonst wär' das ein rumprobieren.

    Das Umwandeln des Inputs in HEx-Strings könntest du dir aber auf jeden Fall ersparen, das ist nur Beschäftigungstherapie für den Prozesser und bringt nix.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    10.01.2009
    Beiträge
    8
    hab mich total unverständlich ausgedrückt...
    die hexcodes für die anderen tasten sind mir bekannt. möchte das programm
    aber einfacher aufbauen, damit ich es leicher um mehrere (gesuchte) hexcodes erweitern kann.

    also, auf dem bus siehts in etwa so aus:
    Code:
    00 05 BF 7A 21 20 C1 00 05 BF 7A 61 20 81 44 05 BF 74 04 01 8F E8 06 00 58 FF 7F 00 36 E8 05 D0 59 10 00 74 E8 05 D0 59 50 00 34 F5 04 BF 02 01 4D 80 04 BF 11 01 2B 80 0A BF 13 00 00 00 00 00 00 87 A1 D0 07 BF 5B 00 00 00 00 33 3B 03 80 01
    jetzt möchte ich mehrere bestimmte zahlenreihe finden. das programm oben
    funktioniert soweit super, ist aber sehr umständlich.

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Also, deine Beispiele von Tasten-Codes konnte ich in dem Beispiels-Stream garnicht finden.
    Der Stream sieht für mich erstmal so aus
    Code:
    00 
    05 BF 7A 21 20 C1 00 
    05 BF 7A 61 20 81 44 
    05 BF 74 04 01 
                      8F 
                      E8 06 00 58 FF 7F 00 36 
                      E8 05 D0 59 10 00 74 
                      E8 05 D0 59 50 00 34 
                      F5 
    04 BF 02 01 4D 80 
    04 BF 11 01 2B 80 
    0A BF 13 00 00 00 00 00 00 87 A1 D0 
    07 BF 5B 00 00 00 00 33 3B 
    03 80 01
    Das wären dann "Messages" in einem bestimmten Format, und um dieses Format ginge es. Wenn man das richtig interpretiert, kann man auch eine Logik aufbauen, diese "Messages" zu verstehen.

    Wenn man nur mehrere Zeichenfolgen in einem unformatierten Text suchen will, muss man für jede gesuchte Folge eine passende Suchstrategie anwenden.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    10.01.2009
    Beiträge
    8
    so, bin nun wieder vom urlaub zurück und kann mich wieder meinen hobby widmen...

    der obenstehende stream würde wie folgt aufgeteilt:
    Code:
    Source Device      : Broad. 1  
    Destination Device : Light Ctrl
    Data  - - - - - - - - - - - -
    7A 21 20
     z  !    
    Full Packet - - - - - - - - -
    00 05 BF 7A 21 20 C1
    -----------------------------
    
    Source Device      : Broad. 1  
    Destination Device : Light Ctrl
    Data  - - - - - - - - - - - -
    7A 61 20
     z  a    
    Full Packet - - - - - - - - -
    00 05 BF 7A 61 20 81
    -----------------------------
    
    Source Device      : UNKNOW 3  
    Destination Device : Light Ctrl
    Data  - - - - - - - - - - - -
    74 04 01
     t  .  . 
    Full Packet - - - - - - - - -
    44 05 BF 74 04 01 8F
    -----------------------------
    
    Source Device      : UNKNOW 6  
    Destination Device : Broad. 1  
    Data  - - - - - - - - - - - -
    58 FF 7F 00
     X  .  .  . 
    Full Packet - - - - - - - - -
    E8 06 00 58 FF 7F 00 36
    -----------------------------
    
    Source Device      : UNKNOW 6  
    Destination Device : Nav Locat.
    Data  - - - - - - - - - - - -
    59 10 00
     Y  .  . 
    Full Packet - - - - - - - - -
    E8 05 D0 59 10 00 74
    -----------------------------
    
    Source Device      : UNKNOW 6  
    Destination Device : Nav Locat.
    Data  - - - - - - - - - - - -
    59 50 00
     Y  P  . 
    Full Packet - - - - - - - - -
    E8 05 D0 59 50 00 34
    -----------------------------
    
    Source Device      : IKE       
    Destination Device : Light Ctrl
    Data  - - - - - - - - - - - -
    11 01
     .  . 
    Full Packet - - - - - - - - -
    80 04 BF 11 01 2B
    -----------------------------
    
    Source Device      : IKE       
    Destination Device : Light Ctrl
    Data  - - - - - - - - - - - -
    13 00 00 00 00 00 00 87
     .  .  .  .  .  .  .  . 
    Full Packet - - - - - - - - -
    80 0A BF 13 00 00 00 00 00 00 87 A1
    -----------------------------
    
    Source Device      : Nav Locat.
    Destination Device : Light Ctrl
    Data  - - - - - - - - - - - -
    5B 00 00 00 00
     [  .  .  .  . 
    Full Packet - - - - - - - - -
    D0 07 BF 5B 00 00 00 00 33
    -----------------------------
    1. Byte = Absender
    2. Byte = Länge
    3. Byte = Empfänger
    4. Byte = Datenbyte1
    5. Byte = Datenbyte.....
    ......
    Letztes byte = CRC

    Länge = Datenbytes + CRC


    Mein Problem ist immer noch, bestimmte nachrichten herauszufiltern.
    Es funktioniert tadellos mit dem code vom Beitrag ganz oben, aber dafür
    brauch ich für jeden gesuchte nachricht unmengen an variablen....

    jetzt mach ichs grad wie in dem code hier:

    Code:
           If Ischarwaiting() <> 0 Then                         'Daten einlesen
            Inputbin Ibusbin
            Ibushex = Hex(ibusbin)
            Hexstring = Hexstring + " "
            Hexstring = Hexstring + Ibushex
            If Len(hexstring) >= 50 Then Hexstring = Mid(hexstring , 19 , 33)
    
    
            If Hexstrcheck( "50 03 C8 01 9A") = 1 Then          'Mfl-Frage an Tel
                Sendmfl = 1
            End If
    
            If Hexstrcheck( "3B 03 C8 01 F1") = 1 Then          'Navi-Frage an Tel
                Sendnav = 1
            End If
    
    .........
    
    Function Hexstrcheck(byval Gesucht As String) As Byte       ' für Tasenerkennung
    
        Pos = Instr(hexstring , Gesucht)
        If Pos <> 0 Then
            Hexstring = ""
            Hexstrcheck = 1
        End If
    End Function
    
    ..........
    hier schreibe ich die UART daten im hexformat in nen string der sich immer
    wieder so verschiebt, dass wenn die gesuchte nachricht kurz vor ende des
    strings kommen würde, diese nicht aufgeteilt und somit mittels instr gefunden wird.

    mit dieser methode lässt sich der code sehr einfach um mehrere gesuchte
    nachrichten erweitern...
    leider ist die ganze string verschieben und instr sache extrem umständlich
    und rechenaufwändig.

    da es kein start, stopbyte und feste länge gibt. kann ich auch nicht nach einer art maske suchen.

    fällt jemanden von euch eine leicht zu erweiternde und nicht all zu rechenintensive möglichkeit ein, nach mehreren bestimmten nachrichten
    im "uart-stream" zu suchen.

    danke und nen schönen sonntag

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •