Hirdetés

Új hozzászólás Aktív témák

  • Szirty

    őstag

    válasz rsf #4393 üzenetére

    Üdv!

    "> FB1 NW11-en a #PLC_Msg_Count_Tmp -be mindig belekerül a 35 (Ha elötte az
    > olvasás át van ugorva akkor is)
    > FB1 NW13-on a #PLC_Msg_RCount_Tmp -be mindig belekerül a 416(Ha elötte az
    > olvasás át van ugorva akkor is)"

    Az ökölszabályt be kell tartani! Mindig! Nincs kivétel!

    1. Avagy a TEMP változók tartalmát nem szabad felhasználni az értékadás előtt a blokk lefutása során!
    2. A TEMP változók tartalma minden alkalommal elveszettnek tekintendő, amikor a blokk lefutott!

    Ok.: Minden blokk ugyanazt a memóriaterületet használja a TEMP változók tárolására (Stack).
    Volt már róla szó.

    Ha egy TEMP változót olvasol értékadás előtt, akkor az azelőtt lefutott blokk memória szemetét találod benne! Ha nem fut másik blokk vagy az nem használja azt az L címet, akkor ugyanaz van benne amit a blokk beleírt, de ez igen csalóka és rettentő nagy szívás oka lehet!

    Hiába adtál te valamikor értéket az FB1-ben #PLC_Msg_Count_Tmp-nek, ahogy a blokk lefutott, huss, az értéknek annyi lesz, elvész. Amikor az FB2 megint fut, már szemét van benne!

    Az #PLC_Msg_Count_Tmp az FB1-ben történetesen a 4-es lokális címen van:

    Az FB2-ben a 4-es címet az S_ANY pointer 4. byte-ja foglalja el, ami a DB száma:

    L #PC_DBNum // Source DB
    T LW 4

    #PC_DBNum meg az FB2 inputja, aminek éppen 35-ös értéket adsz híváskor:

    Az LW4 tartalma marad az LW4-ben amikor az FB2 lefut, legközelebb fut az FB1, ahol az LW4-re épp a #PLC_Msg_Count_Tmp változó kerül. Ezért amíg az FB1 nem írja (nem ad neki értéket) a 35 ott ül benne!

    Soha, de SOHA nem szabad TEMP változó értékét felhasználni azelőtt, hogy értéket adtunk neki amikor a blokk lefut. Az előző futáskori értékadás itt nem számít. Ahogy a blokk kilép, le van futva, TEMP változó el van veszve!
    Emiatt arra is nagyon kell figyelni, hogy ha egy TMP változó értékadása feltételtől függ (pl. elágazás van előtte) de az tartalmának a feldolgozása feltételtől független vagy más feltételtől függ, akkor az elágazás(ok) teljesülésétől fog függni a szívás, vagyis az hogy épp szemét van benne vagy hasznos érték!
    Erre NAGYON oda kell figyelni!

Új hozzászólás Aktív témák