Hallo Leute, zur Zeit beschäftige ich mich mit einem Protocol welches über die Serielle Schnittstelle abgewickelt wird. Ich würde gerne dieses Protocol mehr verstehen: Informationen dazu findet ihr vom Hersteller hier: http://www.zyxel.de/upload/download_library/vsg1200_universal_pms_spec.pdf Nun zu meinen Erkenntnissen: #Protocol -Asynchrone Kommunikation -Ascii -9600 1 Start | 0 Parity | 1 End Bit Ich habe mir mal eine Ascii Code Tabelle angeschaut: z.B. diese http://www.theasciicode.com.ar/ascii-control-characters/start-of-text-ascii-code-2.html # Message - Protocol-Form: STX - Text - ETX - LCR Wird hier tatsächlich z.B. als Hex STX [02] Text [..] ETX[02] LCR[..] übertragen ? Wie wird die LCR berechnet und wie könnte man dies z.B. in C nachbilden ? Vielleicht hat jemand eine Idee und / oder schonmal sowas Softwareseitig umgesetzt ? Mfg.
Oliver S. schrieb: > # Message > - Protocol-Form: STX - Text - ETX - LCR > > Wird hier tatsächlich z.B. als Hex STX [02] Text [..] ETX[02] LCR[..] > übertragen ? Ja, ganz genau. Jedes Packet beginnt mit einem Byte welches den Hex-Wert 02 (STX) hat und endet mit einem Bytes mit dem Hex-Wert 03 (ETX). Da diese Zeichen im TEXT selber nicht vorkommen können, ist damit das Ende immer eindeutig erkennbar. > Wie wird die LCR berechnet und wie könnte man dies z.B. in C nachbilden > ? Steht doch drinnen. Einfach alle gesendeten Bytes nach dem STX miteinander XOR-en (inklusive dem ETX). > Vielleicht hat jemand eine Idee und / oder schonmal sowas Softwareseitig > umgesetzt ? Das ist nicht wirklich schwer. Solltest du eigentlich alleine hinkriegen. Einfach das runterprogrammieren, was du gelesen hast. Da ist keine Hexerei dabei.
1 | void Send( const char* Text ) |
2 | {
|
3 | unsigned char LCR = 0; |
4 | |
5 | SendByte( 0x02 ); |
6 | while( *Text ) { |
7 | SendByte( *Text ); |
8 | LCR ^= *Text; |
9 | Text++; |
10 | }
|
11 | SendByte( 0x03 ); |
12 | LCR ^= 0x03; |
13 | SendByte( LCR ); |
14 | }
|
okay danke dann war mein Ansatz und die Denkweise doch richtig =) Vielen Dank für die Information, einen ähnlichen Code hatte ich auch geschrieben jedoch hatte ich die kompletten Bytes mit Xor verknüpft ! Ich arbeite im Moment die Pdf File durch um einfach einen gesamten Überblick zu bekommen: Nachdem ich also dank deiner Hilfe den eigentlichen "Send" Process darstellen kann wollte ich sicherheitshalber fragen ob der Angegeben Bereich: #Timers and Values für das Senden relevant ist ? Im eigentlichen Sinne, kann ich jetzt auf den Empfang warten und dementsprechend Filter um meine Informationen zu bekommen ? PS: Hast du den Code eben so getippt oder ist das aus einem Project ?
Oliver S. schrieb: > Ich arbeite im Moment die Pdf File durch um einfach einen gesamten > Überblick zu bekommen: > > Nachdem ich also dank deiner Hilfe den eigentlichen "Send" Process > darstellen kann wollte ich sicherheitshalber fragen ob der Angegeben > Bereich: > > #Timers and Values für das Senden relevant ist ? Es ist insofern relevant, als du ja wissen musst, nach welcher Zeit spätestens du von der Gegenstelle mit einer Antwort rechnen kannst. Bleibt die Antwort aus, oder umgekehrt: antwortet dein System nicht rechtzeitig, dann wertet die Gegenstelle das als "da stimmt was nicht". Genauso mit der "TEST" Message. Wenn du die Dinge verstehen willst, dann ist das Durchlesen zwar wunderschön, aber ein wenig Erfahrung mit Kommunikations-Kanälen kann nie schaden. Und da stellt sich dann auch immer raus, dass es prinzipiell 2 große Themenkreise gibt * A) wie funktioniert die Kommunikation prinzipiell, wenn alles klappt * B) was kann alles an Fehlfunktion passieren und wie können wir sicherstellen, dass eien Fehlfunktion auch erkannt wird. Insbesonders bei B) bedeutet "Fehlfunktion" nicht nur Softwarefehler, sondern ganz banale Dinge: Das Zimmermädchen steckt den Stecker aus, der Hausdiener bohrt beim Bilderaufhängen das Kabel an, etc. etc. D.h. da gibt es durchaus auch Fälle, in denen dir eine LCR nichts nützt, weil du von der Gegenstelle erstmal überhaupt nichts kriegst, weil zb das Kabel ab ist oder in der Zentrale die Sicherung geflogen ist. Wie detektierst du sowas? Und viel wichtiger: was macht dann dein Gerät? > Im eigentlichen Sinne, kann ich jetzt auf den Empfang warten und > dementsprechend Filter um meine Informationen zu bekommen ? Ob du das kannst, weiß ich nicht. Programmieren musst du das schon selber. > PS: Hast du den Code eben so getippt oder ist das aus einem Project ? einfach so getippt.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.