# chart

### Funkce

Zobrazení časových průběhů více číselných hodnot v jednom čárovém grafu. Každou vypočtenou a zobrazenou veličinu lze rovněž zapsat do výstupního datového elementu.

### Syntax

      chart chart_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;
        blink = boolean_expression;
        blink_rate = identifier;
        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;
        clear = boolean_expression;
        activity = boolean_expression;
        driver_exception = driver_name;
        item
          expression = real_expression;
          color = color;
          static;
        end_item;
        item
          . . .
        end_item;
        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;
        end_colors;
        blink_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;
        end_blink_colors;
      end_chart;

### Specifické parametry přístroje

- blink
  Parametr uvádí logický výraz, jehož výsledek rozhoduje o tom, bude-li přístroj blikat -- tedy periodicky se překreslovat se střídavým použitím barevných sad colors a blink_colors. Po zastavení blikání se přístroj vždy vrátí do základní barevné sady colors.
- blink_rate
  Určuje frekvenci blikání přístroje uvedením jednoho z identifikátorů:
  slow - blikání s periodou 2 sekundy
  normal - blikání s periodou 1 sekunda
  quick - blikání s periodou 0.5 sekundy
- mode
  Přístroj chart má dva módy:
  flow_graph - posouvající se graf
  sweep_graph - překreslující se graf
  Mód flow_graph vykresluje poslední hodnotu vždy na konec grafu, přičemž se celý graf průběžně posouvá spolu s případným zobrazeným gridem.
  Mód sweep_graph vykresluje graf postupně zleva doprava. Dosáhne-li konce, začne přepisovat hodnoty opět od levého začátku. Graf ani případný zobrazený grid se neposouvá.
- content
  Má rovněž vliv na grafickou podobu přístroje. Může nabývat tří hodnot:
  max - maximum
  med - medium
  min - minimum
  Pro oba módy je nastavení content = max vykreslován kromě grafů také číslicový zobrazovač s poslední číselnou hodnotu první série a numerické řádky pro změnu horního a dolního limitu.
- range_from a range_to
  Jsou číselné parametry udávající rozsah stupnice přístroje a tím i rozsah výstupních hodnot.
- low_limit a high_limit
  Horní a dolní limity, které se vykreslují v grafu o podle kterých se v číslicovém zobrazovači mění barva pozadí vykreslovaného čísla.
- history
  Udává počet zpětně pamatovaných a zobrazovaných hodnot v grafu. Je délkou historického trendu zobrazované veličiny.
- dec_places
  Počet zobrazovaných desetinných míst na číslicovém zobrazovači.
- real_step
  Je krokem nastavování limitních hodnot pomocí numerického řádku. Jeho velikost udává přírůstek nebo úbytek hodnoty při použití inkrementálních a dekrementálních šipek.
- h_grid
  Počet vodorovných čar rastru. Není-li tento parametr zadán nebo je-li zadána hodnota 0, vodorovný rastr nebude vykreslen.
- v_grid
  Počet svislých čar rastru. Není-li tento parametr zadán nebo je-li zadána hodnota 0, svislý rastr nebude vykreslen.
- clear
  Označuje logický výraz, při jehož splnění bude vyrovnávací paměť přístroje smazána a veškeré hodnoty budou nastaveny na inicializační hodnotu range_from.
- activity
  Označuje logický výraz s podmínkou činnosti přístroje. Při nesplněné podmínce activity jsou grafy zastaveny. Není-li tento výraz vůbec zadán, je přístroj stále aktivní.
- driver_exception
  Jméno ovladače, od kterého budou přijímány výjimky časování.
- item a end_item
  Klíčová slova, která uzavírají bloky parametrů jednotlivých výstupních a zobrazovacích kanálů přístroje chart. Počet opakování položky item a tím i počet měřených a pamatovaných průběhů není omezen.
  - expression
    Tento parametr obsahuje numerický výraz, jehož výsledek bude přístroj zobrazovat.
  - color
    Určuje barvu čáry, kterou se bude čárový graf pro danou položku vykreslovat.
  - static
    Příznak nepohyblivé čáry. Takto označená položka se neposouvá se zbytkem grafu a její vyrovnávací paměť je možno plnit pouze voláním nativních procedur.
- colors a blink_colors
  Seznam částí kresby 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 - standardní barva čáry low_limit - barva čáry dolního limitu high_limit - barva čáry horního limitu h_grid - vodorovný rastr grafu v_grid - svislý rastr grafu

### Poznámka

Je–li přístroj chart v okně, lze pomocí menu měnit mód přístroje za běhu programu.
Přístroj má kromě módů flow_graph a sweep_graph k dispozici ještě mód line_animation_graph, který se podobá módu flow_graph. V tomto módu ale není využíváno grafického posuvu části grafu, který je u moderních grafických karet velmi rychlý. Graf je po částech překreslován přímkami. To přináší možnost stojícího gridu při posunujícím se grafu. Nevýhodou tohoto módu je nutnost vykreslování vysokého počtu čar v každém časovém kroku a tím značná spotřeba času na překreslování.
Implicitně jsou nastaveny parametry:

      position = 0, 0, 100, 80;
      access = 4294967295;
      tab_select = 4294967295;
      mode = flow_graph;
      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;

### Příklad

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

      window chart id_3;
        timer = 0.5;
        owner = background;
        position = 122, 82, 205, 175;
        win_title = 'CHART';
        mode = flow_graph;
        content = max;
        history = 50;
        item
          expression = ( 50 * sinus ) / ( second + 40 );
          color = lblue;
        end_item;
        item
          expression = ( šum / 10 ) + 45;
          color = lred;
        end_item;
        colors
          border_paper = black;
          bottom_shadow = black;
          ink = black;
          paper = white;
          value = black;
          low_limit = lgray;
          high_limit = lgray;
        end_colors;
      end_chart;

### Nativní procedury přístroje chart

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

Nastavení horní a dolní meze zobrazovaných hodnot.

    SetRange( RangeFrom, RangeTo : real )

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

    SetMode( Mode : real )

Pomocí této procedury je možné za běhu přístroje nastavovat způsob překresování grafů. Čísla módů a jejich stručný popis uvádí tabulka: 0 - flow_graph - posunující se graf, případný grid se rovněž posunuje
1 - sweep_graph - stojící graf překreslující se zleva doprava
2 - line_animation_graph - posunující se graf se stojícím gridem

    MoveTo( x, y : real )

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

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

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

    Hide()

Skrytí viditelného přístroje.

    Show()

Zobrazení skrytého přístroje.

    SetLineValue( LineIndex : real, Value : real )

Zápis nové poslední hodnoty Value do jedné křivky určené hodnotou LineIndex (první má LineIndex 0). Vybraná křivka se tedy posune o jeden krok vzhledem k ostatním.

    SetLineValuePaint( LineIndex : real, Value : real )

Totéž co předchozí metoda a navíc bude přístroj překreslen v nové podobě.

    SetLineIndexValue(  LineIndex : real,  PositionIndex : real, Value : real )

Zápis hodnoty value do křivky dané LineIndex na pozici dané PositionIndex. Vybraná křivka se přitom neposune.

    SetLineIndexValuePaint( LineIndex : real,  PositionIndex : real, Value : real )

Totéž co předchozí metoda a navíc bude přístroj překreslen v nové podobě.

    DisableLine( LineIndex : real )

Vypnutí zobrazování vybrané křivky.

    EnableLine( LineIndex : real )

Zapnutí zobrazování vybrané křivky

    Paint()

Překreslení přístroje.

    Clear()

Inicializace přístroje včetně obsahu vyrovnávacích pamětí všech křivek a aktuální pozice. Index se nastaví na 1.

    SetIndex( Index : real )

Má smysl pouze pro mód sweep_graph. Parametr Index zde reprezentuje pozici kurzorové mezery (tj. místo, kde se graf přepisuje novými hodnotami) na obrazovce a nikoliv pozici ve vyrovnávací paměti křivek.

    SetGrid( HorizontalLines, VerticalLines : number )

Nastavení počtu horizontálních a vertikálních čar rastru. Zobrazování rastru se vypne nastavením nulových hodnot.

    Blink( BlinkingActive : boolean )

Zapnutí a vypnutí blikání. Voláním procedury Blink s parametrem BlinkingActive nastaveným na true začne přístroj blikat (tj. střídavě se překreslovat s použitím barevných sad colors a blink_colors). Blikání je možno zastavit voláním procedury Blink s parametrem BlinkingActive nastaveném na hodnotu false. Frekvence blikání je dána parametrem přístroje blink_rate.

    ToggleBlink()

Přepnutí vzhledu přístroje do alternativní sady barev, tedy z colors do blink_colors nebo naopak podle okamžitého stavu. Po zastavení blikání se přístroj vždy vrátí do standardní barevné sady bez ohledu na předchozí volání procedury ToggleBlink.

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

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 )
    OnKeyDown( Character : cardinal )
    OnKeyRepeat( Character : cardinal )
    OnKeyUp( Character : cardinal )
    OnSelect()
    OnDeselect()
    OnShow()
    OnHide()
    OnNewPosition( RectX, RectY, RectW, RectD : integer )
    OnWindowMinimize()
    OnWindowMaximize()
    OnWindowRestore( WasMinimized, WasMaximized : boolean )
    OnWindowClose()

### Specifické událostní procedury přístroje

    OnIndexOutput( Index : real; Output: real )

Procedura je zavolána pro každou položku, která je identifikována hodnotou parametru Index (počínaje číslem 1). Má-li tedy graf např. 10 položek (deset čar), bude procedura zavolána v každém časovém kroku desetkrát. V proměnné Output je hodnota, která bude bude po dokončení procedury zobrazena a případně zapsána do výstupního datového elementu. Tuto hodnotu je možno v proceduře změnit.

    OnIndexBelowLowLimit( Index : real; Output: real )

Procedura je zavolána pro každou položku, jejíž hodnota v daném časovém kroku podkročila dolní limit. Číslo položky je identifikováno hodnotou parametru Index (počínaje číslem 1). V proměnné Output je hodnota, která bude bude po dokončení procedury zobrazena a případně zapsána do výstupního datového elementu. Tuto hodnotu je možno v proceduře změnit.

    OnIndexAboveHighLimit( Index : real; Output: real )

Procedura je zavolána pro každou položku, jejíž hodnota v daném časovém kroku překročila horní limit. Číslo položky je identifikováno hodnotou parametru Index (počínaje číslem 1). V proměnné Output je hodnota, která bude bude po dokončení procedury zobrazena a případně zapsána do výstupního datového elementu. Tuto hodnotu je možno v proceduře změnit.

    OnIndexBelowRange( Index : real; Output: real )

Procedura je zavolána pro každou položku, jejíž hodnota v daném časovém kroku podkročila dolní hodnotu rozsahu přístroje a která bude proto ořezána. Číslo položky je identifikováno hodnotou parametru Index (počínaje číslem 1). V proměnné Output je hodnota před ořezáním. Tuto hodnotu je možno v proceduře změnit.

    OnIndexAboveRange( Index : real; Output: real )

Procedura je zavolána pro každou položku, jejíž hodnota v daném časovém kroku překročila horní hodnotu rozsahu přístroje a která bude proto ořezána. Číslo položky je identifikováno hodnotou parametru Index (počínaje číslem 1). V proměnné Output je hodnota před ořezáním. Tuto hodnotu je možno v proceduře změnit.