Hallo, ich bin dabei mir ein Protokoll für ein RS485 Netzwerk mit 4 Teilnehmern zu überlegen. Im Grunde finde ich den Aufbau der CAN-Botschaft ganz gut, nur etwas kürzer kann es sein. Aber wozu brauche ich eigentlich das Startbyte? Ich wollte zwischen jeder Nachricht eine Pause von 4 Byte machen, somit ist klar, dass das erste Byte, dass nach dieser Pause kommt, der Identifier ist (keine extra Adressierung notwendig durch Identifierlisten in jedem Controller). Was für Vorteile bringt da noch ein Startbyte? Denn dass damit eine neue Nachricht anfängt, weiss jeder Teilnehmer auch nur wenn er die 4 Byte Pause mitbekommen hat. Sonst könnte das Startbyte genausogut Teil der Daten sein.
Hallo Enno, ein Startbyte brauchst Du nicht. Dies vereinfacht lediglich die Auswertung. Wenn Du ein Startbyte und anschließend ein Längenbyte sendest, sowie am Ende eine CRC, so ist auf jeden Fall gewährleistet das die Telegramme richtig ausgewertet werden. Wenn Du wie beschrieben feste Pausen zwischen den Telegrammen einfügst, so kannst Du diese als Timeout werten und dann sollte es auch gehen. Prinzipiel kannst Du auf Deinem Bus machen was Du willst, denn Du mußt dafür sorge tragen das alle die richtigen Botschaften empfangen. Grüße
Ein Längenbyte sowie CRC wollte ich ohnehin dabei haben. Aber durch die Längenangabe müsste es doch selbst ohne 4 Byte Pause genauso gut funktionieren wie mit Startbyte. Ich denk mir halt wenn ein Controller aus irgendeinem Grund (durch Watchdog Reset, enorme EMV Störungen oder was auch immer) komplett den Faden verliert und nicht mehr weiss an welcher Stelle die Buskommunikation ist, dann hilft ein Startbyte ja auch nicht, da es wie gesagt genau so gut ein Datenbyte sein könnte. Das einzige an was ich denken kann ist eine Pause die so vorkommend, in den Daten verboten wird. Deswegen frage ich mich, an welcher Stelle ich überhaupt irgend einen Nutzen von einem Startbyte habe.
Schicke halt das erste Byte als Adressbyte (Zieladresse) mit gesetztem 9.Bit. Da kann jeder Slave synchronisieren, der mit Adress-Match schaltet um und empfängt weiter, die anderen legen sich halt wieder hin, bis das nächste Byte mit gesetztem 9. Bit auftaucht. Gruß Thomas
Ein 9Bit Protokoll...sehr interessant. Die Lösung gefällt mir. Allerdings würde ich nach wie vor über die Nachricht-Id Adressieren. Muss halt jeder Teilnehmer kurz nachschauen ob er für die Id eine Fallbehandlung hat oder nicht.
Wie Du das nennst, ist doch egal. Das gesetzte 9. Bit kennzeichnet ja nur, dass da eben etwas besonderes kommt. Ich nutze das z.B. als eine Art Token, der Slave der ein gesetztes 9. Bit mit seiner Adresse empfängt, darf eine Antwort an den Master senden; im einfachsten Fall ein ACK, also "ich bin noch da", die anderen haben Sendepause. Als Kennzeichen für eine Nachricht kann man das erste Byte mit gesetztem 9. Bit nur verwenden, wenn man keine Antworten der Slaves erwartet, da ja mehrere die Nachricht auswerten (können). Gibt es pro Nachrichtenart nur einen Empfänger, ist es wieder eine Adresse... Gruß Thomas
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.