Beispiel23: Strukturierte Ausnahmebehandlung (SEH)

Dieser Artikel beschreibt die Verwendung von Structed Exception Handling (SEH) anhand von fünf Varianten.

Download

Hier erhalten Sie den Quellcode für dieses Beispiel.

1. Entpacken Sie die heruntergeladene ZIP-Datei.
2. Öffnen Sie mittels eines Visual Studios, in dem TwinCAT installiert ist, das Projekt über Open Project ….
3. Konfigurieren Sie das Signieren für dieses Projekt, indem Sie auf der Seite unter Rechtsklick auf dem Projekt->Properties->Tc Sign die TwinCAT Signierung anschalten und Ihr Zertifikat und ggf. Passwort konfigurieren.
Weitere Informationen zur Signierung der C++ Projekte erhalten Sie hier.
4. Wählen Sie Ihr Zielsystem aus.
5. Bauen Sie das Beispiel (z. B. Build->Build Solution).
6. Aktivieren Sie die Konfiguration mit einem Klick auf Beispiel23: Strukturierte Ausnahmebehandlung (SEH) 1:.
Das Beispiel ist einsatzbereit.

Beschreibung

Das Beispiel beinhaltet fünf Varianten, die die Verwendung von SEH im TwinCAT C++ demonstrieren:

  1. Exception bei einem NULL-Pointer Zugriff
  2. Exception bei einem NULL-Pointer Zugriff mit einem Filter
  3. Exception mit Finally
  4. Eine kundenspezifische strukturierte Ausnahme (Structured Exception)
  5. Exception mit Continue Block

Alle diese Varianten sind durch eine Dropdown Box an der Instanz des C++ auswählbar:
Beispiel23: Strukturierte Ausnahmebehandlung (SEH) 2:

Nach Auswahl einer Variante können Sie mit einem Rechts-Klick auf die vorderste Spalte auch zur Laufzeit den Wert schreiben:
Beispiel23: Strukturierte Ausnahmebehandlung (SEH) 3:

Alle Varianten schreiben Trace-Nachrichten zur Verdeutlichung ihres Verhaltens, so dass Meldungen im TwinCAT Engineering erscheinen:

Beispiel23: Strukturierte Ausnahmebehandlung (SEH) 4:

Das Beispiel verstehen

Die Anwahl in der Dropdown Box ist eine Enumeration, die im CycleUpdate() des Moduls zur Auswahl eines Falles (Switch-Case) verwendet wird. Dadurch können hier die Varianten unabhängig voneinander betrachtet werden:

  1. Exception bei einem NULL-Pointer Zugriff
    Hier wird ein PBYTE als NULL angelegt und nachher verwendet, was zu einer Exception führt.
    Durch den TcTry{} Block wird diese abgefangen und eine Ausgabe erzeugt.
  2. Exception bei einem NULL-Pointer Zugriff mit einem Filter
    Diese Variante greift auf einen NULL-Pointer zu, verwendet aber im TcExcept{} eine Methode FilterException(), die im Modul ebenfalls definiert ist. Innerhalb der Methode wird auf unterschiedliche Exceptions reagiert; in diesem Fall wird lediglich eine Meldung ausgegeben.
  3. Exception mit Finally
    Hier erfolgt wieder ein NULL-Pointer Zugriff, wobei auf dieser Stelle jedoch in jedem Fall ein TcFinally{}-Block ausgeführt wird.
  4. Eine kundenspezifische strukturierte Ausnahme (Structured Exception)
    Mittels TcRaiseException() wird eine Exception erzeugt, die durch die FilterException() Methode abgefangen und bearbeitet wird. Da es sich hier um eine im Modul definierte Exception handelt, gibt die FilterException() Methode zusätzlich eine weitere (spezifische) Meldung aus.
  5. Exception mit Continue Block
    Auch hier erfolgt wieder ein NULL-Pointer Zugriff mit TcExcept{}, diesmal wird die Exception jedoch nach der Behandlung in der FilterException() Methode weiter gereicht, sodass auch der weitere TcExcept{} die Exception behandelt.