====== Rozšířený PI regulátor ====== {{:cs:mervis-ide:35-help:advancedpicontroller.png}} ==== Celé jméno ==== Lib.Mervis.v1_0.AdvancedPiController ==== Potřebné reference projektu ==== * Lib.Mervis ===== Popis ===== Pomocný blok sloužící pro realizaci PI regulátoru s možností sledování akční veličiny. ===== Použití v ST ===== program test var pi: lib.mervis.v1_0.AdvancedPiController := (Xp := ..., Ti := ..., Min := ..., Max := ...); end_var pi(Input := ..., SetPoint := ..., Enable := ..., TrackingEnable := ..., TrackingValue := ..., Output => ...); end_program ===== Vstupy ===== |Jméno|Datový typ|Povolený rozsah|Retain|Nutno připojit |Význam| |Input |real |  |Ne |Ano |Skutečná hodnota | | |SetPoint |real |  |Ne |Ano |Žádaná hodnota | | |Enable |bool |  |Ne |Ne |Povolení funkce, pokud je //false// je na výstupu hodnota 0 | | |TrackingEnable |bool |  |Ne |Ne |Povolení funkce sledování hodnoty //TrackingValue// | | |TrackingValue |real |  |Ne |Ne |Sledovaná hodnota | | |Min |real |<= 0 |Ne |Ne |Omezení minimální hodnoty výstupu | | |Max |real |>= 0 |Ne |Ne |Omezení maximální hodnoty výstupu | | |Xp |real |> 0 |Ne |Ne |Šířka pásma | | |Ti |real |> 0 |Ne |Ne |Integrační konstanta | | |TrackingDontIncludePPart|bool |  |Ne |Ne |Určuje způsob výpočtu nového akčního zásahu v režimu sledování - popis viz [[#tracking_mode|níže]] | | |TrackingThreshold |real |  |Ne |Ne |Hodnota pro přepočtení vstupní veličiny na velikost akčního zásahu (např. tedy kolik procent výstupu odpovídá jednomu stupni celsia)| | ===== Výstupy ===== |Jméno|Datový typ |Význam| |Output |real |Výstup | | |TrackingCalculatedThreshold|real |Hodnota pro přepočtení vstupní veličiny na velikost akčního zásahu (např. tedy kolik procent výstupu odpovídá jednomu stupni celsia)| | |InvalidParameters |bool |Indikace neplatného nastavení regulátoru (//Xp, Ti, Min nebo Max// mimo povolený rozsah) | | ===== Metody bloku ===== |Jméno |Význam| |[[SimplePiControllerWithEn_Adjust.htm|Adjust]] |Slouží pro úpravu integrační složky tak, aby byla na výstupu maximální hodnota | | |[[SimplePiControllerWithEn_AdjustToValue.htm|AdjustToValue]]|Slouží pro úpravu integrační složky tak, aby byla na výstupu požadovaná hodnota| | |[[SimplePiControllerWithEn_Restart.htm|Restart]] |Slouží pro vynulování interních hodnot a restartu výpočtu | | ===== Podrobný popis funkce ===== Funkční blok realizuje PI regulátor s možností režimu sledování akční veličiny získané např. jiným regulátorem. Pro výpočet výstupu jsou použité následující vzorce: * Regulační odchylka\\ **e = SetPoint - Input** * Proporcionální složka\\ **PPart = (Max - Min) / Xp * e** * Integrační složka (každý scan cyklus)\\ **IPart = IPart + (Max - Min) / (Xp * Ti) * e * ΔT** * Výstup\\ **Output = PPart + IPart** Regulátor obsahuje algoritmy pro omezení velikosti integrační složky v případě dosažení saturace - **Anti-windup** ==== Režim sledování ==== Pokud je vstup //TrackingEnable// nastaven na hodnotu //true//, dochází ke změně chování regulátoru. V každém výpočetním cyklu se použije hodnota //TrackingValue// jako výchozí pro výpočet nového akčního zásahu. Způsob použití se liší podle nastavení parametru //TrackingDontIncludePPart//, pokud má hodnotu * **true**. Regulátor vypočte svoji I-složku tak, aby přesně odpovídala //TrackingValue// - tedy pro výpočet se uvažuje e = 0. * **false**. Regulátor vypočte svoji I-složku tak, aby výstup regulátoru přesně odpovídal //TrackingValue// - do výpočtu se zahrnou i aktuální hodnoty vstupů //SetPoint// a //Input// Následně dojde k výpočtu nového akčního zásahu (tedy započtení aktuální P-složky), který se nastaví na výstup //Output//. Pro snažší použití s blokem [[TrackingPiSelector.htm|TrackingPiSelector]] slouží vstup //TrackingThreshold// a výstup //TrackingCalculatedThreshold//, pomocí kterých se určují hystereze pro výběr regulátoru, jehož výstup se použije. ==== Poznámky k použití ==== * Pro použití při řízení **ohřevu** se regulátor zapojuje následovně * SetPoint = Žádaná hodnota * Input = Měřená hodnota * Pro použití při řízení **chlazení** se regulátor zapojuje následovně * SetPoint = Měřená hodnota * Input = Žádaná hodnota * ! Regulátor na základě své definice a implementaci anti-windup **neumožňuje pracovat v režimu "bez nuly"**, tzn. kdy v rozsahu //Min//..//Max// není obsažena nulová hodnota - toto je také indikováno pomocí výstupu //InvalidParameters//