Zusätzliche Informationen
12.8.5.3 Senden und Empfangen mit Forward
Der grundsätzliche Algorithmus zum Senden bzw. Empfangen von Daten bleibt gleich. Durch den Forward können
bis zu 7 unbestätigte Sequenzen abgesetzt werden. Sequenzen können gesendet werden, ohne die Bestätigung
der vorangegangenen Nachricht abzuwarten. Da die Wartezeit zwischen Schreiben und Rückmeldung entfällt,
können im gleichen Zeitraum erheblich mehr Daten übertragen werden.
Algorithmus zum Senden
Zyklische Statusabfrage:
- Modul überwacht OutputSequenceCounter
0) Zyklische Prüfungen:
- CPU muss OutputSyncAck prüfen
→ falls OutputSyncAck = 0; OutputSyncBit zurücksetzen und Kanal resynchronisieren
- CPU muss Freigabe der OutputMTU prüfen
→ falls OutputSequenceCounter > OutputSequenceAck + 7, in diesem Fall nicht freigegeben, weil letzte Sequenz noch nicht quittiert
1) Vorbereitung (Sendearray anlegen):
- CPU muss Nachricht auf zulässige Segmente aufteilen und entsprechende Controlbytes bilden
- CPU muss Segmente und Controlbytes zu Sendearray zusammenfügen
2) Senden:
- CPU muss aktuellen Teil des Sendearrays in die OutputMTU übertragen
- CPU muss OutputSequenceCounter erhöhen, damit Sequenz vom Modul übernommen wird
- CPU darf im nächsten Buszyklus erneut senden, falls MTU freigegeben ist
Reaktion des Moduls, weil OutputSequenceCounter > OutputSequenceAck:
- Modul übernimmt Daten aus internem Empfangspuffer und fügt sie am Ende des internen Empfangsarrays an
- Modul quittiert; aktuell empfangener Wert des OutputSequenceCounters auf OutputSequenceAck übertragen
- Modul fragt Status wieder zyklisch ab
3) Abschluss (Bestätigung):
- CPU muss OutputSequenceAck zyklisch überprüfen
→ Eine Sequenz gilt erst dann als erfolgreich übertragen, wenn sie über das OutputSequenceAck bestätigt wurde. Um Übertragungsfehler auch bei der letzten
Sequenz zu erkennen, muss sichergestellt werden, dass der Algorithmus lange genug durchlaufen wird.
Hinweis:
Für eine exakte Überwachung der Kommunikationszeiten sollten die Taskzyklen gezählt werden, die seit der letzten Erhöhung des OutputSequenceCounters
vergangen sind. Auf diese Weise kann die Anzahl der Buszyklen abgeschätzt werden, die bislang zur Übertragung benötigt wurden. Übersteigt der Überwa-
chungszähler eine vorgegebene Schwelle, kann die Sequenz als verloren betrachtet werden (das Verhältnis von Bus- und Taskzyklus kann vom Anwender be-
einflusst werden, sodass der Schwellwert individuell zu ermitteln ist).
Algorithmus zum Empfangen
0) Zyklische Statusabfrage:
- CPU muss InputSequenceCounter überwachen
Zyklische Prüfungen:
- Modul prüft InputSyncAck
- Modul prüft InputMTU auf Freigabe
→ Freigabekriterium: InputSequenceCounter > InputSequenceAck + Forward
Vorbereitung:
- Modul bildet Controlbytes/Segmente und legt Sendearray an
Aktion:
- Modul überträgt aktuellen Teil des Sendearrays in den Empfangspuffer
- Modul erhöht InputSequenceCounter
- Modul wartet auf neuen Buszyklus, nachdem Zeit aus ForwardDelay abgelaufen ist
- Modul wiederholt Aktion, falls InputMTU freigegeben ist
1) Empfangen (InputSequenceCounter > InputSequenceAck):
- CPU muss Daten aus InputMTU übernehmen und an das Ende des Empfangsarrays anfügen
- CPU muss InputSequenceAck an InputSequenceCounter der aktuell verarbeiteten Sequenz angleichen
Abschluss:
- Modul überwacht InputSequenceAck
→ Eine Sequenz gilt erst dann als erfolgreich übertragen, wenn sie über das InputSequenceAck bestätigt wurde.
256
X20 System Anwenderhandbuch 4.00