pid_regulator
Funkce
Číslicový regulátor, který podle dvou vstupních numerických výrazů - žádaná
a regulovaná hodnota - vypočítá akční zásah (výstup). Má tři způsoby výpočtu akčního
zásahu, které lze volit i během samotné regulace.
Syntax
pid_regulator pid_regulator_name;
rem = string;
bubble = string;
timer = timer_name;
owner = owner_name;
position = integer, integer, integer, integer;
win_disable = [ identifier, . . . ];
win_title = string;
access = integer;
tab_select = integer;
send_same_data;
condition = boolean_expression;
wish_value = real_expression;
expression = real_expression;
output = real_dataelement;
inverse;
receivers = [ identifier, . . . ];
manual = real_expression;
parameters
regulator_type = identifier;
adaptive = boolean;
refil = boolean;
param_1 = real;
param_2 = real;
param_3 = real;
file_name = file_name;
end_parameters;
show_description;
wish_value_section
BLOCK_SECTION
end_wish_value_section;
value_section
BLOCK_SECTION
end_value_section;
output_section
BLOCK_SECTION
end_output_section;
colors
border_ink = color;
border_paper = color;
top_shadow = color;
bottom_shadow = color;
ink = color;
paper = color;
value = color;
low_limit = color;
high_limit = color;
h_grid = color;
v_grid = color;
end_colors;
end_pid_regulator;
BLOCK_SECTION
ratio = integer;
view_position = integer;
mode = identifier;
content = identifier;
range_from = real;
range_to = real;
low_limit = real;
high_limit = real;
history = integer;
dec_places = integer;
real_step = real;
h_grid = integer;
v_grid = integer;
font = font_identifier, integer, style_identifier;
mask = string;
Specifické parametry přístroje
- condition
Obsahuje podmínku spuštění regulace. Dokud není výraz condition = true,
regulátor nenastavuje na výstup žádnou hodnotu.
- wish_value
Číselný výraz určující žádanou hodnotu, které se regulátor bude snažit dosáhnout.
- expression
Číselný výraz s hodnotou aktuálního stavu regulované veličiny, tuto veličinu
regulátor reguluje.
- output
Obsahuje datový element, proměnnou nebo kanál, na který bude regulátor posílat
vypočtený regulační zásah. Velikost zásahu je určena mezemi definovanými v sekci
output regulátoru. Akční zásah nepřesáhne hodnotu range_to a neklesne pod
hodnotu range_from.
- inverse
parametr určující smysl výstupu regulátoru. Je-li tato volba zvolena dochází ke
změně smyslu výstupní veličiny tak, že maximální výstup regulátoru odpovídá minimální
hodnotě rozsahu výstupní sekce a minimální výstup odpovídá hodnotě rozsahu výstupní
sekce maximální.
- receivers
Seznam přístrojů, kterým se budou posílat zprávy o akcích regulátoru.
Podle nastavení parametru send_same_data se regulátor chová dvěma způsoby -
buď volá přístroje uvedené v receivers jen při změně akční hodnoty
(parametr send_same_data není nastaven), nebo (send_same_data nastaven je)
v každém časovém kroku bez ohledu na stav nebo změnu stavu akční veličiny.
- manual
Výraz definující akční zásah při nesplněné podmínce regulace. Pomocí tohoto výrazu
je možné zaručit stálý korektní výstup regulátoru, i když je regulátor vypnut. Při
opětovném zapnutí regulace pomocí výrazu condition bude první akční hodnotou
hodnota výrazu tohoto parametru.
- regul_type
Druh regulačního algoritmu použitého k regulaci. Regulátor poskytuje následujíci
algoritmy:
- classical - PID regulátor, který počítá regulační zásah podle klasické
rovnice diskretizovaného spojitého PID regulátoru.
- classicalDelay - jedná se o modifikaci předchozího regulátoru, která
obsahuje navíc filtraci derivačního členu regulátoru.
- takahashi - PID regulátor, který počítá regulační zásah podle rovnice
odvozený Takahashim. Tato rovnice obsahuje některé úpravy vedoucí v některých
případech ke zkvalitnění regulace.
- takahashiDelay - opět modifikace regulátoru takahashi s filtrací
derivačního členu regulátoru.
Výše uvedené čtyři typy regulátorů počítají regulační zásah podle klasického schematu
s pomocí parametrů r0, Ti a Td. Tyto konstanty je možné vypočítat
z automaticky získaných parametrů regulované soustavy. Je potom lhostejno, zdali se
tyto tři konstanty použijí fixní nebo automaticky vypočítané (viz níže parametr
adaptive). Výše uvedené regulátory tedy mohou být adaptivní i neadaptivní.
- variable - tvarovatelný. U této modifikace regulátoru je možné pomocí dvou
konstant - poměrného tlumení a kruhové frekvence - určit tvar průběhu regulované
veličiny. Obě konstanty mohou nabývat hodnot (0; 1>, přičemž nižší hodnoty
znamenají rychlejší regulaci s větší pravděpodobností překmitu a naopak. Z hlediska
kvality regulace se doporučuje, aby součin obou konstant byl v intervalu
<0.85; 0.95>. Konkrétní hodnoty je však nutno získat experimentálně na skutečné
regulované soustavě. Regulátor variable počítá regulační zásah z automaticky
získaných parametrů soustavy bez použití konstant r0, Ti a Td jiným
algoritmem. Pro správnou funkci tedy tento regulátor musí být vždy autoadaptivní.
- adaptive
Je-li hodnota tohoto parametru true, je zapnuta automatická
identifikace a konstanty r0, Ti a Td jsou zjišťovány dynamicky během
procesu regulování.
- refil
Je-li hodnota parametru true, používá regulátor k identifikaci
algoritmu číslicové odmocninové filtrace pomocí filtru Refil. V opačném případě se
identifikuje soustava iterativní metodou nejmenších čtverců.
UPOZORNĚNÍ:
Více informací o použitých regulačních mechanismech a regulátorech samotných je možné
nalézt v kapitole Regulátory a regulace manuálu.
- param_1
U regulátoru classical zesílení, u regulátoru variable poměrné tlumení
- param_2
U regulátoru classical integrační konstanta (v sekundách), u regulátoru
variable kruhová frekvence
- param_3
U regulátoru classical derivační konstanta (v sekundách)
- file_name
Obsahuje název souboru s uloženými parametry regulátoru.
- show_description
je klíčové slovo, které určuje, zda se má zobrazit popis jednotlivých sekcí
regulátoru.
- section a end_section
Jsou klíčová slova, mezi kterými jsou umístěny parametry ovlivňující vzhled
vykreslování výstupní a dvou vstupních hodnot.
- ratio
Vyjadřuje poměrnou část šířky plochy, která bude nastavena této sekci vzhledem
k celkové šířce regulátoru.
- view_position
Má hodnotu 1, 2, nebo 3, která udává pořadí sekce v regulátoru při zobrazování.
- mode
Určuje grafickou podobu zobrazení uvedením jednoho z názvů módu:
- pointer - ručkový přístroj
- digital - digitální přístroj s celistvými číslicemi
- dot_digital - digitální přístroj s bodovými číslicemi
- vertical_bar - poměrná svislá barevná plocha
- horizontal_bar - poměrná vodorovná barevná plocha
- flow_graph - posunující se graf
- sweep_graph - stojící graf
- text_display - textový displej
- content
Má rovněž vliv na grafickou podobu přístroje. Může nabývat tří hodnot : max,
med a min. Pro všechny módy znamená nastavení content = max
zobrazení kompletní podoby přístroje. Některé módy navíc umožňují schovat jednu
ze svých částí, a to nastavením parametru content = med , popř. content = min.
- range_from a range_to
Jsou parametry udávající rozsah přístroje. Bude-li hodnota vstupního výrazu
přístroje menší, než je hodnota range_from, přístroj se nastaví právě na
hodnotu uvedenou v range_from; stejně tak bude-li hodnota vstupního výrazu
přesahovat range_to, přístroj se nastaví právě na hodnotu uvedenou
v range_to.
- low_limit a high_limit
Jsou parametry ovlivňující barevné zobrazení vykreslované hodnoty. Je–li hodnota
menší než low_limit, vykresluje se barva uvedená v parametru
colors–low_limit, přesáhne–li hodnota high_limit, pak je aktuální
barva parametru colors–high_limit. V rozsahu mezi limitami se hodnota
vykresluje barvou colors–value. Podle zvoleného módu se bude měnit např.
barva pozadí přístroje, popř. se danými barvami vykreslí hodnoty obou limit v grafu.
- history
Udává počet zobrazených hodnot v grafu. U jiných módů nemá význam.
- dec_places
Je počet zobrazovaných desetinných míst pro módy s číselným vykreslováním hodnoty.
- real_step
Je parametr důležitý pro nastavování limitů přístroje pomocí numerického řádku.
Jeho numerická velikost udává přírůstek hodnoty při použití přičítacích a odečítacích
šipek numerického řádku.
- h_grid a v_grid
Jsou parametry určující zobrazení vodorovných a svislých čar do grafu jako jeho
pomocné síťování. Velikost parametrů h_grih a v_grid udává počet
zobrazených vodorovných a svislých čar.
- font
Je parametr určující font při vykreslování hodnoty módem text_display. Má
vždy tři části. První z nich font_identifier určuje typ písma (např. TIMES,
SYSTEM, aj.), druhý určuje jeho velikost v tiskových bodech a třetí parametr
style_identifier rozhoduje o tom, zda bude písmo normální (normal),
tučné (bold) nebo skloněné (italic).
- mask
Je šablona pro vypisování libovolného textu současně s numerické hodnotou přístroje.
Parametr má význam při mode = text_display. V textovém režimu se zadává
v uvozovkách, v inspektoru přístroje bez uvozovek. Může mít např. tvar
mask = 'rychlost = ##.## m/s'; , kde znak # udává umístění a velikost zobrazované
numerické hodnoty.
Poznámky
- Více informací o použitých regulačních mechanismech a regulátorech samotných je
možné nalézt v kapitole Regulátory a regulace manuálu.
- Implicitně jsou nastaveny parametry:
- position = 0, 0, 100, 80;
- access = 4294967295;
- tab_select = 4294967295;
- access = 65535;
- tab_select = 65535;
- regulator_type = quick;
- param_1 = 1;
- param_2 = 1;
- param_3 = 1;
Příklad
Příklad nastavení parametrů přístroje pid_regulator:
pid_regulator id_2;
timer = 1;
owner = background;
position = 217, 29, 445, 208;
wish_value = w;
expression = vystup_ze_soustavy;
output = r;
condition = start;
output_section
mode = flow_graph;
end_output_section;
wish_value_section
view_position = 1;
font = TIMES, 10, normal;
mask = 'input ##.#';
end_wish_value_section;
value_section
mode = flow_graph;
history = 50;
end_value_section;
colors
paper = white;
value = black;
end_colors;
end_pid_regulator;
Nativní procedury přístroje
Podrobnější informace k nativním procedurám je možné nalézt
v kapitole Regulátory a regulace.
SetRegulatorType( type : number )
GetRegulatorType( VAR type : real )
Metody sloužící k zjišťování a nastavování typů regulátorů. Parametr type
může nabývat následujích hodnot:
- 1 - classical
- 2 - classicalDelay
- 3 - takahashi
- 4 - takahashiDelay
- 5 - variable
SetAdaptive( Adaptive : boolean );
GetAdaptive( VAR Adaptive : boolean );
Metody pro zapínání a vypínání samočinné identifikace. Je-li parametr Active
= true identifikace běží, případně bude běžet.
SetParameters( t, omega : real );
SetParameters( r0, tI, tD : real );
GetParameters( VAR t, omega : real );
GetParameters( VAR r0, tI, tD : real );
Metody slouží ke změně parametrů regulátorů za běhu regulace. Pro tvarovatelný
regulátor má význam metoda se dvěma parametry - poměrným tlumením a kruhovou frekvencí;
pro klasický regulátor je určena metoda se třemi parametry - zesílením, integrační
a derivační konstantou. Volání metody s neodpovídajícím počtem parametrů vede na chybu
překladu aplikační úlohy. Více informací je možné získat v referenční příručce PID
regulátoru.
SetDerivationDelay( k : real );
GetDerivationDelay( VAR k : real );
Metody nastavují nebo zjišťují hodnotu parametru filtrace derivační složky regulátorů
takahashiDelay a classicalDelay.
Více viz kapitola Regulátory a regulace.
RunIdentification();
StopIdentification();
IsIdentificationRunning( VAR running : boolean );
Metody pro řízení a zjišťování stavu identifikačního procesu. Metoda
RunIdentification spustí identifikaci bez ohledu na její stav, metoda
StopIdentification ji vypne. Následující časový krok ji však zase může zapnout.
Více viz kapitola Regulátory a regulace.
SetIdentification( type : number );
GetIdentification( VAR type : real );
Metody pro nastavování způsobu identifikace soustavy. Povolené parametry jsou:
- 1 - identifikace iterativní metodou nejmenších čtverců
- 2 - identifikace metodou číslicové odmocninové filtrace
Více viz kapitola Regulátory a regulace.
SetLastOutputValue( Value : real );
Metoda ovlivňuje vnitřní stav regulátoru a přestavuje poslední hodnotu akčního zásahu.
Nový akční zásah je vypočítán jako součet hodnoty posledního zásahu a korekce vypočtené
regulátorem. Pomocí této metody je tedy možné efektivně a rychle dosáhnout požadované
počáteční hodnoty výstupu.
UPOZORNĚNÍ: U adaptivního regulátoru je možné tímto
zásahem způsobit nefunkčnost regulační smyčky.
Více viz kapitola Regulátory a regulace.
SetOutputTrimming( OutputTrimming : boolean );
PID regulátor během regulace akumuluje ve své integrační části minulé akční zásahy a
uchovává je ve svém vnitřním stavu. Tento vnitřní stav je kopírován na
výstup regulátoru. Výstupní sekce (output_section) definuje meze, které výstup
regulátoru nesmí překročit. Může tak nastat situace, kdy se vnitřní stav regulátoru
liší od jeho skutečného výstupu -- výstup je ořezán. Předdefinované nastavení
regulátoru tento stav vylučuje, dochází k degradaci vnitřního stavu podle definovaných
výstupních mezí. Regulátor potom reaguje mnohem rychleji na změnu stavu soustavy. Ořezávání
vnitřního stavu však má za následek, že regulátor v okamžiku dosažení meze výstupu přestává
integrovat, nechová se tedy podle rovnic uvedených v kapitole
Regulátory a regulace.
OCL metoda SetOutputTrimming vypíná (nebo zapíná) ořezávání výstupu. Pokud je
ořezávání zapnuto (přednastavená hodnota), je vnitřní stav totožný s výstupem, naopak
je vnitřní stav korektní podle definice regulátoru a výstup je jiný -- přizpůsobený
výstupním mezím.
Událostní procedury přístroje
Přístroj může volat standardní událostní procedury:
OnActivate()
OnShow()
OnHide()
OnNewPosition( RectX, RectY, RectW, RectD : integer )
OnWindowMinimize()
OnWindowMaximize()
OnWindowRestore( WasMinimized, WasMaximized : boolean )
OnWindowClose()
Podrobnější informace k těmto procedurám lze nalézt v kapitole
Programování a procedury.
Specifické událostní procedury přístroje
OnOutput( &U : real )
Proceduru přístroj volá vždy při nastavení výstupu, ať již je jeho hodnota jakákoli. Procedura
je proto volána v každém časovém kroku přístroje. Parametr U obsahuje aktuální
hodnotu výstupu regulátoru, přičemž tato hodnota v okamžiku volání procedury ještě není zapsána
do výstupního datového elementu. Procedura proto může výstup regulátoru ovlivnit upravením
parametru U na libovolnou hodnotu. Teprve takto upravená (případně nezměněná) hodnota
bude zapsána na výstup regulátoru.
OnOutputChange( &U : real )
Proceduru přístroj volá vždy při nastavení výstupu, je-li jeho aktuální hodnota odlišná
od hodnoty předchozí. Procedura proto nemusí být volána v každém časovém kroku přístroje.
Parametr U obsahuje aktuální
hodnotu výstupu regulátoru, přičemž tato hodnota v okamžiku volání procedury ještě není zapsána
do výstupního datového elementu. Procedura proto může výstup regulátoru ovlivnit upravením
parametru U na libovolnou hodnotu. Teprve takto upravená (případně nezměněná) hodnota
bude zapsána na výstup regulátoru.