Kontrollstrukturen
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.