|
Der CAN FeldbusDer Controller Area Network genannte Bus wurde ab 1983 von der Firma Bosch zur Vernetzung im Automobilbereich entwickelt. Er funktioniert nach einem einfachen aber eleganten Prinzip und ist sehr robust gegenüber elektromagnetischen Störungen. Seit seiner Vorstellung im Jahre 1986 wird CAN in vielen industriellen Bereichen eingesetzt, 1996 wurde der Bus von der ISO standardisiert. Die aktuelle Entwicklung findet in dem Industriegremium CiA statt. AllgemeinesDas Protokoll ist auf dem Data Link Layer angesiedelt. An einem Bus können prinzipiell beliebig viele gleichberechtigte Stationen angeschlossen werden. Jede von ihnen darf Daten senden, die von allen anderen empfangen werden. Eine Möglichkeit zur Adressierung gibt es nicht, dafür trägt jede Nachricht neben der Nutzlast eine Identifikationsnummer. Sie legt die Priorität und den Inhalt der Nachricht fest und kann von der Anwendung vorgegeben werden. Die Controller sind selbst selbst dafür zuständig, die Integrität der Daten sicherzustellen, Prioritäten umzusetzen und Kollisionen durch spätere Wiederholung einer Übertragung aufzulösen. DatenformatDie wichtigste Grundlage für diese Funktionen ist die Codierung der einzelnen Bits. Der Wert 1 wird auf dem Bus rezessiv, 0 hingegen dominant übertragen. Senden zwei Stationen zur gleichen Zeit unterschiedliche Bits, wird sich das dominante gegen das rezessive Bit durchsetzen. Beide Stationen vergleichen den Buszustand mit den von ihnen gesendeten Daten. Stimmen sie nicht überein, bricht der unterliegende Sender seine Übertragung ab und wiederholt sie automatisch nach einer gewissen Wartezeit. Auf diese Weise werden Prioritäten durchgesetzt und Nachrichten quittiert. Kollisionen behindern laufende Übertragungen höherer Priorität nicht und der Mechanismus stellt sicher, daß Latenzzeiten berechenbar sind. Eine Nachricht enthält neben einigen Steuerbits und der Identifikationsnummer die Anzahl der enthaltenen Datenbytes, 0-8 Bytes Nutzdaten, eine CRC-Checksumme und ein ACK-Bit. Dank der rezessiven und dominanten Bits wird sich diejenige Nachricht durchsetzen, deren ID am kleinsten ist, also in den führenden Bits als erstes eine Null aufweist. Jede gesendete Nachricht muß von mindestens einem Empfänger bestätigt werden. Dazu ist im gesendeten Paket das ACK-Bit rezessiv und wird vom Empfänger dominant überschrieben, was der Sender feststellen kann. Passiert dies nicht, gilt die Übertragung als gescheitert und wird später wiederholt. Der Bus funktioniert somit nur, wenn mindestens zwei Stationen aktiv sind. Wenn ein Sender sehr viele Fehler feststellt, schaltet er sich nach einer gewissen Zeit passiv, greift also nicht mehr aktiv in den Bus ein. Der Sinn dieser Maßnahme liegt darin, daß eine defekte Station nicht die gesamte Kommunikation blockieren darf. Hilft auch dies nicht, trennt die Station sich komplett vom Bus und stellt die Arbeit ein. Diese beiden Fehlerzustände sind fast die einzigen, mit denen Anwendungsprogramme konfrontiert werden können. Es gibt zwei Varianten des Protokolls, die sich hauptsächlich in der Länge der Identifikation unterscheiden. Das ältere CAN 2.0A beschränkt sich auf 11 Bit (Standard Frames), CAN 2.0B benutzt hingegen 29 Bit (Extended Frames). CodierungAuf der untersten Ebene kommt eine NRZ-Codierung zum Einsatz, die Bits werden als konstante Pegel dargestellt. Falls irgendwann fünf gleiche Bits in einer Sequenz auftreten, fügt der Sender anschließend ein komplementäres Bit ein, um lange konstante Sequenzen zu verhindern (Bit Stuffing). Diese Signale werden differentiell auf zwei Leitungen übertragen, um die Übertragung robust gegen Störungen zu machen. Für viele Aufgaben reicht ein Flachbandkabel als Busleitung aus, besser sind verdrehte und abgeschirmte Kabel. Der Anschlußstecker der einzelnen Stationen ist von der CiA standardisiert. Bei einer Kabellänge von maximal 40 Metern erreicht der Bus seine Höchstgeschwindigkeit von 1 MBit/s (ISO11898-2 high speed), bei längeren Kabeln sinkt der Durchsatz entsprechend. Auf einem Kilometer sind beispielweise noch 50 kBit/s zu erreichen. Der Bus muß unabhängig von der Datenrate und Kabellänge an beiden Enden terminiert werden, dafür wird ein Widerstand von 120 Ohm zwischen CAN Low und CAN High angeschlossen. |