In diesem Artikel setzen wir unsere Diskussion über verschiedene Arten von Organisationsblöcken in der Siemens-SPS fort. Dieses Mal sprechen wir über den OB121 oder den Programmierfehler-Interrupt im Tia-Portal.
Inhalt:
- Was sind Programmierfehler-Interrupts OB121?
- Beispiele für Programmierfehler.
- Was passiert, wenn ein Programmierfehler erkannt wird?
- Simulation eines Programmierfehlers im TIA-Portal.
- Wie kann der OB121 gegen Programmierfehler nützlich sein?
- Schlussfolgerungen.
Was sind Programmierfehler-Interrupts (OB121)?
OB121 ist ein Organisationsblock, der vom Betriebssystem der SPS aufgerufen wird, wenn beim Ausführen Ihrer Logik ein Programmierfehler auftritt. Beachten Sie, dass wir nicht von einem Programmierfehler sprechen, der vom Compiler abgefangen wird, wenn versucht wird, Ihre Logik in Ihre SPS herunterzuladen. Siehe Bild 1.
Bild 1 – Einige Programmierfehler werden vom Compiler erkannt
Wie Sie im letzten Bild sehen, liegt in meiner SPS-Logik ein Programmierfehler vor; einige Operanden fehlen in der Eingabe und Ausgabe von Netzwerk 1. Dieser Fehler wurde jedoch vom Compiler erkannt, bevor die Logik überhaupt in die SPS heruntergeladen wurde. Der Fehler in Bild 1 ist nicht der Programmierfehlertyp, der den Aufruf von OB121 auslösen kann.
Fehler in Ihrem SPS-Programm, die vom Compiler nicht gefunden werden können, aber dennoch Probleme in Ihrer Logik verursachen können, während die SPS läuft, sind die Programmierfehler, die wir meinen. Diese Fehler lösen einen Aufruf von OB121 durch das Betriebssystem aus.
Beispiele für Programmierfehler
Hier sind einige Beispiele für Fehler in Ihrer SPS-Logik, die Programmierfehler verursachen können:
- Maximale Verschachtelungstiefe von Blockaufrufen überschritten.
- Sie haben einen NULL-Zeiger verwendet, um einen Operanden anzusprechen.
- Unbekannte Anweisung.
- Die adressierte Zeichenfolge weist falsche Längeninformationen auf.
- Bereichslängenfehler beim Lesen.
- Bereichslängenfehler beim Schreiben.
- Fehler in Timer-Nr.
- Zugriff auf einen nicht geladenen DB; die DB-Nummer befindet sich im zulässigen Bereich.
- DB existiert nicht.
Diese und viele weitere Fehler können Programmierfehler in Ihrer SPS verursachen. Im Hilfebereich des TIA-Portals können Sie nachlesen, welche anderen Gründe zu Programmierfehlern in der SPS führen können.
Was passiert, wenn ein Programmierfehler erkannt wird?
Wenn Ihre SPS einen Programmierfehler erkennt, kann eines von drei Ereignissen eintreten.
- Ihre SPS zeigt einen Fehler an und wechselt in den STOP-Modus.
- Ihre SPS zeigt einen Fehler an, führt Ihre Logik jedoch weiter aus.
- Ihre SPS zeigt einen Fehler an und versucht dann, diesen Fehler zu beheben.
Diese drei Ereignisse hängen im Wesentlichen von Ihrer SPS-Programmierung ab. Das heißt, Ihr Code entscheidet, wie sich das Betriebssystem bei Erkennung eines Programmierfehlers verhält.
Simulation eines Programmierfehlers im TIA-Portal
Um das Verhalten der SPS besser zu verstehen, erstellen wir ein einfaches Programm, in dem wir einen Programmierfehler verursachen, und sehen dann, was passiert. Siehe Bild 2.
Bild 2 – Einfache Programmlogik
Die von uns erstellte Logik ist sehr einfach. Wenn InitiateProgError aktiviert wurde, wird der Wert 126 in den Bereich DB52.DBW16 verschoben. Beachten Sie, dass wir DB52 nicht erstellt haben. Dies wird also unser Programmierfehler sein. Beachten Sie, dass dieser Fehler beim Kompilieren oder Herunterladen in die SPS nicht erkannt wird. Siehe Bilder 3 und 4.
Bild 3 – Vom Compiler nicht erkannter Fehler
Sehen Sie, wie der Block erfolgreich kompiliert wurde, obwohl ein Programmierfehler auftrat.
Bild 4 – Block in SPS heruntergeladen
Wieder wurde der Block mit einem Programmierfehler in die SPS heruntergeladen.
Lassen Sie uns nun unser SPS-Programm simulieren und sehen, was passiert. Die Simulation des SPS-Codes finden Sie in Animation 1.
Animation 1
Wie Sie in der obigen Animation sehen, blinkt die PLC ERROR-LED einige Sekunden lang rot, dann wechselt die PLC in den STOP-Modus.
Gehen Sie zur PLC-Onlinediagnose, um zu sehen, was passiert ist. Siehe Bild 5.
Bild 5 – Online- und Diagnose der PLC
Was Sie in der Animation gesehen haben, ist genau das, was Sie im vorherigen Bild sehen. Es kann in 3 Schritten beschrieben werden:
- Die PLC erkennt den Programmierfehler, nämlich dass OB52 nicht geladen ist.
- Das Betriebssystem löst den Aufruf des OB121 aus, aber in unserer Logik wurde kein OB121 erstellt.
- Wenn die PLC feststellt, dass in unserer Logik kein OB121 erstellt wurde, initiiert das Betriebssystem eine STOP-Anforderung. Und die PLC wechselt in den STOP-Modus.
Wie kann der OB121 gegen Programmierfehler hilfreich sein?
Fügen wir unserem SPS-Code einen OB121 hinzu und sehen wir, wie sich die Dinge ändern. Siehe Bild 6.
Bild 6 – Hinzufügen eines OB121
Nachdem wir den OB121 erstellt und in unsere SPS-Logik eingefügt haben, sehen wir, was in der Simulation passiert.
Denken Sie daran, dass wir keine SPS-Logik in den OB121 geschrieben haben. Siehe Animation 2.
Animation 2
Wie Sie in Animation 2 sehen, blinkt die PLC ERROR-LED rot, wenn InitiateProgError ausgelöst wird, aber die SPS läuft weiter.
Das bedeutet, dass die SPS nicht in den STOP-Modus wechselt. Sehen wir uns die Online-Diagnose an, um zu sehen, was tatsächlich passiert ist. Siehe Bild 7.
Bild 7 – Fehler hat nicht zum Stoppen der SPS geführt
Sie sehen auf dem Bild, dass die SPS den Fehler erkennt, aber nicht in den STOP-Modus wechselt. Sie überspringt diesen Fehler, setzt den Zyklus fort und beginnt wieder von vorne.
Wenn der Fehler erneut auftritt, erkennt sie ihn erneut und gibt einen Alarm in der Diagnose aus. Überspringen Sie den Fehler und fahren Sie fort. Das bedeutet, dass die SPS in jedem Scan-Zyklus denselben Alarm ausgibt. Und deshalb sehen Sie auf dem Bild, dass das Ereignis immer wieder ausgelöst wird und der Alarm sich in jedem Scan-Zyklus wiederholt.
Ein leerer OB121 bietet Ihnen also den Vorteil, dass die SPS weiterläuft und Ihr Prozess weiterläuft.
Aber wir können noch mehr tun: Wir können versuchen, diesen Fehler zu erkennen und zu beseitigen. Außerdem können wir versuchen, die Art des erkannten Programmierfehlers anzuzeigen.
Fehlertyp bestimmen
Der OB121 verfügt über eine interne Fehler-ID, die wir verwenden können, um den Fehlertyp anzuzeigen, beispielsweise als Alarm auf einem HMI. Innerhalb des OB121 erstellen wir eine einfache MOVE-Anweisung, mit der wir den Fault_ID-Eingang des OB121 in einen definierten Speicherbereich innerhalb unseres globalen DBs verschieben. Siehe Abbildung 8.
Abbildung 8 – Fehlertyp identifizieren
Wie Sie im vorherigen Bild sehen, wird die Fault_ID bei Auftreten des Programmierfehlers in die Data.ProgErrorID verschoben. Siehe Abbildung 9.
Abbildung 9 – Programmierfehler Fault_ID
Sie können sehen, dass die Fehler-ID 3A ist. Wenn Sie die TIA Portal-Hilfe überprüfen, können Sie die Bedeutung dieses Fehlers herausfinden.
3A: Zugriff auf einen DB, der nicht geladen ist; die DB-Nummer befindet sich im zulässigen Bereich.
Den Fehler abfangen
Das bedeutet einfach, dass Sie versuchen, den SPS-Programmierfehler zu beheben, nachdem Sie die Ursache ermittelt haben. Dies hängt hauptsächlich davon ab, was der Fehler ist und wie Sie ihn behandeln möchten. Wir werden einfach eine Lösung für den Fehler simulieren, um zu sehen, wie sich die SPS verhält.
Die eigentliche Lösung für den von uns verursachten Fehler besteht darin, einfach den DB52 zu erstellen oder einen bereits erstellten Datenblock zu verwenden.
Aber der Simulation halber werden wir einfach einen einfachen Kontakt hinzufügen, der sich öffnet, wenn der Programmierfehler auftritt, um diesen Fehler abzufangen. Siehe Bilder 10 und 11.
Bild 10 – Den Fehler abfangen
Immer wenn OB121 aufgerufen wird, wird der CatchError gesetzt.
Bild 11 – Fehler beheben
Wenn OB121 aufgerufen wird, wird CatchError gesetzt und verwendet, um den Programmierfehler in Netzwerk 1 abzufangen. Die SPS-Simulation finden Sie in Animation 3.
Animation 3
Aus der obigen Animation können Sie erkennen, dass die SPS beim Auslösen von InitiateProgError kurzzeitig in den Fehlermodus gerät, der dann gelöscht wird und die SPS sich dauerhaft im RUN-Modus befindet.
Fazit
Einfach ein leeres OB121 in Ihrer Logik stellt sicher, dass Ihre SPS nicht in den STOP-Modus wechselt, wenn in Ihrem Code ein Programmierfehler vorliegt. Sie können das OB121 später auch verwenden, um den Fehler zu identifizieren und zu beheben.