Autor Thema: Frage zu DEAD_ZONE2 & VAR_OUTPUT  (Gelesen 6289 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Offline chriszero

  • Newbie
  • *
  • Beiträge: 16
    • Profil anzeigen
Frage zu DEAD_ZONE2 & VAR_OUTPUT
« am: 19. August 2010, 10:07:40 »
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;

Offline peewit

  • Moderator
  • *****
  • Beiträge: 2 378
    • Profil anzeigen
Re:Frage zu DEAD_ZONE2 & VAR_OUTPUT
« Antwort #1 am: 19. August 2010, 10:36:40 »
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


Offline chriszero

  • Newbie
  • *
  • Beiträge: 16
    • Profil anzeigen
Re:Frage zu DEAD_ZONE2 & VAR_OUTPUT
« Antwort #2 am: 19. August 2010, 10:47:22 »
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