Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched. Close

Wo sollte es eigentlich nach einem RETURN weitergehen ?

2006-04-19
2006-06-22
  • Erik Böhm - 2006-04-19

    Hallo

    Ich rufe aus dem PLC_PRG ein anderes Programm (PRG, FUN, FB) auf, und habe in diesem eine Abbruchbedingung, die dann ein RETURN; aufruft.

    Z.B.:

    IF not bInit THEN

    Init();
    
         bInit := true;
    
    RETURN;
    

    END_IF

    Wo sollte ich nach diesem RETURN dann rauskommen ?

    Ich dachte, nach dem Aufruf des Unterprogramms im PLC_PRG, also in der nächsten Zeile.

    Dem ist aber nicht so. Der Ablauf beginnt wieder in Zeile 1 des PLC_PRG.

    Das kommt mir spanisch vor...

    Weiss jemand,wie die korrekte Definition in der IEC 61131-3 lautet ?

    MfG

    Erik

     
  • Dirk - 2006-06-22

    hallo,

    ich gehe davon aus, dass sie beim steppen über den return wieder in plc_prg landen. das passiert immer dann, wenn das laufzeitsystem die aktuelle rücksprungadresse nicht ermitteln kann. der nachfolgebreakpoint wird dann auf die erste anweisung der task gesetzt. der zyklus wird in diesem fall fertig gerechnet und es hat nur den anschein, dass man auf die erste zeile von plc_prg gesteppt ist. überprüfen kann man das, indem man auch einen breakpoint nach dem funktionsaufruf setzt. dort sollte man dann rauskommen, wenn man über den return steppt.

    passieren sollte das eigentlich nicht und ist ein fehler.

    ansonsten beendet der return die bearbeitung des bausteins in dem er aufgerufen wird. er muss also genau das machen was sie erwarten (und die iec61131-3 auch).

    grüße

    dirk

     

Log in to post a comment.