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

Datové typy u objektů a jejich použití

U průzkumných utilit a pomocných programů obvykle není nutné datové typy řešit, hodnoty jsou interpretovány podle normy a zobrazovány v lidsky čitelné formě. Pokud ale mapujeme BACnet property do proměnných procesní stanice nebo vizualizačního programu, někdy musíme řešit, jaký vybrat v programu datový typ, neboť editory mohou s datovými typy umožňovat velmi flexibilní práci.

Analogové hodnoty

Zde je situace asi nejjednodušší. Present Value u objektů Analog Input, Analog Output a Analog Value je typu Real podle standardizace IEEE 754, 32bitový Single-precision floating-point format. Vše by mělo fungovat, pokud použijeme i v klientském programu proměnnou standardního typu Real, viz příklad vyčítání hodnoty v části 3.

Vícestavové hodnoty

Vícestavové hodnoty jsou celočíselné proměnné, které představují různé možné stavy datového bodu. Najdeme je u objektů Multistate Input, Multistate Output a Multistate Value. Příkladem vícestavové hodnoty je třeba třístupňový ventilátor fancoilu, který může nabývat čtyř stavů:

  • Stupeň 1
  • Stupeň 2
  • Stupeň 3
  • Vypnuto

Podle standardu by řada měla začínat číslem 1 (ne nulou) a bez mezer pokračovat k nejvyššímu stavu, tedy např. 1, 2, 3, 4. Počet a názvy stavů a jejich číselné hodnoty definuje výrobce – autor BACnet serveru. Tyto informace mohou být k dispozici i přímo v objektu v podobě nepovinné vlastnosti State_Text, což je pole s popisy stavů.

0601_multistate_list

Obr. Stavové texty u objektu Multistate Output.

V případě podle obrázku může datový bod být ve stavu Auto, Off nebo On. Aktuální hodnota je 1, tedy Auto – viz vlastnost Present Value.

Pokud vlastnost State_Text není podporována, nezbývá, než se obrátit na výrobce s žádostí o dokumentaci.

V BACnet telegramu je hodnota přenášena jako typ uint, proto v klientském programu musí být příslušná proměnná také definována s typem UINT, pokud program v BACnet klientském driveru nemá automatickou konverzi na tento typ. Jinak bude při pokusu o zápis hodnoty BACnet server s největší pravděpodobností vracet chybu. Při potížích pomáhá prozkoumat výpis z programu Wireshark.

0602_multistate_merbon

Obr. Definice multistate proměnné v Merbon IDE

Binární hodnoty

Jak název napovídá, tyto proměnné nabývají jednoho ze dvou možných stavů. BACnet umožňuje každý stav označit textem, například „Zapnuto“ a „Vypnuto“, slouží k tomu volitelné vlastnosti Active_Text a Inactive_Text.

Vlastnost Present_Value je obvykle typu enum, výčet (dvou) hodnot. Standard BACnet připouští ještě další dva typy kódování binární hodnoty: application-tagged a context-tagged. Většina driverů typ kódování při načtení detekuje automaticky, takže pro čtení hodnot není nutné nic řešit. Výjimečně se ale může stát, že nefunguje zápis. V tuto chvíli pro nás z toho plyne, že pokud při zápisu nevyhovuje Typ hodnoty: Enumerated, zkusíme v Merbon IDE vybrat některý z dalších typů – BoolApl nebo BoolCtx.

0603_binary_typy

Obr. Výběr typu hodnoty pro binární vstup, výstup nebo hodnotu

Schedule

Týdenní časový program je jedním z komplikovanějších typů, jedná se o strukturu s proměnnou délkou podle počtu přechodů mezi stavy. Objekt Schedule obsahuje jednak týdenní tabulku (Weekly_Schedule), jednak tabulku výjimek pro svátky, prázdniny, dovolené atd. (Exception_Schedule).

Při řešení potíží se čtením nebo zápisem u časových programů opět může pomoci Wireshark. Obvyklý problém, kdy časový plán nastavený ve vizualizaci nejde zapsat do zařízení, může být způsoben buď omezením ve vnitřní paměti zařízení (typicky u pokojových termostatů a podobných jednodušších přístrojů), nebo špatně nastavenou či chybějící segmentací – při tom pozor na vlastnost Max APDU Length Accepted. To je povinná vlastnost každého zařízení (device). Oznamuje maximální přípustnou délku datového paketu, kterou je zařízení schopno zpracovat. Pokud zařízení nepodporuje segmentaci a Max APDU Length Accepted je příliš krátká, časový plán může být zapsán jen částečně, chaoticky nebo vůbec. To už závisí na tom, jak kvalitně je BACnet v zařízení implementován.

Minimální hodnota APDU podle normy je 50 bytů, což není mnoho: například APDU o délce 209 bytů může obsahovat max. asi 11 změn – přechodů mezi stavy týdenního časového programu. Maximální délka APDU u BACnet MS/TP (po RS485) či ZigBee je 480 bytů. Je tedy vhodné ve výpisu programu Wireshark zkontrolovat, jak dlouhý paket je vysílán, jestli tato délka vyhovuje Max APDU Length Accepted a jestli zařízení paket korektně přijalo.

Všechny díly najdete ZDE.