Skip to main content
Suche

Feldbusgeräte und E/A-Treiber

Die technische Basis für jedes Feldbusgerät, das im Gerätebaum konfiguriert wird, ist der E/A-Treiber.

Der E/A-Treiber ist das Bindeglied zwischen dem Feldbus-Stack, der IEC-Applikation und der -IDE. Der Treiber konfiguriert den Feldbus-Stack aus den Daten der Gerätekonfiguration. Er zeigt die Diagnose an, bietet eine API für die IEC-Applikation und ist zuständig für das so genannte E/A-Abbild (siehe Abschnitt „E/A-Abbild“).

Dieses Kapitel gibt einen kurzen Überblick über die grundlegende Funktionsweise von E/A-Treiber-Geräten, ohne auf Details spezifischer Bussysteme einzugehen. Zudem werden einige Empfehlungen für die Konfiguration gegeben.

Buszyklustask

Die Buszyklustask ist die IEC-Task, in deren Kontext der E/A-Treiber ausgeführt wird. Einige E/A-Treiber verwenden mehrere Tasks: In der Regel eine echtzeitkritische Task (mit hoher Priorität), die dem Transfer der E/A-Daten dient, und eine weitere Task mit niedriger Priorität für Aufgaben wie der Auswertung von Diagnose und Ausführung azyklischer Dienste des Bussystems.

Bei echtzeitkritischen Bussystemen muss sichergestellt sein, dass im Kontext dieser Bustask keine Operationen ausgeführt werden, die aufgrund der Ausführungsdauer den Bustakt stören.

Die Bustask kann im E/A-Abbild-Dialog des E/A-Treiber-Geräts konfiguriert werden. Zu beachten ist, dass standardmäßig die Einstellungen des Elterngeräts vererbt werden. Ist dieses Gerät die SPS, dann gilt deren SPS-Einstellung in der Buszyklustask.

Wichtig

Wenn diese o.g. Einstellung nicht gesetzt ist, dann wird die Task mit der kürzesten Zykluszeit verwendet. Auf diese Weise kann unbeabsichtigt ein nicht echtzeitfähiger E/A-Treiber im Task-Kontext eines echtzeitkritischen Treibers ausgeführt werden, was deren Kommunikation stört. Zur Diagnose dieser Kommunikationsstörungen empfiehlt sich ein Blick in das Task-Monitoring.

Für weitere Informationen siehe: Buszyklus-Optionen

E/A-Abbild

Eine wesentliche Funktion eines -E/A-Treibers ist die Aktualisierung des E/A-Abbilds. Darunter versteht man die Abbildung der E/A-Daten des Bussystems auf Variablen der IEC-Applikation (und umgekehrt).

Die Ein-/Ausgangsdaten werden zyklisch durch Kopier- und Konvertierungsoperationen in beiden Richtungen vom internen Speicherabbild des Bussystems auf IEC-Variablen abgebildet, die %I- und %Q-Adressen zugeordnet sind.

Für den E/A-Treiber gibt es intern keinen Unterschied, ob für dieses E/A-Abbild symbolische Namen oder ein „direkter“ Zugriff auf die %I- und %Q-Adressen verwendet wird. Für die Wartbarkeit der Anwendung empfiehlt es sich, grundsätzlich aussagekräftige Variablennamen zu verwenden (Beispiel: Variable „TemperatureReactor“ anstatt „%IW117“-Zugriff).

. Die Aktualisierung des E/A-Abbilds kann über Variablen immer aktualisieren (global in den SPS-Einstellungen oder individuell für jedes Gerät im E/A-Abbild-Dialog) eingestellt werden:
  • Deaktiviert:

    Es werden nur E/A-Daten abgebildet, die in der Applikation verwendet werden.

    Das bringt unter Umständen durch die Vermeidung der Kopieroperationen einen Performance-Gewinn, kann aber für Verwirrung sorgen, wenn die E/A-Daten im E/A-Abbild-Dialog nicht aktualisiert werden (die Werte werden dann ausgegraut dargestellt). Diese Einstellung empfiehlt sich für eine Anwendung, deren Entwicklung abgeschlossen ist.

  • Aktiviert 1:

    Alle Daten werden aktualisiert

  • Aktiviert 2:

    Wichtig

    Die Verfügbarkeit dieser Option hängt von der Gerätebeschreibung ab.

    Achtung: Nur in Sonderfällen produktiv verwenden!

    Dadurch entstehen unter Umständen inkonsistente E/A-Daten, da diese durch die Buszyklustask gelesen/geschrieben werden, während sie in anderen Tasks vom Applikationscode verwendet werden.

Für weitere Informationen siehe: Registerkarte: <Gerätename> E/A-Abbild

Konsistenz E/A-Daten

Das -Programmiersystem ermöglicht der IEC-Applikation die Verwendung mehrerer parallel ausgeführter Tasks (für Visualisierung, Feldbusse, sonstige POUs). Der Code der Applikation kann aus dem Kontext dieser Tasks über die gemappten IEC-Variablen beliebig auf E/A-Daten zugreifen. Durch den Zugriff auf ein und dieselben Daten aus unterschiedlichen Tasks könnte es zu inkonsistenten oder korrupten Daten kommen (zum Beispiel durch unterbrochene Schreibzugriffe).

Der E/A-Treiber gewährleistet die Konsistenz der Daten, indem er jeder Task für die Ausführung eines Taskzyklus ein jeweils in sich konsistentes Abbild - sozusagen eine Momentaufnahme - aller verwendeten E/A-Daten bereitstellt.

Ein Code wie im nachfolgenden Beispiel kann also nicht zu Problemen führen: (Anmerkung „DIV by ZERO“)

IF(inputData <> 0) THEN              // inputData is mapped to %I
    x := y / inputData;              // This will never result in DIV_BY_ZERO Exception
END_IF                               // inputData is not updated by bus cycle during execution of POU

Wichtig

Mit der Option Variablen immer aktualisieren = Aktiviert 2 – immer in Buszyklustask wird dieser Mechanismus ausgehebelt. Dementsprechend muss dies vom Applikationscode berücksichtigt werden.

Dienste

Einige E/A-Treiber stellen zusätzlich zur Basisfunktionalität Dienste zur Verfügung, die von der -IDE aufgerufen werden können, so zum Beispiel die Geräte-Scan-Funktion oder das Setzen von Geräteadressen.

Allgemeine Empfehlungen

. Einstellungen:
  • SPS-Einstellungen: _cds_icon_checked.png E/A aktualisieren im Stop:

    Der Buszyklus läuft auch im Stop der Applikation weiter, beispielsweise wenn die Anwendung auf einem Debug-Haltepunkt steht. Dadurch wird die Kommunikation zu den Feldgeräten weiter aufrechterhalten und kann ohne Unterbrechung unmittelbar fortgesetzt werden.

  • SPS-Einstellungen: Variablen immer aktualisieren = Aktiviert 1 – Buszyklustask verwenden, wenn in keiner Task verwendet:

    Während der Entwicklung der Applikation ist es sinnvoll, die Werte aller E/A-Daten zu sehen.

. Taskkonfiguration:
  • Besonders für echtzeitkritische Feldbussystemen wie Profinet, EtherCAT oder CAN, die auf das Einhalten eines exakten Sende-/Empfangstakts angewiesen sind, empfiehlt es sich, jeweils eine eigene Buszyklustask mit hoher Priorität zu verwenden. Für weniger echtzeitkritische Tasks (beispielsweise Visualisierung) sollte eine deutlich geringere Priorität als für die Buszyklustask gewählt werden.

  • Um maximalen und möglichst versatzfreien E/A-Durchsatz zu erreichen, können eigene POUs in der Bustask des Feldbussystems ausgeführt werden. Diese müssen dann jedoch den Echtzeitanforderungen genügen: Es dürfen beispielsweise keine Dateizugriffe oder blockierende Socket-Funktionen ausgeführt werden, sondern beispielsweise nur die Berechnung der Ausgangsdaten.

Mehrere E/A-Treiber und Tasks (Problembehandlung)

Wenn konsistente Zugriffe auf E/A-Daten aus mehreren Tasks und möglicherweise über mehrere E/A-Treiber-Instanzen synchronisiert werden müssen, kann es unter Umständen zur ungewünschten gegenseitigen Beeinflussung der Bus- und Applikationstask kommen.

Dies ist beispielsweise bei hoher allgemeiner Systemlast der Fall oder wenn die E/A-Daten des echtzeitkritischen Feldbussystems zusammen mit E/A-Daten eines langsamen und blockierenden lokalen Bussystems in der gleichen Task verwendet werden.

Bei unerwarteten Störungen der Kommunikation, bei den besonders echtzeitkritischen Feldbussen (EtherCAT, Profinet, CAN) sollte daher zunächst das Task-Monitoring auf sehr großen Jitter oder Ausreißer bei der Zykluszeit (Maximalwert verglichen mit Mittelwert) untersucht werden. Die Taskaufstellung gibt detailliert Aufschluss über die Benutzung von E/A-Daten in verschieden Tasks.

Eventuell kann die Verwendung von E/A-Daten verschiedener Bussysteme in ein und derselben Task vermieden oder auch die Anzahl der E/A-Tasks reduziert werden.

Für weitere Informationen siehe: Registerkarte: Taskaufstellung