EtherCAT Master Cycle

zurück

Das Geheimnis des EtherCAT Zyklus

Der effiziente Umgang mit dem Sybera EtherCAT Master setzt die Kenntnis über die Arbeitsweise des EtherCAT Zyklus voraus. Im EtherCAT Zyklus sind unterschiedliche Mechanismen beteiligt, die Auswirkungen auf den EtherCAT Zyklus verursachen können. Dieser Artikel soll ein besseres Verständnis im Umgang mit dem Sybera EtherCAT Master vermitteln.

Die Wrapper States

Die Echtzeit Task des EtherCAT Masters Programms unterscheidet sich grundsätzlich nicht von einer normalen Echtzeittask ohne Master Funktionalität. Die Echtzeittask wird zyklisch aufgerufen und durchlaufen mit dem Zeitraster der vorgegeben Periode. Eine Echtzeittask stellt erst durch die Wrapper-Funktionen ECATENTER und ECATEXIT die Verbindung zum EtherCAT Master her und tauscht mit diesem die Stationsdaten aus.

 Der EtherCAT Master fasst nun mehrere Perioden (Zeitslots oder SyncSycles) zu einem Update-Zyklus zusammen und weist bestimmten Perioden Aufgaben zu. Dadurch ergibt sich ein Sampling-Betrieb des Feldbussystems. Grundsätzlich arbeitet der EtherCAT Master mit 4 Tasks RX, TX, APP (funktionale Verarbeitung) und Error), wobei RX, TX und Error-Handling implizit verwaltet werden. Um eine zeitliche Entkopplung zu ermöglichen, werden die Tasks auf verschiedene Zeitslots verteilt. Der EtherCAT Update-Zyklus wird also in funktionale Zeitslots unterteilt, um somit jeder Task (RX, TX, APP und Error) innerhalb des Update-Zyklus einen deterministischen Ausführungszeitpunkt zu ermöglichen.

 Die Wrapper-Funktion ECATENTER gibt nun einen Statuswert zurück, um den Zeitpunkt der impliziten Verarbeitung mitzuteilen (ECAT_STATE_UPDATE). Erst wenn die Wrapper-Funktion ECAT_STATE_READY zurückgibt, können die Daten funktional verarbeitet werden.

ECAT_STATE_UPDATE

hier wird der RX-Task, TX-Task und Error-Task Anteil behandelt, d.h. die App-Task (logische Verarbeitung der Daten) wird relativ schnell verlassen und trägt daher nicht relevant zur Prozessor-Last bei.

ECAT_STATE_ACCESS

Die Übertragung der Ethernet Frames ist vollzogen, und die logische Verarbeitung der Nutzdaten kann erfolgen. Mit nur einem SyncCycle muss jetzt auch die logische die logische Verarbeitung der Daten erfolgen.

ECAT_STATE_READY

Die Übertragung ist vollzogen, und die logische Verarbeitung der Nutzdaten kann erfolgen. Mit einer State-Machine kann die logische Verarbeitung der Daten auf die verbleibenden Zeitslots verteilt werden. Der RX-Task, TX-Task und Error-Task Anteil trägt nun nicht mehr relevant zum Prozessor-Last bei.

 

In den meisten Fällen wird nur ein Zeitslot für RX, TX und Error Handling benötigt, da die Framegröße relativ klein ist und typischerweise TX und RX in einem Sample abgearbeitet werden können. Um den Systembus zu entlasten, wird jedoch ein zusätzlicher Idle–Slot (ReadyCnt=0) als zeitliche Entkopplung empfohlen.
Im Beispiel (2 Update Slots und 1 Idle Slot) stehen somit 7 Zeitslots für die funktionale Verarbeitung der Daten zur Verfügung. Im Programm können die Daten ab ReadyCnt=1 bis ReadyCnt=n-1 verarbeitet werden (ReadyCnt=0 dient zur Busentlastung).

Prozessor-Last

Die Prozessorlast umfasst alle Aufgaben innerhalb einer Sampling-Periode. Diese Last kann je nach Aufgabe sehr unterschiedlich ausfallen. In der Regel ist die Prozessorlast bei der funktionalen Verarbeitung der Daten (AppTask) am höchsten. Mit dem Programm SYDBG kann die maximale Prozessorlast (MaxProcLoad) ermittelt werden und dient zur optimalen Einstellung der Sampling-Periode.
 
Es gilt:
 
Period (optimal) = MaxProcLoad + 20 (Periodenmodulation)
 
MaxProcLoad = SystemMgmt + RxTask + TxTask + AppTask + ErrTask + MaxJitter
 
 
Leider erzeugen unterschiedliche PC-Plattformen auch unterschiedliche Jitter Anteile (hauptsächlich C-States, TurboMode und SpeedStep, aber auch System-Interrupts, DMA und Cache Mechanismen). Bei manchen PC-Plattformen beträgt dieser Jitter > 40µsec.
 
Somit ergibt sich grob für die AppTask bei 200 µsec eine max. zulässige Ablaufdauer von:
 
AppTask =       200 (Period) - 20 (Periodenmodulation) - 10 (SystemMgmt)
                       - 10 (RxTask + TxTask + ErrTask)
                       - 40 (MaxJitter)
                       = 120 µsec
 
Da der JitterAnteil nicht zu vernachlässigen ist, sollte damit auch nicht zu knapp gerechnet werden. Dieser kann über den JitterTest von SYDBG64 ermittelt werden.

MaxProcLoad > Period ?

Was passiert nun, wenn MaxProcLoad > Period ist ? In diesem Fall verlängert die Realtime-Engine die Periode auf MaxProcLoad, wobei dadurch das Echtzeit-Kriterium verletzt wird. Durch die Pulsweitenmodulation wird der Fehler nach ein paar Zyklen wieder ausgeglichen, so dass DC durchaus mit dieser Toleranz arbeiten kann. Diese sporadische Abweichung sollte jedoch nicht größer als 10% sein und keine statische Überlastung der Sampling-Periode darstellen. Die Verarbeitungszeit der APP-Task kann einfach durch __rdtsc() und __CpuFreq ermittelt werden (siehe Beispiel Jitter-Comp64 aus SHA)

SYDBG64

Periodenmodulation

Mit der neuen EtherCAT Master Version wurde für DistributedClock eine Perioden-Modulation eingeführt, um eine Nachführung der MasterClock zu ermöglichen. Die Periodenmodulation wird für den Drift-Ausgleich zwischen Master-Clock und DC ReferenceClock (typ. erster Slave) benötigt, da sonst kein DC (Distributed Clock) möglich wäre. Hierbei wird die Periode der Master-Clock dynamisch angepasst.
Um die neue Funktionalität nutzen zu können, sollte die Umsetzung der gerätespezifischen ESI-Datei nochmals erfolgen, da das Format der ECATDEVICE.PAR mit der Sektion [OPMODE] erweitert wurde.

 z.B.
 
[OPMODE]
00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00
 
Ebenfalls sollte der SourceCode um einen Befehl erweitert werden:
 
Ecat64DcControl();       (Siehe Beispiel EL3702TST)
  
Die Perioden-Modulation ist standardmäßig eingeschaltet und kann in der Registry angepasst werden
 

Deaktivierung der Perioden-Modulation/em>

Anpassung der Perioden-Modulation

Bei aktiver Perioden-Modulation kann keine Jitter-Messung mehr erfolgen, da die Periode nun dynamisch nachgeführt wird. Mit der Perioden-Modulation ist es nun auch mit Schrittmotoren möglich, ein stabiles DC-Verhalten zu gewährleisten, selbst bei stark Jitter-behafteten PC’s.