Archiv verlassen und diese Seite im Standarddesign anzeigen : bräuchte Hilfe bei bascom-code
Zrieschling
02.08.2009, 12:16
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?
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
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.
Zrieschling
02.08.2009, 16:08
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:
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.
Also, deine Beispiele von Tasten-Codes konnte ich in dem Beispiels-Stream garnicht finden.
Der Stream sieht für mich erstmal so aus
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.
Zrieschling
23.08.2009, 15:59
so, bin nun wieder vom urlaub zurück und kann mich wieder meinen hobby widmen...
der obenstehende stream würde wie folgt aufgeteilt:
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:
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
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.