PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Serielle Schnittstelle Analysieren


Dan McHould
16.07.2004, 11:24
Hi zusammen!

Ich bin gerade damit beschäftigt, die Kommunikation zwischen PC und externem Gerät zu analysieren. (Da ich leider kein Protokoll besitze):(

Über das Analysing-Tool (Serial Monitor von HHD Software) erhalte ich übersicht über die verschiedenen Seriellen Device Control Aufrufe, die entweder vom Gerätetreiber oder dann von der Anwendung gemacht werden.
Mit dem Tool kann ich auch die entprechenden Daten, welche gesendet oder empfangen werden, sichtbar machen und zwar in HEX.
Meine Frage: Kennt sich jemand damit aus, wie ich zum Besipiel aus den HEX- Zahlen wieder eine entsprechenden Wert herauslesen kann? Ich müsste dies vorallem bei den Timeouts und Handshake informationen können, damit ich in meiner Applikation dann die entsprechenden Werte konfigurieren kann.

Beispiel: Eine Baudrate von 9600 Baud kommt folgendermassen daher:
Hex: 80 25 00 00

Ich hoffe, dass ich da am richtigen Ort gepostet habe :D, ansonsten wäre ne kleine Anmerkung angebracht....Dankeschön...

Grüsse
Dan


Patrik Graf
16.07.2004, 12:12
Hmmm... dürfte hier schon richtig sein... nur eine Frage hab ich noch :D

Kommt die Baudrate daher oder kommen die Daten mit dieser Baudrate daher?

Dan McHould
16.07.2004, 13:08
Hi Patrick

Die Baudrate kommt so daher in meinem Beispiel....Das heisst die Baudrate, welche ich in der App konfiguriere, hat diese Form. (Aufgelöst in HEX...?)
Natürlich kommen dann auch die anderen Daten mit dieser Baudrate daher..
Das ganze sieht etwa so aus: (Abgespeckt)

IOCTL_SERIAL_GET_BAUD_RATE : 80 25 00 00
IOCTL_SERIAL_GET_LINE_CONTROL : 00 00 08
etc. etc...

Dann anschliessend wird das ganze neu gesetzt:

IOCTL_SERIAL_SET_BAUD_RATE : 80 25 00 00 (Steht für 9600 Baud, da ich dies ja so in der APP konfiguriere)
IOCTL_SERIAL_SET_RTS : -
etc. etc....

Wenn Du willst, kann ich Dir mal noch ein Bild posten, mit einem vollständigen Auszug aus der Analyse...:D

Danke und Gruss Dan

Patrik Graf
16.07.2004, 13:34
IOCTL_SERIAL_GET_BAUD_RATE : 80 25 00 00
IOCTL_SERIAL_GET_LINE_CONTROL : 00 00 08
etc. etc...
Also... das erste ist die baudrate in Hex... nur andersrum. Also 00 00 25 80 h = 9600 d
Das zweite könnte für die Anzahl der Bits, die in einem Datenrahmen gesendet werden, stehen... das währen dann 8 an der Zahl. Da bin ich mir aber nicht sicher, denn umgekehrt gelesen wäre 08 00 00 h = 524288 d und da hab ich keinen Plan was das ist...


IOCTL_SERIAL_SET_RTS : -
etc. etc....

RTS/CTS Hardware Flowcontrol = aus ;)

Dan McHould
16.07.2004, 14:16
Hi

Wow, ging ja echt fix, dankeschön:D:D:D
Das hilft mir schon ein wenig weiter... Ich drehte mich da ein wenig im Kreis...Das ich das mal von hinten her ansehen sollte, tja...

Das zweite besteht (GET_LINE_CONTROL) laut Windows DDK Doku aus 3 Parametern, einer ist für die Parität, der andere ist für die Anzahl der Stop Bits und der letzte ist für die Anzahl der Datenbits wie Du bereits festgestellt hast...

Ich werde mich jetzt mal noch an die anderen Daten ranmachen, der neue Denkansatz hilft bestimmt...:D:D

Ich habe dir noch einen Link, auf diesem habe ich einen Printscreen vom Output von meinem Serial Analyser gepostet... Ich bin jetzt nämlich noch dran, weitere (längere) Daten, zum Beispiel vom IOCTL_SERIAL_SET_TIMEOUTS zu Analysieren.... Wenn Du lust hast, kannst ja mal darüberschauen....:p

tabelle.jpg (http://mypage.bluewin.ch/dmtester/pics/tabelle.jpg)

Danke und Gruss

Patrik Graf
16.07.2004, 14:58
Das ich das mal von hinten her ansehen sollte, tja...

Tja... meist sinds die einfachsten Dinge die einem Kopfschmerzen bereiten... :D

Dan McHould
16.07.2004, 19:44
Hallo Patrick

Ich habe die Portkonfiguration endgültig knacken können....Danke nochmals für Deine Hilfe....
Ich musste ein wenig rumtüfteln, um die richtigen Parameter an den entsprechenden Stellen zu setzen....:D

Ciao

Dan