9.2. Kontrollstrukturen

9.2.1. Ausnahmebehandlung

Tritt während der Programmverarbeitung ein Fehler auf, wird dem Benutzer von Winguard ein Fehlerdialog präsentiert, der den Fehler genauer beschreibt. Durch setzen der Variable SuppressErrors auf einen Wert ungleich Null, kann dieser Fehlerdialog unterdrückt werden. In diesem Fall muss der Fehler vom Programmierer selbst behandelt werden. Dazu unterstützt WGScript Ausnahmebehandlung im Stil von try-catch.

Um für einen Block auf Fehler zu reagieren, müssen Sie diesen Block mit den Zeilen try und except einschliessen. Nach except fügen Sie Code an, um den Fehler zu behandeln:

SuppressErrors := 1;            // Zuerst die Fehlerbehandlung ausschalten
try
    messwert := messwert / 0    // Fehler provozieren
    TextOut(Text: "Kein Fehler?");
except
    TextOut(Text: "Es ist ein Fehler aufgetreten");
end;

Wird versucht, Messwert durch Null zu teilen, wird das Programm im except-Block weiter ausgeführt. Die Zeilen nach dem Fehler werden übersprungen. Die Fehlermeldung wird in der Variablen ErrorMessage gespeichert. Diese kann zusätzlich ausgegeben werden:

SuppressErrors := 1;
try
    messwert := messwert / 0
except
    TextOut(Text: "Es ist folgender Fehler aufgetreten: " + ErrorMessage);
end;

Die Fehlermeldung wird nun in das Messprotokoll geschrieben.

Anstatt des except-Konstruktes kann auch finally verwendet werden. Der Code des finally-Abschnittes wird immer ausgeführt, egal ob ein Fehler aufgetreten ist, oder nicht. Damit kann vor dem Verlassen einer Prozedur wieder ein definierter Zustand hergestellt werden. So wird bespielsweise die komplette Finalisierung in einen finally-Block eingebettet.

RelaisOeffnen();    // Relais oeffnen
try
    MessungDurchfuehren();
finally
    RelaisSchliesse(); // auch bei Fehler das Relais wieder schliessen
end;

Anmerkung

Während except-Blöcke nur aufgerufen werden, wenn die Variable SuppressErrors gesetzt ist, werden finally-Blöcke immer abgearbeitet.