Frage zu DEAD_ZONE2 & VAR_OUTPUT

Begonnen von chriszero, 19. August 2010, 10:07:40

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 1 Gast betrachten dieses Thema.

chriszero

Hallo, Ich habe mal eine grundlegende Verständnissfrage
In der Funktion DEAD_ZONE2 ist die Variable Y als VAR_OUTPUT deklariert, wird aber in einem elsif zu einem Vergleich verwendet.
Ich bin C/C++ Programmierer und versteh grad nicht so recht warum mit Y verglichen wird. Die hat doch immer 0, weil ihr nichts zugewiesen wurde? Oder wird das "elsif" auch ausgeführt wenn das "if" schon wahr war?
Ansonsten würde das für mich keinen Sinn machen. In C würd er nämlich in das "else if" nicht mehr springen wenn das "if" wahr gewesen wäre. Somit wäre das "elsif" immer unwahr.


FUNCTION_BLOCK DEAD_ZONE2
VAR_INPUT
X : REAL;
L : REAL;
END_VAR
VAR_OUTPUT
Y: REAL;
END_VAR

IF ABS(x) > L THEN
Y := X;
ELSIF Y > 0.0 THEN
Y := L;
ELSE
Y := -L;
END_IF;


peewit

hallo

du darfst nicht nur den ersten zyklus betrachten
da es sich hier um einen funktionsblock handelt, bleibt der zustand von Y erhalten
das heisst die if abfrage wird in jeden zyklus mit dem letzen Y wert durchlaufen


chriszero

Ah, ok. Ergibt Sinn.
Danke. =)

Der Funktionsblock ist also eine Art Instanz, deren Ausgangsvariablen der Laufzeit über bestehen bleiben.
Eine fundamentale Erkentniss für mich ;D