Hirdetés

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

  • Szirty

    őstag

    válasz Mazsika #4883 üzenetére

    Üdv Mazsika!

    Nem írtad le konkrétan melyik PID szabályzót használod (van ám sok), de ha jól értem akkor a standard PID controllerek közül a FB41 “CONT_C”-t.
    Erre fog vonatkozni a válaszom is. Ha nem ezt a PID controllert használod, akkor így járás, de utálok fölöslegesen irkálni.

    A szabályzó újraindítására a COM_RST (complete restart) paraméter szolgál. Ha ez TRUE értékű. Ez mindössze annyit csinál, hogy a belső változók és kimenő paraméterek értékét visszaállítja alapértékre.
    Hogy melyiknek mi az alap értéke az kiderül az FB41 instance DB-jéből. Megnyitod és megnézed mi van a DB "Initial value" oszlopban. Erre áll be. A COM_RST nem élvezérelt, az init value mindaddig benne lesz a változókban amíg állapota TRUE. Természetesen amint FALSE lesz, az összes olyan változó aminek a programban értéket adsz azonnal felülíródik!!!

    Erre írok egy példát.
    Ha a beállított értéked 20 (SP_INT) a mért értéked pedig 50 (PV_IN) és az integráló tag be van kapcsolva (P_SEL=TRUE) az erősítés 1 (GAIN) akkor lesz egy -30-as hibajeled és természetesen egy ezzel azonos beavatkozó értéked (LMN).
    Ha most a COM_RST taposod (TRUE) akkor minden nulla lesz amíg ez TRUE, de abban a pillanatban ahogy felengeded (FALSE) minden azonnal visszaáll a fenti értékekre, mert kívülről (az FB41 paramétereivel) azonnal felülíródik. Tehát ez teljesen természetes, más nem is történhet, ezen nem kell csodálkozni!
    Ami nem íródik felül azonnal az az integráló tag aktuális értéke, ami szintén 0 lesz egy COM_RST alatt. Hiszen üzem közben az LMN_I szépen ballag lefele a padlóig, vagy felfele a plafonig a hibajel és az integrálási idő által meghatározott mértékben, vagy beáll valahova. A COM_RST hatására nulláról újrakezdi ezt a "ballagást". Ez persze nagyon gyors is lehet rövid integrálási idő beállítása mellett vagy extrém hibajel esetén. Az integráló tag egyébként külön is alaphelyzetbe állítható az I_ITLVAL=0 és I_ITL_ON=TRUE állapottal.

    A legjobban úgy lehet tetten érni hogy a szabályzód miért akad ki, ha figyeled a hibajelet, és a 3 beavatkozó értéket (LMN_P. LMN_I ás LMN_D). Azonnal látni fogod melyik tag viszi el a beavatkozó értéket.
    Egyébként PID élesztést lépésenként érdemes csinálni. ELőször kis GAIN (akár 0-val kezdve) és csak a P tag legyen bekapcsolva, az I lés D kikapcsolva!

    Van pár alapszabály a PID blokk paraméterezését és használatát illetően. Pl. hogy az értékeket normalizálni kell (vagy legalábbis célszerű) kézenfekvően %-ra.
    Nagyon sok helyen elbukhat a dolog kezdve azzal, hogy pl. bekapcsolod a PVPER_ON-t, de a PV_IN-en eteted nem a PV_PER-en keresztül. EZ nagyon ostoba hiba szokott lenni.
    Vagy a PV_PER-en eteted, de rosszul (vagy sehogy) van megadva a normalizáláshoz szükséges PV_FAC, PV_OFF értéke. Ha már a hibajel kiakad valamelyik végtelenbe (+ vagy -), akkor bizony itt van a baj!

    Ráadásul a PID blokkot nem, tudom hogyan hívtad meg, de ha P vagy D tagot is használod benne, akkor nagyon fontos hogy pontos időközönként legyen meghívva és ezt az időközt pontosan közölni kell vele a CYCLE paraméterben. ha ezek közül egyik feltétel sem teljesül, akkor a D és az I tag hülyeséget fog csinálni, mert a blokknak fogalma sem lesz arról mennyi idő telt el az előző lefutása óta.

    [ Szerkesztve ]

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