# multiplexer

### Funkce

Zobrazení hodnoty numerického výrazu pomocí ručkového přístroje, grafu, popř. displeje. Přístroj vybere jeden z výrazů pomocí zadaných podmínek.

### Syntax

      multiplexer multiplexer_name;
        rem = string;
        bubble = string;
        timer = timer_name;
        owner = owner_name;
        position = integer, integer, integer, integer;
        win_disable = [ identifier, . . . ];
        win_title = string;
        access = integer;
        tab_select = integer;
        send_same_data;
        input_item
          condition = boolean_expression;
          expression = real_expression;
        end_input_item;
        input_item
          . . .
        end_input_item;
        default_input = real_expression;
        output = real_dataelement;
        show_inputs boolean;
        show_numbers boolean;
        mode = identifier;
        content = identifier;
        range_from = real;
        range_to = real;
        low_limit = real;
        high_limit = real;
        history = integer;
        dec_places = integer;
        real_step = real;
        h_grid = integer;
        v_grid = integer;
        font = font_identifier, integer, style_identifier;
        mask = string;
        driver_exception = driver_name;
        colors
          border_ink = color;
          border_paper = color;
          top_shadow = color;
          bottom_shadow = color;
          ink = color;
          paper = color;
          value = color;
          low_limit = color;
          high_limit = color;
          h_grid = color;
          v_grid = color;
          date_background = color;
          number_color = color;
        end_colors;
      end_multiplexer;

### Specifické parametry přístroje

- input_item a end_input_item
  Klíčová slova, která uzavírají parametry jedné z možností multiplexeru. Počet opakování položky input_item není omezen.
- condition
  Obsahuje podmínku, při jejímž splnění se vybere hodnota výrazu uvedená za touto podmínkou. Výsledek výrazu podmínky musí být typu boolean.
- expression
  Obsahuje numerický výraz, jehož hodnotu bude přístroj zobrazovat.
- default_input
  Na hodnotu default_input se multiplexer nastaví, pokud nebude splněna žádná z podmínek condition. Hodnota musí být numerická.
- output
  Obsahuje název proměnné nebo kanálu, kam bude zobrazovaná hodnota multiplexeru posílána.
- show_inputs
  Je-li uveden, zobrazí se symboly vstupů multiplexeru.
- show_numbers
  Je-li uveden, zobrazí se čísla vstupů multiplexeru.
- mode
  Určuje grafickou podobu přístroje uvedením jednoho z názvů módu:
    pointer - ručkový přístroj
    digital - digitální výstup bodový
    dot_digital - digitální výstup
    vertical_bar - poměrná svislá barevná plocha
    horizontal_bar - poměrná vodorovná barevná plocha
    flow_graph - posunující se graf
    sweep_graph - stojící graf
    text_display - návěští s aktuální hodnotou
- content
  Má rovněž vliv na grafickou podobu přístroje. Může nabývat tří hodnot:
    max - maximum
    med - medium
    min - minimum
  Pro všechny módy znamená nastavení content = max zobrazení kompletní podoby přístroje. Některé módy navíc umožňují schovat jednu ze svých částí, a to nastavením parametru content = med, popř. content = min .
- range_from a range_to
  Jsou parametry udávající rozsah přístroje. Nebude-li vložená hodnota v rozsahu přístroje, nastaví se přístroj na bližší hranici. Hodnoty jsou numerické.
- low_limit a high_limit
  Dva parametry, podle kterých se v grafu nakreslí limity a v textu se změní barva pozadí vykreslované hodnoty. Je–li hodnota menší než low_limit, použije se barva uvedená v parametru colors–low_limit, přesáhne–li hodnota high_limit, pak je aktuální barva parametru colors–high_limit. V rozsahu mezi limitami se hodnota vykresluje barvou colors–value. Hodnoty limit jsou numerické.
- history
  Udává počet zobrazených hodnot v grafu. Parametr by měl být celočíselný. U jiných módů nemá význam.
- dec_places
  Je počet zobrazovaných desetinných míst pro módy se znakovým vykreslováním hodnoty. Parametr by měl být celočíselný.
- real_step
  Je parametr důležitý pro nastavování limitů přístroje pomocí numerického řádku, jeho velikost totiž udává přírůstek hodnoty při použití jeho inkrementálních (dekrementálních) šipek. Má numerickou hodnotu.
- h_grid a v_grid
  Jsou parametry umožňující zobrazení vodorovných a svislých čar do grafu jako jeho pomocné síťování. Velikost parametrů h_grih a v_grid udává počet zobrazených čar. Hodnoty obou parametrů musí být celočíselné.
- font
  Je parametr určující font písma při vykreslování hodnoty módem text_display. Má vždy tři parametry. První z nich font_identifier určuje typ písma (např. TIMES, SYSTEM, aj.), druhý parametr velikost písma v tiskových bodech a třetí parametr style_identifier rozhoduje o tom, zda bude písmo normální (normal), tučné (bold) nebo skloněné (italic).
- mask
  Je šablona pro vypisování textu a právě jedné numerické hodnoty pro mode = text_display;. V textovém režimu se zadává v apostrofech, v inspektoru přístroje bez apostrofů. Může mít např. tvar mask = 'rychlost = ##.## m/s'; , kde znak # udává umístění a velikost zobrazované numerické hodnoty.
- driver_exception
  Jméno ovladače, od kterého budou přijímány výjimky.
- colors
  Seznam prvků přístroje, kterým lze měnit nastavení barvy:
    border_ink - okrajová linka
    border_paper - podkladový papír
    top_shadow - horní stín
    bottom_shadow - dolní stín
    ink - linky přístroje
    paper - papír přístroje
    value - hodnota mezi limitami
    low_limit - hodnota pod low_limit
    high_limit - hodnota nad high_limit
    h_grid - vodorovná síť grafu
    v_grid - svislá síť grafu
    date_background - papír pod show_numbers
    number_color - papír pod show_numbers

### Poznámky

- Multiplexer zobrazí první hodnotu uvedenou ve výrazu expression, která bude mít jako první hodnotu podmínky true. Není–li žádná z podmínek splněna, nastaví se multiplexer podle parametru default_input.
- Popis zobrazení jednotlivých módů:
  1. mode = pointer;
     Mód pointer napodobuje ručkový přístroj zobrazující spojitou veličinu. Při content = max lze přístroji za běhu programu měnit barevné limity pomocí numerických řádků a přístroj současně zobrazuje i numerickou hodnotu. Má–li nastaveny parametry show_numbers a show_inputs, zobrazí se i tyto.
  2. mode = vertical_bar, mode = horizontal_bar;
     Oba módy představují barevnou plochu, která se zaplňuje aktuální barvou v poměru hodnoty výrazu expression ku maximálnímu rozsahu přístroje. Při content = max se ještě zobrazí numerická hodnota a editovací řádky pro nastavení limit.
  3. mode = flow_graph, mode = sweep_graph;
     Oba módy představují vykreslování grafů. Mód flow_graph vykresluje poslední hodnotu vždy nakonec grafu, přičemž se celý graf průběžně posouvá. Mód sweep_graph vykresluje vždy od začátku grafu, po dosažení konce začne přepisovat hodnoty opět od začátku, graf se neposouvá. V případě druhého grafu bylo použito zobrazení síťování pomocí v_grid = 7; a h_grid = 10; .
  4. mode = digital, mode = dot_digital;
     Oba módy zobrazují hodnotu pomocí bodového (nebo slitého) displeje, jehož barvy se mění podle nastavených hodnot low_limit a high_limit.
  5. mode = text_display;
     Jako jediný z módů přístroje multiplexer dovoluje spolu s numerickou hodnotou vypsat libovolný text před i za jeho číselné zobrazení, nadefinovaný parametrem mask. Podle nastavených limit se mění barva jeho pozadí. Velikost a druh písma určuje parametr font.
- Multiplexer je v podstatě přístroj meter rozšířený o možnost výběru zobrazení jedné z více hodnot.
- Je–li přístroj v okně, lze zadat v menu okna položku menu, při které se v okně zobrazí další menu umožňující změnu módu přístroje za běhu programu.
- Některé parametry mají implicitní nastavení, ostatní jsou prázdné:
    position = 0, 0,100, 80;
    access = 4294967295;
    tab_select = 4294967295;
    mode = pointer;
    content = min;
    range_from = 0;
    range_to = 100;
    low_limit = 25;
    high_limit = 75;
    history = 2;
    dec_places = 2;
    real_step = 1;
    h_grid = 0;
    v_grid = 0;
    font = SYSTEM, 9, normal;

### Příklad

Příklad nastavení parametrů přístroje:

      window multiplexer multiplexer;
        timer = 0.5;
        owner = background;
        position = 337, 85, 210, 105;
        input_item
          condition = b1;
          expression = ( 50 * sinus ) / ( second + 40 );
        end_input_item;
        input_item
          condition = b2;
          expression = ( noise / 10 ) + 45;
        end_input_item;
        default_input = 0;
        output = kanal1;
        show_inputs;
        show_numbers;
        history = 50;
        h_grid = 5;
        v_grid = 10;
      end_multiplexer;

### Nativní procedury přístroje

    SetLowLimit( LowLimit : real )
    SetHighLimit( HighLimit : real )

Nastavení horní a dolní meze zobrazovaných hodnot. Přístroj bude výsledek vstupních výrazů porovnávat s hodnotami HighLimit a LowLimit; bude-li vstupní hodnota menší než LowLimit nebo větší než HighLimit, bude jednou z těchto limitních hodnot nahrazena.

    SetRange( RealFrom : real, RealTo : real )

Nastavení rozsahu přístroje. Historické hodnoty uložené ve vyrovnávací paměti případně přesahující nový rozsah budou ořezány. Stejně tak budou případně upraveny i limity. V rámci této metody bude přístroj v nové podobě i překreslen.

    SetMode( Mode : real )

Pomocí této metody je možné za běhu přístroje nastavovat jeho vzhled. Čísla módů a jejich stručný popis uvádí tabulka:

  0 pointer - ručkový přístroj
  1 digital - digitální výstup bodový
  2 dot_digital - digitální výstup
  3 vertical_bar - poměrná svislá barevná plocha
  4 horizontal_bar - poměrná vodorovná barevná plocha
  5 flow_graph - posunující se graf
  6 sweep_graph - stojící graf
  7 text_display - návěští s aktuální hodnotou

    NewRect( x, y, width, depth : real )

Zavoláním metody je možné přístroji změnit současně jeho pozici a velikost. Velikosti hodnot x, y, width, a depth jsou v bodech obrazovky.

    MoveTo( x, y : real )

Posunutí přístroje na pozici x, y. Velikosti hodnot x a y jsou v bodech obrazovky.

    Show()

Zobrazení skrytého přístroje.

    Hide()

Skrytí viditelného přístroje.

### Událostní procedury přístroje

Přístroj může volat standardní událostní procedury:

    OnActivate()
    OnMouseDown( MouseX, MouseY : integer; LeftButton, MiddleButton, RightButton : boolean )
    OnMouseDoubleClick( MouseX, MouseY : integer; LeftButton, MiddleButton, RightButton : boolean )
    OnMouseUp( MouseX, MouseY : integer; LeftButton, MiddleButton, RightButton : boolean )
    OnMouseMove( MouseX, MouseY : integer; LeftButton, MiddleButton, RightButton : boolean )
    OnSelect()
    OnDeselect()
    OnShow()
    OnHide()
    OnNewPosition( RectX, RectY, RectW, RectD : integer )
    OnWindowMinimize()
    OnWindowMaximize()
    OnWindowRestore( WasMinimized, WasMaximized : boolean )

Podrobnější informace k těmto procedurám lze nalézt v kapitole Programování a procedury.