Ablauf der Kommunikation

Das Protokoll ist so einfach aufgebaut, daß es mit wenig Aufwand auch auf Systemen mit stark beschränkten Ressourcen implementiert werden kann. Befehle werden als Block gesendet, was etwa 0,5 Millisekunden pro Byte dauert. Dabei ist nur darauf zu achten, daß zwischen zwei Bytes keine Pausen liegen, bei einer Unterbrechung von mehr als 260 Mikrosekunden geht die Firmware von einem Problem aus und verwirft das Paket.

Die Verarbeitung des Befehls dauert nie länger als die serielle Übertragung eines Bytes. Danach beginnt die Leistungselektronik unmittelbar mit dem Senden der Antwort. Das Programm des Steuerrechners sollte in dem empfangenen Datenstrom nach dem Antwortpaket suchen und sich dabei fehlertolerant verhalten sowie Timeouts berücksichtigen. Diese Aufgabe übernimmt ein einfacher Algorithmus, der auch in der Firmware der Leistungselektronik zum Einsatz kommt.

  • Voraussetzungen
    • Der Code verwaltet die Daten einen Ringpuffer, der größer als alle möglichen Pakete ist. Dabei sind 16 Bytes bereits vollkommen ausreichend.
  • Gültigkeitsprüfung
    • Eine Funktion kann prüfen, ob am Anfang des Puffers ein gültiges Paket enthalten ist, und liefert eine der Antworten "Ja", "Nein" und "Vielleicht". Dabei können alle beschriebenen Eigenschaften des Paketes ausgenutzt werden.
      • Stimmt das Magic-Byte?
      • Definiert der Opcode eine gültige Antwort mit der richtigen Sequenznummer?
      • Wurden bereits alle Daten nötigen empfangen?
      • Ist die Checksumme des Paketes korrekt?
      • Sind weitere Daten zu erwarten oder ist seit dem letzten Byte viel Zeit vergangen?
    • Basierend auf diesen Prüfungen muß die Funktion ihre Entscheidung treffen.
  • Empfang von Daten
    • Jedes korrekt empfangene Byte wird zunächst in dem Ringpuffer abgelegt.
    • Anschließend findet die oben beschriebene Suche nach gültigen Paketen statt.
    • Bei der Antwort "Ja" liegt eine gültige Antwort vor, die aus dem Puffer entfernt und dem Aufrufer übergeben wird.
    • Die Antwort "Vielleicht" bedeutet, daß nicht ausreichend Daten für eine Entscheidung im Puffer enthalten ist. In diesem Fall muß das Programm auf weitere Bytes warten.
    • Bei der Antwort "Nein" wird das erste Byte des Puffers gelöscht und weiter gewartet.
    • Sollte der Transceiver einen Übertragungsfehler (Overrun, Framing Error) melden, wird der gesamte Inhalt des Puffers gelöscht.
    • Das Programm wartet nur eine begrenzte Zeit auf eine Antwort.

Prinzipiell kann die Dauer eines Befehlszyklus und damit die Länge der Timeouts relativ genau berechnet werden. Bei den meisten seriellen Schnittstellen scheitert dies jedoch an den FIFOs des Treiberchips. Sie sammeln empfangene Bytes und geben sie erst an das Betriebssystem oder an Applikationen weiter, wenn sie einen gewissen Füllstand erreicht haben oder eine bestimmte Zeit lang keine neuen Bytes empfangen wurden. Der eigentliche Befehlszyklus dauert maximal neun Millisekunden, abhängig von der Schnittstelle und dem Betriebssystem müssen die Timeouts unter Umständen wesentlich höher liegen.