Die technische Basis für jedes Feldbusgerät, das im Gerätebaum konfiguriert wird, ist der I/O-Treiber.
Der E/A-Treiber ist das Bindeglied zwischen dem Feldbus-Stack, der IEC-Anwendung und dem IDE. Der Treiber konfiguriert den Feldbus-Stack aus den Daten der Gerätekonfiguration. Es zeigt die Diagnose an, stellt eine API für die IEC-Anwendung zur Verfügung und ist für das I/O-Mapping zuständig (siehe Kapitel "I/O-Mapping").
Dieses Kapitel gibt einen kurzen Überblick über die grundlegende Funktionalität von E/A-Treibern, ohne auf die Details spezifischer Bussysteme einzugehen. Darüber hinaus werden einige Empfehlungen für die Konfiguration gegeben.
Buszyklus-Aufgabe
Die Buszyklus-Task 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 für die Übertragung von E/A-Daten verwendet wird, und eine weitere Task mit niedriger Priorität für Aufgaben wie die Auswertung von Diagnosen und die Ausführung von azyklischen Diensten des Bussystems.
Bei echtzeitkritischen Bussystemen muss sichergestellt werden, dass im Rahmen dieser Bustask keine Operationen ausgeführt werden, die den Bustakt aufgrund der Ausführungszeit unterbrechen würden.
Der Bustask kann im E/A-Zuordnungsdialog des E/A-Treibergeräts konfiguriert werden. Beachten Sie, dass die Einstellungen des übergeordneten Geräts standardmäßig geerbt werden. Wenn dieses Gerät die SPS ist, dann gilt seine SPS-Einstellung in der Buszyklus-Task.




HINWEIS

Wenn diese Einstellung nicht vorgenommen wird, wird die Aufgabe mit der kürzesten Zykluszeit verwendet. Auf diese Weise kann ein Nicht-Echtzeit-E/A-Treiber unbeabsichtigt im Task-Kontext eines kritischen Echtzeit-Treibers ausgeführt werden, wodurch dessen Kommunikation unterbrochen wird. Um diese Kommunikationsprobleme zu diagnostizieren, empfiehlt es sich, die Aufgabenüberwachung zu überprüfen.
E/A-Zuordnung
Eine wesentliche Funktion eines E/A-Treibers ist die Aktualisierung der E/A-Zuordnung. Darunter versteht man das Mapping der E/A-Daten des Bussystems auf Variablen der IEC-Anwendung (und umgekehrt).
Die Ein-/Ausgangsdaten werden zyklisch durch Kopier- und Konvertierungsoperationen in beide Richtungen aus dem internen Speicherabbild des Bussystems auf IEC-Variablen abgebildet, die den Adressen %I und %Q zugeordnet sind.
Für den E/A-Treiber macht es intern keinen Unterschied, ob symbolische Namen oder "direkter" Zugriff auf die %I- und %Q-Adressen für dieses E/A-Mapping verwendet werden. Für die Wartbarkeit der Anwendung ist es empfehlenswert, immer sprechende Variablennamen zu verwenden (Beispiel: Variable "TemperatureReactor" statt "%IW117"-Zugang).
Die Aktualisierung der E/A-Zuordnung kann mit „Variablen immer aktualisieren“ eingestellt werden (global in den „SPS-Einstellungen“ oder individuell für jedes Gerät im Dialog E/A-Zuordnung):
-
Behinderte:
Es werden nur die in der Anwendung verwendeten E/A-Daten abgebildet.
Dies kann die Leistung verbessern, indem die Kopiervorgänge vermieden werden, kann aber zu Verwirrung führen, wenn die E/A-Daten im E/A-Zuordnungsdialog nicht aktualisiert werden (die Werte sind dann ausgegraut). Diese Einstellung wird für eine Anwendung empfohlen, deren Entwicklung bereits abgeschlossen ist.
-
Aktiviert 1:
Alle Daten werden aktualisiert.
-
Aktiviert 2:
WICHTIG!
Die Verfügbarkeit dieser Option hängt von der Gerätebeschreibung ab.
Vorsicht! Nur für den produktiven Einsatz in besonderen Fällen.
Infolgedessen können inkonsistente E/A-Daten auftreten, da die Buszyklus-Task diese Daten liest/schreibt, während der Anwendungscode sie in anderen Tasks verwendet.
Konsistenz der E/A-Daten
Das Programmiersystem ermöglicht es der IEC-Anwendung, mehrere parallel ausgeführte Tasks zu nutzen (für Visualisierung, Feldbusse oder andere POEs). Der Anwendungscode kann aus dem Kontext dieser Tasks über die gemappten IEC-Variablen auf E/A-Daten zugreifen. Durch den Zugriff auf dieselben Daten von verschiedenen Tasks aus kann es zu inkonsistenten oder korrupten Daten kommen (z. B. durch unterbrochene Schreibzugriffe).
Der E/A-Treiber stellt die Datenkonsistenz sicher, indem er jeder Task, die einen Task-Zyklus ausführt, ein konsistentes Mapping - sozusagen einen Schnappschuss - aller verwendeten E/A-Daten zur Verfügung stellt.
Ein Code wie im folgenden Beispiel kann also keine Probleme verursachen: (Hinweis "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




HINWEIS

Wenn die Option „Always update variables“ auf „Enabled 2 - always in bus cycle task“ gesetzt ist, wird dieser Mechanismus außer Kraft gesetzt. Dementsprechend muss der Anwendungscode dies berücksichtigen.
Dienstleistungen
Zusätzlich zu den Grundfunktionen bieten einige E/A-Treiber Dienste an, die von der IDE aus aufgerufen werden können, wie z. B. die Geräte-Scan-Funktion oder das Setzen von Geräteadressen.
Allgemeine Empfehlungen
Einstellungen:
-
„PLC-Einstellungen“:
E/A-Aktualisierungen im Stopp:
Der Buszyklus wird auch dann fortgesetzt, wenn die Anwendung angehalten wird, z. B. wenn sich die Anwendung an einem Debug-Haltepunkt befindet. Auf diese Weise bleibt die Kommunikation mit den Feldgeräten erhalten und kann sofort und ohne Unterbrechung fortgesetzt werden.
-
„PLC-Einstellungen“: „Variablen immer aktualisieren“ ist auf „gesetzt Aktiviert 1 - Buszyklus-Task verwenden, wenn nicht in einer Task verwendet“:
Während der Entwicklung der Anwendung ist es nützlich, die Werte aller E/A-Daten zu sehen.
Eintrag in der Taskkonfiguration:
-
Insbesondere für echtzeitkritische Feldbussysteme wie Profinet, EtherCAT oder CAN, die auf die Einhaltung eines exakten Sende-/Empfangstaktes angewiesen sind, empfiehlt sich die Verwendung einer separaten Buszyklus-Task mit hoher Priorität. Für weniger echtzeitkritische Aufgaben (z.B. Visualisierung) sollte eine deutlich niedrigere Priorität gewählt werden als für die Buszyklusaufgabe.
-
Um einen maximalen E/A-Durchsatz bei möglichst geringem Offset zu erreichen, können in der Bustask des Feldbussystems separate POEs ausgeführt werden. Diese müssen dann aber den Echtzeitanforderungen genügen: Es dürfen z.B. keine Dateizugriffe oder blockierende Socketfunktionen ausgeführt werden, sondern z.B. nur die Berechnung der Ausgabedaten.
Mehrere E/A-Treiber und Tasks (Fehlersuche)
Wenn der konsistente Zugriff auf E/A-Daten von mehreren Tasks und möglicherweise über mehrere E/A-Treiberinstanzen hinweg synchronisiert werden muss, kann es unter Umständen zu unerwünschten gegenseitigen Störungen zwischen Bus und Anwendungstask kommen.
Dies ist z. B. der Fall, wenn die allgemeine Systemlast hoch ist oder wenn die E/A-Daten des echtzeitkritischen Feldbussystems zusammen mit E/A-Daten eines langsamen und blockierenden lokalen Bussystems in derselben Task verwendet werden.
Bei unerwarteten Störungen der Kommunikation, bei den besonders echtzeitkritischen Feldbussen (EtherCAT, Profinet, CAN), sollte daher zunächst die Task-Überwachung auf sehr große Jitter oder Ausreißer in der Zykluszeit (Maximalwert gegenüber Mittelwert) untersucht werden. Die Task-Liste enthält detaillierte Informationen über die Verwendung von E/A-Daten in verschiedenen Tasks.
Es ist möglich, die Verwendung von E/A-Daten aus verschiedenen Bussystemen in ein und derselben Task zu vermeiden oder die Anzahl der E/A-Tasks zu reduzieren.