Einleitung
Synchronfehlerereignisse sind Programmier- und Zugriffsfehlerereignisse. Solche Fehlerereignisse treten auf durch die Programmierung mit falschen Operandenbereichen, -nummern oder falschen Adressen. Diese Fehlerereignisse maskieren heißt,
-
maskierte Fehlerereignisse lösen keinen Fehler-OB aus und führen nicht zu einer programmierten Ersatzreaktion.
-
von den maskierten Fehlern "merkt sich" die CPU die Fehler, die aufgetreten sind, in einem Ereignisstatusregister.
Die Maskierung erfolgt durch Aufruf der Anweisung "MSK_FLT".
Fehlerereignisse demaskieren heißt, eine vorher vorgenommene Maskierung wieder rückgängig zu machen und das zugehörige Bit im Ereignisstatusregister der aktuellen Prioritätsklasse zu löschen. Die Maskierung wird aufgehoben
-
durch einen Aufruf der Anweisung "DMSK_FLT"
-
wenn die aktuelle Prioritätsklasse beendet ist (nur bei S7-400).
Tritt ein Fehlerereignis nach seiner Demaskierung auf, dann wird vom Betriebssystem der zugehörige Fehler-OB gestartet. Für die Reaktion auf Programmierfehler programmieren Sie den OB 121 und für die Reaktion auf Zugriffsfehler programmieren Sie den OB 122.
Maskierte und aufgetretene Fehlerereignisse können Sie mit der Anweisung "READ_ERR" auslesen.
|
Hinweis Unabhängig von einer Maskierung oder Demaskierung der Fehlerereignisse erfolgt bei S7-300 mit Ausnahme der CPU 318 ein Eintragen des Fehlerereignisses in den Diagnosepuffer, und die Sammelfehler-LED der CPU leuchtet. |
Fehlerbehandlung allgemein
Wenn in einem Anwenderprogramm Programmier- und Zugriffsfehler auftreten, dann können Sie verschieden darauf reagieren:
-
Sie können einen Fehler-OB programmieren und das Betriebssystem ruft diesen Fehler-OB auf, wenn ein entsprechendes Fehlerereignis auftritt.
-
Sie können den Aufruf des Fehler-OB für jede Prioritätsklasse einzeln sperren. In diesem Fall geht die CPU nicht in STOP, wenn in der Prioritätsklasse ein entsprechender Fehler auftritt. Die CPU trägt die aufgetretenen Fehler in ein Ereignisstatusregister ein. Sie können an diesem Eintrag aber nicht erkennen, wann und wie oft dieser Fehler aufgetreten ist.
Fehlermaske
Die Synchronfehlerereignisse sind einem bestimmten Bitmuster zugeordnet, der Fehlermaske. Diese Fehlermaske finden Sie in den Eingangs- und Ausgangsparametern der Anweisungen "MSK_FLT", "DMSK_FLT", "READ_ERR" wieder.
Bei den Synchronfehlerereignissen wird zwischen Programmier- und Zugriffsfehlern unterschieden, die Sie in zwei Fehlermasken maskieren können. Die jeweiligen Fehlermasken finden Sie in den folgenden Bildern.
Programmierfehlermaske
Das folgende Bild zeigt Ihnen das Bitmuster der Fehlermaske für Programmierfehler. Die Fehlermaske für Programmierfehler steht in den Parametern "PRGFLT_..." (siehe im Folgenden "Programmierfehler, Low-Word" bzw. "Programmierfehler, High-Word").
Nicht relevante Bits
Im Bild obigen bedeutet x für die ...
|
= "0" |
|
|
= "1" für S7-300 = "0" für S7-400 |
|
|
für "READ_ERR" |
= "0" |
Zugriffsfehlermaske für alle CPUs
Das folgende Bild zeigt Ihnen für alle CPUs das Bitmuster der Fehlermaske für Zugriffsfehler. Die Fehlermaske für Zugriffsfehler steht in den Parametern ACCFLT_...
Eine Erläuterung der Zugriffsfehler finden Sie in den folgenden Tabellen (siehe unten).
Beispiel
Das folgende Bild zeigt Ihnen für alle CPUs, wie das Low-Word der Fehlermaske für Zugriffsfehler mit allen maskierten Fehlern aussieht.
Programmierfehler Low-Word
Die folgende Tabelle enthält die Fehler, die dem Low-Word der Fehlermaske für Programmierfehler zugeordnet sind. Den jeweiligen Fehlern zugeordnet sind die möglichen Fehlerursachen.
Mögliche Fehlerursachen für Programmierfehler, Low-Word
|
Fehler |
Ereignis-ID |
Fehler tritt auf, ... |
|---|---|---|
|
BCD-Wandlungsfehler |
2521 |
... wenn der zu wandelnde Wert keine BCD-Zahl ist (z. B. 5E8). |
|
Bereichslängenfehler beim Lesen |
2522 |
... wenn ein adressierter Operand nicht vollständig innerhalb des möglichen Operandenbereichs liegt. Beispiel: MW 320 soll gelesen werden, obwohl der Merkerbereich nur 256 Byte groß ist. |
|
Bereichslängenfehler beim Schreiben |
2523 |
... wenn ein adressierter Operand nicht vollständig innerhalb des möglichen Operandenbereichs liegt. Beispiel: Ein Wert soll auf MW 320 geschrieben werden, obwohl der Merkerbereich nur 256 Byte groß ist. |
|
Bereichsfehler beim Lesen |
2524 |
... wenn bei indirekter, bereichsübergreifender Adressierung eine falsche Bereichskennung für den Operanden angegeben wird. Beispiel: Richtig: LAR1 P#E 12.0 L W[AR1, P#0.0] Falsch: LAR1 P#12.0 L W[AR1, P#0.0] Bei dieser Operation |
|
Bereichsfehler beim Schreiben |
2525 |
... wenn bei indirekter, bereichsübergreifender Adressierung eine falsche Bereichskennung für den Operanden angegeben wird. Beispiel: Richtig: LAR1 P#E 12.0 T W[AR1, P#0.0] Falsch: LAR1 P#12.0 T W[AR1, P#0.0] Bei dieser Operation |
|
Timernummernfehler |
2526 |
... wenn auf einen nicht vorhandenen Timer zugegriffen wird. Beispiel:SI T [MW 0] mit MW 0 = 129; der Timer 129 soll gestartet werden, obwohl nur 128 Timer vorhanden sind. |
|
Zählernummernfehler |
2527 |
... wenn auf einen nicht vorhandenen Zähler zugegriffen wird. Beispiel: ZV Z [MW 0] mit MW 0 = 600; es wird auf den Zähler 600 zugegriffen, obwohl nur 512 Zähler vorhanden sind (CPU 416-1). |
|
Ausrichtungsfehler beim Lesen |
2528 |
... wenn ein Byte-, Wort- oder Doppelwortoperand mit einer Bitadresse ≠ 0 adressiert wird. Beispiel: Richtig: LAR1 P#M12.0 L B[AR1, P#0.0] Falsch: LAR1 P#M12.4 L B[AR1, P#0.0] |
|
Ausrichtungsfehler beim Schreiben |
2529 |
... wenn ein Byte-, Wort- oder Doppelwortoperand mit einer Bitadresse ≠ 0 adressiert wird. Beispiel: Richtig: LAR1 P#M12.0 T B[AR1, P#0.0] Falsch: LAR1 P#M12.4 T B[AR1, P#0.0] |
Programmierfehler High-Word
Die folgende Tabelle enthält die Fehler, die dem High-Word der Fehlermaske für Programmierfehler zugeordnet sind. Den jeweiligen Fehlern zugeordnet sind die möglichen Fehlerursachen.
Mögliche Fehlerursachen für Programmierfehler, High-Word
|
Fehler |
Ereignis-ID |
Fehler tritt auf, ... |
|---|---|---|
|
Schreibfehler Datenbaustein |
2530 |
... wenn der Datenbaustein, auf den geschrieben wird, schreibgeschützt ist. |
|
Schreibfehler Instanzdatenbaustein |
2531 |
... wenn der Instanzdatenbaustein, auf den geschrieben wird, schreibgeschützt ist. |
|
Bausteinnummernfehler DB |
2532 |
... wenn ein Datenbaustein aufgeschlagen wird, dessen Nummer größer als die größte zulässige Nummer ist. |
|
Bausteinnummernfehler DI |
2533 |
... wenn ein Instanzdatenbaustein aufgeschlagen wird, dessen Nummer größer als die größte zulässige Nummer ist. |
|
Bausteinnummernfehler FC |
2534 |
... wenn eine Funktion aufgerufen wird, deren Nummer größer als die größte zulässige Nummer ist. |
|
Bausteinnummernfehler FB |
2535 |
... wenn ein Funktionsbaustein aufgerufen wird, dessen Nummer größer als die größte zulässige Nummer ist. |
|
DB nicht geladen |
253A |
... wenn der aufzuschlagende Datenbaustein nicht geladen ist. |
|
Anweisung nicht geladen |
253C bis 253F |
... wenn die aufzurufende Anweisung nicht geladen ist. |
Zugriffsfehler
Die folgende Tabelle enthält für alle CPUs die Fehler, die der Fehlermaske für Zugriffsfehler zugeordnet sind. Den jeweiligen Fehlern zugeordnet sind die möglichen Fehlerursachen.
|
Fehler |
Ereignis-ID |
Fehler tritt auf, ... |
|---|---|---|
|
Peripheriezugriffsfehler beim Lesen |
2942 |
... wenn der Adresse im Peripheriebereich keine Signalbaugruppe zugeordnet ist. Oder ... wenn der Zugriff auf diesen Peripheriebereich nicht innerhalb der eingestellten Baugruppenüberwachungszeit quittiert wird (Quittungsverzug). |
|
Peripheriezugriffsfehler beim Schreiben |
2943 |
... wenn der Adresse im Peripheriebereich keine Signalbaugruppe zugeordnet ist. oder ... wenn der Zugriff auf diesen Peripheriebereich nicht innerhalb der eingestellten Baugruppenüberwachungszeit quittiert wird (Quittungsverzug). |