Promotic

PmBACnet - Ovladač pro komunikaci protokolem BACnet

Tento ovladač slouží pro komunikaci se zařízeními, které podporují protokol BACnet. Viz Komunikace protokolem BACnet.

Před použitím tohoto ovladače v aplikaci PROMOTIC je vhodné shlédnout "PROMOTIC video kurz 4 - Komunikační ovladače".

Základní vlastnosti ovladače:
- Použití tohoto ovladače vyžaduje zakoupení licence PmBACnet. Při vývoji aplikace ve freeware módu PmFree nebo s vývojovou licencí a při jejím testování v runtime je tato komponenta vždy funkční.
- Komunikace je pro Ethernet (aplikace PROMOTIC je klient). Ovladač podporuje výhradně aplikační vrstvu BACnet/IP s transportní vrstvou UDP.
- Ovladač je začleněn do systému PROMOTIC pomocí objektu PmaComm.
Ovladač podporuje použití objektu PmaCommGroup (pro čtení i zápis proměnných). Objekt PmaCommMsg se používá pouze pro speciální pomocnou zprávu, která zjistí informace o proměnných, které lze vyčítat ze zařízení (viz dále).
Pro snadné přidání tohoto ovladače do aplikace je vhodné použít: Předkonfigurace ve skupině "BACnet"
- Drobnou odlišností od standardu je, že aplikace PROMOTIC je z hlediska této komunikace vždy pouze klientem. Nepodporuje funkce pro vyhledávání zařízení a objektů (Who-Is/I-Am). Primární identifikací cílového zařízení je jeho IP adresa, nikoli číslo zařízení (ovladač s číslem zařízení zatím vůbec nepracuje).
Poznámka: Who-Is slouží k zasílání dotazu typu broadcast (dotaz pro všechny). Následující odpověď I-Am informuje o přítomnosti zařízení a přitom je sděleno číslo zařízení, jeho IP adresa, atd.
- Ovladač nepodporuje segmentaci a COV (Changing of Value).


Protokol pracuje s objekty:
Protokol BACnet patří do skupiny objektově orientovaných protokolů. Objekt v BACnet zařízení má svůj typ, své číslo a je tvořen sadou vlastností.
Typ objektu: například analogový vstup, binární výstup, atd. - viz dále.
Číslo objektu: slouží k rozlišení objektů (objektů stejného typu může být v zařízení více - nebo nemusí být vůbec). Čísla musí být jedinečná v rámci typu, mohou být v rozsahu 0 až 4 194 302 a nemusí tvořit souvislou řadu.
Zvláštním případem je objekt typu Device, který je v zařízení vždy jen jednou. Jeho číslo je 4 194 303 (3FFFFF hexa). V ovladači se proto jeho číslo vůbec nazadává.
Vlastnost: určuje další informace o daném objektu, například aktualní hodnota, jednotka, meze, atd. Některé vlastnosti mohou být typu Array.


Příklad 1: Určitá měřená teplota je reprezentována objektem typu Analog Input, má číslo například 13 a má sadu vlastností jako například:
"present-value" (aktuální hodnota)
"units" (fyzikální jednotka)
"reliability" (věrohodnost)
"high-limit" (Horní mez) atd.
Příklad 2: Každé BACnet zařízení je popsáno jedním objektem "Device", které má vlastnosti například:
"vendor-name" (název výrobce)
"local-time" (čas v zařízení)
"time-of-device-restart" (čas posledního restartu zařízení) atd.


Typy objektů:
Následuje seznam ovladačem podporovaných typů objektů:
- Device: Objekt, který má informace o globálních vlastnostech zařízení. Například název a identifikátor výrobce, výrobní číslo, atd.
- Analog Input: Analogová hodnota na vstupu zařízení.
- Analog Output: Analogová hodnota na výstupu zařízení.
- Analog Value: Analogová hodnota uvnitř zařízení.
- Binary Input: Logická hodnota na vstupu zařízení.
- Binary Output: Logická hodnota na výstupu zařízení.
- Binary Value: Logická hodnota uvnitř zařízení.
- Multi-state Input: Vícestavová hodnota na vstupu zařízení.
- Multi-state Output: Vícestavová hodnota na výstupu zařízení.
- Multi-state Value: Vícestavová hodnota uvnitř zařízení.
- Averaging: Průměrování.
- Accumulator: Zásobník.
- PulseConverter: Pulsní převodník
- CharacterString Value: Textový řetězec.
- Schedule: Plánovač.
V tomto objektu je podporována i vlastnost "weekly-schedule". Tuto vlastnost lze číst i zapisovat a v systému PROMOTIC má datový typ String a je to text ve formátu CSV obsahující den (1=Pondělí - 7=Neděle), čas a hodnotu. Poznámka: Pro čtení a zápis do souboru lze použít metody Pm.FileCsvRead a Pm.FileCsvWrite.
Vlastnost "exception-schedule" zatím není ovladačem podporována.


Datové typy:
BACnet používá následující datové typy:
- boolean - V aplikaci PROMOTIC je reprezentován datovým typem Boolean.
- unsigned integer - V aplikaci PROMOTIC je reprezentován datovým typem Long.
- signed integer - V aplikaci PROMOTIC je reprezentován datovým typem Integer.
- real - V aplikaci PROMOTIC je reprezentován datovým typem Single.
- double - V aplikaci PROMOTIC je reprezentován datovým typem Double.
- character string - V aplikaci PROMOTIC je reprezentován datovým typem String.
- bit string - V aplikaci PROMOTIC je reprezentován datovým typem Long. Zatím je omezeno na 32 bitů a nelze poznat kolik bitů je platných. Zatím je také jen pro čtení, nelze zapisovat.
V některých případech jsou bitové stringy využívány jako tzv. BACnet Status Flags. V tom případě jsou využity pouze 4 bity s následujícím významem:
- bit 0: in-alarm
- bit 1: fault
- bit 2: overriden (přepnuto na ruční ovládání)
- bit 3: out-of-service
- enumerated - Pro vlastnost "units" převádí hodnotu na String nesoucí informaci o fyzikálních jednotkách přiřazených normou (tuto hodnotu lze jen číst, nelze zapisovat). U ostatních hodnot převádí hodnotu na typ Byte s číslem vyjmenované hodnoty (tyto hodnoty lze číst i zapisovat).
- date - V aplikaci PROMOTIC je reprezentován datovým typem Date.
- time - V aplikaci PROMOTIC je reprezentován datovým typem Date.


Uložení do vlastnosti present-value:
Vlastnost present-value tvoří prioritní pole (priority-array) s 16 prioritními hodnotami. Při zápisu lze určit prioritu a tedy index v poli kam se hodnota zapíše. Pokud zapisovaná hodnota bude nastavena na datový typ Variant s hodnotou: null pro JavaScript nebo Empty pro VBScript, pak se bude posílat BACnet hodnota NULL a tedy při zápisu se na zadaném indexu v poli položka smaže.

Doporučené hodnoty parametrů objektu PmaComm:

Doporučené hodnoty pro Parametry Ethernet-klient:
Síťová adresaIP adresa zařízení. Protože ovladač zatím nepodporuje vyhledávání zařízení, IP adresa zde slouží jako hlavní identifikátor zařízení místo čísla zařízení.
Číslo vzdáleného TCP/UDP portu47808 (definováno v normě BACnet, hexadecimální hodnota je BAC0)
 
Viz: Wikipedia: Seznam čísel portů TCP a UDP používaných protokoly pro provoz síťových aplikací.
Číslo lokálního TCP/UDP portuVětšinou lze nastavit "Automaticky".
Pro některá zařízení (např. zařízení firmy Loxone) je nutné nastavit tento port na stejnou hodnotu jako "Číslo vzdáleného TCP/UDP portu".
Typ Ethernet přenosuUDP
Popis a doporučené hodnoty pro Parametry protokolu:
Maximální akceptovaná délka APDUPřestože pro BACnet/IP je doporučovaná délka datového paketu aplikační vrstvy 1476 bajt, mohou některá zařízení vyžadovat kratší délku paketu.
Informaci o této velikosti poskytuje například zpráva typu Načtení přehledu všech dostupných informací ze zařízení - viz dále.
Norma připouští následující alternativní velikosti (octets = počet bajtů):
50 octets
128 octets
206 octets (fits LanTalk frame)
480 octets (fits ARCNET frame)
1024 octets
1476 octets (fits ISO 8802-3 frame) (přednastaveno)

Popis komunikace pomocí objektu PmaCommGroup

Proměnné v objektu PmaCommGroup (nebo ještě lépe proměnné v objektu PmaData s datovým rozšířením ExtComm) se v tomto ovladači vyčítají všechny najednou v jedné zprávě. Ovladač sám neomezuje počet proměnných, ale pokud projektant nastaví v jednom objektu PmaCommGroup mnoho proměnných, pak lze přesáhnout velikost povolené zprávy (viz konfigurátor "Maximální akceptovaná délka APDU") a přenos selže. Je proto doporučeno rozdělit proměnné do více objektů PmaCommGroup.
Poznámka: Ovladač PmBACnet zatím nepodporuje rozdělování zprávy do více UDP paketů (tzv. segmentation). Jiné PROMOTIC komunikační ovladače automaticky rozdělují proměnné z jednoho objektu PmaCommGroup do více zpráv. U tohoto protokolu to však není přímo možné a pokud ano, pak by to velmi omezilo počet proměnných v jedné zprávě. Nastavení počtu se proto nechává na projektantovi, který tak může optimalizovat počty proměnných v jednom objektu PmaCommGroup na co největší počet.

Proměnné se vyčítají všechny (pokud konfigurátor "Obnovování dat povoleno" je zatržen). Při zápisu do proměnné se posílá do zařízení jen tato jedna proměnná (pokud konfigurátor "Automaticky zasílat při zápisu do položky" je zatržen).

Popis konfigurátoru "ItemId":
ItemId je textový identifikátor položky, který slouží k adresaci položky v zařízení. Z konfigurátoru ItemId ovladač pozná, jak se má hodnota položky přijímat nebo vysílat.
Text lze buď napsat ručně, nebo sestavit v okně, které se otevře tlačítkem vpravo od konfigurátoru.
Pro zadání lze použít Makro výraz (vyhodnocuje se po spuštění aplikace).

Textový řetězec pro ItemId má obecně tvar:
Typobjektu.Čísloobjektu.IdentifikátorVlastnosti[IndexVlastnosti].priN
- Typobjektu: Viz Typy objektů.
- Čísloobjektu: Nezadává se pro objekt typu "Device".
- IdentifikátorVlastnosti: Identifikátor lze zadat názvem nebo jako číslo. Zadat identifikátor jako číslo má smysl např. pro nestandardní vlastnosti specifické pro daný PLC automat.
- IndexVlastnosti: (nepovinné) Vlastnost objektu může být i pole - tehdy lze uvést index pole v hranatých závorkách.
- priN: (nepovinné) Zadává se pouze pro vlastnost "present-value". N je priorita při zápisu. Viz Uložení do vlastnosti present-value.
 
Příklady tvaru identifikátoru:
Device.model-name = Název typu zařízení
AnalogValue.2.present-value.pri8 = Aktuální analogová hodnota s číslem 2. Při zápisu této položky se bude posílat hodnota s prioritou 8 (viz Uložení do vlastnosti present-value).
BinaryValue.14.present-value[4] = Aktuální hodnota na indexu 4 v binárním poli s číslem 14
AnalogOutput.15.priority-array[8] = Hodnota analogového výstupu 15, která je přiřazena prioritě 8.
AnalogOutput.15.priority-array = Pole priorit a hodnot analogového výstupu 15.
Toto pole se ukláda do proměnné typu String ve formátu KeyVal. Tento String obsahuje pouze nastavené priority s hodnotami (např. "p1:12.8;p8:3.14;" - priorita 1 s hodnotou 12.8 a priorita 8 s hodnotou 3.14).
AnalogInput.20.event-state = Hodnota vlastnosti event-state analogového vstupu 20.
Místo této vlastnosti mohou být vlastnosti například: object-identifier, object-name, object-type, status-flags, out-of-servis, units, description, device-type, reliability, update-interval, min-pres-value, max-pres-value, resolution, COV-increment, time-delay, notification-class, high-limit, low-limit, deadband, limit-enable, event-enable, acked-transitions, notify-type, event-type-stamps, event-message-texts, profile-name.
AnalogInput.20.2048 = Zde je vlastnost zadaná číslem 2048.
 
Pro správné zadání ItemId je doporučeno:
- Pomocí zprávy typu Načtení přehledu všech dostupných informací ze zařízení zjistit co vše dané zařízení obsahuje (viz dále).
- Pro zadávání hodnoty v konfigurátoru "ItemId" použít výběrové okno, které lze otevřít tlačítkem vpravo od zadavatele.


Upozornění pro zápis hodnot do zařízení:
Zadáním ItemId se definuje požadovaný BACnet objekt a vlastnost. Nedefinuje se zde ale BACnet datový typ. Při příjmu hodnoty ovladač pozná datový typ hodnoty a zapamatuje si to u dané proměnné. Při zaslání hodnoty do zařízení pak již ovladač ví v jakém tvaru má hodnotu poslat.
Pokud však nedojde k alespoň jednomu příjmu, pak ovladač nemusí přesně vědět, jaký BACnet typ pro danou proměnnou zařízení používá. Ovladač tehdy přednastaví typ na nějaký vhodný, který odvodí z názvu BACnet vlastnosti. Toto však nemusí někdy odpovídat. Proto je doporučeno při zasílání hodnoty nejprve zajistit alespoň jeden příjem.

Popis konfigurátoru "PmaCommGroup > Parametry > Speciální parametry":
Tento konfigurátor se pro daný ovladač nevyužívá.

Popis komunikace pomocí objektu PmaCommMsg

Objekt PmaCommMsg lze použít pro speciální komunikace, které nelze provést objektem PmaCommGroup. V případě tohoto ovladače je implementována pouze jedna speciální zpráva:

- Načtení přehledu všech dostupných informací ze zařízení:
Pro správné nastavení konfigurátoru "ItemId" v proměnných objektu PmaCommGroup je nutno znát informace o dostupných objektech v daném zařízení. Tyto informace lze ze zařízení vyčíst a právě to dělá tato zpráva:
Zpráva přečte informace a uloží je do textového řetězce v kartě "Data-příjem".
Získané informace touto zprávou dávají přehled o objektech v daném zařízením (seznam objektů s udáním typu a čísla objektu). Tyto informace lze použít při sestavování ItemId v objektu PmaCommGroup.
Ovladač PmBACnet zatím nepodporuje rozdělování zprávy do více UDP paketů (tzv. segmentation). Proto tato zpráva nefunguje (hlásí chybu abort-segmentation-not-supported) pokud zařízení obsahuje mnoho objektů a jejich přehled se nevejde do jednoho paketu.

Pro správné vytvoření a nastavení objektu PmaCommMsg je vhodné použít předkonfiguraci: Pokud v této předkonfiguraci zatrhnete konfigurátory: pak se vytvoří správně nastavený objekt PmaCommMsg i s obrazem, ve kterém lze zprávu spustit a vyčíst tak požadované informace z PLC automatu.

Historie:
Pm9.00.25: Identifikátor vlastnosti v ItemId lze nyní zadat i jako číslo.
Pm9.00.22: Opravená chyba: Zprovozněn příjem a zápis do vlastnosti priority-array[x].
Zároveň je ovladač zobecněn o příjem samostatné vlastnosti priority-array (tzn. bez zadání indexu) - viz příklad AnalogOutput.15.priority-array.
Pm9.00.03: Opravená chyba: Netestovalo se zda přišla odpověď od daného dotazu. Nastávala chyba pokud předchozí odpověď přišla pozdě po timeoutu.
Pm8.03.11: Nově podporuje objekt typu "PulseConverter".
Pm8.03.04: Zprovozněn příjem a zápis vlastnosti weekly-schedule v objektu Schedule
Pm8.02.16: Zobecnění zapisování do zařízení:
- U present-value lze nyní zadávat i prioritu pro zápis.
- Při zápisu hodnoty null pro JavaScript nebo Empty pro VBScript se posílá BACnet hodnota NULL a tedy v zařízení dojde ke smazání údaje.
Pm8.02.03: Vytvořeno
© MICROSYS, spol. s r.o.