Protokol BACnet (Building Automation Control Network) není v systémech řízení budov žádným nováčkem. Jeho vývoj začal v roce 1987, v roce 1995 se stal standardem ANSI/ASHRAE a v r. 2003 byl normalizován ve standardu ISO 16484-5. V procesních podstanicích se ale objevuje jen postupně, především pro svou ne zcela snadnou implementaci. Jako u každého komunikačního protokolu, tvůrci hledali optimální bod mezi rychlou a úspornou implementací na nejrůznější typy hardwaru a jednoduchým, pochopitelným použitím v praxi. Na rozdíl od poměrně jednoduchých komunikačních protokolů, jako je například Modbus, je tedy v BACnetu definována celá řada služeb a objektů, které usnadňují aplikačním technikům práci při programování a uvádění technologií do provozu.
Pokud se chceme s protokolem BACnet seznámit z hlediska programátora PLC, kompletní popis standardu, který má ve vydání z roku 2016 více než 1300 stran, by nás asi odradil. Norma dává pro začátečníka smysl více jako referenční příručka než jako učebnice. Podívejme se na BACnet spíše jako technici měření a regulace, které vlastně nezajímá ani tak konkrétní podoba telegramů, jako spíš vztah BACnetu k pojmům, které známe ze světa PLC.
BACnet používá model klient - server, tedy musíme vždy rozlišovat, jestli určitý hardware pracuje jako BACnet klient nebo BACnet server. Je možné, aby jeden přístroj podporoval obě funkce, ale není to obvyklé - s výjimkou programovatelných PLC. Velmi zjednodušeně řečeno, server obsahuje objekty, klient si je vyčítá a zapisuje do nich.
BACnet server obsahuje data v podobě objektů. BACnet definuje 60 standardních typů objektů, například analogová hodnota, časový program, záznam trendu, nebo skupina výtahů. Některé objekty, jak vidíme, mají jasnou souvislost s řízením budov. BACnet objekt je struktura, která má několik vlastností (BACnet properties). Vlastnost je v podstatě proměnná, která je nějakého definovaného typu, má nějaký název a nabývá nějaké hodnoty.
Aby byly v rámci zařízení od sebe odlišeny objekty stejného typu, každý má unikátní číslo instance - Instance Number. Jednoznačná identifikace objektu v zařízení se tedy skládá z typu objektu a čísla jeho instance. Máme-li dejme tomu BACnet vstupní modul s 8 analogovými vstupy, bude mimo jiné nejspíš obsahovat objekty Analog Input 1 až Analog Input 8.
Objekty jsou sdruženy v „kontejneru“, BACnet zařízení (device)[1]. V hardwarovém přístroji, např. v PLC, smí být jen jeden objekt tohoto typu. Device má také nějaké vlastnosti. Ty definují zejména komunikační možnosti a BACnet klient si je načítá jako první, aby věděl, jakým způsobem má se serverem optimálně komunikovat.
Obr. Struktura objektů a vlastností BACnet v hardwaru
Obr. Vlastnosti objektu Device
Tabulka je snímek obrazovky z BACnet klienta, programu Yabe, který se používá jako průzkumník zařízení BACnet. Program našel na síti BACnet server a načetl z něj BACnet device a jeho vlastnosti. Názvy vlastností jsou v levém sloupci, jejich hodnoty v pravém. Jedna z vlastností je například Local Time, její hodnota říká, že hodiny reálného času v BACnet serveru ukazují 13:36:03. Později uvidíme, že některé vlastnosti jsou podle standardu povinné, jiné jsou volitelné - i když je zařízení neobsahuje, stále vyhovuje normě. Některé vlastnosti mohou být povinné jen za určitých podmínek: vlastnost Local Time je například povinná pouze tehdy, obsahuje-li zařízení hodiny reálného času.
Důležitou vlastností zařízení je vlastnost Object List. Je to seznam všech objektů, které zařízení obsahuje, a na které se pak klient může dále doptávat. V tabulce je vidět část seznamu objektů s jejich typy a čísly instancí. Například z indexů 4 a 5 je zřejmé, že device obsahuje mj. dva objekty typu Binary Output s čísly instancí 1 a 2. To už klientovi stačí na to, aby se na ně zeptal v dalších dotazech a nechal si vypsat jejich vlastnosti.
I vlastnosti jsou standardizované. Norma jich specifikuje skoro 500. Každá vlastnost má v normě své textové označení, property identifier, a zároveň číslo: například nejčastěji používaná vlastnost objektu, present value (aktuální hodnota), která například u čidla teploty nese naměřenou teplotu, má číslo 85. V následující tabulce jsou vidět normované vlastnosti objektu Analog Value:
Obr. Properties of the Analog Value Object Type. Zdroj: ISO 16484-5, (C) ISO 2016
V tabulce vidíme název vlastnosti (např. Present Value), její typ (zde REAL) a informaci o tom, zda jde o proměnnou pouze ke čtení (R, read), ke čtení i zapisovatelnou (W, write) nebo nepovinnou (O, optional). Čísla vlastností v tabulce nejsou uvedena, ale je dobré je znát, neboť řada vizualizačních programů umožňuje u definice datových bodů nastavení použité vlastnosti právě číslem - je to zřejmě jednodušší, než dlouhý drop-down box se stovkami vlastností (v němž by stejně chyběly vlastnosti specifické, které si výrobci mohou definovat libovolně, viz dále). Poznámky u nepovinných proměnných - horní indexy - upřesňují podmínky, za jakých se například nepovinné vlastnosti stávají povinnými, omezují jejich rozsahy atd.
Typy proměnných jsou buď jednoduché, jako Real, CharacterString, Boolean, Enumerated atd., nebo specifické pro BACnet - například BACnetPriorityArray. Jejich podrobný popis bychom našli v normě, nyní se tím zabývat nebudeme.
Tvůrci zařízení si mohou mimo normu pro objekty definovat jejich další specifické vlastnosti, tzv. proprietary properties. Ty se používají například pro definici umístění objektu v hierarchické struktuře (stromu), aby klienti mohli zobrazovat proměnné strukturovaně podle technologií a ne jen všechny nepřehledně pod sebou.
Obr. Proprietary properties. Zdroj: BACnet Browser Test Sequencer User’s Manual, (C) Siemens
Podle normy jsou čísla Property ID do 511 vyhrazena pro standardní vlastnosti definované normou, čísla od 512 výše lze používat pro specifické, zákaznické vlastnosti. Na obrázku výše vidíme vlastnosti s Property ID (první sloupec) 3000 a výše. Ty jsou typické pro implementaci Siemens.
Máme tedy device, obsahující objekty. Jak je ale vyčíst? I na to BACnet myslí a definuje tzv. služby (services). Jsou to vlastně standardizované funkce pro práci s daty - určují formát dotazů a odpovědí. Některé služby mají poněkud bizarní názvy, jako Who-Is, I-Am, Who-Has, I-Have - ty se používají pro detekci a prozkoumávání zařízení a objektů. U jiných je funkce zřejmá z pojmenování: Read-Property a Write-Property zjevně slouží pro čtení a zápis jednotlivých vlastností v objektech. Služby nás nebudou tolik zajímat, mají význam spíš pro programátory driverů než pro aplikační techniky. Jejich názvy se ale objevují ve výpisu v programu Wireshark, takže pro diagnostiku se hodí je znát, jak uvidíme dále.
Služeb je asi 40 a kromě práce s proměnnými řeší i funkce jako potvrzování alarmů, synchronizace času, dynamické vytváření a mazání objektů, ale i přenos souborů nebo přenos dat pomocí terminálu. Přenos souborů může sloužit například pro přehrání aplikačního programu.
V další části vyzkoušíme pomocí služeb prozkoumat objekty, které jsou v zařízení obsaženy.