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

Průzkum BACnet serveru klientem

Nejčastější úlohou, před kterou stojíme, je zaintegrovat data z BACnet serveru (například tepelného čerpadla) do nějakého klientského softwaru – buď vizualizace, nebo PLC, které tato data dále využívá pro nějakou regulační úlohu. U jiných protokolů, jako například Modbus, potřebujeme od výrobce serveru tabulku s adresami a popisem hodnot – jejich formáty, typy, významy atd. BACnet server, díky svým službám, objektům a jejich vlastnostem, může na dotaz ze strany klienta tyto informace do jisté míry poskytnout sám.

BACnet může pro komunikaci používat různé sběrnice. V dalším se soustředíme na BACnet/IP. Předpokládejme tedy, že BACnet server je zařízení, které má rozhraní Ethernet se známou IP adresou. V našem případě půjde o PLC s IP adresou 192.168.1.17. Počítač s BACnet klientem – průzkumníkem, v tomto případě programem Yabe, má IP adresu 192.168.1.44 – adresa je nastavena tak, aby byla ve stejné logické síti. BACnet komunikuje na protokolu UDP, server standardně naslouchá na UDP portu 47808. Toto číslo portu je rezervované u organizace IANA[1], bylo zvoleno tak, aby se v hexadecimálním tvaru – BAC0 – dobře pamatovalo.

Spustíme program Yabe a v menu vybereme pravým kliknutím na Devices funkci Add device.

0201_yabe_add device

Obr. Yabe – Add device

V dialogu vybereme v poli BACnet/IP over UDP místní síťové rozhraní, které má program použít.

0202_yabe_search

Obr. Yabe – Search

Toto je důležitý krok. IP adresa (Local Endpoint) je odchozí adresa, z níž budou do sítě posílány dotazy. Pokud bychom vybrali například IP adresu Wi-Fi rozhraní, paket s dotazem by se po kabelu na BACnet server vůbec nedostal. Port BAC0 je cílový port u BACnet serverů, na který dotazy směřují. (Místní port, ze kterého dotazy odcházejí, je přiřazován automaticky operačním systémem ze seznamu volných portů.) Tlačítkem Add volbu potvrdíme.

Yabe vyšle několik pátracích dotazů Who-Is. Ve stromu se objeví přenosový kanál (UDP port 47808) a na něm nalezené zařízení.

0203_yabe_found

Obr. BACnet zařízení v programu YABE

Pro analýzu paketů je použit program Wireshark. Pokud vše funguje, nebudeme ho potřebovat – výpis na následujícím obrázku je uveden jen pro ilustraci. Jako filtr byl použit parametr „bacnet“ (zelené pole nahoře), tím byla z výpisu odstraněna většina ostatních paketů, které se na síťovém rozhraní vyskytly. V modrém poli, výpisu BACnet paketů, vidíme, že klient s IP adresou 192.168.1.44 vyslal dotaz s využitím služby Who-Is jako broadcast[2] (broadcast se pozná podle toho, že cílová adresa je – v této IP síti – 192.168.1.255). Na tento broadcast, tedy otázku „je zde nějaké BACnet zařízení?“ určenou všem zařízením v logické síti, odpovědělo zprávou I-Am, „jsem tu já“, jediné zařízení: PLC s IP adresou 192.168.1.17. (Vidíme, že dotaz byl opakován třikrát s intervalem 1 s a pokaždé přišla stejná odpověď.)

V okénku vlevo je telegram dotazu dále rozebrán. Zajímavější je ovšem odpověď v okénku vpravo. V ní můžeme pozorovat, jak na sebe server prozradil,

  • že obsahuje objekt Device s číslem instance 1
  • že parametr Maximum APDU Length Accepted má hodnotu 1476 (ať už to znamená co chce)
  • že podporuje segmentaci oběma směry (dtto)
  • že výrobcem zařízení je firma Domat Control System – pozná se podle (opět standardizovaného) Vendor ID, v tomto případě 384.

Pro zajímavost: Vendor ID je zdarma přidělováno organizací ASHRAE. Ke konci r. 2019 jich je přiděleno necelých 1200, z toho 13 firmám z České republiky. Toto číslo slouží k identifikaci výrobce zařízení.

0204_who_is_i_am

Obr. Dotaz Who-Is a odpověď I-Am

Klient pak obvykle zahájí další komunikaci a požádá o další vlastnosti objektu Device, o seznam objektů v zařízení, o vlastnosti objektů a jejich hodnoty atd. Pak můžeme data prohlížet ve stromové struktuře. Pokud necháme zapnutý Wireshark, v jeho okně jsou vidět příslušné dotazy a odpovědi. Vlastnosti, které jsou zapisovatelné, z klienta Yabe můžeme i měnit.

 0205_object_list

Obr. Prohlížení obsahu BACnet zařízení klientem Yabe

V pravém okně Yabe jsou vlastnosti příslušného objektu a jejich hodnoty. Nejvíce nás asi bude zajímat vlastnost Present Value, která v případě analogového vstupu (Analog Input) udává měřenou hodnotu, zde 23,56. Vlastnost Units upřesňuje, že hodnota je v °C a tedy se jedná o teplotu, a to opět standardizovaným číslováním (62 znamená °C). Kompletní popis a výčty inženýrských jednotek najdeme v normě, „slušný“ klient ale číslo jednotky přeloží jako zde na symbol nebo text („Degrees Celsius“).

Další užitečná vlastnost je Description. Tam obvykle najdeme, co vlastně objekt představuje. Typický text v této vlastnosti je „Outside Temperature“, „tNabehZapad“, „Otacky privod“ atd.

Co když to nefunguje?

Neznám IP adresu BACnet serveru

Pokud je ve stejné logické síti jako adresa BACnet klienta, může dojít k detekci i tak. Doporučujeme ale adresu zjistit u dodavatele nebo programátora, aby byla jistota, že i ostatní síťové parametry (maska, brána, UDP port) jsou nastaveny správně.

Adresa je ve stejné síti, ale klient nic nedetekuje

Broadcasty mohou být blokovány firewallem na počítači, kde běží klient. Zkusme dočasně vyřadit z činnosti firewall a antivirovou ochranu. Broadcasty nemusejí také projít přes router či VPN: pro pokusy je lepší používat switch. Může také pomoci zakázat či odpojit ostatní – nepoužívaná – síťová rozhraní, jako jsou wi-fi karty, VPN atd. Zkontrolujme v programu Wireshark, zda klient vysílá telegramy jako broadcasty ve stejné síti, v jaké je server: na výpisu výše je ve sloupci Destination správná broadcastová adresa 192.168.1.255.

Broadcasty odcházejí korektně, ale klient nic nedetekuje

Některé BACnet servery mohou (z hlediska normy bezdůvodně) vyžadovat, aby port č. 47808 byl použit i na straně klienta jako odchozí. Pokud to klient umožňuje, zkusme na něm port nastavit.

U jiných BACnet klientů je postup podobný, některé programy nevysílají síťové broadcasty a vyžadují zadání konkrétní IP adresy BACnet serveru, se kterým mají komunikovat.

V „příručním“ klientu tedy již prozkoumat objekty umíme. Jakmile se ale pustíme do nastavování komunikace ve vývojovém prostředí pro PLC nebo vizualizace, může se stát, že narazíme na další parametry, s nimiž jsme se zde zatím nesetkali. Podíváme se na ně v následující části.

 


[1] Viz https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml?search=47808

[2] Broadcast – zpráva určená všem zařízením v síti.