Dopravní zpoždění je doba, která uplyne mezi akčním zásahem a jeho projevením se na měřené hodnotě. Typicky jde o čas, který zabere doprava média mezi ventilem a čidlem. Snažíme se, aby tato doba byla co nejkratší, ideálně v řádu sekund. Při dlouhém dopravním zpoždění může být soustava až nezaregulovatelná. Voda se v potrubí pohybuje rychlostí cca. 1 m/s, vzduch ve VZT kanálu asi 2 – 5 m/s. Proto by například u VZT s vodním ohřevem měl být regulační ventil co nejblíže registru ohřevu a čidlo teploty na vzduchu bezprostředně za ventilátorem (při dodržení zklidňovací délky potrubí).
Na následujícím obrázku je simulovaný průběh vstupů a výstupu PI regulátoru, který reguluje soustavu 1. řádu se zesílením 0,9 a časovou konstantou 20 s. Dopravní zpoždění soustavy je 0 s. Parametry regulátoru jsou Xp = 15 K, Ti = 30 s.
Regulátor s Xp = 15 K, Ti = 30 s, soustava bez dopravního zpoždění
Po zavedení jednotkového skoku (změna požadované hodnoty z 20 na 22 °C) skutečná hodnota (zelená) plynule dosáhne hodnoty požadované (modrá), výstup regulátoru (červeně) se ustálí během asi 20 s na nové hodnotě. To lze považovat za ideální chování.
Jakmile ovšem zavedeme do soustavy dopravní zpoždění – zde 3 s, v praxi by to bylo více –, například nahradíme elektroohřev s topnými spirálami vodním ohřívačem, ustálení již trvá několikanásobně déle (asi 40 s), nicméně stále bychom mohli systém mít za dobře nastavený:
Regulátor s Xp = 15 K, Ti = 30 s, dopravní zpoždění soustavy 3 s
Pokud dopravní zpoždění dále zvýšíme, stačí na 5 s, k čemuž stačí při montáži prodloužit vzdálenost mezi ventilem a registrem ohřevu, k ustálení dojde až za skoro 2 minuty a navíc dochází k překmitu (což u vzduchotechniky nevadí, ovšem u horkovodního výměníku by již mohl vybavit bezpečnostní termostat):
Regulátor s Xp = 15 K, Ti = 30 s, dopravní zpoždění soustavy 5 s
Kdybychom chtěli toto chování zlepšit, začneme nejspíše zvětšením šířky pásma. Po jejím zdvojnásobení na 30 K se soustava již chová přijatelně:
Regulátor s Xp = 30 K, Ti = 30 s, dopravní zpoždění soustavy 5 s
Podobně bychom řešili i reálné regulační obvody.
U některých situací můžeme využít ofset, tedy vodorovný posun charakteristiky.
Význam ofsetu
Typické použití je u kaskádní regulace teploty, kdy první PI regulátor porovnává skutečnou teplotu v místnosti s požadovanou hodnotou a jeho výstupem je korekce teploty pro požadovanou hodnotu na přívodu. Zjednodušené schéma je zde:
Bloky programu pro kaskádní regulaci teploty
Regulátor prostoru bude nastaven tak, aby při rozdílu teploty v prostoru a požadované teploty poskytl korekci požadované teploty přívodní. Omezovací blok zajišťuje dodržení hygienického minima a maxima (15 … 35 °C). Na obrázku je rozdíl teplot 20 – 19 = 1 K, systém lehce nedotápí, proto je požadovaná hodnota na přívodu zvýšena o 5 K na 25 °C.
V předchozím případě pracujeme ale také s parametry Min a Max. Jde o meze, v nichž se smí pohybovat výstupní signál. Výchozí hodnoty jsou 0 a 100 %, což odpovídá většině výstupních periferií, jako jsou ventily a klapky – rozsah 0 až 100 % dává smysl pro vizualizaci i uvádění do provozu, ve výstupním driveru se tato hodnota převádí na fyzický signál 0…10 V či 4…20 mA.
V kaskádní regulaci není u regulátoru prostoru Min a Max nastaveno na 0 a 100 (%), ale -10 a 10 (K). V těchto hodnotách se totiž bude pohybovat korekce. Z toho plyne i nastavení šířky pásma – tento parametr je z důvodů kompatibility se staršími verzemi programu vztažen na 100 jednotek výstupu, tedy běžně na 0…100 %. Je to vlastně definice strmosti. Zde máme ovšem rozsah výstupu -10 … 10 = 20 K, tedy při nastavení Xp = 20 bude efektivní šířka pásma 4 K (18 … 22 °C).
Ofset v kaskádním regulátoru pro prostor
Platí tedy:
Xp = 100 * Xpeff / (Max – Min)
přičemž aby při rovnosti teploty požadované a teploty v prostoru byl výstup korekce 0, musíme celou křivku posunout doprava o ofset
Of = Xpeff / 2
Nezapomeňme, že Xpeff, efektivní šířka pásma, je rozsah změn měřené veličiny, který u P regulátoru odpovídá rozsahu výstupního signálu – na obrázku výše se pohybujeme po šikmé části charakteristiky: x je v intervalu 18 … 22 °C, výstup v intervalu -10 … 10 K. Podobně pro Xpeff = 8 K (tedy korekce by byla 10 K při rozdílu teplot 4 K) bychom nastavili Xp = 40, Of = 4.
Někdy se v praxi toto poměrně komplikované nastavení obchází tak, že se regulátor nechá s výchozími mezemi 0 … 100 % nebo -100 … 100 % a korekce se následně spočítá pomocí dvoubodové lineární transformace:
Bloky programu pro kaskádní regulaci teploty s přepočtem výstupu regulátoru v prostoru
Ostatní parametry PI regulátoru jsou popsány v nápovědě k Domat IDE. V knihovně najdeme ještě regulátor PID, který navíc obsahuje derivační složku, ale ten se používá jen výjimečně. Vzhledem ke komplikovaným vlastnostem regulovaných soustav je bezpečnější použít dostatečně zatlumený PI regulátor, čímž se zvýší stabilita regulovaného okruhu.
Někdy se může stát, že implementace PI regulátoru ze standardní knihovny Lib.Core nebude pro určité použití vyhovovat: například by mohlo být vhodné při vypnutí a opětovném zapnutí regulátoru zachovat naintegrovanou I-složku. V jazyce ST je samozřejmě možné napsat regulátor vlastní, třeba podle oblíbeného kódu, se kterým již máme zkušenost a na který jsme zvyklí. PI regulátor, který má místo šířky pásma jako parametr zesílení (vstup K), může v Domat IDE vypadat například takto:
NAMESPACE Lib NAMESPACE Core NAMESPACE V1_0
FUNCTION_BLOCK PI
VAR
tmp : REAL;
e : REAL;
EPrev : REAL;
y : REAL;
YPrev : REAL;
Integral : REAL;
IYes : BOOL;
END_VAR
VAR_INPUT
In : REAL := 0; // x – měřená hodnota
SetPoint : REAL := 0; // w – požadovaná hodnota
IsDirect : BOOL := FALSE; // charakteristika „topení“
Enabled : BOOL := TRUE;
Bp : BOOL := FALSE;
K : REAL := 1; // zesílení
Off : REAL := 0;
Ti : REAL := 120; // integrační konstanta, v s
IMin : REAL := 0; // dolní mez
IMax : REAL := 100; // horní mez
Disval : REAL := 0; // výstupní hodnota při stavu „disabled“
END_VAR
VAR_OUTPUT
Out : REAL;
PFactor : REAL;
IFactor : REAL;
END_VAR
INIT
YPrev := 0;
y := 0;
Integral := 0;
IYes := TRUE;
END_INIT
(*function block's body*)
e := SetPoint - In;
IF IsDirect THEN
e := -e;
END_IF;
IF IMax < IMin + EPSILON THEN
Out := IMax;
EPrev := e;
(* and quit; *)
ELSE
IF Ti <= 0.0 THEN
Integral := 0.0;
IYes := FALSE;
END_IF;
IF K <= 0.0 THEN
IF IsDirect THEN
IF In <= (SetPoint + Off) THEN
Out := IMin;
ELSE
Out := IMax;
END_IF;
ELSE (* if is reverse *)
IF In <= (SetPoint + Off) THEN
Out := IMax;
ELSE
Out := IMin;
END_IF;
END_IF;
EPrev := e;
(* and quit; *)
ELSE
IF NOT Enabled THEN
Out := Disval;
Integral := 0.0; //nuluje I složku při zakázání
EPrev := e;
(* and quit; *)
ELSE
IF Bp THEN
IYes := FALSE;
Integral := 0.0;
END_IF;
IF IsDirect THEN
y := K * (e - Off);
ELSE
y := K * (e + Off);
END_IF;
IF y < IMin THEN y := IMin; END_IF;
IF y > IMax THEN y := IMax; END_IF;
PFactor := y;
IF IYes THEN
(* dy *)
tmp := time_to_real( GetDeltaTime() ) * (EPrev + e) * 0.5 / 1E07;
IF ( YPrev < IMin + EPSILON AND tmp > 0.0 ) OR
( YPrev >= IMax - EPSILON AND tmp < 0.0 ) OR
( YPrev > IMin + EPSILON AND YPrev < IMax - EPSILON )
THEN
Integral := Integral + (K / Ti * tmp );
END_IF;
IF y + Integral > IMax THEN
Integral := IMax - y;
END_IF;
IF y + Integral < IMin THEN
Integral := IMin - y;
END_IF;
y := y + Integral;
END_IF;
IF y < IMin THEN y := IMin; END_IF;
IF y > IMax THEN y := IMax; END_IF;
Out := y;
YPrev := y;
EPrev := e;
END_IF;
END_IF;
END_IF;
Ifactor := Integral;
END_FUNCTION_BLOCK
END_NAMESPACE END_NAMESPACE END_NAMESPACE
Tento regulátor by se dal použít například tam, kde výstupní signál má stejnou fyzikální veličinu jako signály vstupní, například při regulaci výkonu FVE. (S nulovou I konstantou a výchozím zesílením 1 funguje v podstatě jako odečítací blok.) Funkční blok využívá některé standardní knihovní prvky, proto je součástí jmenného prostoru Lib.Core.V1_0, stejně jako standardní knihovní P/PI/PID regulátory.