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ů.
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;
