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


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.