Kontaktné údaje
- info@ipesoft.com
- +421 907 703 854
- Obchodná 9076/3D
010 08 Žilina
Slovensko
© Copyright IPESOFT 2023
Aké typy hodnôt podporuje BACnet? Predtým, ako dokážeme zrozumiteľne odpovedať na túto otázku, vysvetlime si, ako vyzerajú BACnet správy.
Všetky dátové elementy správ sú v BACnet protokole nazývané tagy. Existujú dve triedy tagov:
BACnet štandard popisuje správy v ASN.1 syntaxi, ktorá umožňuje pomerne zrozumiteľný a ľahko čitateľný symbolický zápis dátových štruktúr. V tejto syntaxi je aplikačný tag zapisovaný typom a kontextový tag číslom v hranatých zátvorkách a typom. Tagy sú organizované do sekvencií (kľúčové slovo SEQUENCE).
Správa umožňuje dva spôsoby špecifikácie čítania dát zo súboru - streamovo orientovaný prístup so špecifikáciou pozície a počtu bajtov a záznamovo orientovaný prístup so špecifikáciou počiatočného záznamu a počtu záznamov.
Silnou stránkou BACnet protokolu je aj variabilita správ - rôzne spôsoby špecifikácie viditeľné na obrázku 9, voliteľné parametre, opakovanie sekvencií. Podporované sú aj polia.
Teraz, keď vieme, ako vyzerá špecifikácia správ, môžeme sa pozrieť, ako vyzerajú správy použité na čítanie hodnoty atribútu.
Vidíme, že požiadavka je jednoduchá – špecifikuje pomocou kontextových tagov identifikátor objektu, identifikátor atribútu a voliteľne index v poli (pokiaľ je atribút pole). Odpoveď obsahuje tie isté tagy a navyše hodnotu. Tá je ale typu ABSTRACT-SYNTAX.&Type. Čo to znamená?
V ľudskej reči to znamená „tu môže byť hocičo“. No dobre, ale ako to budeme parsovať? Ako môže klient spracovať správu, v ktorej je „hocičo“ ?
Kľúčom k odpovedi je znovu ASN.1, resp. kódovanie ASN.1 tagov v binárnom formáte, ktorý je používaný v BACnet protokole. Kódovanie každého dátového elementu správy obsahuje trojicu TLV – Tag (číslo a príznak, či sa jedná o kontextový alebo aplikačný), Length (dĺžka dát) a Value (samotné dáta). Štart a koniec sekvencie (a jej tag) sú takisto v binárnom formáte zachytené. Takto môže BACnet klient spracovať odpoveď obsahujúcu ľubovolnú štruktúru. Jediný problém je, že ak je dátový element kontextový tag (napr. [2] s dĺžkou 4 bajty), tak je nutná doplňujúca informácia, ako jeho hodnotu interpretovať (môže to byť Unsigned, Signed, Real, Character String, BACnetObjectIdentifier a iné).
Pokiaľ neobsahuje správa jednoduché dáta (či už aplikačne alebo kontextovo tagované), ale štruktúrované „hocičo“, umožňuje konfiguračný dialóg meraného bodu zadať tzv. komplexnú adresu a špecifikovať, ktorá položka štruktúrovaných dát bude do meraného bodu priradená.
Na obrázku 11 je meraný bod s komplexnou adresou [1].3.2.[1]. Znamená to, že v prijatých dátach sa najskôr hľadá kontextový tag č. 1 (očakáva sa nájdená sekvencia), následne v rámci tejto sekvencie tretí tag v poradí (opäť musí byť nájdená sekvencia) a v nej druhý tag v poradí (znovu sekvencia) a konečne v tejto poslednej sekvencii kontextový tag 1. Keďže sa jedná o kontextový tag, je nutné ešte špecifikovať pomocou parametra Application tag (na obrázku hneď nad komplexnou adresou), že ho treba interpretovať ako reálne číslo (Real).
Konkrétnym prípadom implementácie komplexnej správy obsahujúcej štruktúrované dáta je objekt typu schedule(17) implementovaný v zariadení Siemens Desigo PXC64-U slúžiaci na vytváranie časových plánov. Pri čítaní atribútu weekly-schedule (123) s indexom poľa 1 (konfiguračný parameter Array) parsoval D2000 KOM prijatú odpoveď takto:
Hodnota (propertyValue) obsahuje sekvenciu v ktorej je striedavo čas a kladná hodnota. Komplexná adresa pre prístup k prvému času by bola 1.1 , k prvej hodnote by bola 1.2, k ďalšiemu času a hodnote 1.3 a 1.4. Kontextové tagy by neboli použité, keďže v rámci sekvencie propertyValue je už vnorená sekvencia a všetky hodnoty aplikačne tagované.
Načítaná hodnota predstavuje hodnotu časového plánu pre prvý deň v týždni (preto ten index poľa Array spomenutý vyššie). Dvojica čas/hodnota udáva, o ktorej hodine sa má časový plán zmeniť na požadovanú hodnotu (ktorá môže napr. reprezentovať úroveň vykurovania). Pokiaľ by sme čítali bez indexu poľa, dostali by sme propertyValue obsahujúcu sedem sekvencií, pre každý deň v týždni jednu.
Táto implementácia atribútu weekly-schedule je v súlade s BACnet normou, ktorá špecifikuje atribút weekly-schedule ako pole siedmich položiek typu BACnetDailySchedule:
Pričom typ BACnetDailySchedule je sekvencia BACnetTimeValue, čo je sekvencia času a hodnoty:
Treba si uvedomiť, že podľa poznámky v definícii normy pole value môže byť ľubovolný primitívny typ – takže iný výrobca (alebo aj Siemens v inom zariadení) môže implementovať atribút weekly-schedule s použitím iného typu ako Unsigned. A naozaj, napr. Delta Controls DAC-1146 implementuje časový plán na základe hodnôt 0/1 (t.j. nešpecifikuje sa napr. úroveň kúrenia ale iba informácia typu kúri-nekúri), ktoré sú ale implementované nie ako dátové typy Boolean(1) ale ako Enumerated(9). Dôvodom môže byť práve rozšíriteľnosť a spätná kompatibilita v budúcnosti (podpora viacúrovňových časových plánov).
Protokol BACnet umožňuje implementátorom zadefinovať si vlastné typy objektov, v nich vlastné atribúty a hodnoty týchto atribútov nemusia byť jednoduché, ale ľubovolne komplikované a vnorené štruktúry. Klientská implementácia ich dokáže parsovať - s tým, že v prípade použitia kontextových tagov je nutné zadať , aký je primitivny dátovy typ konkrétneho tagu. Podobnú úroveň flexibility neponúka žiaden ďalší protokol, s ktorým sme sa stretli.
D2000 KOM proces umožňuje načítanie celej štruktúrovanej hodnoty do jediného meraného bodu. Pokiaľ je bod nakonfigurovaný ako textový vstup (TxtI) bez zadania parametra Application tag, komplexná hodnota z obr. 12 (sekvencia troch dvojíc čas/hodnota) sa zapíše ako textová hodnota "{ T0:0:0; u2; T4:0:0; u3; T22:0:0; u1 }".
Znak T indikuje, že nasleduje hodnota typu Time, znak u že nasleduje hodnota typu Unsigned (ďalšie dátové typy sú popísané v helpe D2000), množinové zátvorky ohraničujú sekvenciu. Pre konkrétny prípad (časový plán) je tento spôsob vhodnejší, pretože každý zo siedmich dní týždňa môže obsahovať ľubovolný počet dvojíc čas/hodnota. Preto nie je obecne vhodné ich indexovať pomocou komplexnej adresy, ale lepšie je celý časový plán (alebo jeho jednotlivé dni) vyčítať do textového meraného bodu a následne v ESL skripte vyparsovať a zobraziť užívateľovi v tabuľke na editáciu.
V zakončení článku o týždeň sa budeme venovať zapisovaniu hodnôt, synchronizácii času a procesným alarmom implementovaným v protokole BACnet. Spomenieme aj špecifiká Siemens Desigo zariadení a ukážeme browsovanie BACnet objektov.
25.9.2017, Ing. Peter Humaj, www.ipesoft.com