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ě.

Pozor: Parametry funkcí (např. u funkce MUL násobení vstupu konstantou) jsou v kódu vedeny jako konstanty, za běhu programu je nelze měnit. Mohou být změněny pouze úpravou zdrojového kódu a přehráním programu. Pokud budeme chtít měnit parametry funkcí, musíme je „vytáhnout“ na vstupy a připojit ke globálním proměnným.

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.

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

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 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

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.

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“.

  • © Energocentrum Plus, s.r.o. 2017 - 2024