Promotic

PmBACnet - Driver do komunikacji poprzez protokół BACnet

Driver ten służy do komunikacji z urządzeniami, które obsługują protokół BACnet. Patrz Komunikacja poprzez protokół BACnet.

Przed zastosowaniem tego drivera w aplikacji PROMOTIC należy obejżeć "PROMOTIC wideo kurs 4 - Drivery komunikacyjne".

Podstawowe właściwości drivera:
- Zastosowanie tego drivera wymaga zakup licencji PmBACnet. Podczas wytwarzania aplikacji w trybie freeware PmFree lub z licencją deweloperską oraz podczas jej testowania w runtime element ten jest zawsze funkcjonalny.
- Komunikacja jest dla Ethernetu (aplikacja PROMOTIC jest klientem). Driver wspiera tylko warstwę aplikacji BACnet/IP z warstwą transportową UDP.
- Driver jest wbudowany do systemu PROMOTIC przy pomocy obiektu PmaComm.
Driver wspiera wykorzystanie obiektu PmaCommGroup (do odczytu i zapisu zmiennych). Obiekt PmaCommMsg jest stosowany tylko do specjalnej pomocniczej wiadomości, która stwierdzi dane zmiennych, które można odczytywać z urządzenia (patrz dalej).
Dla łatwego dodania tego drivera do aplikacji jest dogodne zastosować: Konfiguracje wstępne w grupie "BACnet"
- Niewielkią różnicą od normy jest, iż aplikacja PROMOTIC jest z punktu widzenia tej komunikacji zawsze użytkownikiem. Nie obsługuje funkcję dla wyszukiwania urządzeń oraz obiektów (Who-Is/I-Am). Podstawową identyfikacją urządzenia docelowego jest jego adres IP, a nie numer urządzenia (driver z numerem urządzenia narazie w ogóle nie działa).
Notatka: Who-Is używany jest do przesyłania zapytania typu broadcast (zapytanie dla wszystkich). Następujące odpowiedź I-Am informuje o obecności urządzenia a jednocześnie jest przekazany numer urządzenia, jego adres IP, itd.
- Driver nie obsługuje segmentację oraz COV (Changing of Value).


Protokół obsługuje obiekty:
Protokół BACnet należy do grupy obiektowo orientowanych protokołów. Obiekt w urządzeniu BACnet ma własny typ, numer oraz tworzy go zestaw właściwości.
Typ obiektu: na przykład wejście analogowe, wyjście binarne, itd. - patrz dalej.
Numer obiektu: służy do rozróżnienia obiektów (obiektów tego samego typu w urządzeniu może być więcej - lub też żaden). Numery muszą być w ramach typu wyjątkowe, mogą być w zakresie 0 aż 4 194 302 oraz nie musi tworzyć ciągłą serię.
Specjalnym przypadkiem jest obiekt typu Device, który w urządzeniu występuje zawsze tylko raz. Jego numer to 4 194 303 (3FFFFF hexa). Dlatego jego numer w ogóle nie określa się w driveru.
Właściwość: określa następne informacje o danym objikcie, na przykład aktualna wartość, jednostka, marginesy, itd. Niektóre właściwości mogą być typu Array.


Przykład 1: Niektóra zmierzona temperatura jest reprezentowana obiektem typu Analog Input, ma numer na przykład 13 oraz ma zestaw właściwości jako na przykład:
"present-value" (wartość aktualna)
"units" (jednostka fizykalna)
"reliability" (wiarygodność)
"high-limit" (Zakres górny) itd.
Przykład 2: Każde urządzenie BACnet jest opisane jednym obiektem "Device", ktere ma właściwości na przykład:
"vendor-name" (nazwa producenta)
"local-time" (czas w urządzeniu)
"time-of-device-restart" (czas ostatniego restartu urządzenia) itd.


Typy obiektów:
Następuje lista driverem obsługiwanych rodzajów obiektów:
- Device: Obiekt, który ma informacje o globalnych właściwościach urządzenia. Na przykład nazwę oraz identyfikator producenta, numer produktu, itd.
- Analog Input: Wartość analogową na wejściu urządzenia.
- Analog Output: Wartość analogową na wyjściu urządzenia.
- Analog Value: Wartość analogową w urządzeniu.
- Binary Input: Wartość logiczna na wejściu urządzenia.
- Binary Output: Wartość logiczna na wyjściu urządzenia.
- Binary Value: Wartość logiczna w urządzeniu.
- Multi-state Input: Wartość kilkustanową na wejściu urządzenia.
- Multi-state Output: Wartość kilkustanową na wyjściu urządzenia.
- Multi-state Value: Wartość kilkustanową w urządzeniu.
- Averaging: Uśrednienie.
- Accumulator: Rejestr.
- PulseConverter: Konwerter impulsowy
- CharacterString Value: Łańcuch tekstowy.
- Schedule: Scheduler.
W tym obiekcie jest wspierana również właściwość "weekly-schedule". Właściwość tą można odczytywać oraz do niej zapisywać a w systemie PROMOTIC posiada typ danych String i jest to tekst w formacie CSV zawierający dzień (1=Poniedziałek - 7=Niedziela), czas oraz wartość. Notatka: Do odczytu oraz zapisu do pliku można zastosować metody Pm.FileCsvRead oraz Pm.FileCsvWrite.
Właściwość "exception-schedule" narazie nie jest driverem wspierana.


Typy danych:
BACnet używa następujące typy danych:
- boolean - W aplikacji PROMOTIC jest reprezentowany przez typ danych Boolean.
- unsigned integer - W aplikacji PROMOTIC jest reprezentowany przez typ danych Long.
- signed integer - W aplikacji PROMOTIC jest reprezentowany przez typ danych Integer.
- real - W aplikacji PROMOTIC jest reprezentowany przez typ danych Single.
- double - W aplikacji PROMOTIC jest reprezentowany przez typ danych Double.
- character string - W aplikacji PROMOTIC jest reprezentowany przez typ danych String.
- bit string - W aplikacji PROMOTIC jest reprezentowany przez typ danych Long. Narazie jest ograniczone do 32 bitów oraz nie można stwierdzić ile bitów jest ważnych. Narazie jest przeznaczony tylko do odczytu, nie można zapisywać.
W niektórych przypadkach są łańczhy bitów wykorzystywane jako tzw. BACnet Status Flags. W tym przypadku są wykorzystane tylko 4 bity o następującym znaczeniu:
- bit 0: in-alarm
- bit 1: fault
- bit 2: overriden (przełączone na sterowanie ręczne)
- bit 3: out-of-service
- enumerated - Dla właściwości units konwertuje wartość na String niosącą informację o jednostkach fizykalnych przyszeregowanych normą (wartość tą można tylko odczytać). Dla innych wartości konwertuje wartość na typ Byte z numerem wymienionej wartości (te wartości można odczytać oraz zapisać).
- date - W aplikacji PROMOTIC jest reprezentowany przez typ danych Date.
- time - W aplikacji PROMOTIC jest reprezentowany przez typ danych Date.


Zapis do właściwości present-value:
Właściwość present-value tworzy pole pryorytetowe (present-value) z 16 pryorytetowymi wartościami. Przy zapisie można określić pryorytet, wtedy również indeks w polu gdzie zostanie zapisana wartość. Jeżeli zapisywana wartość będzie ustawiona na typ danych Variant o wartości: null dla JavaScript lub Empty dla VBScript, wtedy będzie wysyłana BACnet wartość NULL i wtedy przy zapisie na określonym indeksie w polu zostanie usunięta pozycja.

Zalecone wartości parametrów obiektu PmaComm:

Zalecane wartości dla pozycji Parametry Ethernet-klient:
Adres sieciowyAdres IP urządzenia. Ponieważ driver narazie nie obsługuje wyszukiwanie urządzenia, adres IP służy tutaj jako główny identyfikator urządzenia zamiast numeru urządzenia.
Numer zdalnego portu TCP/UDP47808 (zdefiniowane normą BACnet, wartość heksadecymalna jest BAC0)
 
Patrz: Wikipedia: Lista numerów portów TCP i UDP używanych przez protokoły do uruchamiania aplikacji sieciowych.
Numer lokalnego portu TCP/UDPZazwyczaj można ustawić "Automatycznie".
W przypadku niektórych urządzeń (np. urządzeń firmy Loxone), port musi być ustawiony na taką samą wartość jak "Numer zdalnego portu TCP/UDP".
Typ transmisji EthernetUDP
Opis i zalecane wartości dla pozycji Parametry protokołu:
Maksymalna akceptowana długość APDUPonieważ dla BACnet/IP jest zalecana długość pakietów danych warstwy aplikacji 1476 bajt, mogą niektóre urządzenia żądać krótszą długość pakietu.
Informację o tej długości udostępnia na przykład wiadomość typu Wczytanie przeglądu wszystkich dostępnych informacji z urządzenia - patrz dalej.
Norma zezwala następujące alternatywne długości (octets = ilość bajtów):
50 octets
128 octets
206 octets (fits LanTalk frame)
480 octets (fits ARCNET frame)
1024 octets
1476 octets (fits ISO 8802-3 frame) (domyślnie)

Opis komunikacji przy pomocy obiektu PmaCommGroup

Zmienne w obiekcie PmaCommGroup (lub jeszcze lepiej zmiennych w obiekcie PmaData z rozszerzeniem danych ExtComm) są w tym driverze odczytywane wszystkie razem w jednej wiadomości. Driver smaotny nie ogranicza ilość zmiennych, ale jeżeli projektant ustawi w jednym obiekcie PmaCommGroup dużą ilość zmiennych, wtedy może dojść do przekroczenia wielkości wiadomości (patrz konfigurator "Maksymalna akceptowana długość APDU") a transmisja zawiesi się. Dlatego jest zalecane rozdielenie zmiennych do kilka obiektów PmaCommGroup.
Notatka: Driver PmBACnet nie wspiera jeszcze podziału wiadomości na wiele pakietów UDP (tzw. segmentation). Inne PROMOTIC drivery komunikacyjne automatycznie wykonają podział zmiennych z jednego obiektu PmaCommGroup do większej ilości wiadomości. W przypadku tego protokołu nie jest to bezpośrednio możliwe, wtedy znacząco doszło by do ograniczenia ilości zmiennych w jednej wiadomości. Dlatego ustawienie jest w kompetencji projektanta, który w taki sposób może optymalizować ilości zmiennych w jednym obiekcie PmaCommGroup w jak największej ilości.

Odczytywane są wszystkie zmienne (jeżeli konfigurator "Odświeżanie danych zezwolone" jest zaznaczony). Przy zapisie do zmiennej do urządzenia jest odesłana tylko zapisywana zmienna (jeżeli konfigurator "Automatycznie przesyłaj przy zapisie do pozycji" jest zaznaczony).

Opis konfiguratora "ItemId":
ItemId jest identyfikator tekstowy pozycji, który służy do adresacji pozycji w urządzeniu. Z konfiguratora ItemId driver stwierdzi, w jaki sposób ma zostać wartość pozycji wczytana lub wysłana.
Tekst można wpisać ręcznie, lub ułożyć w oknie, które zostanie otwarte przy pomocy przycisku wprawo od konfiguratora.
Do wprowadzenia można zastosować Makro wyrażenie (wartość jest obliczana po uruchomieniu aplikacji).

Łańcuch tekstowy dla ItemId ma ogólnie postać:
Typobiektu.Numerobiektu.IdentyfikatorWłaściwości[IndeksWłaściwości].priN
- Typobiektu: Patrz Typy obiektów.
- Numerobiektu: Dla obiektu typu "Device" nie określa się.
- IdentyfikatorWłaściwości: Identyfikator może być wprowadzony w postaci nazwy lub jako liczba. Wprowadzanie identyfikatora jako liczby ma sens np. dla niestandardowych właściwości specyficznych dla sterownika PLC.
- IndeksWłaściwości: (opcjonalne) Właściwość obiektu może być również tablica - wtedy można na końcu w nawiasach prostokątnych podać indeks tablicy.
- priN: (opcjonalne) Określa się tylko dla właściwość "present-value". N to priorytet przy zapisie. Patrz Zapis do właściwości present-value.
 
Przykłady formy identyfikatora:
Device.model-name = Nazwa typu urządzenia
AnalogValue.2.present-value.pri8 = Aktualna analogowa wartość o numerze 2. Przy zapisie tej pozycji będzie wysyłana wartość o pryorytecie 8 (patrz Zapis do właściwości present-value).
BinaryValue.14.present-value[4] = Wartość aktualna pod indeksem 4 w tablicy binarnej o numerze 14
AnalogOutput.15.priority-array[8] = Wartość wyjścia analogowego 15, która jest przyszeregowana priorytetowi 8.
AnalogOutput.15.priority-array = Tablica priorytetów i wartości wyjść analogowych 15.
Tablica ta jest przechowywana w zmiennej typu String w formacie KeyVal. Ten String zawiera tylko ustawione priorytety z wartościami (np. "p1:12.8;p8:3.14;". - priorytet 1 z wartością 12.8. oraz priorytet 8 z wartością 3.14).
AnalogInput.20.event-state = Wartość właściwości event-state wejścia analogowego 20.
Zamiast tej właściwości mogą być właściwości na przykład: 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 = Tutaj właściwość jest określona przez liczbę 2048.
 
Dla właściwego określenia ItemId jest zalecane:
- Przy pomocy wiadomości typu Wczytanie przeglądu wszystkich dostępnych informacji z urządzenia stwierdzić, co wszystko dane urządzenie zawiera (patrz dalej).
- Dla określania weartości w konfiguratorze "ItemId" należy użyć okno wyboru, które można otworzyć przy pomocy przycisku wprawo od pola wprowadzania.


Ostrzeżenie odnośnie zapisu wartości do urządzenia:
Wprowadzeniem ItemId zostanie zdefiniowany wymagany BACnet obiekt oraz właściwość. Nie definiuje się tetaj BACnet typ danych. Podczas odczytu wartości driver rozpozna typ danych wartości oraz zapamięta to dla danej zmiennej. Podczas zapisu wartości do urządzenia driver już wie w jakim formacie powinien daną wartość wysłać.
Jeżeli nie dojdzie przynajmniej do jednej transmisji, wtedy driver nie musi poprawnie wiedzieć, jaki BACnet typ dla danej zmiennej urządzenie stosuje. Wtedy driver wstępnie ustawi dowolny typ, który wywnioskuje z nazwy BACnet właściwości. To wszak niezawsze musi być odpowiednie. W tym celu zalecane jest wykonanie przynajmniej jednego odczytu.

Opis konfiguratora "PmaCommGroup > Parametry > Parametry specjalne":
Ten konfigurator nie jest stosowany przez dany driver.

Opis komunikacji przy pomocy obiektu PmaCommMsg

Obiekt PmaCommMsg można zastosować do specjalnych komunikacji, których nie można wykonać przy pomocy obiektu PmaCommGroup. W przypadku tego drivera komunikacyjnego jest zaimplementowana tylko jedna specjalna wiadomość:

- Wczytanie przeglądu wszystkich dostępnych informacji z urządzenia:
W celu poprawnego ustawienia konfiguratora "ItemId" w zmiennych obiektu PmaCommGroup jest konieczne znajomość informacji o dostępnych obiektach w danym urządzeniu. Takie informacje można odczytać z urządzenia i to właśnie wykonuje wiadomość ta:
Wiadomość odczyta informacje i zapisze je do łańcucha tekstowego w karcie "Dane-odbiór".
Dzięki informacjom uzyskanym przy pomocy tej wiadomości można uzyskać listę obiektów danego urządzenia (lista obiektów z określeniem typu oraz numeru obiektu). Uzyskane informacje można zastosować do ustawienia ItemId w obiekcie PmaCommGroup.
Driver PmBACnet nie wspiera jeszcze podziału wiadomości na wiele pakietów UDP (tzw. segmentation). Dlatego wiadomość ta nie działa (zgłasza błąd abort-segmentation-not-supported) jeżeli urządzenie zawiera wiele obiektów a ich lista nie mieści się w jednym pakiecie.

W celu poprawnego wytworzenia i ustawienia obiektu PmaCommMsg jest dogodne zastosować konfigurację wstępną: Jeżeli w tej konfiguracji wstępnej zaznaczysz konfiguratory: to jest wytworzony poprawnei ustawiony obiekt PmaCommMsg razem z panelem, w któreym można wiadomość uruchomić i odczytać w ten sposób informacje ze sterownika PLC.

Historia:
Pm9.00.25: Identyfikator właściwości w ItemId można teraz określić również w postaci liczbowej.
Pm9.00.22: Usunięty błąd: Wdrożono odczyt oraz zapis do właściwości priority-array[x].
Jednocześnie driver został uogólniony, aby otrzymywać pojedyńcze właściwości priority-array (tzn. bez podania indeksu) - patrz przykład AnalogOutput.15.priority-array.
Pm9.00.03: Usunięty błąd: Nie testowano, czy dotarła odpowiedź od danego zapytania. Wystąpił błąd jeżeli poprzednia odpowiedź dotarła późno po timeoucie.
Pm8.03.11: Nowo wspiera obiekt typu "PulseConverter".
Pm8.03.04: Usprawniono odczyt oraz zapis właściwości weekly-schedule w obiekcie Schedule.
Pm8.02.16: Uogólnienie zapis do urządzenia:
- U present-value teraz można określać również pryorytet do zapisu.
- Przy zapisie wartości null dla JavaScript lub Empty dla VBScript wysyłana jest wartość BACnet NULL i wtedy w urządzeniu dojdzie do usunięcia danych.
Pm8.02.03: Wytworzono
© MICROSYS, spol. s r.o.