Obsah

Funkční blok

Funkční blok si - na rozdíl od funkce - může pamatovat některé hodnoty z předchozího volání (např. stavové informace). Ty pak mohou ovlivňovat výsledek. Hlavním rozdílem mezi funkcí a funkčním blokem je tedy schopnost funkčního bloku vlastnit paměť pro zapamatování hodnot některých proměnných. Tuto schopnost funkce nemají a jejich výsledek je tedy jednoznačně určen vstupními parametry při volání funkce. Funkční blok může také (na rozdíl od funkce) vracet více než jeden výsledek.

Na funkční bloky se můžeme dívat jako na „černé skříňky“, které reprezentují řešení specializované řídicí funkce. Obsahují algoritmy i data, takže mohu zachovávat informaci o minulosti (tím se liší od funkcí). Mají jasně definované rozhraní a skryté vnitřní proměnné. Klasickými příklady funkčního bloku jsou například regulační smyčka pro řízení teploty nebo PID regulátor.

Deklarace funkčního bloku

FUNCTION_BLOCK jmeno ... END_FUNCTION_BLOCK

Deklarace proměnných

Deklarační část funkčního bloku 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 funkčního bloku následuje za částí deklarační a obsahuje příkazy a instrukce.

Volání funkčního bloku

Formální, kompletní

MY_FB( First_Index := 1, Last_Index := 5 );

Neformální

MY_FB( 1, 5);

Příklad funkčního bloku (DEBOUNCE):

FUNCTION_BLOCK DEBOUNCE
 
   VAR_INPUT                //vstupní proměnné
  IN: BOOL;
   DB_TIME: TIME:= t#10ms; //výchozí hodnota 10 ms
   END_VAR
 
   VAR_OUTPUT              //výstupní proměnné
 OUT: BOOL;
  ET_OFF: TIME;
   END_VAR
 
   VAR                   //lokální proměnné
  DB_ON, DB_OFF: TON;
 DB_FF: SR;
   END_VAR
 
   (* Tělo Funkčního bloku *)
   DB_ON (IN:= IN, PT:= DB_TIME);
   DB_OFF (IN:= NOT IN, PT:= DB_TIME);
   DB_FF (S1:= DB_ON.Q, R:= DB_OFF.Q);
   OUT:= DB_FF.Q1;
   ET_OFF:= DB_OFF.ET;
 
END_FUNCTION_BLOCK

Vložený vlastní funkční blok do programu vytvořeném ve FUPLE.

Pokud blok použitý v programu odkazuje na zdrojový kód, který je ve spustitelném nebo knihovním projektu, a není použit z již zkompilované knihovny, lze jeho editor otevřít dvojklikem na příslušný blok. Pokud se na instanci bloku klikne v průběhu ladění, otevře se jeho editor již s předvyplněnou instancí a není již nutno jméno dané konkrétní instance dohledávat a vybírat.

Pokud je blok založen v FBD, lze jej dvojklikem otevřít bez dalších úprav. Pokud je ale založen a veden ve strukturovaném textu, je potřeba mít vždy správně doplněné jmenné prostory do samotného kódu. Definice jmenných prostorů v kódu funkčního bloku musí odpovídat výsledné deklaraci funkčního bloku. Ta je k nalezení ve vlastnostech konkrétního funkčního bloku.

Ruční režim

Proměnné en a eno slouží pro přepnutí funkčního bloku do ručního režimu. Nastavením vstupní proměnné en na hodnotu „False“ přestane funkční blok provádět výpočetní algoritmus a do výstupních proměnných je možné zapisovat hodnoty bez ohledu na vstupní proměnné. Proměnná „eno“ kopíruje stav vstupní proměnné „en“ a slouží jako indikační automatického a ručního režimu.