Unerwartetes End-of-file in If-Bedingung

Marten
2009-08-17
2009-08-18
  • Marten - 2009-08-17

    Hallo liebe Forum-Mitglieder!

    Ich habe ein Problem bei der Fehlersuche im Quelltext in einer Funktion. Ich habe die Funktion in ST geschrieben.

    Ich frage den Zustand TRUE oder FALSE von globalen Variablen ab und möchte je nach deren Zustand den Rückgabewert der Funktion setzen.

    Die Deklaration sieht wie folgt aus:

    FUNCTION FunDruckvorg : REAL
    VAR_INPUT
    END_VAR
    VAR
    END_VAR
    

    Der Quelltext lautet:

    IF (GVL.oH2HDin) AND (-GVL.oH2MDin) AND (-GVL.oH2MHin) THEN
       FunDruckvorg:=200.0;
       ELSE IF(-GVL.oH2HDin AND GVL.oH2MDin AND -GVL.oH2MHin)THEN
          FunDruckvorg:=30.0;
       ELSE IF(-GVL.oH2HDin AND -GVL.oH2MDin AND GVL.oH2MHin)THEN
          FunDruckvorg:=15.0;
    END_IF;
    

    Die Fehlermeldung vom Precompiler lautet:

    Unerwartetes End-Of-File gefunden: ELSEIF, ELSE oder END_IF erwartet. Klickt man auf die Fehlermeldung wird das erste IF im Quelltext markiert.

    Kann mir jemand helfen?

    Vielen Dank für die Hilfe!

    LG Marten

     
  • Rolf-Geisler - 2009-08-17

    Hi Marten,

    ich denke, es fehlen ein paar END_IFs. Zu JEDEM IF gehört ein END_IF, sonst bekommst Du Fehlermeldungen.

    Probier mal

    IF (GVL.oH2HDin) AND (-GVL.oH2MDin) AND (-GVL.oH2MHin) 
    THEN FunDruckvorg:=200.0;
    ELSE IF(-GVL.oH2HDin AND GVL.oH2MDin AND -GVL.oH2MHin)
         THEN FunDruckvorg:=30.0;
         ELSE IF(-GVL.oH2HDin AND -GVL.oH2MDin AND GVL.oH2MHin)
              THEN FunDruckvorg:=15.0;
              END_IF;
         END_IF;
    END_IF; 
    

    Der Compiler hat das einzige END_IF, was er bei Dir findet, dem innersten IF zugeordnet, und sucht nun erfolglos nach den übrigen.

    Kann die Abfragen übrigens nicht so recht verstehen. Ist mit ... AND (-GVL.oH2MDin) ein Test auf FALSE gemeint? Liest sich besser, wenn man es als ... AND NOT GVL.oH2MDin ... formuliert - und wird dann sogar von einer S7 verstanden (SCL). Wenn man's halt braucht ...

    Viel Erfolg

    Rolf

     
  • Matze001 - 2009-08-18

    Es heißt nicht Else If sondern Elsif oder Elseif (ich tendiere zum ersten, kann es aber nicht mehr genau sagen da ich gerade mehr php als ST programmiere).

    MfG

    Marcel

     
  • Marten - 2009-08-18

    http://www.3s-software.com/index.shtml?de_ST_d

    Hab mich unter diesem Link über den Aufbau der Bedingung informiert, daher habe ich garnicht daran gedacht, dass jedes IF ein END_IF benötigt.

    Zitat:
    Hi Marten,
    ich denke, es fehlen ein paar END_IFs. Zu JEDEM IF gehört ein END_IF, sonst bekommst Du Fehlermeldungen.

    Hab die Änderungen wie von Dir vorgeschlagen übernommen und es gibt prompt keine Fehlermeldung mehr.

    Die Abfrage auf False habe ich auch von - auf NOT umgeändert so ist es auf den ersten Blick ersichtlich was gemeint ist.

    Vielen Dank für die schnelle Hilfe

    Gruß Marten

     
  • Matze001 - 2009-08-18

    Hallo,

    wie gesagt

    IF Bedingung1 THEN

    BLA BLA

    ELSIF Bedingung 2 THEN

    BLI BLI

    END_IF

    geht auch.

    MfG

    Marcel

     

Log in to post a comment.