# Neperiodické časování

Neperiodické plánování aktivity virtuálních přístrojů je jednou z pokročilých vlastností systému Control Web. Využití tohoto způsobu časování přináší aplikačnímu programu úsporu času a tím zvyšuje efektivitu jeho běhu. Zmenšení režie časování zároveň minimalizuje reakční dobu na podněty z okolního světa, nezávisle na tom, jedná-li se o zásah obsluhy do běhu aplikace nebo reakci na podmínky vzniklé přímo v technologii. Dalo by se také říci, že odvozování aktivity od podnětu je přirozenější než periodické testování stavu definujícího podmínky akce, kdy případné zpoždění reakce na podnět může dosáhnout až dobu jedné periody. Stanovení takové periody bývá velmi problematické, protože každé zkrácení periody testů sice zmenší případnou prodlevu mezi podnětem a reakcí, ale zároveň může výrazně zatížit běh aplikace v důsledku případných komunikací. Volba, kdy časovat periodicky a kdy využít časování neperiodické, by měla být hledáním optima, kde hlavními ukazately jsou reakční doba, počet komunikací a četnost stavů, tedy pravděpodobnost splnění kritéria podmínky.

## Zdroje neperiodického časování

Zdrojem podnětů pro neperiodické časování mohou být v systému Control Web některé virtuální přístroje a ovladače.

### Aktivace virtuálními přístroji

#### Mechanizmus příjemců -- receivers

Některé virtuální přístroje mohou aktivovat jiné přístroje. Typickými zástupci jsou virtuální přístroje zpracovávající vstupy od obsluhy -- tlačítka a přístroje pro vstup alfanumerických údajů. Tyto přístroje mají zabudovánu schopnost aktivovat libovolné množství jiných přístrojů. Seznam těchto přístrojů je označen jako receivers, tedy seznam příjemců události neperiodického časování.

Použití tohoto způsobu časování lze znázornit na následujícím příkladu, kde je zdrojem podnětu tlačítko (přístroj switch) a v reakci na tento podnět pracuje žárovka (přístroj indicator). Žárovka zobrazuje stav tlačítka -- zapnuto nebo vypnuto. Tento stav může být ovlivněn výhradně tlačítkem, proto nemá smysl, aby žárovka pracovala jako časovaný přístroj.

Tlačítko aktivuje žárovku

Tlačítko je připojeno k výstupnímu datovému elementu typu boolean, který je přiveden na vstup žárovky. Při každé změně stavu výstupu tlačítka jsou aktivovány přístroje uvedené v seznamu příjemců zpráv.

Ukázka zdrojového textu:

      var
        out_state = boolean, false;
      end_var;

      instrument

        indicator bulb;
          owner = background;
          position = 110, 40;
          expression = out_state;
        end_indicator;

        switch toggle;
          owner = background;
          position = 40, 35, 46, 46;
          output = out_state;
          receivers = bulb;
        end_switch;

      end_instrument;

#### Mechanizmus adresného zasílání zpráv

Zdrojem neperiodického časování se také mohou stát všechny přístroje, které dokáží zpracovávat události od klávesnice nebo myši a provádět příslušné událostní procedury. Zároveň se zdrojem pro neperiodické časování jiných přístrojů může stát libovolný časovaný přístroj, který bezprostředně z událostní procedury OnActivate() aktivuje jiné přístroje.

Z předchozího odstavce vyplývá, že k zaslání zprávy a tedy aktivaci přístrojů dochází v tomto případě z procedury přístroje. Jedná se o programovou obsluhu aktivace, realizovanou uvnitř procedur prostřednictvím příkazu send -- podrobněji o tomto příkazu se dočtete v kapitole Programování a procedury.

Následující obrázek znázorňuje model části aplikace, kde uživatel pohybem myši odečítá hodnoty z grafu zobrazovaného přístrojem meter. Pohyb myši způsobí vyvolání událostní procedury OnMouseMove(), která z pozice myši vypočítá hodnotu. Příkazem send je aktivován další přístroj, který vypočtenou hodnotu zobrazí.

Model aplikace

Ukázka zdrojového textu:

        meter level_K1_graph;
          ...
          position = 70, 15, 245, 142;
          expression = level_K1;
          mode = line_flow_graph;
          history = 10;
          frame = 2;
          h_grid = 4;
          v_grid = 8;
          ...

          procedure OnMouseMove( MouseX, MouseY : integer; LeftButton, MiddleButton, RightButton : boolean );
          begin
            if MouseY < 2 then
              MouseY = 0;
            else
              MouseY = MouseY - 2;
            end;
            on_pointer_val = (138 - MouseY) / 1.38;  (* depth - 2 * frame *)
            send mValue;                             (* activate instrument mValue *)
          end_procedure;

        end_meter;

        meter mValue;
          ...
          expression = on_pointer_val;
          mode = text_display;
          dec_places = 1;
          mask = '###.#%';
          ...
        end_meter;

Pomocí procedurou řízeného zasílání zpráv lze snadno v aplikaci realizovat přístroje, které nejsou jádrem systému Control Web časovány periodicky, avšak pomocí příkazu send aktivují z procedur samy sebe. Takto se mohou virtuální přístroje ve vlastní režii periodicky časovat. Doplněním příkazu pause lze dosáhnout režimu časování s proměnnou periodou. Podmínečným vynecháním příkazu send lze časování kdykoliv ukončit.

### Aktivace ovladači

Virtuální přístroje je možné časovat výjimkou od ovladače. Ovladač dokáže na základě vnějších podnětů vyhodnotit stavovou informaci a generovat výjimku, která způsobí aktivaci všech přístrojů, které ji zpracovávají. Tyto přístroje mají v těle svého textového popisu uvedeno:

      driver_exception = <jméno ovladače>;

Vazba zařízení-ovladač-virtuální přístroj a výjimka ovladače

Upozornění: Tento mechanizmus nemusí podporovat všechny ovladače. Pokud jej ovladač podporuje, neexistuje pravidlo, na základě jakých podmínek ke generování výjimky dochází. Je proto nezbytně nutné získat informace o pravidlech generování výjimky z dokumentace ke konkrétnímu ovladači. Ovladače též mohou vyžadovat specifické postupy pro zpracování vzniklých výjimek. Typickým příkladem může být se systémem Control Web dodávaný ovladač pro DDE, který dokáže přes procedurální rozhraní předávat informace o původu výjimky.