cz
en

BACnet - stručný úvod do základů 4. díl

Zápis hodnot, priority

V předchozí části jsme zaintegrovali objekt typu Analog Input, tedy analogovou hodnotu. Je dobré začít s nějakou známou veličinou, například teplotou v místnosti, protože reálné číslo je na první pohled dobře vidět, občas se změní a lze ho snadno zkontrolovat, na rozdíl od například hodnot binárních. V drtivé většině případů budeme potřebovat jen několik základních typů objektů:

  • Analog Input, Analog Value, Analog Output,
  • Multistate Input, Multistate Value, Multistate Output,
  • Binary Input, Binary Value, Binary Output,
  • Schedule - tomu bude věnována samostatná kapitola.

U objektů typu Schedule, ... Value a ... Output je možné do vlastnosti Present Value i zapisovat. Dává to smysl, Analog Value může uchovávat třeba požadovanou teplotu a Binary Output je například reléový výstup, který může být přeřízen na dálku.

Tím se dostáváme k problematice zápisu.

U jiných, jednodušších komunikačních protokolů prostě platí, že pokud je proměnná zapisovatelná, tak se při požadavku na zápis hodnota změní. Ochrana proti neoprávněnému zápisu může být zajištěna například nějakým přihlašováním pomocí jména a hesla: jakmile je klient přihlášen, může proměnnou nastavovat. Pokud dojde k více zápisům za sebou (i z různých klientů), platí hodnota zapsaná jako poslední. Na to jsme zvyklí a je to logické a pochopitelné.

BACnet má tyto mechanismy řešeny jinak, a to pomocí priorit. Priorit je celkem 16 a jsou, jak jinak, standardizovány. (Alespoň některé.) Čím menší číslo, tím vyšší priorita:

Priorita Popis
1 (nejvyšší) Manual Life Safety
2 Automatic Life Safety
3  
4 Critical Equipment Control Manual
5 Critical Equipment Control Automatic
6 Minimum On/Off
7 Manual Operator Switch
8 Manual Operator Unit
9  
10  
11  
12  
13  
14 Specific Command Control
15 Program Control
16 (nejnižší) System Control

Nevyplněné názvy priorit jsou volně použitelné, výrobce zařízení si je může nazvat podle svých potřeb. Už z názvů vidíme, že pokud je proměnná ovládána programem s prioritou 15, tedy docela nízkou, a obsluha by ji přeřídila přes ovládací pultík (tedy prioritou 8), toto přeřízení pultíkem bude mít přednost. O stupínek vyšší autoritu představuje např. vypínač na rozvaděči přivedený na vstup PLC, ten by měl prioritu 7 - ruční přeřízení obsluhou „z místa“. Ještě větší váhu ale má například přehřátí výměníku hlášené havarijním termostatem, to by mělo nejspíše prioritu 5, tedy kritické přeřízení technologie automatikou[1].

Každý objekt, do něhož lze zapisovat, má dvě povinné vlastnosti: Priority_Array (pole priorit) a Relinquish_Default (což snad lze přeložit jako „výchozí hodnota při uvolnění“).

Je to vidět např. u objektu Analog Output:

Obr. Vlastnosti pro priority u objektu typu Analog Output. Zdroj: ISO 16484-5, (C) ISO 2016

Obr. Vlastnosti pro priority u objektu typu Analog Output. Zdroj: ISO 16484-5, (C) ISO 2016

Pole priorit má 16 pozic pro ukládání hodnot stejného typu jako Present_Value objektu (pro Analog_Output je to typ Real). Pokud je totiž součástí požadavku na zápis i nějaká priorita, nová hodnota se zapíše do příslušné pozice k této prioritě. (Zápis může být prováděn i bez udání priority, pak je automaticky považován za požadavek s prioritou nejnižší.)

Obr. Příklady zápisů s prioritami a bez priorityObr. Příklady zápisů s prioritami a bez priority

Na obrázku a) je pole priorit objektu, do něhož byl proveden zápis hodnoty 23 s prioritou 8, Manual Operator Unit. To odpovídá např. situaci, kdy z ovládacího pultíku je nastaven ventil na 23 %. Výstup, Present_Value, tohoto objektu se nastaví na 23, protože neexistuje žádný záznam na některé z vyšších priorit (1 až 7).

V dalším kroku nějaký proces, například regulační smyčka, zapíše do tohoto objektu hodnotu 19. Tento zápis je bez nastavení priority, je tedy považován za akci s prioritou nejnižší (16). Hodnota 19 je zapsána do příslušné položky pole priorit, ale na Present_Value, tedy výstup tohoto objektu, to nemá vliv - silnější je na prioritě 8 hodnota 23 %. Tato situace je na obr. b).

Nyní dojde k automatickému zápisu dejme tomu z procedury pro havarijní odstavení výměníku. S prioritou 5 (tedy Critical Equipment Control, jak vidíme v tabulce výše), je zapsána hodnota 0. Protože to je záznam se zatím nejvyšší prioritou, Present_Value objektu se nastaví na 0 a ventil zavírá. (obr. c).

Co se stane, když havarijní situace pomine? Havarijní procedura předá řízení běžné regulaci s nižšími prioritami tím, že prioritu uvolní: do příslušné priority (zde 5) zapíše speciální „prázdnou“ hodnotu, na obrázku symbolizováno pomlčkou. Tím se vzdá svého přeřízení a „je jí jedno, co bude na výstupu“. Nastane opět situace na obr. b) a na výstupu objektu je nejvyšší neprázdná hodnota odshora, tedy manuální zásah 23 %. Kdyby operátor z pultíku manuální přeřízení zrušil, na výstupu by byla hodnota z regulační smyčky, která zapisovala s nejnižší prioritou, tedy 19 %.

Pokud by všech 16 priorit mělo „prázdnou“ hodnotu, na výstupu objektu bude hodnota Relinquish_Default.

Tímto způsobem se BACnet elegantně vyrovnává s různými prioritami požadavků pro zápis, aniž by bylo nutné složitě řešit procesní logiku v programu. Pro nás z toho ale plyne to, že pokud si nejsme zcela jisti, s jakou prioritou můžeme zapisovat, volme zápis bez priority (v Merbon IDE „Not specified“). Jinak bychom mohli významně zasáhnout do funkce zařízení. Poslat uvolnění priority totiž z PLC nebo vizualizace není dobře možné, resp. neexistuje způsob, jak by PLC mohlo „samo“ určit, kdy má být priorita uvolněna. Jde o automatický zápis s předdefinovanými vlastnostmi, mění se pouze zapisovaná hodnota.

Podobně je to u BACnet klientu Promotic, který má možnost výběru priority pro zápis přímo v definičním dialogu proměnné:

Obr. Definice proměnné ve vizualizaci PromoticObr. Definice proměnné ve vizualizaci Promotic

U vizualizace si prioritu můžeme stanovit sami, pro požadované hodnoty (teploty, tlaky, vlhkosti atd.) by se nejspíš použil zápis bez priority. Při rovnosti priorit platí poslední zapsaná hodnota z jakéhokoli zařízení.

PLC s runtimem Domat používají ve funkci BACnet klient pro zápis do ostatních zařízení prioritu 16, nejnižší. Je to proto, že se jedná o automatizovaný opakovaný zápis, a vyšší priorita, např. 8, by mohla kolidovat s manuálním přeřízením z obslužného terminálu nebo ze Scady.

Pro zajímavost: nastavení z místního pultíku Siemens PXM20-E na rozvaděči pro zápis používá prioritu 8 - manuální přeřízení z ovládacího panelu. Datový bod se pak zobrazuje v manuálním stavu (symbol montážního klíče). Při uvolnění z manuálního stavu pultík zapíše s prioritou 8 hodnotu NULL, čímž manuální stav uvolní.

Na posledním obrázku vidíme pro ilustraci část odpovědi na dotaz Read Property Multiple. Objekt (typu Multistate Value, což na výřezu vidět není) má aktuální hodnotu (Present Value) 1, protože jediná jeho obsazená priorita je 16, právě s hodnotou 1. Ostatní, vyšší priority, jsou uvolněny, ve výpisu je u každé z nich hodnota NULL.

Obr. Priority ve výpisu programu Wireshark Obr. Priority ve výpisu programu Wireshark

Všechny díly

[1] Ve všech těchto příkladech se nejedná o hardwarové přeřízení s vyloučením PLC, jak je známe z běžné praxe. Priority BACnet jsou čistě softwarová záležitost. Případné hardwarové přeřízení mezi výstupem PLC a výstupní periferií by samozřejmě fungovalo jako obvykle.