# Podrobněji o časování, aplikacích reálného času a datově řízených aplikacích

Aplikace systému Control Web mohou pracovat ve dvou módech, velmi zásadně se lišících způsobem spouštění jednotlivých akcí, jako například čtení a zápis vstupně/výstupních kanálů nebo aktivace jednotlivých přístrojů. Mód aplikace určuje jediné klíčové slovo v sekci settings:

    settings
      ...
      operation_mode = real_time;
      ...
    end_settings;

Ačkoliv mód aplikace je určen jen tímto klíčovým slovem (pokud není uvedeno, hodnota real_time je přednastavena), postup návrhu a celková architektura aplikací pracujících v reálném čase se natolik liší od aplikací řízených změnou dat, že integrované vývojové prostředí vždy při vytvoření nové aplikace otevře "Průvodce novou aplikací", který lze ale ihned uzavřít kliknutím na "Dokončit". V takovém případě průvodce pouze vytvoří sekci settings a do ní zapíše pouze parametr operation_mode.

Průvodce novou aplikací nabízí volbu módu činnosti aplikace

Vyjadřovací prostředky, které jsou pro autora aplikace k dispozici v módu real_time, jsou podstatně bohatší, než v případě módu data_driven. I když celková režie systému může být v některých specifických případech aplikací řízených změnami dat menší než je tomu u aplikací reálného času, nebyl by to dostatečný důvod k zavádění druhého módu. Základním a nejdůležitějším motivem zavedení datově řízených aplikací je snadnost jejich tvorby. V případě aplikace reálného času sice můžete do nejmenších detailů určovat posloupnosti a časování jednotlivých akcí, ale to taktéž znamená, že musíte při návrhu aplikace brát v úvahu velké množství dalších aspektů. Například musíte zvážit přenosovou kapacitu linek mezi počítačem a periferiemi a nepřetížit je příliš častou komunikací. Musíte uvážit meze výkonosti hardware, ovlivňující např. maximální počet aktivovaných a překreslovaných přístrojů za jednotku času apod.

V módu reálného času můžete vytvářet skutečné programy, tedy algoritmy v nejobecnějším slova smyslu složené ze sekvencí, selekcí a iterací, přiřazení, skoků a volání apod. Jak ale praví stará programátorská moudrost, program nedělá to, co autor chce, ale pouze to, co naprogramoval. Jinými slovy kvalita vaší práce má zásadní vliv na kvalitu celé aplikace. Není výjimkou, že špatným návrhem lze aplikaci zpomalit o jeden i dva řády (nebo naopak dobrým návrhem ji stejně urychlit).

Na druhé straně v systémech řízených změnou dat nelze žádný program napsat, pouze lze konfigurovat a parametrizovat existující struktury. A kde nelze napsat žádný program, nelze ani napsat špatný program. Systém sám spouští jednotlivé akce v aplikaci tak, aby dosáhl co možná nejlepšího využití hardware a kvalita návrhu aplikace ovlivní její funkčnost jen velmi málo. Jako u všech systémů řízených změnou dat ale nelze hovořit o reálném čase. Nemůžete zaručit určitý počet komunikací s periferiemi, ani časy jednotlivých komunikací. Nemůžete stanovit okamžiky vyhodnocování výrazů a spouštění programů. Posloupnosti jednotlivých akcí nejsou dány vámi zapsaným algoritmem, ale okamžitým stavem datových elementů. Nemůžete se tedy spolehnout, že jeden přístroj bude vždy aktivován před nebo po jiném přístroji.

## Aktivace virtuálních přístrojů

K pochopení základních principů činnosti aplikací systému Control Web i rozdílů mezi dvěma výše zmíněnými módy je nutno porozumět pojmu aktivace přístroje. Prakticky všechny přístroje provádějí svou činnost v rámci své aktivace. Pokud například u přístroje meter definujete výraz, který bude vyčíslen a výsledek přiřazen do nějakého datového elementu, toto vyčíslení, přiřazení a taktéž případné překreslení přístroje meter s novou hodnotou se děje právě v rámci aktivace. V rámci své aktivace přístroj alarm testuje překročení mezních hodnot a přístroj archiver zapisuje data, přístroj draw animuje svou kresbu apod.

Ačkoliv existuje skupina přístrojů, které pracují ne na základě aktivace, ale jako reakce na nějakou událost (např. přístroj control zapíše do datového elementu hodnotu po uživatelském zásahu, aniž by vůbec byl aktivován, přístroj httpd pracující jako WWW server odešle data po požadavku klienta bez čekání na aktivaci), tato výjimka není teď pro pochopení principů podstatná.

V aplikacích reálného času může být přístroj aktivován těmito podněty:

- Periodické časování hodnotou nebo časovačem
- Výjimka způsobená jiným přístrojem (aktivace přístrojem)
- Výjimka způsobená ovladačem (aktivace ovladačem)

V datově řízených aplikacích je periodické časování povoleno jen některým přístrojům, jejichž činnost je závislá na přesném dodržování časového intervalu, např. přístroji archiver nebo meter v módu flow_graph. Aktivace výjimkami od přístrojů i ovladačů zůstává zachována. Přibývá ale nový podnět

- Výjimka způsobená změnou dat

Je nutno si uvědomit, že i když aktivovat lze jakýkoliv přístroj, ne všechny přístroje v rámci své aktivace vykonávají nějakou činnost. V takovém případě je aktivace takového přístroje zbytečná a pouze plýtvá výkonem počítače a zpomaluje aplikaci. Na druhé straně aktivitu přístroje v rámci aktivace můžete snadno ovlivnit pomocí procedur (viz kapitola Programování a procedury ve druhém dílu), nicméně programování procedur je pokročilá technika a pro úspěšnou tvorbu aplikací ji není nutno ovládat.

### Periodické časování hodnotou nebo časovačem

Periodické časování je v aplikacích reálného času základní způsob aktivace jednotlivých přístrojů. Oproti tomu v aplikacích řízených změnou dat je periodické časování naprostá výjimka a používá se jen u přístrojů, které mají být aktivovány bez ohledu na změny dat, jako např. přístroje kreslící grafy veličin v časové ose nebo archivační přístroje. Pokud použijete v aplikaci řízené daty časování u jiného přístroje, systém při překladu vypíše varování a časování bude ignorovat.

Interval mezi aktivacemi přístroje je zapsán za klíčovým slovem timer.

    meter m1;
      timer = 0.1;
      ...
    end_meter;

V tomto případě bude přístroj meter aktivován 10 krát za sekundu. Interval (perioda) se začne počítat od okamžiku startu aplikace. Pro případ, kdy je nutno periodu vztáhnout k okamžiku místní půlnoci namísto okamžiku startu aplikace, je možno za číslo udávající periodu uvést další číslo udávající ofset první aktivace od okamžiku půlnoci. Offset 0 pouze systému říká, že časový krok má být počítán absolutně od místní půlnoci, ale bez posunu.

    meter m1;
      timer = 1.5, 0.5;
      ...
    end_meter;

Pozor! Veškerá čísla se v systému Control Web zapisují bez ohledu na národní konvence (stejně jako ve všech ostatních vývojových prostředích). Desetinná část čísla se od celé části čísla odděluje desetinnou tečkou, nikoliv čárkou. Čárka odděluje periodu časování od posunu absolutního časování. Zápis

    meter m1;
      timer = 2,1;
      ...
    end_meter;

neznamená časování periodou 2,1 sekundy, ale periodou 2 sekundy s posunem 1 sekunda od půlnoci.

Uvedení konkrétního čísla nebo konstanty za slovem timer není jediný způsob, jak periodicky časovat přístroj. Pokud potřebujete mocnější nástroje časování, jako např. podmíněnou nebo cyklickou aktivaci, můžete použít speciálních přístrojů -- časovačů. Podrobněji jsou všechny tyto možnosti rozebrány v kapitole Časování reaplikací reálného času ve druhém dílu.

Samozřejmě je zbytečné a pro kvalitu aplikace škodlivé časovat přístroje, které časování nepotřebují, časovat velmi rychle přístroje, které stačí časovat pomaleji nebo používat časovaných přístrojů na místo přístrojů nečasovaných. V řadě případů dokáže systém sám určit, jestli je daný přístroj nutno časovat. Pokud je časován nějaký přístroj časování nepotřebující, systém vypíše při překladu upozornění a časování daného přístroje zruší.

### Výjimka způsobená jiným přístrojem (aktivace přístrojem)

V celé řadě případů je zcela zbytečné aktivovat přístroj periodicky, když má reagovat jen na konkrétní událost. Z tohoto důvodu je možno aktivovat přístroj, když je aktivován jiný přístroj. Např. pokud tlačítko (přístroj switch) nastavuje svou výstupní hodnotu, můžete uvést seznam jiných přístrojů, které budou po změně této hodnotu aktivovány.

Příklad

    panel p1;
      ...
      visibility = p1_visible;
      ...
    end_panel;

    switch sw1;
      ...
      output = p1_visible;
      receivers = p1;
      ...
    end_switch;

V tomto případě existuje přístroj panel, jehož viditelnost je řízena proměnnou p1_visible. Samozřejmě je možné, aby panel periodicky zjišťoval, zda se má zobrazit nebo skrýt. Ale pokud je podmínka viditelnosti panelu ovlivňována pouze na jediném místě, můžete časování panelu zcela vynechat a aktivovat jej přístrojem, který podmínku změní. Úspora výkonu počítače je zřejmá.

Pokud nějaký přístroj aktivuje jeden či více jiných přístrojů, nejsou aktivovány okamžitě, ale nejprve je dokončen právě probíhající časový krok, tedy jsou aktivovány všechny přístroje, které v daném okamžiku aktivovány být měly. Teprve poté systém zjistí, jestli mají být aktivovány nějaké jiné přístroje a pokud ano, aktivuje je. To má za následek, že i pokud je jeden přístoj v daném časovém kroku aktivován několika jinými přístroji, stále je aktivován jen jednou. Dokonce i pokud následující časový krok daného přístroje vyjde do stejného okamžiku, splyne aktivace jiným přístrojem s aktivací časovým krokem. Totéž platí i pro výjimku od ovladače, popsanou dále.

### Výjimka způsobená ovladačem (aktivace ovladačem)

Některé ovladače vstupně/výstupních zařízení dokáží říci systému, že došlo k nějaké události, aniž by jakýkoliv přístroj v danou chvíli četl z ovladače data. Jednotlivé přístroje pak mohou systém požádat, aby je v takovém případě aktivoval pomocí parametru driver_exception, za nějž uvedou jméno ovladače, kterým chce být přístroj aktivován. Tento způsob aktivace je spíše výjimečný a nebývá často používán.

### Výjimka způsobená změnou dat

Výjimka způsobená změnou dat pracuje pouze v módu data_driven. Jak již bylo řečeno, jednotlivé virtuální přístroje v tomto módu zpravidla nemohou být časovány a jsou aktivovány, jen pokud došlo ke změně datových elementů v přístroji použitých. Jednotlivé virtuální přístroje tak pracují automaticky, ale nelze zaručit ani minimální periodu, ani pořadí aktivace jednotlivých přístrojů.

## Aplikace reálného času

Pokud požadujete deterministické časování aplikace, chcete zaručit spouštění akcí v přesných časových okamžicích nebo potřebujete zaručit posloupnost jednotlivých akcí, zvolte mód reálného času. Takové požadavky jsou zpravidla spojeny s aplikacemi pro přímé řízení strojů, pro řízení laboratorních experimentů apod. U aplikací reálného času je dobré mít na paměti, že:

- Systém sám o sobě nic nedělá. Veškerá aktivita pochází od jednotlivých virtuálních přístrojů. Až když je nějaký virtuální přístroj aktivován, teprve informuje systém, o jaké vstupně/výstupní kanály má zájem. Kanály vyžadované jednotlivými přístroji v daném časovém kroku jsou načteny a virtuální přístroje data zpracují.
- Systém se vždy bude snažit maximálně dodržet vámi naprogramované časování, a to i pokud je aplikace navržena tak, že na daném hardware a komunikačních rychlostech to není možné. V takovém případě je na vás, abyste rozhodli o způsobu urychlení aplikace. To je možné celou řadou způsobů -- snížením počtu přístrojů nebo prodloužením časování, nečasováním přístrojů které to nepotřebují, nahrazením časování aktivací od události, posílením hardware (zrychlením procesoru, přidáním paměti), zrychlením komunikací apod.
- Pro aplikace reálného času mají zcela zásadní význam ovladače vstupně/výstupních zařízení. Naneštěstí celá řada těchto ovladačů (zejména ovladačů průmyslových automatů) není pro práci v reálném čase uzpůsobena. Jejich autoři často nezvládnou událostmi řízený návrh a vypomohou si periodickým čtením hodnot z automatu. Sebelepší aplikace pak nemůže v reálném čase pracovat, protože ovladač jí v reálném čase není schopen poskytnout data.
- Automatická komunikace s periferiemi může být na překážku u špatně napsaných ovladačů (nebo u špatně navržených průmyslových automatů), kdy nelze přenášet jednotlivé údaje nebo jen určité části datových oblastí. Pokud po dotazu na jediný byte ovladač nebo automat vždy pošle celý blok délky několika KB po sériové lince, výkon celého systému prudce klesá. V takovém případě je lépe přesunout data z automatu do proměnných a v ostatních přístrojích pracovat jen s proměnnými.
- Pro ladění aplikací reálného času nabízí Control Web možnost zobrazení informací o časování celé aplikace i jednotlivých přístrojů. Okno s těmito informacemi se otevře současně se startem aplikace, pokud v sekci settings uvedete parametr show_timing_info = true;.

## Aplikace řízené změnou dat

Pokud vaše aplikace má za úkol jen vizualizovat, nikoliv řídit nějaký proces (samozřejmě s možností hlídat poruchové stavy, zapisovat archivní soubory, zobrazovat historické trendy apod.), mód datově řízené aplikace vám může ušetřit starosti s návrhem, usnadnit ladění a zkrátit čas realizace vaší aplikace. Aplikace řízené změnami dat se řídí následujícími pravidly:

- Žádná aktivita přístroje nikdy nezpůsobí komunikaci s periferiemi a čtení nebo zápis dat, a to ani když je daný virtuální přístroj periodicky časován (například přístroj historického trendu).
- Systém sám periodicky vyčítá data ze vstupně výstupních zařízení a pokud se jejich hodnota od posledního čtení změnila, aktivuje všechny přístroje tento kanál používající.
- Virtuální přístroje nejsou aktivovány jen při změně kanálu, ale i po změně použitých proměnných. Např. pokud nějaký přístroj pracuje s nějakou proměnnou a sám tuto proměnnou mění, bude neustále periodicky aktivován, protože jeho aktivace způsobí změnu proměnné, která způsobí další aktivaci.
- Minimální perioda aktivace, čas aktivace ani pořadí aktivace v tomto módu nelze zaručit.

## Shrnutí

Časování aplikací je velmi rozsáhlá problematika, zahrnující celou řadu dalších oblastí, jako například aktivace při startu a ukončení aplikace, aktivace voláním procedur, absolutní a relativní časování, časovače, striktní reálný čas, časové skluzy a jejich dohánění, posloupnost akcí při startu systému a inicializace datových elementů, stanovení nejdelších přípustných prodlev při čtení a zápisu hodnot apod. Podrobně je vše vysvětleno ve druhém díle, zejména v kapitolách Běh datově řízené aplikace, Časování aplikací reálného času, Programování a procedury a Komunikace, ovladače a kanály.

- Vždy je dobré zvážit povahu navrhované aplikace a podle ní rozhodnout, jestli bude lepší navrhnout ji jako aplikaci reálného času nebo bude dostačovat aplikace řízená změnami dat. I pokud by počáteční rozhodnutí bylo chybné, není to žádný problém -- změna módu je záležitostí jediného řádku v aplikaci. Rozsáhlejší rekonstrukci si ale při změně módu patrně vyžádá návrh časování aplikace.
- Vezměte v úvahu, že aplikace pracující v reálném čase jsou podstatně náročnější na kvalitu návrhu. Musíte u nich brát v úvahu omezení architektury počítače, operačního systému, vstupně/výstupních zařízení i komunikačních linek, protože vámi navržená aplikace se snaží přesně dodržet veškeré zadané časové intervaly.
- Navrhujete-li časování aplikace reálného času, mějte na paměti, že rychlost počítače není nekonečná. Časujte jen přístroje, které časovány být musí a to jen tak rychle, aby to mělo smysl. Okno informací o časování aplikace vám pomůže zjistit potenciální slabé místo vaší aplikace a ukáže vám, nakolik je vaše aplikace na daném počítači schopna přesně sledovat reálný čas.
- U aplikací řízených změnou dat se nespoléhejte na konkrétní časové okamžiky, na minimální periodu vzorkování nebo na dodržení posloupností akcí.
- Věnujte pozornost ovladačům zařízení. Špatně navržený ovladač může podstatně snížit výkon celého systému.