====== Structured Text ======
**Structured Text (ST)** je vyšší programovací jazyk podobný **PASCALu**, navržený pro implementaci složitých řídicích algoritmů, matematických výpočtů a stavových automatů v rámci řídicí jednotky.
Je preferovanou volbou pro softwarové vývojáře, protože využívá známé programátorské konstrukce, jako jsou podmíněné příkazy, cykly a explicitní přiřazování proměnných. ST umožňuje vyjádřit složité funkce pomocí několika málo řádků kódu, což je ideální pro rozsáhlé projekty. Zároveň je to hlavní jazyk používaný pro tvorbu **vlastních funkčních bloků**.
{{ en:mervis-ide:40-st:st.png?600&direct |Ukázka editoru Structured Text }}
=== Slovníček: Klíčové pojmy ST ===
* **Přiřazovací operátor**: Operátor používaný k **přiřazení** výsledku výrazu nebo hodnoty konkrétní proměnné (např. `Proměnná := Hodnota;`).
* **Řídicí struktury**: Klíčová slova jako **`IF-THEN-ELSE`**, **`CASE`**, **`FOR`** a **`WHILE`**, která určují nelineární tok vykonávání programu.
* **Výraz (Expression)**: Kombinace proměnných, konstant a operátorů, kterou řídicí jednotka vyhodnotí na **jedinou výslednou hodnotu**.
* **Deklarace proměnné**: Povinný proces, při kterém se definuje **název proměnné**, její **datový typ** (např. BOOL, INT, REAL) a její rozsah použití (scope), předtím než je použita.
* **Program Organization Unit (POU)**: Běžný pojem pro modulární, znovupoužitelný blok kódu, kterým může být buď **funkce**, nebo **funkční blok**.
=== Ukázkový kód: Řídicí struktury ===
Následující příklady ukazují, jak ST používá řídicí struktury pro logiku a výpočty.
=== Podmíněná logika (IF...THEN) ===
Tato konstrukce slouží k provedení bloku kódu pouze tehdy, pokud je daná Booleovská podmínka **PRAVDA**.
IF Teplota > 100.0 THEN
Stav_Topení := TRUE;
Kontrolka_Alarmu := TRUE;
END_IF;
=== Výběrová logika (CASE) ===
Příkaz `CASE` provede konkrétní blok kódu na základě hodnoty celočíselného výrazu.
CASE Vstupní_Režim OF
1: // Režim 1: Manuální
Rychlost_Motoru := 50;
2: // Režim 2: Automatický
Rychlost_Motoru := Automatický_Nastavený_Bod;
ELSE // Výchozí pro jakoukoli jinou hodnotu
Rychlost_Motoru := 0;
END_CASE;
=== Cyklická smyčka (FOR) ===
Cyklus `FOR` opakuje blok kódu pevně stanovený početkrát pomocí počítací proměnné.
FOR i := 1 TO 10 DO
Výsledné_Pole[i] := Výsledné_Pole[i] * 2;
END_FOR;