PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : bräuchte Hilfe bei bascom-code



Zrieschling
02.08.2009, 11: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

PicNick
02.08.2009, 13:53
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, 15: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.

PicNick
02.08.2009, 17:15
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, 14: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