Keresés

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

  • Szirty

    őstag

    válasz horvathcsaba #264 üzenetére

    Helló horvathcsaba!

    Nos az általad idézett PID controler hívás szerintem a következők miatt nem úgy működik mint ahogy várod:

    1.
    I_ITL_ON:=TRUE
    Ez az integráló tag inicializálását kapcsolja be, és mivel TRUE értéket adtál neki, nálad ez aktív. Az inicializálás azt csinálja, hogy ha az I_ITL_ON:=TRUE, akkor az integráló tagbe beírja az I_ITL_VAL értékét, ami a te hívásodnál 0. Ezzel gyakorlatilag hatástalanítod az integráló tagot, mivel az nem lesz képes kimozdulni 0 értékről (amennyire tudom az I_ITL_ON nem élvezérelt).

    2.
    CYCLE :=T#10S
    A nagyobb gond szerintem ezzel lesz. A PID controller hívásának van egy olyan szabálya, hogy konstans időközönként kell meghívni! Tehát nem tehetd bele simán a programban, ahol minden PLC ciklusban lefut, mivel a PLC ciklusok hossza nem konstans. Két kézenfekvő hívási mód kínálkozik:
    - Egy élvezérelt cycle memory bittel hívod.
    - Cyclic interruptból hívod (pl. OB35)
    Mindkét megoldás biztosítja a fenti feltételt. A PID CYCLE paraméterében pedig pontosan ugyanezt az időt kell megadnod amennyi időnként hívod (ms pontossággal). Ebből tudja a PID "belül", hogyan telik az idő, ennek alpján számolja az integrálási és diff időket stb. Ezért ha ez a paraméter nem jól van megadva, akkor a PID rendszerint kiakad vagy nem megfelelően működik.
    A dolog folyománya hogy a PID legkisebb reakcióideje a hívási ciklusidőnél semmiképp nem lehet kisebb.
    A fenti 10s tehát valószínűleg nem jó, hacsak nem 10 másodpercenként hívod a PID-et.

    3.
    PVPER_ON:=TRUE
    Ha a PVPER_ON be van kapcsolva, akkor a PID-nek a mért értéket (process variable) perifériaszó formában adod meg és a PID-re bízod az érték normalizálását (0-100% tartományra konvertálását), amit a PV_FAC mint szorzó és PV_OFF mint eltolás értéke alapján számol ki. Ezek nálad 1 és 0. Tehát ettől működhet ugyan, de a PIW 256-ban 0-100 tartományban kell tartani az értéket. A Step7 alapból feltelepít egy doksit ami angolul ugyan, de elég jól leírja mi merre meddig. Ebben van is egy blokk diagram a PID-ről, ami segít áttekinteni a paramétereket:

  • Szirty

    őstag

    válasz horvathcsaba #264 üzenetére

    horvathcsaba

    Azaz bizonyos szelepnyitottságot tartanom kell. Ezt statikusan az LMN_OFF-fal tudom beállítani.

    Hátőő.. nos igen. Kétségtelen, hogy az LMN_OFF hatással van a beavatkozó értékre, de az csak a beavtkozó érték offsetjét (eltolását adja). A legtöbb esetben ezt 0 állítjuk.

    Azonban ha a víz fogyása időben dinamikusan változik, mit tudok tenni?

    Nos ha a szintet "fokozatmentesen" akarod szabályozni, akkor a fokozatmentes mennyiségszabályzáson kívül (szelep) kell egy mérés is, ami a kád szintjével arányos értéket ad. Ezután a kád szintjével arányos mért jelet a PID PV_PER bemenetén adod meg, bekapcsolod a PVPER_ON-t és a PV_FAC, PV_OFF paramétereket úgy állítod be, hogy maximális szintnél 100, minimálisnál 0 érték keletkezzen ormalizálás után (PV kimenet).
    Vagy a mért értéket a PV_IN bemenetre adod és a PVPER_ON-t kikapcsolod. Ekkor a PV_PER-re adott értéknek 0-100 tartományba kell esnie.

    Az SP_INT bemeneten megadod neki mekkora szintet akarsz tartani a kádban (0-100 között).
    Az LMN kimeneten pedig megjelenik (0-100 tartományban) a beavatkozó jel, ami közvetlenül megadja hogy a szelepnek mennyire kell kinyitnia ahhoz, hogy a kád szintjét az SP_INT-nél megadott szinten tartsa.
    A többi paraméter beállításával pedig be lehet hangolni, hogy a kádban aszint állandó legyen attól függetlenül, hogy az elfolyó mennyiség közben hogyan változik.

    Az előző üzenetben hivatkozott PID leírás [a neten is megtalálható]
    Illetve valamennyit én is rizsáltam róla [itt]

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