# step_regulator

### Funkce

Krokový regulátor, který podle dvou vstupních numerických výrazů — žádaná a regulovaná hodnota — vypočítá akční zásah — přičítací a odečítací výstup.

### Syntax

      step_regulator step_regulator_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;
        condition = boolean_expression;
        wish_value = real_expression;
        expression = real_expression;
        output_minus = real_dataelement;
        output_plus = real_dataelement;
        receivers = [ identifier, . . . ];
        inverse;
        divergence_minus = real;
        divergence_plus = real;
        inactive_hit = integer;
        show_description;
        wish_value_section
          BLOCK_SECTION
        end_wish_value_section;
        value_section
          BLOCK_SECTION
        end_value_section;
        output_section
          BLOCK_SECTION
        end_output_section;
        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;
      end_step_regulator;

      BLOCK_SECTION
        ratio = integer;
        view_position = integer;
        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;

### Specifické parametry přístroje

- condition
  Obsahuje podmínku spuštění regulace. Dokud není výraz condition = true, regulátor nevysílá žádnou logickou hodnotu.
- wish_value
  Číselný výraz určující žádanou hodnotu, které se regulátor bude snažit dosáhnout.
- expression
  Číselný výraz s hodnotou aktuálního stavu regulované veličiny, tuto veličinu regulátor reguluje.
- output_minus a output_plus
  jsou tzv. akční zásahy. Jde o dva výstupy, které jsou realizovány logickou hodnotou. Parametr udává název proměnné nebo výstupního kanálu, kam se bude hodnota nastavená přístrojem step_regulator posílat. Je-li žádaná hodnota větší než skutečná, regulátor nastaví na výstup output_plus stav sepnuto a na výstup output_minus stav vypnuto a naopak.
- receivers
  Seznam přístrojů, kterým se budou posílat zprávy o akcích regulátoru. Podle nastavení parametru send_same_data se regulátor chová dvěma způsoby - buď volá přístroje uvedené v receivers jen při změně akční hodnoty (parametr send_same_data není nastaven), nebo (send_same_data nastaven je) v každém časovém kroku bez ohledu na stav nebo změnu stavu akční veličiny.
- inverse
  Je-li tento parametr zadán, pak regulátor bude generovat negované akční zásahy, neboli výstup bude aktivní ve stavu sepnuto nastavenou logickou hodnotou false a neaktivní ve stavu vypnuto nastavenou logickou hodnotou true.
- divergence_minus a divergence_plus
  jsou hodnoty velikosti hystereze regulátoru. Je-li žádaná hodnota větší než skutečná, regulátor sepne až když tato odchylka překročí divergence_plus. Naopak, je-li žádaná hodnota menší než skutečná, regulátor vypne až když rozdíl těchto veličin překročí divergence_plus.
- inactive_hit
  Počet časových kroků regulace, během kterých se nebude vysílat následující akční zásah. Parametr má význam u rychle reagujících soustav, vhodnou volbou tohoto parametru je možné ovlivňovat překmity či rozkmitání regulátoru. Konkrétní hodnotu je nutné vždy určit na dané soustavě experimentálně.
- show_description
  je klíčové slovo, které určuje, zda se má zobrazit popis jednotlivých sekcí regulátoru.
- section a end_section
  jsou klíčová slova, mezi kterými jsou umístěny parametry ovlivňující vzhled vykreslování výstupní a dvou vstupních hodnot.
- ratio
  Vyjadřuje poměrnou část šířky plochy, která bude nastavena této sekci vzhledem k celkové šířce regulátoru.
- view_position
  Má hodnotu 1, 2, nebo 3, která udává pořadí sekce v regulátoru při zobrazování.
- mode
  Určuje grafickou podobu přístroje uvedením jednoho z názvů módu:
    pointer - ručkový přístroj
    digital - digitální přístroj s celistvými číslicemi
    dot_digital - digitální přístroj s bodovými číslicemi
    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 - textový displej
    double_graph - kombinace žádané a vstupní hodnoty
- content
  Má rovněž vliv na grafickou podobu přístroje. Může nabývat tří hodnot : max, med a min. 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. Bude-li hodnota vstupního výrazu přístroje menší, než je hodnota range_from, přístroj se nastaví právě na hodnotu uvedenou v range_from, stejně tak bude-li hodnota vstupního výrazu přesahovat range_to, přístroj se nastaví právě na hodnotu uvedenou v range_to.
- low_limit a high_limit
  jsou parametry ovlivňující barevné zobrazení vykreslované hodnoty. Je–li hodnota menší než low_limit, vykresluje 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. Podle zvoleného módu se bude měnit např. barva pozadí přístroje , popř. se danými barvami vykreslí hodnoty obou limit v grafu.
- history
  Udává počet zobrazených hodnot v grafu. U jiných módů nemá význam.
- dec_places
  je počet zobrazovaných desetinných míst pro módy s číselným vykreslováním hodnoty.
- real_step
  je parametr důležitý pro nastavování limitů přístroje pomocí numerického řádku. Jeho numerická velikost udává přírůstek hodnoty při použití přičítacích a odečítacích šipek numerického řádku.
- h_grid a v_grid
  jsou parametry urč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 vodorovných a svislých čar.
- font
  je parametr určující font při vykreslování hodnoty módem text_display. Má vždy tři části. První z nich font_identifier určuje typ písma (např. TIMES, SYSTEM, aj.), druhý určuje jeho velikost v tiskových bodech a třetí parametr styl_identifier rozhoduje o tom, zda bude písmo normální (normal), tučné (bold) nebo skloněné (italic).
- mask
  je šablona pro vypisování libovolného textu současně s numerické hodnotou přístroje. Parametr má význam při mode = text_display;. v textovém režimu se zadává v uvozovkách, v inspektoru přístroje bez uvozovek. Může mít např. tvar `mask = 'rychlost = ##.## m/s';` , kde znak '#' udává umístění a velikost zobrazované numerické hodnoty.

### Poznámky

- Více informací o použitých regulačních mechanismech a regulátorech samotných je možné nalézt v kapitole Regulátory a regulace manuálu.
- Podoba módů je popsána u přístroje meter.
- Implicitně jsou nastaveny parametry:
    position = 0, 0, 100, 80;
    access = 4294967295;
    tab_select = 4294967295;
    divergence_minus = 0;
    divergence_plus = 0;
    active_hit = 5;

### Příklad

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

      window step_regulator reg;
        timer = 1;
        owner = background;
        position = 217, 34, 345, 108;
        wish_value = w;
        expression = vystup_ze_soustavy;
        output_minus = minus;
        output_plus = plus;
        condition = start;
        active_hit = 2;
        output_section
          view_position = 3;
          mode = flow_graph;
          range_from = -1;
          range_to = 1;
          low_limit = -1;
          high_limit = 1;
          history = 50;
        end_output_section;
        wish_value_section
          mode = flow_graph;
          history = 50;
        end_wish_value_section;
        value_section
          view_position = 1;
          mode = flow_graph;
          history = 50;
        end_value_section;
        colors
          paper = white;
          low_limit = dgray;
          high_limit = dgray;
        end_colors;
      end_step_regulator;

### Nativní procedury přístroje

Podrobnější informace k nativním procedurám je možné nalézt v kapitole Regulátory a regulace.

    SetDivergenceMinus( div_minus : real );
    SetDivergencePlus( div_plus : real );
    SetInactiveHit( active_hit : real );
    GetDivergenceMinus( VAR div_minus : real );
    GetDivergencePlus( VAR div_plus : real );
    GetInactiveHit( VAR inactive_hit : real );

Metody slouží ke změně parametrů krokového regulátoru. Parametry div_minus, div_plus a inactive_hit odpovídají parametrům regulátoru divergence_plus, divergence_minus a inactive_hit nastavovatelným v popisu přístroje. Více informací je možné získat v referenční příručce krokového regulátoru a v kapitole Regulátory a regulace.

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

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

    OnActivate()
    OnShow()
    OnHide()
    OnNewPosition( RectX, RectY, RectW, RectD : integer )
    OnWindowMinimize()
    OnWindowMaximize()
    OnWindowRestore( WasMinimized, WasMaximized : boolean )
    OnWindowClose()

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

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

    OnOutput( &PlusActive, &MinusActive : boolean )

Proceduru přístroj volá vždy při nastavení výstupu, ať již je jeho hodnota jakákoli. Procedura je proto volána v každém časovém kroku přístroje. Parametry PlusActive a MinusActive obsahují aktuální hodnoty výstupu regulátoru, přičemž tyto hodnoty v okamžiku volání procedury ještě nejsou zapsány do výstupních datových elementů. Procedura proto může výstup regulátoru ovlivnit upravením parametrů PlusActive a MinusActive na libovolnou hodnotu. Teprve takto upravené (případně nezměněné) hodnoty budou zapsány na výstup regulátoru.

    OnOutputChange( &PlusActive, &MinusActive : boolean )

Proceduru přístroj volá vždy při nastavení výstupu, je-li jeho aktuální hodnota odlišná od hodnoty předchozí. Procedura proto nemusí být volána v každém časovém kroku přístroje. Parametry PlusActive a MinusActive obsahují aktuální hodnoty výstupu regulátoru, přičemž tyto hodnoty v okamžiku volání procedury ještě nejsou zapsány do výstupních datových elementů. Procedura proto může výstup regulátoru ovlivnit upravením parametrů PlusActive a MinusActive na libovolnou hodnotu. Teprve takto upravené (případně nezměněné) hodnoty budou zapsány na výstup regulátoru.