Zusätzliche Informationen
12.8.4.5 Senden von Daten an ein Modul (Output)
Beim Senden muss das Sendearray im Programmablauf generiert werden. Danach wird es Sequenz für Sequenz
über den Flatstream übertragen und vom Modul empfangen.
Information:
Obwohl alle B&R Module mit Flatstream-Kommunikation stets die kompakteste Übertragung in Out-
put-Richtung unterstützen wird empfohlen die Übertragungsarrays für beide Kommunikationsrichtun-
gen gleichermaßen zu gestalten.
SPS/Bus Controller
Sendearray
Typ: USINT
_data_01
_data_02
_data_03
_data_04
_data_05
. . .
_data_xx
Nachricht kleiner als OutputMTU
Die Länge der Nachricht sei zunächst kleiner als die OutputMTU. In diesem Fall würde eine Sequenz ausreichen,
um die gesamte Nachricht und ein benötigtes Controlbyte zu übertragen.
Algorithmus
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 > InputSequenceAck; MTU nicht freigegeben, weil letzte Sequenz noch nicht bestätigt
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 überträgt das aktuelle Element des Sendearrays in die OutputMTU
→ OutputMTU wird zyklisch in den Sendepuffer des Moduls übertragen, aber noch nicht weiterverarbeitet
- CPU muss OutputSequenceCounter erhöhen
Reaktion:
- Modul übernimmt die Bytes des internen Empfangspuffers und fügt sie an das interne Empfangsarray an
- Modul sendet Bestätigung; schreibt Wert des OutputSequenceCounters auf OutputSequenceAck
3) Abschluss:
- CPU muss OutputSequenceAck überwachen
→ 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 Abschluss 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 beeinflusst werden, sodass der Schwellwert individuell zu ermitteln ist.)
- Weitere Sequenzen dürfen erst nach erfolgreicher Abschlussprüfung im nächsten Buszyklus versendet werden.
242
OutputMTU
Typ: USINT
TxBytes
Wenn OutputMTU
freigegeben wird:
CPU füllt
OutputMTU mit
der nächsten
Sequenz des
Sendearrays
Abbildung 40: Kommunikation per Flatstream (Output)
Modulintern
Empfangspuffer
Typ: USINT
*RxBytes
zykl.
Der Sendepuffer
Wenn der OutputSequence-
des Moduls wird
Zähler erhöht wird:
zyklisch über X2X
an OutputMTU
Modul fügt den Sendepuffer
angepasst
zum internen Array hinzu
Wenn erfolgreich:
InputSequenceAck wird
an den Sendezähler
angepasst
Modul
Modulintern
Empfangsarray
Typ: USINT
_data_01
_data_02
_data_03
_data_04
_data_05
. . .
_data_xx
X20 System Anwenderhandbuch 4.00