var_in_out online

r2d2
2007-11-14
2007-11-14
  • r2d2 - 2007-11-14

    Hallo,

    ich komme nicht klar bei der Verwendung von var_in_out, obwohl ich die Variable hier, meine ich, normgerecht verwende.

    Beispiel: (CoDeSys 3.1 SP2Patch1)

    FUNCTION_BLOCK testfb

    VAR_INPUT

    END_VAR

    VAR_OUTPUT

    END_VAR

    VAR

    END_VAR

    var_in_out

    iTestvar    :int;
    

    end_var

    iTestvar := 2;


    PROGRAM PLC_PRG

    VAR

    iVar    : int;
    
    testfb1 : testfb;
    

    END_VAR

    testfb1( iTestvar := iVar);


    Ãœbersetzen und Laden in die WINNT-PLC funktioniert.

    Online erscheint dann bei iTestvar:

    - im Deklarationsteil <ReferenceType.ConvertRaw not implemented yet>
    
    - in der Watchlist <Der Wert des Ausdrucks kann nicht gelesen werden>.
    

    Mir ist klar, daß var_in_out nur die Variablenadresse übergibt, also iTestvar ein int-Zeiger ist.

    Trotzdem sollte doch der Audruck "iTestvar := 2" den Wert von iTestvar auf 2 festlegen und nicht die Adresse im Speicher.

    Pointer-Operationen ("pointer to...; adr(); ^) sind in der Norm nicht vorgesehen, also müsste es doch so funktionieren?

    Viele Grüße r2

     
  • J Schohaus - 2007-11-14

    Hallo r2

    Ein Variable von In_Out kann im Baustein nicht beobachtet werden.

    Den zustand kannst du nur an der beschalteten Variable beobachten.

    Also in diesem Fall "iVar" in PLC_PRG.

    In dein Beispiel sollte die Variable den Wert von "2" haben nach aufruf vom Baustein.

    mfG Jochen

     
  • r2d2 - 2007-11-14

    Hallo Jochen,

    "iVar" hat natürlich den wert 2.

    So gesehen sind die Online - Systemmeldungen nachvollziehbar.

    Danke für den Tip.

    Freundliche Grüße

    r2

     

Log in to post a comment.