26.3.2024

Komunikácia - BACnet protokol, časť 3

V druhej článku o protokole BACnet sme prešli správy a typy hodnôt, ktoré BACnet protokol podporuje.

V dnešnej časti sa budeme venovať zapisovaniu hodnôt, synchronizácii času, procesným alarmom, špecifikám Desigo zariadení a browsovaniu.

Zápis hodnoty

 

Zápis hodnoty prebieha pomocou správy WriteProperty-Request. Táto správa obsahuje položky špecifikujúce objekt a atribút, voliteľne index (ak je atribút pole). Nasleduje zapisovaná hodnota  (opäť „hocičo“) a voliteľne priorita.

 

Bacnet-15.png
Obr 15: definícia správy pre zápis hodnoty

 Existuje aj správa WritePropertyMultiple-Request umožňujúca naraz zapísať niekoľko atribútov toho istého objektu, ale D2000 KOM proces ju neimplementuje.

 Pokiaľ zapisujeme primitívne (základné) dátové typy, v konfigurácii výstupného meraného bodu je potrebné špecifikovať aplikačný tag a voliteľne aj prioritu (priorita 0 znamená, že sa v požiadavke priorita neposiela). Ako zistiť aplikačný tag? Najjednoduchšie je nakonfigurovať najskôr vstupný meraný bod, zapnúť sledovanie komunikácie a pozrieť logy, aký aplikačný tag bol načítaný.

 

Bacnet-16.png
Obr 16: príklad konfigurácie výstupného meraného bodu. Zapisuje sa do inštancie 33 objektu typu analog-output(1), zapisovaný atribút je present-value(85), aplikačný tag Real, priorita sa neposiela.

Takto zapíšeme primitívny dátový typ. Je ale možné, aby D2000 KOM proces dokázal zapísať aj „hocičo“? Odpoveď je – áno. S použitím textového výstupného meraného bodu a tej istej syntaxe na zápis štruktúr, ako bola uvedená vyššie .

Takže napríklad zápis reťazca  " { 1{ u23 s34 } 2E56 3r7.89 }" znamená poslanie BACnet štruktúry

SEQUENCE {
     [1] SEQUENCE {
          Unsigned 23
          Signed 34
     }
     [2] Enumerated 56
     [3] Real 7.89
}

Takto je možné riešiť aj zápis časového plánu po jeho editácii užívateľom v schéme D2000.

 

Synchronizácia času

 Na synchronizáciu času slúžia správy TimeSynchronization a UTCTimeSynchronization. Obe majú jediný parameter BACnetDateTime, čo je sekvencia  dátumu a času. D2000 KOM proces vie použiť jednu z týchto správ (podľa nastavenia parametra protokolu Time-sync is UTC na stanici) na periodickú synchronizáciu času BACnet zariadenia.

 

Bacnet-17.png
Obr 17: definícia správ na synchronizáciu času

Eventy a alarmy

Pomocou requestu GetEventInformation-Request je možné vyžiadať si od zariadenia zoznam objektov, ktoré sú v alarmových stavoch (atribút Event_State nie je v stave Normal), alebo ktorých prechod do alarmového stavu Offnormal, Fault alebo Normal nebol kvitovaný (atribút Acknowledged_Transitions má aspoň jeden bit nastavený). Je to teda ekvivalent procesných alarmov v D2000.

 

Bacnet-18.png
Obr 18: definícia požiadavky a odpovede na získanie informácie o objektoch s alarmami

Odpoveďou na GetEventInformation-Request je správa GetEventInformation-Ack, ktorá obsahuje zoznam objektov a pre každý objekt zoznam vlastností:

  • objectIdentifier: identifikátor objektu
  • eventState: stavu objektu (0=normal, 1=fault, 2=offnormal, 3=high-limit, 4=low-limit, 5=life-safety-alarm)
  • acknowledgedTransitions: 3 bity udávajúce, či boli posledné prechody do stavu offnormal, fault a normal kvitované
  • eventTimeStamps: časové značky posledných prechodov do stavu offnormal/fault/normal
  • notifyType: udáva, či je to notifikácia alarmu (0) alebo eventu (1)
  • eventEnable: 3 bity udávajúce, či sa reportujú eventy to-offnormal, to-fault, to-normal
  • eventPriorities: 3 unsigned hodnoty udávajúce priority eventov
Bacnet-19.png
Obr 19: konfigurácia vstupného textového meraného bodu na načítanie zoznamu objektov s alarmami

Na konci zoznamu sa nachádza atribút moreEvents, ktorý má hodnotu True, ak zoznam eventov nie je kompletný (prekročenie dĺžky maximálnej správy a podobne). Vtedy je nutné prekonfigurovať meraný bod a nastaviť Object type a Instance na posledný objekt v zozname, čo spôsobí vygenerovanie novej správy GetEventInformation-Ack (obsahujúcej lastReceivedObjectIdentifier), ktorá bude ďalšiu časť zoznamu eventov. Prekonfigurovanie je možné robiť aj dynamicky zo skriptu s použitím tell príkazu SETPTADDR na dynamické nastavenie adresy meraného bodu. Takto je možné v skripte vyčítať zoznam objektov s alarmami „po stránkach“ a následne ich zobraziť užívateľovi.

Alarmy je následne možné potvrdiť pomocou správy AcknowledgeAlarm-Request. Keďže sa jedná o správu s viacerými položkami, na zápis sa opäť použije textový výstupný meraný bod. Konkrétny príklad potvrdenia alarmu je uvedený v helpe D2000.

 

Bacnet-20.png
Obr 20: definícia správy AcknowledgeAlarm-Request na kvitovanie alarmu. Kontextové tagy [0], [4] a [5] nastavuje klient ľubovolne, tagy [1],[2] a [3] sú skopírované zo správy GetEventInformation-Ack a určujú, ktorý alarm konkrétneho objektu kvitujeme.

Siemens špecifikum

 Všetci implementátori, s ktorých zariadeniami sme sa stretli (Delta Controls, Klimasoft, Sauter, York, SE-Elektronic), rešpektujú BACnet konvenciu, že objekt je identifikovaný typom a inštanciou. Táto identifikácia sa nachádza vo všetkých správach, ktoré s objektami  narábajú alebo ich referencujú, v podobe dátového typu BACnetObjectIdentifier. Jedinou výnimkou je Siemens (niekedy mám dojem, že ich motto je „Think complicated“). Siemens zariadenia rady Desigo slúžiace na správu budov, ktoré BACnet implementujú, používajú na identifikáciu mená objektov. Pri úpravach projektu a jeho rekompilácii a nahraní do Desigo zariadenia sa môžu inštancie objektov zmeniť, ale mená objektov zostávajú. Ako riešíť takúto komplikáciu?

 Kvôli podpore Desigo zariadení pribudla do konfigurácie meraného bodu možnosť adresovať ho pomocou mena. BACnet protokol podporuje správu Who-Has na zistenie, či zariadenie obsahuje objekt s požadovaným menom alebo identifikátorom.

 

Bacnet-21.png
Obr 21: meraný bod adresovaný menom objektu 

Pre všetky merané body adresované menom pošle D2000 KOM proces na začiatku komunikácie požiadavku  Who-Has a dostane odpoveď I-Have obsahujúcu identifikátor objektu. Následne už pracuje s meraným bodom štandardne. Keďže BACnet zariadenie môže mať aj stovky objektov a vyčítavanie môže trvať na pomalých linkách (LonWorks, MS/TP) dlho, D2000 KOM proces si ukladá odpovede do cache súboru, takže pri ďalšom spustení  už požiadavky posielať nemusí. Po nahraní nového projektu do Desigo zariadenia je nutné cache ručne vymazať. Následne netreba proces D2000 KOM reštartovať, ale stačí uložiť príslušnú komunikačnú stanicu a D2000 KOM proces detekuje zmazanie cache a znovu vykoná proces prevodu mien objektov na identifikátory.

 

Bacnet-22.png
Obr 22: Definícia správ Who-Has a I-Have

Browsing

Na predchádzajúcich obrázkoch konfigurácie meraných bodov (napr. Obr 21) je viditeľné tlačidlo Browse. Na čo slúži?

BACnet protokol umožňuje vyčítanie zoznamu objektov zo zariadenia, takže je možné zvoliť objekt (typ objektu a inštanciu, resp. meno objektu) výberom z načítaného zoznamu – za predpokladu, že D2000 KOM proces beží a komunikácia so zariadením je funkčná.  Na vyčítanie zoznamu je nutné poznať identifikátor zariadenia, takže browsovanie sa skladá z dvoch fáz:

 

Fáza 1 – zistenie identifikátora zariadenia. D2000 KOM pošle požiadavku Who-Is a dostane odpoveď  I-Am obsahujúcu inštanciu objektu typu Device.

Bacnet-23.png
Obr 23: Definícia správ Who-Is a I-Am

Fáza 2 – postupné čítanie atribútu object-list(76) objektu typu Device. Tento atribút je pole identifikátorov objektov (typ objektu + inštancia). Najskôr sa zistí veľkosť poľa, následne sa pole postupne číta požiadavkmi typu ReadProperty. Pre každý načítaný identifikátor objektu sa ešte vyčítajú jeho atribúty object-name(77) a description(28). Tieto sú priebežne posielané procesu D2000 CNF, takže užívateľ môže sledovať postupné napĺňanie zoznamu objektov. Následne v ňom môže filtrovať a triediť hodnoty, prípadne jeho obsah vložiť do schránky a ďalej spracovať (napr. v Exceli).

 

Bacnet-24.png
Obr 24: Browse dialóg so zoznamom načítaných BACnet objektov

 Keďže načítanie zoznamu objektov je časovo náročné (rýchlosť je zvyčajne iba niekoľko riadkov za sekundu, na pomalších médiách aj nižšia), D2000 KOM proces si odpamätáva zoznam nájdených objektov a pri nasledujúcej požiadavke dáva k dispozícii výsledky okamžite. Užívateľ si môže vynútiť  znovunačítanie zoznamu stlačením tlačidla Refresh v browsovacom okne.

Záver

Špecifikácia protokolu BACnet má vyše 570 strán. Tento článok sa vôbec nevenoval niektorým možnostiam, ktoré BACnet ponúka (dynamické vytváranie a mazanie objektov, práca so súbormi, voliteľná segmentácia správ a iné), ale zameral sa na čítanie a zápis hodnôt, prípadne prácu s alarmami, ktoré sú základnou požadovanou funkcionalitou pre nadradený SCADA / MES systém.

2.10.2017, Ing. Peter Humaj, www.ipesoft.com

 

Iné blogy