Dokumentace

Funkce

Funkce je POU, která si neukládá svůj stav (tj. pokud je volána se stejnými vstupními parametry, musí produkovat stejný výsledek). Funkce může vracet pouze jeden výsledek, ale ten může být různého typu. Funkce nevracející výsledek by neměla být volána ve výrazu. Norma definuje standardní funkce a uživatelem definované funkce. Standardní funkce jsou např. ADD pro sčítání, ABS pro absolutní hodnotu, SQRT pro odmocninu, SIN pro sinus. Jakmile jsou jednou definovány nové uživatelské funkce, mohou být používány opakovaně.

Funkce se skládá ze dvou základních částí: deklarační a výkonné. V deklarační části POU se definují proměnné potřebné pro činnost POU. Výkonná část pak obsahuje vlastní příkazy pro realizaci požadovaného algoritmu.

Deklarace funkce

FUNCTION jmeno: datový typ ... END_FUNCTION	//datový typ je nepovinný pro funkci, která nevrací hodnotu

Deklarace proměnných

Deklarační část funkce obsahuje definice proměnných potřebných pro svoji činnost. Proměnné jsou používány pro ukládání a zpracování informací. Každá proměnná je definována jménem proměnné a datovým typem. Datový typ určuje velikost proměnné v paměti a zároveň do značné míry určuje způsob zpracování proměnné. Pro definice proměnných jsou k dispozici standardní datové typy (BOOL, BYTE, INT, …). Použití těchto typů závisí na tom, jaká informace bude v proměnné uložena (např. typ BOOL pro informace typu ano/ne, typ INT pro uložení celých čísel se znaménkem apod.). Uživatel má také možnost definovat svoje vlastní datové typy. Umístění proměnných v paměti PLC systému zajišťuje automaticky programovací prostředí. Pokud je to potřeba, může umístění proměnné v paměti definovat i uživatel.

Vstupní proměnné

VAR_INPUT ... END_VAR

Výstupní proměnné

VAR_OUTPUT ... END_VAR

Vstupně/výstupní proměnné

VAR_IN_OUT ... END_VAR

Lokální proměnné

VAR ... END_VAR

Externí proměnné

VAR_EXTERNAL ... END_VAR

Inicializace proměnných

VAR I: INT := 1; END_VAR;

Výkonná část

Výkonná část funkce následuje za částí deklarační a obsahuje příkazy a instrukce. Ve výjimečných případech nemusí definice funkce obsahovat žádnou deklarační část a potom je výkonná část uvedena bezprostředně za definicí začátku funkce. Příkladem může být funkce, která pracuje pouze s globálními proměnnými, což sice není z hlediska architektury programu ideální řešení, ale technicky může existovat. Výkonná část funkce může obsahovat volání dalších funkcí. Při volání mohou být předávány parametry pro volané funkce resp. funkční bloky.

MY_FUNC := Value;	//výsledek funkce

Volání funkce

Formální, kompletní

A := MY_FUNC( First_Index := 1, Last_Index := 5 );

Neformální

A := MY_FUNC( 1, 5);

Příklad funkce (MY_FUNC):

VAR_GLOBAL				//externí interface
Data_Array: ARRAY[0..100] OF INT;
END_VAR

FUNCTION MY_FUNC: INT //název funkce "MY_FUNC", vraci výsledek typu INT

VAR_INPUT //vstupní proměnné
First_Index, Last_Index: INT;
END_VAR

VAR_EXTERNAL //externí proměnné
Data_Array: ARRAY [0..100] OF INT;
END_VAR

VAR //lokální proměnné
Sum, I: INT;
END_VAR

(* Tělo Funkce *)
Sum := 0;
FOR I:= First_Index TO Last_Index
DO Sum := Sum + Data_Array[I];
END_FOR;
MY_FUNC := Sum; //výsledek funkce

END_FUNCTION

Vložená vlastní funkce do programu vytvořeném ve FUPLE.

Blokace výpočtu

Vstupní proměnná en slouží pro řetězení a blokování následných výpočtů. Proměnná "eno" kopíruje stav vstupní proměnné "en".