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

  • Szirty

    őstag

    válasz H.Bencike #7552 üzenetére

    Szia!

    Némi infó itt:
    Blokk hívás, változók és paraméter átadás
    Az S7 PLC programozása

    Néhány kérdésedre rövid válasz:

    "az FC hívhat FB-t? Vagy fordítva?"

    Igen, és fordítva is

    "Programfutás szempontjából melyik előnyösebb?"

    FB-t akkor érdemes használni ha a blokknak kell saját "nem felejtő" változó terület (ez egy DB blokkban valósul meg).

    "A második, amikor lokális változókkal programozok akkor a programban használt számlálók/időzítőknek(C1-T1) lehet lokális változóterületet kijelölni?"

    Itt nem tudom pontosan mire gondolsz.
    A Timer és Counter utasításnak adhatsz át lokális változóban adatot és hajlandóak is abba adatot belerakni.
    De maga a timer és counter mindig globális adatterületen van.
    Ugyanakkor nagyon fontos (és sokan elkövetik azt a hibát hogy ezt rosszul értelmezik) a lokális változók (TEMP) minden adatot elfelejtenek ahogy a blokk lefutott.
    Ezért ökölszabály, hogy egy blokkon belül ha TEMP változót használsz, akkor MINDIG értéket kell adni mielőtt a tartalmát felhasználod!
    Ha tehát mondjuk az FC100-ban a #Value változóba beírsz egy értéket, majd hagyod lefutni a blokkot, akkor legközelebbi ciklusban a #Value változó memóriaszemetet fog tartalmazni.
    Illetve meg is maradhat benne az érték, ha a többi blokk nem bántja a saját lokális változó területét (TEMP).
    A dolog magyarázata az, hogy az összes blokk ugyanazt a stack memóriaterültet használja a saját TEMP változóinak a tárolására.

    "Illetve a merkerek lokális vagy globális változónak minősülnek?"

    Természetesen globális. Ha az egyik blokkban mondjuk bekapcsolod az M10.6-os merker bitet, a többi blokkon belül is azt tapasztalod hogy be van kapcsolva.

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