# boolean_regulator

### Funkce

Dvoupolohový regulátor, který podle dvou vstupních numerických výrazů — žádaná a regulovaná hodnota — vypočítá akční zásah (výstup) — zapnuto / vypnuto.

### Syntax

      boolean_regulator boolean_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 = boolean_dataelement;
        inverse;
        receivers = [ identifier, . . . ];
        divergence_minus = real;
        divergence_plus = real;
        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_boolean_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
  Obsahuje datový element, tj. proměnnou nebo kanál, na který bude regulátor posílat vypočtený regulační zásah. Dvoustavový regulátor vytváří akční zásah jako logickou hodnotu, symbolizující stav zapnuto, nebo vypnuto. Pomocí parametru inverse je možné měnit význam logických hodnot regulačního zásahu.
- inverse
  Je-li zadán, pak regulátor bude posílat akční zásah output v negované podobě, neboli stavu sepnuto bude odpovídat logický výstup false a stavu vypnuto logický výstup true.
- 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.
- divergence_minus a divergence_plus
  jsou hodnoty 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čí pod divergence_minus.
- 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í 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
  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í inkrementálních a dekrementální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_grid 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, SWISS, FIXED aj.), druhý určuje jeho velikost 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í 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 apostrofech, v inspektoru přístroje bez nich. 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.
- Význam barev i módů je totožný s přístrojem meter.
- Implicitně jsou nastaveny následující parametry:

      position = 0, 0,100, 80;
      access = 4294967295;
      tab_select = 4294967295;
      divergence_minus = 0;
      divergence_plus = 0;
      section
      ratio = 1;
      view_position = 1; {= 2; = 3; }
      mode = pointer;
      content = min;
      range_from = 0;
      range_to = 1;
      low_limit = 0;
      high_limit = 1;
      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 boolean_regulator:

      window boolean_regulator id_2;
        timer = 1;
        owner = background;
        position = 217, 29, 445, 208;
        wish_value = w;
        expression = vystup_ze_soustavy;
        output = b;
        condition = start;
        output_section
          view_position = 3;
          mode = flow_graph;
          history = 50;
        end_output_section;
        wish_value_section
          view_position = 1;
          mode = flow_graph;
          history = 50;
          mask = 'input ##.#';
        end_wish_value_section;
        value_section
          ratio = 10;
          view_position = 2;
          mode = flow_graph;
          history = 50;
          font = TIMES, 12, normal;
        end_value_section;
      end_boolean_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 )
GetDivergenceMinus( &div_minus : real )
GetDivergencePlus( &div_plus : real );`

Metody slouží ke změně parametrů dvoustavového regulátoru. Parametry div_minus a div_plus odpovídají parametrům regulátoru divergence_plus a divergence_minus nastavovatelným v popisu přístroje. Více informací je možné získat v referenční příručce dvoustavové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( &Active : 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. Parametr Active obsahuje aktuální hodnotu výstupu regulátoru, přičemž tato hodnota v okamžiku volání procedury ještě není zapsána do výstupního datového elementu. Procedura proto může výstup regulátoru ovlivnit upravením parametru Active na libovolnou hodnotu. Teprve takto upravená (případně nezměněná) hodnota bude zapsána na výstup regulátoru.

`OnOutputChange( &Active : 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. Parametr Active obsahuje aktuální hodnotu výstupu regulátoru, přičemž tato hodnota v okamžiku volání procedury ještě není zapsána do výstupního datového elementu. Procedura proto může výstup regulátoru ovlivnit upravením parametru Active na libovolnou hodnotu. Teprve takto upravená (případně nezměněná) hodnota bude zapsána na výstup regulátoru.